Könnte jemand bitte anhand von Beispielen den Unterschied zwischen monolithischem und Mikrokern erklären? Auch andere Klassifikationen des Kernels?
Könnte jemand bitte anhand von Beispielen den Unterschied zwischen monolithischem und Mikrokern erklären? Auch andere Klassifikationen des Kernels?
Antworten:
Der monolithische 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 Kerneldienste sind vorhanden und werden im Kerneladressraum ausgeführt. Der Kernel kann Funktionen direkt aufrufen. Beispiele für monolithische Kernel-basierte Betriebssysteme: Unix, Linux.
In Mikrokernen wird der Kernel in separate Prozesse unterteilt, die als Server bezeichnet werden. Einige der Server werden im Kernelbereich und andere im Benutzerbereich ausgeführt. Alle Server werden getrennt gehalten und in unterschiedlichen Adressräumen ausgeführt. Server rufen "Dienste" voneinander auf, indem sie Nachrichten über IPC (Interprocess Communication) senden. Diese Trennung hat den Vorteil, dass bei einem Ausfall eines Servers andere Server weiterhin effizient arbeiten können. Beispiele für Mikrokernel-basierte Betriebssysteme: Mac OS X und Windows NT.
Das monolithische Kernel-Design ist viel älter als die Mikrokernel-Idee, die Ende der 1980er Jahre aufkam.
Unix- und Linux-Kernel sind monolithisch, während QNX, L4 und Hurd Mikrokerne sind. Mach war ursprünglich ein Mikrokernel (nicht Mac OS X), wurde aber später in einen Hybridkernel umgewandelt. Minix (vor Version 3) war kein reiner Mikrokernel, da Gerätetreiber als Teil des Kernels kompiliert wurden.
Monolithische Kernel sind normalerweise schneller als Mikrokerne. Der erste Mikrokernel Mach war 50% langsamer als die meisten monolithischen Kernel, während spätere wie L4 nur 2% oder 4% langsamer als die monolithischen Designs waren.
Monolithische Kernel sind groß, während Mikrokerne klein sind - sie passen normalerweise in den L1-Cache des Prozessors (Mikrokerne der ersten Generation).
In monolithischen Kerneln befinden sich die Gerätetreiber im Kernelbereich, während sich in den Mikrokernen die Gerätetreiber im Benutzerbereich befinden.
Da sich die Gerätetreiber monolithischer Kernel im Kernelbereich befinden, sind monolithische Kernel weniger sicher als Mikrokernel, und Fehler (Ausnahmen) in den Treibern können zu Abstürzen führen (in Windows als BSODs angezeigt). Mikrokerne sind sicherer als monolithische Kernel und werden daher häufiger in militärischen Geräten verwendet.
Monolithische Kernel verwenden Signale und Sockets, um die Interprozesskommunikation (IPC) zu implementieren. Mikrokerne verwenden Nachrichtenwarteschlangen. Mikrokerne der 1. Generation haben IPC nicht gut implementiert und waren bei Kontextwechseln langsam - das hat ihre schlechte Leistung verursacht.
Wenn Sie einem monolithischen System ein neues Feature hinzufügen, müssen Sie den gesamten Kernel oder das entsprechende Kernelmodul (für modulare monolithische Kernel) neu kompilieren, während Sie mit Mikrokernen neue Features oder Patches hinzufügen können, ohne sie neu zu kompilieren.
Monolithischer Kernel
Alle Teile eines Kernels wie Scheduler, Dateisystem, Speicherverwaltung, Netzwerkstapel, Gerätetreiber usw. werden in einer Einheit innerhalb des Kernels im monolithischen Kernel verwaltet
Vorteile
• Schnellere Verarbeitung
Nachteile
• Crash Insecure • Porting Inflexibility • Explosion der Kernelgröße
Beispiele • MS-DOS, Unix, Linux
Mikrokernel
Nur die sehr wichtigen Teile wie IPC (Inter Process Communication), grundlegender Scheduler, grundlegende Speicherbehandlung, grundlegende E / A-Grundelemente usw. werden in den Kernel eingefügt. Die Kommunikation erfolgt über die Nachrichtenübermittlung. Andere werden als Serverprozesse im User Space verwaltet
Vorteile
• Absturzsicher, tragbar, kleiner
Nachteile
• Langsamere Verarbeitung aufgrund zusätzlicher Nachrichtenübermittlung
Beispiele • Windows NT
1. Monolithischer Kern (Pure Monolithic):all
Alle Kerneldienste aus einer Komponente
(-) Hinzufügen / Entfernen ist nicht möglich, weniger / Null flexibel
(+) Kommunikation zwischen Komponenten ist besser
zB: - Traditionelles Unix
2.Micro Kernel:few
wenige Dienste (Speicherverwaltung, CPU-Verwaltung, IPC usw.) vom Kernel, andere Dienste (Dateiverwaltung, E / A-Verwaltung usw.) von verschiedenen Schichten / Komponenten
Split Approach [Einige Dienste befinden sich im privilegierten (Kernel) Modus und andere im normalen (Benutzer) Modus.]
(+) flexibel für Änderungen / Upgrades
(-) Kommunikationsaufwand
zB: - QNX etc.
3. Modularer Kernel (Modular Monolithic):most
Kombination von Mikro- und monolithischem Kernel
Sammlung von Modulen - Module können sein -> Statisch + Dynamisch
Treiber kommen in Form von Modulen
zB: - Linux Modern OS
Im Spektrum der Kernel-Designs sind die beiden Extrempunkte monolithische Kernel und Mikrokerne.
Der (klassische) Linux-Kernel ist zum Beispiel ein monolithischer Kernel (und so ist auch jedes kommerzielle Betriebssystem bis heute - obwohl sie etwas anderes behaupten könnten);
Insofern ist sein Code eine einzelne C-Datei, die zu einem einzelnen Prozess führt, der alle oben genannten Dienste implementiert.
Um die Kapselung des Linux-Kernels zu veranschaulichen, stellen wir fest, dass der Linux-Kernel nicht einmal Zugriff auf eine der Standard-C-Bibliotheken hat. In der Tat kann der Linux-Kernel keine rudimentären C-Bibliotheksfunktionen wie printf verwenden. Stattdessen implementiert es eine eigene Druckfunktion (Drucke genannt).
Diese Abgeschiedenheit des Linux-Kernels und die Selbstbeherrschung bieten dem Linux-Kernel seinen Hauptvorteil: Der Kernel befindet sich in einem einzigen Adressraum1, sodass alle Funktionen so schnell wie möglich kommunizieren können, ohne auf irgendeine Art von Nachrichtenübermittlung zurückgreifen zu müssen. Insbesondere implementiert ein monolithischer Kernel alle Gerätetreiber des Systems.
Dies ist jedoch der Hauptnachteil eines monolithischen Kernels: Die Einführung neuer nicht unterstützter Hardware erfordert ein Umschreiben des Kernels (in den relevanten Teilen), eine Neukompilierung und eine Neuinstallation des gesamten Betriebssystems.
Noch wichtiger ist, dass bei einem Absturz eines Gerätetreibers der gesamte Kernel darunter leidet. Dieser nicht modulare Ansatz für Hardware-Ergänzungen und Hardware-Abstürze ist das Hauptargument für die Unterstützung des anderen extremen Design-Ansatzes für Kernel. Ein Mikrokernel ist in gewisser Weise ein minimalistischer Kernel, der nur die grundlegenden Betriebssystemdienste (wie Prozessmanagement und Dateisystemmanagement) enthält. In einem Mikrokernel liegen die Gerätetreiber außerhalb des Kernels, sodass Gerätetreiber hinzugefügt und entfernt werden können, während das Betriebssystem ausgeführt wird, und keine Änderungen des Kernels erforderlich sind.
Der monolithische Kernel verfügt über alle Kernel-Services zusammen mit dem Kernel-Kernteil, ist daher schwer und wirkt sich negativ auf Geschwindigkeit und Leistung aus. Auf der anderen Seite ist der Mikrokern leicht und führt zu einer Steigerung der Leistung und Geschwindigkeit.
Ich habe die gleiche Frage auf WordPress beantwortet. Den Unterschied zwischen Monolith, Mikrokernel und Exokernel in tabellarischer Form finden Sie hier