Warum wird Linux als monolithischer Kernel bezeichnet?


207

Ich habe gelesen, dass Linux ein monolithischer Kernel ist. Bedeutet monolithischer Kernel das Kompilieren und Verknüpfen des gesamten Kernelcodes zu einer ausführbaren Datei?

Wenn Linux Module unterstützen kann, warum nicht alle Subsysteme in Module aufteilen und bei Bedarf laden? In diesem Fall muss der Kernel zunächst nicht alle Module laden und kann einen Index der Funktionen im Modul verwalten und bei Bedarf laden.

Antworten:


289

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.


5
Interessanterweise wurde Linus Torvalds stark von Andew Tanenbaums MINIX beeinflusst, als er Linux entwickelte. MINIX basiert jedoch auf einem Mikrokernel-Design, während Linux einen monolithischen Kernel verwendet.
Martin Liversage

2
@ Martin Liversage: Frustrierter als beeinflusst :) Ich habe meine Antwort bearbeitet, um dies widerzuspiegeln.
Tim Post

25
@ DigitalRoss: Du solltest meinen Posteingang sehen, nachdem du darauf geantwortet hast. Linus ist im Vergleich zu Minix- und Mach-Enthusiasten zahm.
Tim Post


3
@p_l Ich denke, es ist ziemlich nahe an der Zeit, in der wir über die Unterschiede zwischen Mikro, Monolith und Hybrid sprechen müssen. Das könnte eine ziemlich gute Frage sein :)
Tim Post

15

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.


9
Windows ist definitiv ein monolithischer Kernel.
Adam Rosenfield

7
@ Adam: Ich bin anderer Meinung. Das 16-Bit-Windows im alten Stil war ein monolithischer Kernel, ebenso wie Windows 95 und dergleichen. NT-basierte Windows-Editionen, einschließlich aller Serverversionen plus Vista und 7, sind jedoch eindeutig Mikrokernel oder möglicherweise Hybrid, je nachdem, welche Definition von "Mikrokernel" Sie verwenden.
CesarGon

8
Nur weil die Druckertreiber nicht in ring0 ausgeführt werden, ist dies kein Mikrokernel :)
Café

7
@caf: Ich schlage vor, Sie werfen einen Blick auf en.wikipedia.org/wiki/Windows_NT_kernel und en.wikipedia.org/wiki/Comparison_of_operating_system_kernels . Sie werden sehen, dass Windows NT und seine Nachfolger, einschließlich Vista, 7 und der Server, als "Hybridkernel" beschrieben werden. Zwei große Subsysteme des Betriebssystems werden vollständig im Benutzermodus ausgeführt, nicht nur ein Druckertreiber. :-)
CesarGon

7
Mein Kommentar war etwas frech - die Bezeichnung "Hybrid" scheint so informationsfrei zu sein, dass sie nutzlos ist.
Café

10

; tl-dr - Nein, Linux ist immer monolithisch.

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:

  1. Planung
  2. Speicherverwaltung
  3. Kommunikation zwischen Prozessen

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

  1. Mikrokerne sind die Zukunft
  2. x86 wird aussterben und RISC-Architekturen werden den Markt dominieren
  3. (In 5 Jahren) wird jeder ein kostenloses GNU-Betriebssystem verwenden

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.


1
Ja, ich weiß, Tanenbaum meinte Hurd. Aber GNU wechselte zu Linux, so dass der Wortlaut lustig ist.
Kunstloser Lärm

Warum wird x86 für mobile Geräte nicht verwendet? Was macht die anderen Architekturen vorteilhaft?
Abdul


Ja, das ist wichtig. Es ist schwierig, einen x86-SOC (System-on-Chip) herzustellen. Es gibt keinen Standard-HDL-Code für einen x86, den ein SOC-Anbieter (Broadcom, Freescale usw.) kaufen kann.
Kunstloser Lärm

9

Aus Wikipedia :

Ein monolithischer Kernel ist eine Kernelarchitektur, bei der das gesamte Betriebssystem im Kernelbereich und allein als Supervisor-Modus arbeitet. Im Gegensatz zu anderen Architekturen definiert der monolithische Kernel allein eine virtuelle Schnittstelle auf hoher Ebene über Computerhardware mit einer Reihe von Grundelementen oder Systemaufrufen, um alle Betriebssystemdienste wie Prozessverwaltung, Parallelität und Speicherverwaltung selbst und eine oder mehrere zu implementieren Gerätetreiber als Module.

Neuere Windows-Versionen verwenden dagegen einen Hybrid-Kernel .

Ein Hybridkernel ist eine Kernelarchitektur, die auf der Kombination von Aspekten von Mikrokernel- und monolithischen Kernelarchitekturen basiert, die in Computerbetriebssystemen verwendet werden. Die Kategorie ist aufgrund der Ähnlichkeit mit dem monolithischen Kernel umstritten. Der Begriff wurde von einigen als einfaches Marketing abgetan. Die traditionellen Kernelkategorien sind monolithische Kernel und Mikrokerne (wobei Nanokernel und Exokernel als extremere Versionen von Mikrokernen angesehen werden).


7
Wenn ich jemals etwas im Kernelraum mache, muss ich daran denken, irgendwo "hybric kerkel" zu verwenden. SCNR ;-)
Jürgen A. Erhard

1
Windows NT war immer ein Hybridsystem. Der Kernel ist möglicherweise nicht gerade hybride, aber Sie haben die Frage, was Sie als Teil davon zählen (Winapi ist beispielsweise als User-Space-Dienst implementiert)
p_l

5

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


Überprüfen Sie Ihre Quellen. Die Wikipage ist nicht zitiert. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
monksy

2

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


Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Scott
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.