Dlaczego Linux nazywa się monolitycznym jądrem?


208

Czytam, że Linux jest monolitycznym jądrem. Czy monolityczne jądro oznacza kompilowanie i łączenie całego kodu jądra z plikiem wykonywalnym?

Jeśli Linux jest w stanie obsługiwać moduły, dlaczego nie rozbić wszystkich podsystemów na moduły i załadować je w razie potrzeby? W takim przypadku jądro nie musi początkowo ładować wszystkich modułów i może utrzymywać indeks funkcji w module i ładować je w razie potrzeby.

Odpowiedzi:


290

Jądro monolityczne to jądro, w którym wszystkie usługi (system plików, VFS, sterowniki urządzeń itp.), A także podstawowa funkcjonalność (planowanie, przydział pamięci itp.) Są zwartą grupą dzielącą tę samą przestrzeń. To bezpośrednio przeciwstawia się mikrojądrowi .

Mikrojądro preferuje podejście, w którym podstawowa funkcjonalność jest izolowana od usług systemowych i sterowników urządzeń (które są w zasadzie tylko usługami systemowymi). Na przykład VFS (wirtualny system plików) i blokowe systemy plików urządzeń (tj. Minixfs) to osobne procesy, które działają poza przestrzenią jądra, wykorzystując IPC do komunikacji z jądrem, innymi usługami i procesami użytkownika. Krótko mówiąc, jeśli jest to moduł w systemie Linux, jest to usługa w mikrojądro, wskazując wyizolowaną proces.

Nie należy mylić terminu jądro modułowe z czymkolwiek innym niż monolitycznym. Niektóre monolityczne jądra można skompilować jako modułowe (np. Linux), ważne jest to, że moduł jest wstawiany i działa z tej samej przestrzeni, która obsługuje podstawową funkcjonalność (przestrzeń jądra).

Zaletą mikrojądra jest to, że każdą uszkodzoną usługę można łatwo zrestartować, na przykład nie ma zatrzymania jądra, jeśli główny system plików zgłasza przerwanie. Może to być również postrzegane jako wada, ponieważ może ukrywać dość krytyczne błędy (lub sprawiać, że wydają się one nie tak krytyczne, ponieważ problem wydaje się stale naprawiać). Jest to postrzegane jako duża zaleta w scenariuszach, w których po prostu nie można wygodnie naprawić czegoś po jego wdrożeniu.

Wadą mikrojądra jest to, że asynchroniczne przesyłanie komunikatów IPC może być bardzo trudne do debugowania, szczególnie jeśli implementowane są włókienka . Ponadto po prostu śledzenie problemu z FS / write oznacza zbadanie procesu przestrzeni użytkownika, usługi urządzenia blokowego, usługi VFS, usługi systemu plików i (ewentualnie) usługi PCI. Jeśli dostaniesz puste miejsce, czas spojrzeć na usługę IPC. Często jest to łatwiejsze w monolitycznym jądrze. GNU Hurd cierpi z powodu tych problemów debugowania ( odniesienie ). Nie zamierzam nawet wchodzić w punkt kontrolny w przypadku skomplikowanych kolejek wiadomości. Mikrojądra nie są dla osób o słabym sercu.

Najkrótszą ścieżką do działającego, stabilnego jądra jest podejście monolityczne. Każde z tych podejść może zaoferować interfejs POSIX, w którym konstrukcja jądra staje się mało interesująca dla kogoś, kto po prostu chce napisać kod do uruchomienia na dowolnym projekcie.

W produkcji używam Linuksa (monolityczny). Jednak większość mojej nauki, hakowania lub majsterkowania przy tworzeniu jądra przechodzi w mikrojądro, w szczególności HelenOS .

Edytować

Jeśli przejdziesz tak daleko od mojej bardzo długiej odpowiedzi, prawdopodobnie będziesz się dobrze bawić, czytając „ Wielką debatę Torvaldsa-Tanenbauma na temat projektowania jądra ”. Jeszcze zabawniej jest czytać w 2013 roku, ponad 20 lat po jego wydaniu. Najśmieszniejsze było podpis Linusa w jednej z ostatnich wiadomości:

Linus "my first, and hopefully last flamefest" Torvalds

Oczywiście nie stało się to tak samo, jak przepowiednia Tanenbauma, że ​​x86 wkrótce stanie się przestarzałe.

NB:

Kiedy mówię „Minix”, nie sugeruję się Minix 3. Dodatkowo, kiedy wspominam o HURD, odnoszę się (głównie) do mikrojądra Mach. Nie zamierzam dyskredytować ostatnich prac innych.


