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.