Dlaczego Linux nazywa się jądrem monolitycznym?

Czytałem, że Linux jest monolitycznym jądrem. Czy monolityczne jądro oznacza kompilację i łączenie całego kodu jądra w plik wykonywalny?

Jeśli Linux jest w stanie obsługiwać Moduły, dlaczego nie podzielić 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.

Author: Peter Mortensen, 2009-11-27

7 answers

Jądro monolityczne jest jądrem, w którym wszystkie usługi (system plików, VFS, sterowniki urządzeń itp.), a także podstawowe funkcje (planowanie, alokacja pamięci itp.) są zwartą grupą dzielącą tę samą przestrzeń. To bezpośrednio przeciwstawia się mikrokernel .

Mikrokernel 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 (virtual file system) i block device file systems minixfs) są oddzielnymi procesami, które działają poza przestrzenią jądra, używając IPC do komunikacji z jądrem, innymi usługami i procesami użytkownika. W skrócie, jeśli jest to moduł w Linuksie, jest to usługa w mikrokernelu, wskazująca na izolowany proces.

Nie należy mylić terminu modułowe jądro z czymś innym niż monolityczne. Niektóre monolityczne jądra mogą być skompilowane jako modularne (np. Linux), ważne jest to, że moduł jest wstawiany i uruchamiany z ta sama przestrzeń, która obsługuje podstawową funkcjonalność (przestrzeń jądra).

Zaletą mikrokernela jest to, że każda nieudana usługa może być łatwo uruchomiona ponownie, na przykład, nie ma zatrzymania jądra, jeśli główny system plików wyrzuci abort. Może to być również postrzegane jako wada, ponieważ może ukryć dość krytyczne błędy(lub sprawić, że nie będą one tak krytyczne, ponieważ problem wydaje się ciągle naprawiać). Jest postrzegany jako duża zaleta w scenariuszach, w których po prostu nie można wygodnie naprawić coś, co zostanie wdrożone.

Wadą mikrokernela jest to, że asynchroniczne wiadomości IPC mogą stać się bardzo trudne do debugowania, zwłaszcza jeśli zaimplementowane są fibryle . Dodatkowo, samo śledzenie problemu FS / write oznacza zbadanie procesu przestrzeni użytkownika, usługi urządzenia blokowego, usługi VFS, usługi systemu plików i (prawdopodobnie) usługi PCI. Jeśli masz puste w tym, czas spojrzeć na usługę IPC. Jest to często łatwiejsze w jądrze monolitycznym. GNU Hurd cierpi na problemy z debugowaniem (reference ). Nie zamierzam nawet wchodzić w checkpointing, gdy mam do czynienia ze złożonymi kolejkami wiadomości. Mikrokernele nie są dla słabych serc.

Najkrótszą drogą do działającego, stabilnego jądra jest podejście monolityczne. Oba podejścia mogą oferować interfejs POSIX, gdzie konstrukcja jądra staje się mało interesująca dla kogoś, kto chce po prostu napisać kod do uruchomienia na dowolnym projekcie.

Używam Linuksa (monolityczne) w produkcji. Jednak większość mojego uczenia się, hakowania lub majstrowania przy rozwoju jądra przechodzi w mikrokernel, a konkretnie HelenOS {19]}.

Edit

Jeśli przeszedłeś tak daleko przez moją bardzo długą odpowiedź, prawdopodobnie będziesz miał trochę zabawy czytając " Great Torvalds-Tanenbaum debate on kernel design ". Jeszcze zabawniej jest czytać w 2013 roku, ponad 20 lat po tym, jak to się stało. Najśmieszniejszą częścią był podpis Linusa w jednym z ostatnich wiadomości:

Linus "my first, and hopefully last flamefest" Torvalds

Oczywiście nie spełniło się to bardziej niż przepowiednia Tanenbauma, że x86 wkrótce będzie przestarzały.

Uwaga:

Kiedy mówię "Minix", nie sugeruję Minix 3. Dodatkowo, gdy wspominam o HURDZIE, odnoszę się (głównie) do Mach microkernela. Nie mam zamiaru lekceważyć niedawnej pracy innych.
 256
Author: Tim Post,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-25 14:43:49

Oto moja krótka odpowiedź... Znajdź poniżej obraz. Uzyskasz jasne pojęcie o obu typach Jądra

Tutaj wpisz opis obrazka

 17
Author: Dhiral Pandya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 07:17:58

Monolityczne jądro oznacza, że cały system operacyjny działa w trybie jądra (tzn. jest wysoce uprzywilejowany przez sprzęt). Oznacza to, że żadna część systemu operacyjnego nie działa w trybie użytkownika (niższy przywilej). Tylko aplikacje na systemie operacyjnym działają w trybie użytkownika.

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

