it-swarm.com.de

Warum heißt Linux ein monolithischer Kernel?

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

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

189
Boolean

Ein monolithischer Kernel ist ein Kernel, bei dem alle Dienste (Dateisystem, VFS, Gerätetreiber usw.) sowie die Kernfunktionalität (Zeitplanung, Speicherzuweisung usw.) eine engmaschige Gruppe bilden, die sich denselben Speicherplatz teilen. Dies widerspricht direkt einem Mikrokernel.

Ein Mikrokernel bevorzugt einen Ansatz, bei dem die Kernfunktionalität von Systemdiensten und Gerätetreibern (bei denen es sich im Grunde nur um Systemdienste handelt) isoliert ist. Beispielsweise sind VFS virtuelles Dateisystem) und Blockgeräte-Dateisysteme (d. H. Minixfs) separate Prozesse, die außerhalb des Kernel-Space ausgeführt werden und IPC für die Kommunikation mit dem Kernel, anderen Diensten und Benutzerprozessen verwenden. Kurz gesagt, wenn es sich bei Linux um ein Modul handelt, handelt es sich um einen Dienst in einem Mikrokernel, der auf einen isolierten Prozess hinweist.

Verwechseln Sie den Begriff modular Kernel nicht mit etwas anderem als Monolithischem. Einige monolithische Kernel können modular kompiliert werden (z. B. Linux). Wichtig ist, dass das Modul in denselben Bereich eingefügt wird und von demselben Bereich ausgeführt wird, der die Kernfunktionalität verwaltet (Kernelbereich).

Der Vorteil eines Mikrokerns besteht darin, dass ein fehlgeschlagener 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 als nicht so kritisch erscheinen lässt, da 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 Mikrokerns ist, dass asynchrones IPC Messaging sehr schwierig zu debuggen sein kann, insbesondere wenn --- (Fibrillen implementiert sind. Wenn Sie nur ein FS/Write-Problem aufspüren, müssen Sie den User-Space-Prozess, den Block-Device-Service, den VFS-Service, den Dateisystem-Service und (möglicherweise) den PCI-Service 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 mich nicht einmal mit Checkpointing befassen, 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, um auf einem bestimmten Design ausgeführt zu werden, 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, speziell in HelenOS .

Bearbeiten

Wenn Sie so weit durch meine sehr langatmige Antwort gekommen sind, werden Sie wahrscheinlich Spaß daran haben, das ' Große Torvalds-Tanenbaum-Debatte über das Kernel-Design ' zu lesen. 2013, mehr als 20 Jahre nach der Veröffentlichung, ist es noch lustiger zu lesen. Der lustigste Teil war Linus 'Unterschrift in einer der letzten Nachrichten:

Linus "my first, and hopefully last flamefest" Torvalds

Offensichtlich erfüllte sich dies nicht mehr als Tanenbaums Vorhersage, dass x86 bald überholt sein würde.

NB:

Wenn ich "Minix" sage, impliziere ich nicht Minix 3. Wenn ich außerdem The HURD erwähne, beziehe ich mich (hauptsächlich) auf den Mach-Mikrokernel. Es ist nicht meine Absicht, die jüngsten Arbeiten anderer zu verunglimpfen.

268
Tim Post

Hier ist meine kurze Antwort ... Finden Sie unter Bild. Sie erhalten eine klare Vorstellung von beiden Kerneltypen

enter image description here

21
Dhiral Pandya

Monolithischer Kernel bedeutet, dass das gesamte Betriebssystem im Kernelmodus ausgeführt wird (d. H. Von der Hardware stark privilegiert). Das heißt, kein Teil des Betriebssystems wird im Benutzermodus ausgeführt (niedrigere Berechtigung). Nur Anwendungen über 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.

13
CesarGon

Aus Wikipedia :

Ein monolithischer Kernel ist eine Kernel-Architektur, bei der das gesamte Betriebssystem im Kernel-Space und alleine als Supervisor-Modus arbeitet. Im Unterschied 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 sowie einen 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 Nanokerne und Exokerne als extremere Versionen von Mikrokernen angesehen werden).

8
Bob

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

Linux Module kann in gewissem Sinne modular bedeuten. Wie andere angemerkt haben, repräsentiert monolithisch normalerweise einen Mikrokernel versus monolithisch Kernel. Ein traditioneller Mikrokernel hat nur diese Eigenschaften,

  1. Scheduling
  2. Speicherverwaltung
  3. Prozessübergreifende Kommunikation

Es gibt keine Hardwaretreiber, Protokollstapel, Dateisysteme, Anhalten/Fortsetzen , Clock Management, etc im Hauptkernel. Diese Dinge sind für jede 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 freies GNU) OS ausführen

PC- und Server-Programmierer mögen lachen, aber zwei und drei gelten sicherlich für die Mehrheit der existierenden Handys. Tanenbaum wäre in jeder Hinsicht richtig, wenn BlackBerry QNX ein Erfolg wäre.

Außerdem haben viele L1-Hypervisoren einen Mikrokern darunter. Dies liegt daran, dass ein Hyper-Visier normalerweise nicht viel neben dem Kontext Schalter tut.

Anscheinend sagen drei den Erfolg von Linux voraus. ;-)


Ein Argument für Mikrokerne ist, dass alle monolithischen Subsysteme mehrere Werte gleichzeitig synchronisieren müssen. Zu diesem Zweck müssen sie Sperren verwenden und leiden unter Amdahls Gesetz , wenn sie auf parallele Architekturen erweitert werden. Der Zähler ist, dass Mikrokerne zu vielen IPC Nachrichten führen.

Eine wichtige Entwicklung ist die Verwendung von sperrenfreier Programmierung, um Konflikte in einem monolithischen Kernel zu vermeiden. Dies vermeidet das Sperren in einem monolithischen Kernel und reduziert gleichzeitig den IPC Overhead. In letzter Zeit haben alle CPUs ihre ISA um bessere Grundelemente für lock erweitert -frei Algorithmen. Linux wird also wahrscheinlich für einige Zeit ein monolithischer Kernel bleiben.

7
artless noise

"Monolithisch" bedeutet in diesem Zusammenhang nicht, dass es eine einzige große ausführbare Datei gibt, und wie Sie sagen, unterstützt Linux das dynamische Laden von Kernel-Modulen 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 Arten von Betriebssystemen, die einen Kerneltyp wie einen "Mikrokernel" verwenden, bei dem es sich nur um einen minimalen handelt Der Funktionsumfang 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, weitaus größere Probleme verursachen können als im Code für den Benutzerbereich (z. B. höhere Wahrscheinlichkeit von Sicherheitslücken oder Systemabstürzen in Form eines 'Kernel Panic'). Einige Mikrokerne sind so klein, dass sie "formal verifiziert" werden können, was bedeutet, dass Sie mathematisch nachweisen können, dass der Kernel gemäß einer Spezifikation "korrekt" ist. L4 ist ein gutes Beispiel dafür.

5
David Claridge

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. Beispiele für monolithische Kernel-basierte Betriebssysteme sind Linux und 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

2
JIN007