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.
Monolithischer Kernel bedeutet, dass das gesamte Betriebssystem im Kernelmodus ausgeführt wird (dh von der Hardware stark privilegiert wird). Das heißt, kein Teil des Betriebssystems wird im Benutzermodus ausgeführt (niedrigere Berechtigung). Nur Anwendungen auf dem Betriebssystem werden im Benutzermodus ausgeführt.
In nicht monolithischen Kernel-Betriebssystemen wie Windows wird ein großer Teil des Betriebssystems selbst im Benutzermodus ausgeführt.
In beiden Fällen kann das Betriebssystem sehr modular sein.
quelle
Linux- Module können in gewissem Sinne modular sein . Wie andere angemerkt haben, repräsentiert monolithisch normalerweise einen Mikrokern gegenüber einem monolithischen Kernel. Ein traditioneller Mikrokernel hat nur diese Funktionen:
Es gibt keine Hardwaretreiber , Protokollstapel , Dateisysteme , Suspend / Resume , Clock Management usw. im Hauptkernel. Diese Dinge sind mit jeder Benutzeraufgabe identisch (obwohl sie über die MMU / den Scheduler unterschiedliche Berechtigungen haben können).
Tanenbaums Vorhersagen
PC- und Server-Programmierer mögen lachen, aber zwei und drei gelten sicherlich für die Mehrheit der existierenden Handys. Tanenbaum hätte in jeder Hinsicht Recht, wenn BlackBerry QNX ein Erfolg wäre.
Außerdem haben viele L1-Hypervisoren einen Mikrokern darunter. Dies liegt daran, dass ein Hypervisier neben dem Kontextwechsel normalerweise nicht viel bewirkt .
Anscheinend sagen drei den Erfolg von Linux voraus. ;-);
Ein Argument für Mikrokerne ist, dass alle monolithischen Subsysteme mehrere Werte gleichzeitig synchronisieren müssen. Dazu müssen sie Schlösser verwenden und leiden unter dem Amdahlschen Gesetz, wenn sie auf parallele Architekturen ausgedehnt werden. Der Zähler ist, dass Mikrokerne zu vielen IPC-Nachrichten führen.
Eine wichtige Entwicklung ist die Verwendung der sperrenfreien Programmierung, um Konflikte in einem monolithischen Kernel zu vermeiden. Dies vermeidet das Sperren in einem monolithischen Kernel und reduziert gleichzeitig den IPC-Overhead. Vor kurzem haben alle CPUs ihre ISA um bessere Grundelemente für sperrfreie Algorithmen erweitert. Linux wird also wahrscheinlich noch einige Zeit ein monolithischer Kernel bleiben.
quelle
Aus Wikipedia :
Neuere Windows-Versionen verwenden dagegen einen Hybrid-Kernel .
quelle
'Monolithisch' bezieht sich in diesem Zusammenhang nicht auf eine einzige große ausführbare Datei, und wie Sie sagen, unterstützt Linux dort das dynamische Laden von Kernelmodulen zur Laufzeit. Wenn es um Kernel geht, bedeutet "monolithisch", dass das gesamte Betriebssystem im "privilegierten" oder "Supervisor" -Modus ausgeführt wird, im Gegensatz zu anderen Betriebssystemtypen, die einen Kerneltyp wie einen "Mikrokernel" verwenden, bei dem nur ein Minimum vorhanden ist Eine Reihe von Funktionen wird im privilegierten Modus ausgeführt, und der größte Teil des Betriebssystems wird im Benutzerbereich ausgeführt.
Befürworter von Mikrokernen sagen, dass dies besser ist, weil kleinerer Code weniger Fehler bedeutet und Fehler, die im Supervisor-Modus ausgeführt werden, viel größere Probleme verursachen können als im User-Space-Code (z. B. eine größere Wahrscheinlichkeit für Sicherheitslücken oder Systemabstürze in Form von a 'Kernel Panik'). Einige Mikrokerne sind so minimal, dass sie "formal verifiziert" werden können. Dies bedeutet, dass Sie mathematisch nachweisen können, dass der Kernel gemäß einer Spezifikation "korrekt" ist. L4 ist ein gutes Beispiel dafür.
quelle
Monolithischer Kernel ist ein einzelner großer Prozess, der vollständig in einem einzelnen Adressraum ausgeführt wird. Es ist eine einzelne statische Binärdatei. Alle Kernel-Services sind vorhanden und werden im Kernel-Adressraum ausgeführt. Der Kernel kann Funktionen direkt aufrufen. Die Beispiele für monolithische Kernel-basierte Betriebssysteme sind Linux, Unix.
Ich denke, dieser Beitrag wird Ihnen helfen, das Konzept besser zu verstehen.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html
quelle