Jaka jest różnica między jądrem monolitycznym a mikro?

Odpowiedzi:

114

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.

sariful islam
źródło
36
zarówno Mac OS X, jak i Windows są jądrem hybrydowym, ponieważ jest bardziej spokrewniony z jądrem monolitycznym. przykłady mikro-jąder to: Mach QNX AmigaOS Minix
zeitue
7
GNU Hurd to świetny przykład systemu operacyjnego działającego na mikrojądrze. Nadal jest w fazie rozwoju, a niektóre popularne dystrybucje Linuksa mają port Hurd (Debian / Hurd, Arch Hurd itp.).
beatgammit
78
  1. Projekt jądra monolitycznego jest znacznie starszy niż idea mikrojądra, która pojawiła się pod koniec lat 80-tych.

  2. 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.

  3. 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.

  4. 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).

  5. 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.

  6. 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.

  7. 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ść.

  8. 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.

simplePerson43
źródło
1
wspominając o MINIX, którą wersję masz na myśli? Trzecia wersja ma oddzielone sterowniki urządzeń i system plików od jądra .
orustammanapov
Około 8. Czy to oznacza, że ​​kiedy instalujesz program w Linuksie, cały plik binarny jądra jest rekompilowany? Gdzie jest ten plik binarny jądra? Dzięki.
Nikos
@ Nik-Lz: Nie program, ale funkcje. Programy zwykle działają w przestrzeni użytkownika. Jeśli chcesz wykonać kod w przestrzeni jądra, masz dwie możliwości: wbudować go w jądro lub załadować za pomocą modułu jądra. ref
bayuah
26

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
14

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

Naman Vaishnav
źródło
1

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.

TheLogicGuy
źródło
-2

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

Yogesh Jilhawar
źródło