Was ist der Unterschied zwischen monolithischem und Mikrokernel?


114

Könnte jemand bitte anhand von Beispielen den Unterschied zwischen monolithischem und Mikrokern erklären? Auch andere Klassifikationen des Kernels?



2
Ich würde auch die Wikipedia-Seiten empfehlen
David Heffernan

Eine weitere nützliche Frage - stackoverflow.com/questions/1806585/…
Aniket Thakur

Antworten:


113

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.


35
Sowohl Mac OS X als auch Windows sind Hybrid-Kernel, da sie enger mit einem monolithischen Kernel verwandt sind. Beispiele für Mikrokerne wären: Mach QNX AmigaOS Minix
Zeitue

7
GNU Hurd ist ein großartiges Beispiel für ein Betriebssystem, das auf einem Mikrokernel ausgeführt wird. Es befindet sich noch in der aktiven Entwicklung und einige beliebte Linux-Distributionen haben einen Hurd-Port (Debian / Hurd, Arch Hurd usw.).
Beatgammit

76
  1. Das monolithische Kernel-Design ist viel älter als die Mikrokernel-Idee, die Ende der 1980er Jahre aufkam.

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

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

  4. Monolithische Kernel sind groß, während Mikrokerne klein sind - sie passen normalerweise in den L1-Cache des Prozessors (Mikrokerne der ersten Generation).

  5. In monolithischen Kerneln befinden sich die Gerätetreiber im Kernelbereich, während sich in den Mikrokernen die Gerätetreiber im Benutzerbereich befinden.

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

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

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


1
mit MINIX welche Version meinst du? Die dritte Version hat Gerätetreiber und Dateisystem vom Kernel getrennt .
Orustammanapov

Über 8. Bedeutet das, dass bei der Installation eines Programms unter Linux die gesamte Kernel-Binärdatei neu kompiliert wird? Auch wo ist dieser Kernel binär? Vielen Dank.
Nikos

@ Nik-Lz: Nicht Programm, aber Funktionen. Programme werden normalerweise im Benutzerbereich ausgeführt. Wenn Sie Code im Kernelbereich ausführen möchten, haben Sie zwei Möglichkeiten: Bauen Sie ihn in den Kernel ein oder laden Sie ihn mit einem Kernelmodul. Ref
Bayuah

25

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


14

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


1

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.


-1

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.