Dlaczego Linux tak dobrze skaluje się na różne platformy sprzętowe?

22

Dlaczego Linux działa dobrze na wielu różnych typach komputerów - komputerach stacjonarnych, laptopach, serwerach, urządzeniach wbudowanych, telefonach komórkowych itp.? Czy to głównie dlatego, że system jest otwarty, więc dowolną jego część można zmodyfikować do pracy w różnych środowiskach? A może istnieją inne właściwości jądra i / lub systemu Linux, które ułatwiają temu systemowi operacyjnemu pracę na tak szerokiej gamie platform?

Justin Ethier
źródło
7
Myślę, że masz już część odpowiedzi - otwartość ułatwia różnym grupom ludzi lub firmom dostosowanie jej do swoich potrzeb. Ponieważ jądro było szczególnie krytykowane za monolityczne, nie jestem pewien, czy jego początkowy projekt został celowo zoptymalizowany pod kątem skalowalności. Sądzę, że większa liczba osób pracowała nad rdzeniem Linuksa niż na innych systemach operacyjnych - a może zmusiło to głównych opiekunów do ostrożnego dzielenia kodu na części z przejrzystymi interfejsami? Z drugiej strony niektóre warianty BSD mają przenośność jako wyraźny cel.
RedGrittyBrick
@Red: Został skrytykowany za to, że jest monolitycznym jądrem zamiast mikro jądra - nie ma to jednak nic wspólnego z jego konstrukcją. Ma to związek z tym, ile jądra działa w przestrzeni użytkownika i ile działa w przestrzeni jądra. Jądro systemu Windows NT (na przykład) jest bardzo modułowe, ale nadal jest technicznie monolityczne, ponieważ większość usług (tj. System plików) działa w trybie jądra, a nie w trybie użytkownika.
Billy ONeal
@Billy: Windows NT jest technicznie jądrem hybrydowym . Wierzę, że Microsoft nadal utrzymuje podsystemy za pomocą przekazywania wiadomości i zachowuje zdolność do przenoszenia elementów w przestrzeń użytkownika zgodnie z potrzebami. Zrobili to z systemem graficznym w Vista: teraz jest w przestrzeni użytkownika po tym, jak był w jądrze od NT 4.0
Zan Lynx
2
@Zan: Miałem wrażenie, że status „jądra hybrydowego” był kwestionowany . Dlatego powiedziałem „monolityczny”. NT z pewnością ma wiele cech monolitycznych, nawet jeśli jest podzielony na elementy przypominające bibliotekę.
Billy ONeal,
@Billy: Wydaje mi się, że jeśli twoje jądro może zostać przekształcone w mikro-jądro poprzez zmianę kilku opcji i przebudowanie, to jest to coś innego niż monolityczny, nawet jeśli najczęściej używane kompilacje binarne umieszczają wszystko w przestrzeni adresowej jądra.
Zan Lynx

Odpowiedzi:

31

Chociaż otwartość jest z pewnością częścią tego, myślę, że kluczowym czynnikiem jest ciągłe naleganie Linusa Torvalda, że ​​cała praca, od dużych do małych, ma miejsce w głównym jądrze Linuksa, o ile jest dobrze wykonana. Gdyby w pewnym momencie postanowił narysować linię i powiedzieć „okej, w przypadku tego fantazyjnego superkomputera potrzebujemy rozwidlenia”, to mogłyby powstać zupełnie osobne warianty high-end i małego systemu. Tymczasem ludzie wykonali cięższą pracę, aby wszystko grało się stosunkowo dobrze.

I kludges, które umożliwiają jedną stronę rzeczy ze szkodą dla drugiej, generalnie nie są dozwolone - znowu, zmuszając ludzi do rozwiązywania problemów w trudniejszy, ale bardziej poprawny sposób, co zwykle okazuje się łatwiejsze kiedy tylko będzie to konieczne, kludge staje się historycznym przypisem.

Z wywiadu sprzed kilku lat :

P: Linux to wszechstronny system. Dostarcza PC, ogromne serwery, telefony komórkowe i dziesięć innych urządzeń. Z twojej uprzywilejowanej pozycji, który sektor będzie tym, w którym Linux wyrazi najwyższy potencjał?

Odp .: Myślę, że prawdziwą siłą Linuksa jest to, że nie chodzi o jedną niszę. Wszyscy mogą grać razem, a różni ludzie i różne firmy mają zupełnie inne motywacje i przekonania co do tego, co jest dla nich ważne. Więc nawet mnie nie interesuje żaden konkretny sektor.

mattdm
źródło
18
Mały system i ogromne definicje systemów cały czas się zmieniają, więc dobrze jest unikać kłopotów. Wielordzeniowe smartfony mogą teraz korzystać z całej pracy superkomputerowej sprzed wielu lat.
Zan Lynx,
4

