Czy ktoś mógłby wyjaśnić na przykładach różnicę między jądrem monolitycznym a mikro? Także inne klasyfikacje jądra?
Czy ktoś mógłby wyjaśnić na przykładach różnicę między jądrem monolitycznym a mikro? Także inne klasyfikacje jądra?
Odpowiedzi:
Jądro monolityczne to pojedynczy duży proces działający w całości w jednej przestrzeni adresowej. Jest to pojedynczy statyczny plik binarny. Wszystkie usługi jądra istnieją i są wykonywane w przestrzeni adresowej jądra. Jądro może bezpośrednio wywoływać funkcje. Przykłady systemów operacyjnych opartych na monolitycznym jądrze: Unix, Linux.
W mikrojądrach jądro jest podzielone na oddzielne procesy, zwane serwerami. Niektóre serwery działają w przestrzeni jądra, a inne w przestrzeni użytkownika. Wszystkie serwery są oddzielone i działają w różnych przestrzeniach adresowych. Serwery wywołują „usługi” od siebie, wysyłając wiadomości za pośrednictwem IPC (komunikacja międzyprocesowa). Ta separacja ma tę zaletę, że w przypadku awarii jednego serwera inne mogą nadal działać wydajnie. Przykłady systemów operacyjnych opartych na mikrojądrze: Mac OS X i Windows NT.
Projekt jądra monolitycznego jest znacznie starszy niż idea mikrojądra, która pojawiła się pod koniec lat 80-tych.
Jądra systemów Unix i Linux są monolityczne, podczas gdy QNX, L4 i Hurd to mikrojądra. Mach był początkowo mikrojądrem (nie Mac OS X), ale później został przekształcony w jądro hybrydowe. Minix (przed wersją 3) nie był czystym mikrojądrem, ponieważ sterowniki urządzeń były kompilowane jako część jądra.
Jądra monolityczne są zwykle szybsze niż mikrojądra. Pierwszy mikrojądro Mach był o 50% wolniejszy niż większość jąder monolitycznych, podczas gdy późniejsze, takie jak L4, były tylko 2% lub 4% wolniejsze niż konstrukcje monolityczne.
Jądra monolityczne są duże, podczas gdy mikrojądra są małe - zwykle mieszczą się w pamięci podręcznej L1 procesora (mikrojądra pierwszej generacji).
W jądrach monolitycznych sterowniki urządzeń znajdują się w przestrzeni jądra, podczas gdy w mikrojądrach sterowniki urządzeń znajdują się w przestrzeni użytkownika.
Ponieważ sterowniki urządzeń jądra monolitycznego znajdują się w przestrzeni jądra, jądra monolityczne są mniej bezpieczne niż mikrojądra, a awarie (wyjątki) sterowników mogą prowadzić do awarii (wyświetlanych jako BSOD w systemie Windows). Mikrojądra są bezpieczniejsze niż jądra monolityczne, stąd częściej wykorzystywane w urządzeniach wojskowych.
Jądra monolityczne używają sygnałów i gniazd do implementacji komunikacji między procesami (IPC), a mikrojądra używają kolejek komunikatów. Mikrojądra pierwszej generacji nie implementowały dobrze IPC i wolno działały na przełącznikach kontekstowych - to właśnie spowodowało ich słabą wydajność.
Dodanie nowej funkcji do systemu monolitycznego oznacza rekompilację całego jądra lub odpowiedniego modułu jądra (w przypadku modułowych jąder monolitycznych), podczas gdy w przypadku mikrojądra można dodawać nowe funkcje lub łaty bez ponownej kompilacji.
Jądro monolityczne
Wszystkie części jądra, takie jak harmonogram, system plików, zarządzanie pamięcią, stosy sieciowe, sterowniki urządzeń itp., Są utrzymywane w jednej jednostce w jądrze w jądrze monolitycznym
Zalety
• Szybsze przetwarzanie
Niedogodności
• Niepewne awarie • Brak elastyczności przenoszenia • Eksplozja rozmiaru jądra
Przykłady • MS-DOS, Unix, Linux
Micro jądro
Tylko bardzo ważne części, takie jak IPC (komunikacja między procesami), podstawowy harmonogram, podstawowa obsługa pamięci, podstawowe prymitywy I / O itp. Są umieszczane w jądrze. Komunikacja odbywa się poprzez przekazywanie wiadomości. Inne są obsługiwane jako procesy serwerowe w przestrzeni użytkownika
Zalety
• Odporny na awarie, przenośny, mniejszy rozmiar
Niedogodności
• Wolniejsze przetwarzanie dzięki dodatkowemu przekazywaniu wiadomości
Przykłady • Windows NT
1. jądro monolityczne (czysty monolit):all
Wszystkie usługi jądra z jednego składnika
(-) dodawanie / usuwanie nie jest możliwe, mniej / zero elastyczny
(+) Komunikacja między komponentami jest lepsza
np .: - Tradycyjny Unix
2. jądro mikro:few
kilka usług (zarządzanie pamięcią, zarządzanie procesorem, IPC itp.) z jądra podstawowego, inne usługi (zarządzanie plikami, zarządzanie we / wy itp.) z różnych warstw / komponentów
Podejście podzielone [Niektóre usługi są w trybie uprzywilejowanym (jądra), a inne w trybie Normalnym (użytkownika)]
(+) elastyczny w przypadku zmian / ulepszeń
(-) narzut komunikacyjny
np .: - QNX itp.
3. jądro modułowe (modułowe monolityczne):most
Połączenie jądra mikro i monolitycznego
Zbiór modułów - moduły mogą być -> Statyczne + Dynamiczne
Sterowniki mają postać modułów
np .: - Linux Modern OS
W spektrum projektów jądra dwoma skrajnymi punktami są jądra monolityczne i mikrojądra.
Na przykład (klasyczne) jądro Linuksa jest jądrem monolitycznym (podobnie jak każdy dotychczasowy komercyjny system operacyjny - choć mogą twierdzić, że jest inaczej);
W tym sensie, że jego kod jest pojedynczym plikiem C dającym początek pojedynczemu procesowi, który implementuje wszystkie powyższe usługi.
Aby zilustrować hermetyzację jądra Linuksa, zauważmy, że jądro Linuksa nie ma nawet dostępu do żadnej ze standardowych bibliotek C. W rzeczywistości jądro Linuksa nie może używać podstawowych funkcji biblioteki C, takich jak printf. Zamiast tego implementuje własną funkcję drukowania (zwaną drukiem).
Jest to jednak główna wada monolitycznego jądra: wprowadzenie nowego, nieobsługiwanego sprzętu wymaga przepisania jądra (w odpowiednich częściach), jego ponownej kompilacji i ponownej instalacji całego systemu operacyjnego.
To odosobnienie jądra Linuksa i samoistnienie zapewnia jądru Linuksa jego główną zaletę: jądro znajduje się w jednej przestrzeni adresowej1, umożliwiając wszystkim funkcjom komunikację w najszybszy możliwy sposób bez uciekania się do jakiegokolwiek rodzaju przekazywania wiadomości. W szczególności monolityczne jądro implementuje wszystkie sterowniki urządzeń systemu.
Co ważniejsze, jeśli jakikolwiek sterownik urządzenia ulegnie awarii, w rezultacie cierpi całe jądro. To niemodularne podejście do dodawania sprzętu i awarii sprzętu jest głównym argumentem za popieraniem innego ekstremalnego podejścia do projektowania jądra. Mikrojądro to w pewnym sensie minimalistyczne jądro, które zawiera tylko podstawowe usługi systemu operacyjnego (takie jak zarządzanie procesami i zarządzanie systemem plików). W mikrojądrze sterowniki urządzeń znajdują się poza jądrem, co pozwala na dodawanie i usuwanie sterowników urządzeń podczas działania systemu operacyjnego i nie wymaga żadnych zmian w jądrze.
Jądro monolityczne ma wszystkie usługi jądra wraz z rdzeniem jądra, dlatego jest ciężkie i ma negatywny wpływ na szybkość i wydajność. Z drugiej strony mikro jądro jest lekkie, co powoduje wzrost wydajności i szybkości.
Odpowiedziałem na to samo pytanie na stronie wordpress. Aby zobaczyć różnicę między monolitem, mikrojądrem i egzokernelem w formie tabelarycznej, możesz odwiedzić tutaj