Mikrojądro implementuje wszystkie sterowniki jako programy przestrzeni użytkownika i implementuje podstawowe funkcje, takie jak IPC w samym jądrze. Jądro monolityczne implementuje jednak sterowniki jako część jądra (np. Działa w trybie jądra).
Czytałem niektóre twierdzenia, że mikrojądra są wolniejsze niż monolityczne jądra, ponieważ muszą obsługiwać przekazywanie wiadomości między sterownikami w przestrzeni użytkownika. Czy to prawda?
Przez długi czas większość jąder była monolityczna, ponieważ sprzęt był zbyt wolny, aby szybko uruchamiać mikro-jądra. Jednak obecnie istnieje wiele mikrojądra i jąder hybrydowych, takich jak GNU / Hurd, Mac OS X, linia Windows NT itp.
Czy coś się zmieniło w wydajności mikrojądra? Czy ta krytyka mikrojądra jest nadal aktualna?
Wolę nazywać Windows NT i jądro Apple XNU monolityczne zamiast hybrydowego. Uważam, że klasyfikacja hybrydy nie ma większego znaczenia w praktyce. W rzeczywistości jeden z oryginalnych inżynierów XNU nazywa to monolitem [1].
Jeśli chodzi o wydajność, jedyne naprawdę dogłębne porównanie monolitów z mikro, jakie mogę znaleźć, to „Extreme High Performance Computing lub Why Microkerenels Suck” [2] oraz odparta prezentacja „Do Microkernels Suck?” [3].
Modułowość i możliwość dostosowania to więcej problemów projektowych niż nieodłączne ograniczenia w monolitycznych jądrach. Na przykład jądro Linuksa może mieć rozmiar od kilku megabajtów do około jednego megabajta, w zależności od opcji czasu kompilacji i zastosowania niektórych łatek. Zdecydowana większość ponad 15 milionów wierszy kodu Linuksa to moduły jądra do załadowania. Są one kompilowane oddzielnie od jądra podstawowego i ładowane tylko w razie potrzeby. Moduły te mogą implementować sterowniki i wywołania systemowe (nawet zastępując podstawowe wywołania systemowe).
Dwa obszary, w których mikrokernele mają niekwestionowaną przewagę, to niski poziom pamięci (<= 512 k pamięci RAM) lub „twarde” systemy operacyjne w czasie rzeczywistym, takie jak systemy lotów linii lotniczych lub systemy kontroli reaktorów jądrowych.
Edycja: Mówiąc dalej o zaletach i wadach obu architektur jądra, Gernot Heiser swobodnie przyznaje pod koniec swojej prezentacji [3], że monolityczne jądra są z natury bardziej wydajne, ponieważ mikrojądro zawsze ma pewne dodatkowe koszty. Chociaż ten dodatkowy narzut prowadzi do zwiększenia niezawodności, stąd dominacja mikrokerneli w RTOS.
[1] Louis G. Gerbarg, „Zaawansowana synchronizacja w Mac OS X: rozszerzenie systemu Unix na SMP i czas rzeczywisty”, Proceedings of BSDCon 2002 Conference, s. 2
[2] Chistoph Lameter, „Extreme High Performance Computing or Why Microkernels Suck”, 2007 Linux Symposium, Volume One
[3] Gernot Heiser, „Do Microkernels Suck?”, 9 Linux.conf.au, styczeń 2008
źródło