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?
language-agnostic
terminology
kernel
Renjith G.
źródło
źródło
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.
źródło
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.
źródło
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
źródło
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
źródło
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.
źródło
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
źródło