Linux skaluje się do wielu różnych typów sprzętu, ponieważ:

  • jest bardzo konfigurowalny
  • źródło jest ogólnodostępne i można je zbudować dla dowolnego procesora, który ma dostępny kompilator C.
  • procesory w urządzeniach wbudowanych i telefonach komórkowych mają co najmniej taki sam poziom mocy lub więcej w porównaniu z oryginalnymi 386 maszynami, na których wcześniej opracowano system Linux, i nadal zyskują moc
  • działa dobrze bez sieci, jakiejś formy dysku lub urządzenia dyskowego i portu szeregowego
LawrenceC
źródło
Cóż, ktoś musiałby napisać minimalną ilość kodu ładującego i środowiska uruchomieniowego C dla platformy docelowej. Aha, i musi obsługiwać pamięć wirtualną. Ale poza tym prawda :)
Billy ONeal
1
@Billy Istnieją porty dla systemów nommu: uClinux, uClinux / ARM i MontaVista Linux.
Tobu
@Tobu: Hmm .. Nie rozumiem, jak to może być. Cała „filozofia uniksowa” dla wielu procesów zakłada, że ​​coś podobnego forkjest możliwe i forknie da się tego zrobić w rozsądny sposób na nie-wirtualnym systemie pamięci. Chociaż wskazane porty prawdopodobnie używają części jądra systemu Linux i mogą uruchamiać niektóre oprogramowanie systemu Linux, w przeważającej części wydaje się, że interfejsy API udostępniane przez te porty są inne niż typowe jądra systemu Linux. (Przykład: mapowanie pamięci - co oczywiście wymaga pamięci wirtualnej)
Billy ONeal
linuxjournal.com/article/7814 : mówi, że uCLinux nie obsługuje fork (), ale wariant blokujący o nazwie vfork (), aplikacje w uCLinux muszą zostać przepisane, aby używać vfork lub wątków.
LawrenceC
4

Jądro Linuksa skaluje się dobrze, ponieważ takie jest. Jądro rdzenia jest stosunkowo małe i robi to, co musi zrobić. Sterowniki urządzeń są opcjonalne i można je pominąć w jądrze w przypadku mniejszych systemów. Poza minimalnymi wymaganiami jądra większość funkcji jest implementowana jako funkcje opcjonalne.

Spójrz na plik konfiguracyjny zainstalowany obok większości jąder. Spowoduje to wyświetlenie wszystkich funkcji, które zostały włączone, a także obsługiwanych sterowników.

Sterowniki są obsługiwane albo wbudowane w jądro, albo jako moduły ładowalne. Pozwala to dynamicznie konfigurować jądro do sprzętu, na którym działa. Takie podejście stosuje wiele dystrybucji.

Poza narzędziami do kompilacji modyfikowanie jądra pod kątem nowego sprzętu jest stosunkowo proste. W przypadku nowego procesora tylko powiązany kod musi zostać zaimplementowany jako modyfikacja istniejącej funkcjonalności. Nowe urządzenia wymagają tylko nowego sterownika z odpowiednimi zaczepami. Nowe systemy plików są również stosunkowo trywialnymi modyfikacjami.

Baza kodu została dobrze utrzymana, aby zachować tę elastyczność bez zewnętrznego rozwidlenia. Kompilacja warunkowa napędza bardzo elastyczne jądro, które zostało ograniczone do minimum.

BillThor
źródło
1

Brakuje mi szczegółowej wiedzy technicznej, aby poprzeć tę odpowiedź, ale moje doświadczenie sugeruje, że Linux dobrze się skaluje w porównaniu do innych systemów operacyjnych, których często używam (przede wszystkim Windows). Być może więc pytanie brzmi: dlaczego Windows nie skaluje się tak dobrze jak Linux.

Jeśli ponowne sformułowanie pytania w ten sposób jest nadal przydatne, sugerowałbym, aby siły rynkowe motywowały Microsoft do dodawania funkcji dostosowanych do najnowszego i najbardziej wydajnego sprzętu, ponieważ sprzedają więcej kopii systemu operacyjnego przede wszystkim wtedy, gdy użytkownicy końcowi kupują nowe systemy . Tak więc w dowolnym momencie stwierdzam, że najnowsza wersja systemu Windows słabo działa na starszych, mniej wydajnych urządzeniach.

Wybacz mi, jeśli to uprości twoje pytanie.

Mox
źródło
Wygląda na to, że mówisz o systemie operacyjnym, podczas gdy facet mówi o jądrze. Cóż, chyba że wiesz na pewno, czy jądro systemu Windows jest rozdęte.
tshepang
@Tshepang: Aby być uczciwym, pytania dotyczą „jądra i / lub systemu Linux”. Czy Windows 7 i Windows Phone 7 współużytkują jądro? Mała część, którą przeczytałem, sugeruje, że ich jądra mogą mieć mniej wspólnego kodu niż jądra Ubuntu Server i Androida.
RedGrittyBrick
Dzięki, ale tak naprawdę pytanie dotyczyło Linuksa, a nie innego systemu operacyjnego. Istnieje wiele innych: en.wikipedia.org/wiki/List_of_operating_systems
Justin Ethier
Jądro NT jest w rzeczywistości bardzo wydajne, ale to ogromna liczba otaczających go warstw sprawia, że
LawrenceC