Ein monolithischer Kernel ist ein Kernel, in dem alle Dienste (Dateisystem, VFS, Gerätetreiber usw.) sowie die Kernfunktionen (Zeitplanung, Speicherzuweisung usw.) eine eng verbundene Gruppe sind, die denselben Speicherplatz gemeinsam nutzen. Dies steht einem Mikrokern direkt gegenüber .
Ein Mikrokernel bevorzugt einen Ansatz, bei dem die Kernfunktionalität von Systemdiensten und Gerätetreibern (die im Grunde nur Systemdienste sind) isoliert ist. Beispielsweise sind VFS (Virtual File System) und Block Device File Systems (dh Minixfs) separate Prozesse, die außerhalb des Kernelbereichs ausgeführt werden und IPC zur Kommunikation mit dem Kernel, anderen Diensten und Benutzerprozessen verwenden. Kurz gesagt, wenn es sich um ein Modul unter Linux handelt, handelt es sich um einen Dienst in einem Mikrokernel, der auf einen isolierten Prozess hinweist.
Verwechseln Sie den Begriff des modularen Kernels nicht als alles andere als monolithisch. Einige monolithische Kernel können modular kompiliert werden (z. B. Linux). Entscheidend ist, dass das Modul in denselben Bereich eingefügt wird und von diesem ausgeführt wird, der die Kernfunktionalität verwaltet (Kernelbereich).
Der Vorteil eines Mikrokernels besteht darin, dass jeder ausgefallene Dienst leicht neu gestartet werden kann. Beispielsweise gibt es keinen Kernelstopp, wenn das Root-Dateisystem einen Abbruch auslöst. Dies kann jedoch auch als Nachteil angesehen werden, da es ziemlich kritische Fehler verbergen kann (oder sie nicht so kritisch erscheinen lässt, weil sich das Problem ständig von selbst zu beheben scheint). Dies wird als großer Vorteil in Szenarien angesehen, in denen Sie etwas nach der Bereitstellung einfach nicht bequem reparieren können.
Der Nachteil eines Mikrokernels besteht darin, dass das Debuggen von asynchronem IPC-Messaging sehr schwierig werden kann, insbesondere wenn Fibrillen implementiert sind. Darüber hinaus bedeutet das Aufspüren eines FS / Write-Problems, den User Space-Prozess, den Block Device Service, den VFS Service, den Dateisystem Service und (möglicherweise) den PCI Service zu untersuchen. Wenn Sie ein Leerzeichen erhalten, ist es Zeit, sich den IPC-Dienst anzusehen. Dies ist in einem monolithischen Kernel oft einfacher. GNU Hurd leidet unter diesen Debugging-Problemen ( Referenz ). Ich werde nicht einmal auf Checkpointing eingehen, wenn es um komplexe Nachrichtenwarteschlangen geht. Mikrokerne sind nichts für schwache Nerven.
Der kürzeste Weg zu einem funktionierenden, stabilen Kernel ist der monolithische Ansatz. Jeder Ansatz kann eine POSIX-Schnittstelle bieten, bei der das Design des Kernels für jemanden, der einfach nur Code schreiben möchte, der auf einem bestimmten Design ausgeführt werden soll, von geringem Interesse ist.
Ich benutze Linux (monolithisch) in der Produktion. Der größte Teil meines Lernens, Hackens oder Bastelns mit der Kernel-Entwicklung geht jedoch in einen Mikrokernel, insbesondere in HelenOS .
Bearbeiten
Wenn Sie meine sehr langatmige Antwort so weit gebracht haben, werden Sie wahrscheinlich Spaß daran haben, die ' Great Torvalds-Tanenbaum-Debatte über das Kernel-Design ' zu lesen . Es ist noch lustiger, 2013 zu lesen, mehr als 20 Jahre nachdem es passiert ist. Der lustigste Teil war Linus 'Unterschrift in einer der letzten Nachrichten:
Linus "my first, and hopefully last flamefest" Torvalds
Offensichtlich wurde dies nicht mehr wahr als Tanenbaums Vorhersage, dass x86 bald veraltet sein würde.
NB:
Wenn ich "Minix" sage, impliziere ich nicht Minix 3. Wenn ich The HURD erwähne, beziehe ich mich (meistens) auf den Mach-Mikrokernel. Es ist nicht meine Absicht, die jüngste Arbeit anderer herabzusetzen.