5
Co ciekawe, Linus Torvalds był pod wielkim wpływem MINIX Andew Tanenbauma, kiedy stworzył Linuksa. Jednak MINIX opiera się na projekcie mikrojądra, podczas gdy Linux używa jądra monolitycznego.
Martin Liversage

2
@Martin Liversage: Bardziej sfrustrowani niż pod wpływem :) Zredagowałem moją odpowiedź, aby to odzwierciedlić.
Tim Post

25
@DigitalRoss: Powinieneś zobaczyć moją skrzynkę odbiorczą po odpowiedzi, Linus jest oswojony w porównaniu do entuzjastów Minix i Macha.
Tim Post


3
@p_l Myślę, że zbliża się czas, w którym musimy porozmawiać o różnicach między mikro, monolitem i hybrydą. To może być całkiem dobre pytanie :)
Tim Post

15

Jądro monolityczne oznacza, że ​​cały system operacyjny działa w trybie jądra (tj. Jest bardzo uprzywilejowany przez sprzęt). Oznacza to, że żadna część systemu operacyjnego nie działa w trybie użytkownika (niższe uprawnienia). Tylko aplikacje na systemie operacyjnym działają w trybie użytkownika.

W niemonolitycznych systemach operacyjnych jądra, takich jak Windows, duża część samego systemu operacyjnego działa w trybie użytkownika.

W obu przypadkach system operacyjny może być wysoce modułowy.


9
Windows zdecydowanie jest monolitycznym jądrem.
Adam Rosenfield

7
@Adam: Nie zgadzam się. 16-bitowy system Windows w starym stylu był monolitycznym jądrem, podobnie jak Windows 95 i tym podobne. Ale wersje systemu Windows oparte na NT, w tym wszystkie wersje Server plus Vista i 7, są wyraźnie mikrojądrowe lub być może hybrydowe, w zależności od używanej definicji „mikrojądra”.
CesarGon

8
To, że sterowniki drukarki nie działają w ring0, nie czyni z niego mikrojądra :)
caf

7
@caf: Proponuję rzucić okiem na en.wikipedia.org/wiki/Windows_NT_kernel i en.wikipedia.org/wiki/Comparison_of_operating_system_kernels . Zobaczysz, że Windows NT i ich następcy, w tym Vista, 7 i serwery, są określani jako „jądro hybrydowe”. Dwa duże podsystemy systemu operacyjnego działają w trybie użytkownika, a nie tylko sterownik drukarki. :-)
CesarGon

7
Mój komentarz był nieco wulgarny - nazwa „hybrydowa” wydaje się tak pozbawiona informacji, że jest bezużyteczna.
caf

10

; tl-dr - Nie, Linux jest zawsze monolityczny.

Moduły Linux mogą w pewnym sensie oznaczać modułowe . Jak zauważyli inni, monolit jest zwykle reprezentujący mikrojądro w porównaniu do monolitycznego jądra. Tradycyjne mikrojądro ma tylko te funkcje,

  1. Planowanie
  2. Zarządzanie pamięcią
  3. Komunikacja międzyprocesowa

W głównym jądrze nie ma sterowników sprzętowych , stosów protokołów , systemów plików , zawieszenia / wznowienia , zarządzania zegarem itp. Te rzeczy są identyczne z każdym zadaniem użytkownika (chociaż mogą mieć różne uprawnienia za pośrednictwem MMU / harmonogramu).


Prognozy Tanenbauma

  1. Mikrojądra to przyszłość
  2. x86 wymrze, a architektury RISC zdominują rynek
  3. (Za 5 lat) wszyscy będą korzystać z bezpłatnego systemu GNU

Programiści komputerów i serwerów mogą się śmiać, ale dwa i trzy są z pewnością prawdziwe dla większości istniejących telefonów komórkowych. Tanenbaum miałby rację na wszystkich kontach, gdyby BlackBerry QNX odniósł sukces.

Ponadto wiele hiperwizorów L1 ma pod spodem mikro-jądro . Wynika to z faktu, że hiperwizor zwykle nie robi wiele poza przełączaniem kontekstu .

Najwyraźniej trzy przewidują sukces Linuksa. ;-)


Argumentem za mikrojądrami jest to, że wszystkie monolityczne podsystemy muszą synchronizować wiele wartości jednocześnie. Aby to zrobić, muszą używać zamków i będą podlegać prawu Amdahla, gdy zostaną rozszerzone na architektury równoległe. Licznik jest taki, że mikrojądra powodują wiele komunikatów IPC.

