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.
Jądro monolityczne oznacza, że cały system operacyjny działa w trybie jądra (tj. Jest bardzo uprzywilejowany przez sprzęt). Oznacza to, że żadna część systemu operacyjnego nie działa w trybie użytkownika (niższe uprawnienia). Tylko aplikacje na systemie operacyjnym działają w trybie użytkownika.
W niemonolitycznych systemach operacyjnych jądra, takich jak Windows, duża część samego systemu operacyjnego działa w trybie użytkownika.
W obu przypadkach system operacyjny może być wysoce modułowy.
źródło
Moduły Linux mogą w pewnym sensie oznaczać modułowe . Jak zauważyli inni, monolit jest zwykle reprezentujący mikrojądro w porównaniu do monolitycznego jądra. Tradycyjne mikrojądro ma tylko te funkcje,
W głównym jądrze nie ma sterowników sprzętowych , stosów protokołów , systemów plików , zawieszenia / wznowienia , zarządzania zegarem itp. Te rzeczy są identyczne z każdym zadaniem użytkownika (chociaż mogą mieć różne uprawnienia za pośrednictwem MMU / harmonogramu).
Prognozy Tanenbauma
Programiści komputerów i serwerów mogą się śmiać, ale dwa i trzy są z pewnością prawdziwe dla większości istniejących telefonów komórkowych. Tanenbaum miałby rację na wszystkich kontach, gdyby BlackBerry QNX odniósł sukces.
Ponadto wiele hiperwizorów L1 ma pod spodem mikro-jądro . Wynika to z faktu, że hiperwizor zwykle nie robi wiele poza przełączaniem kontekstu .
Najwyraźniej trzy przewidują sukces Linuksa. ;-)
Argumentem za mikrojądrami jest to, że wszystkie monolityczne podsystemy muszą synchronizować wiele wartości jednocześnie. Aby to zrobić, muszą używać zamków i będą podlegać prawu Amdahla, gdy zostaną rozszerzone na architektury równoległe. Licznik jest taki, że mikrojądra powodują wiele komunikatów IPC.
Istotnym osiągnięciem jest zastosowanie programowania bez blokady, aby uniknąć rywalizacji w monolitycznym jądrze. Pozwala to uniknąć blokowania w monolitycznym jądrze, jednocześnie zmniejszając narzut IPC. Ostatnio wszystkie procesory rozszerzają swój ISA o lepsze prymitywy dla algorytmów bez blokady . Więc Linux prawdopodobnie pozostanie przez jakiś czas monolitycznym jądrem.
źródło
Z Wikipedii :
Natomiast najnowsze wersje systemu Windows używają jądra hybrydowego .
źródło
„Monolityczny” w tym kontekście nie odnosi się do istnienia pojedynczego dużego pliku wykonywalnego i, jak mówisz, Linux obsługuje dynamiczne ładowanie modułów jądra w czasie wykonywania. Mówiąc o jądrach, „monolityczny” oznacza, że cały system operacyjny działa w trybie „uprzywilejowanym” lub „nadzorczym”, w przeciwieństwie do innych rodzajów systemów operacyjnych, które wykorzystują rodzaj jądra, taki jak „mikrojądro”, w którym tylko minimalna zestaw funkcji działa w trybie uprzywilejowanym, a większość systemu operacyjnego działa w przestrzeni użytkownika.
Zwolennicy mikrojądra twierdzą, że jest to lepsze, ponieważ mniejszy kod oznacza mniej błędów, a błędy działające w trybie superwizora mogą powodować znacznie większe problemy niż w kodzie przestrzeni użytkownika (takie jak większa szansa na luki w zabezpieczeniach lub całkowite awarie systemu w postaci „panika jądra”). Niektóre mikrojądra są wystarczająco minimalne, aby można je było „formalnie zweryfikować”, co oznacza, że można matematycznie udowodnić, że jądro jest „prawidłowe” zgodnie ze specyfikacją. L4 jest tego dobrym przykładem.
źródło
Jądro monolityczne jest pojedynczym dużym procesem działającym całkowicie w jednej przestrzeni adresowej. Jest to pojedynczy statyczny plik binarny. Wszystkie usługi jądra istnieją i działają w przestrzeni adresowej jądra. Jądro może bezpośrednio wywoływać funkcje. Przykładami systemów monolitycznych opartych na jądrze są Linux, Unix.
Myślę, że ten post pomoże ci lepiej zrozumieć tę koncepcję.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html
źródło