W obu przypadkach System Operacyjny może być wysoce modułowy.

 13
Author: CesarGon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-27 03:19:34

Z Wikipedii

Jądro monolityczne jest architekturą jądra, w której cały system operacyjny pracuje w przestrzeni jądra i samodzielnie jako tryb nadzorcy. W odróżnieniu od innych architektur,1 monolityczne jądro definiuje sam wysokopoziomowy interfejs wirtualny nad sprzętem komputerowym, z zestawem prymitywów lub wywołań systemowych, aby zaimplementować wszystkie usługi systemu operacyjnego, takie jak zarządzanie procesami, współbieżność i samo zarządzanie pamięcią oraz jeden lub więcej sterowników urządzeń jako modułów.

Najnowsze wersje Windows z drugiej strony używają hybrydowego jądra .

Jądro hybrydowe (ang. hybrid kernel) - Architektura jądra oparta na łączeniu aspektów mikrokernela i monolitycznych architektur jądra stosowanych w systemach operacyjnych komputerów. Kategoria jest kontrowersyjna ze względu na podobieństwo do jądra monolitycznego; termin ten został przez niektórych odrzucony jako prosty marketing. Tradycyjnymi kategoriami jąder są jądra monolityczne i mikrokernele (z nanokernelami i egzokernelami postrzeganymi jako bardziej ekstremalne wersje mikrokerneli).
 8
Author: Bob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-28 15:40:24

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

Linux modulesmoże oznaczać modular w pewnym sensie. Jak zauważyli inni, monolit reprezentuje Zwykle jądro mikrokernel kontra monolit. Tradycyjny mikrokernel ma tylko te cechy,

  1. planowanie
  2. zarządzanie pamięcią
  3. Komunikacja międzyprocesowa

Nie ma sterowników sprzętowych, protokół stosy, systemy plików, zawieś / Wznów, Zarządzanie zegarem , itd. w głównym jądrze. Te rzeczy są identyczne dla każdego zadania użytkownika (chociaż mogą mieć różne uprawnienia poprzez MMU / scheduler).


Przepowiednie Tanenbauma

  1. Mikrokernele są przyszłością
  2. x86 wygaśnie, a architektury RISC zdominują Rynek
  3. (za 5 lat) każdy będzie używał wolnego GNU OS
[1]}Programiści PC 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.

Również wiele L1-hipernadzorców ma mikro-jądro pod spodem. Jest to spowodowane tym, że hyper-visor zwykle nie robi wiele poza przełącznikiem kontekstu .

Najwyraźniej trzy przepowiednie sukcesu Linuksa. ;-)


Argument za mikrokernele jest to, że wszystkie monolityczne podsystemy muszą zsynchronizować wiele wartości w tym samym czasie. Aby to zrobić, muszą używać blokad i będą cierpieć z powodu prawa Amdahla, gdy zostaną rozszerzone na Architektury równoległe. Licznik jest taki, że mikrokernele powodują wiele wiadomości IPC.

Głównym rozwinięciem jest użycielock-free w celu uniknięcia sporów w monolitycznym jądrze. Pozwala to uniknąć zablokowania w monolitycznym jądrze podczas również zmniejszenie napowietrzności IPC. Ostatnio wszystkie procesory rozszerzają swoją ISA o lepsze prymitywy dla algorytmów bez blokady. Więc Linux prawdopodobnie pozostanie przez jakiś czas monolitycznym jądrem.

 7
Author: artless noise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:27

'monolityczny' w tym kontekście nie odnosi się do istnienia jednego dużego pliku wykonywalnego, a jak mówisz, Linux obsługuje dynamiczne ładowanie modułów jądra w czasie wykonywania. Mówiąc o jądrach, "monolithic" oznacza, że cały system operacyjny działa w trybie "uprzywilejowanym" lub "nadzorczym", w przeciwieństwie do innych typów systemów operacyjnych, które używają typu jądra, takiego jak "mikrokernel", gdzie tylko minimalny zestaw funkcji działa w trybie uprzywilejowanym, a większość funkcji operacyjnych działa w trybie "uprzywilejowanym". system działa w przestrzeni użytkownika.

Zwolennicy mikrokerneli twierdzą, że jest to lepsze, ponieważ mniejszy kod oznacza mniej błędów, a błędy działające w trybie nadzorcy 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 "paniki jądra"). Niektóre mikrokernele są na tyle Minimalne, że można je "formalnie zweryfikować" , co oznacza, że można matematycznie udowodnić, że jądro jest "poprawne" zgodnie z do specyfikacji. L4 jest tego dobrym przykładem.

 5
Author: David Claridge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-20 06:22:15

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

Myślę, że ten post pomoże Ci lepiej zrozumieć pojęcie.

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

 2
Author: JIN007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-09 14:38:11