Istotnym osiągnięciem jest zastosowanie programowania bez blokady, aby uniknąć rywalizacji w monolitycznym jądrze. Pozwala to uniknąć blokowania w monolitycznym jądrze, jednocześnie zmniejszając narzut IPC. Ostatnio wszystkie procesory rozszerzają swój ISA o lepsze prymitywy dla algorytmów bez blokady . Więc Linux prawdopodobnie pozostanie przez jakiś czas monolitycznym jądrem.


1
Tak, wiem, że Tanenbaum miał na myśli Hurda. Ale GNU przeszedł na Linuksa, więc sformułowanie jest zabawne.
bezgłośny hałas

Dlaczego brak użycia x86 na urządzeniach mobilnych? Co sprawia, że ​​inne architektury są korzystne?
Abdul,


Tak, są ważne. Trudno jest stworzyć SOC x86 (system na chipie). Nie ma standardowego kodu HDL do stworzenia x86, który sprzedawca SOC (Broadcom, Freescale itp.) Może kupić.
artless noise

9

Z Wikipedii :

Jądro monolityczne to architektura jądra, w której cały system operacyjny działa w przestrzeni jądra i sam jako tryb superwizora. W odróżnieniu od innych architektur monolityczne jądro definiuje samodzielnie wirtualny interfejs wysokiego poziomu nad sprzętem komputerowym, z zestawem operacji podstawowych lub wywołań systemowych w celu wdrożenia wszystkich usług systemu operacyjnego, takich jak zarządzanie procesami, współbieżność i zarządzanie pamięcią, a także jeden lub więcej sterowniki urządzeń jako moduły.

Natomiast najnowsze wersje systemu Windows używają jądra hybrydowego .

Jądro hybrydowe to architektura jądra oparta na łączeniu aspektów architektury mikrojądra i monolitycznej architektury jądra wykorzystywanych w komputerowych systemach operacyjnych. Kategoria jest kontrowersyjna ze względu na podobieństwo do jądra monolitycznego; termin został odrzucony przez niektórych jako zwykły marketing. Tradycyjnymi kategoriami jądra są jądra monolityczne i mikrojądra (z nanordzeniami i egzokernelami postrzeganymi jako bardziej ekstremalne wersje mikrojądra).


7
Jeśli kiedykolwiek coś robię w przestrzeni jądra, muszę pamiętać, aby gdzieś użyć „hybric kerkel”. SCNR ;-)
Jürgen A. Erhard

1
Windows NT zawsze był systemem hybrydowym. Jądro może nie być dokładnie hybrydowe, ale pojawia się pytanie, co się na nim liczy (na przykład winapi jest zaimplementowane jako usługa przestrzeni użytkownika)
p_l

5

„Monolityczny” w tym kontekście nie odnosi się do istnienia pojedynczego dużego pliku wykonywalnego i, jak mówisz, Linux obsługuje dynamiczne ładowanie modułów jądra w czasie wykonywania. Mówiąc o jądrach, „monolityczny” oznacza, że ​​cały system operacyjny działa w trybie „uprzywilejowanym” lub „nadzorczym”, w przeciwieństwie do innych rodzajów systemów operacyjnych, które wykorzystują rodzaj jądra, taki jak „mikrojądro”, w którym tylko minimalna zestaw funkcji działa w trybie uprzywilejowanym, a większość systemu operacyjnego działa w przestrzeni użytkownika.

Zwolennicy mikrojądra twierdzą, że jest to lepsze, ponieważ mniejszy kod oznacza mniej błędów, a błędy działające w trybie superwizora mogą powodować znacznie większe problemy niż w kodzie przestrzeni użytkownika (takie jak większa szansa na luki w zabezpieczeniach lub całkowite awarie systemu w postaci „panika jądra”). Niektóre mikrojądra są wystarczająco minimalne, aby można je było „formalnie zweryfikować”, co oznacza, że ​​można matematycznie udowodnić, że jądro jest „prawidłowe” zgodnie ze specyfikacją. L4 jest tego dobrym przykładem.


Sprawdź swoje źródła. Witryna Wikipedii nie jest cytowana. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
monksy

2

Jądro monolityczne jest pojedynczym dużym procesem działającym całkowicie w jednej przestrzeni adresowej. Jest to pojedynczy statyczny plik binarny. Wszystkie usługi jądra istnieją i działają w przestrzeni adresowej jądra. Jądro może bezpośrednio wywoływać funkcje. Przykładami systemów monolitycznych opartych na jądrze są Linux, Unix.

Myślę, że ten post pomoże ci lepiej zrozumieć tę koncepcję.

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html


Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Scott,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.