GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie unterscheidet sich der Linux-Kernel von Mikrokernel-Architekturen?

Mikrokerne erfordern weniger Code, um im innersten, vertrauenswürdigsten Modus ausgeführt zu werden, als monolithische Kernel. Dies hat viele Aspekte, wie zum Beispiel:

  • Mikrokerne ermöglichen das beliebige Laden und Entladen nicht grundlegender Funktionen (z. B. Treiber für Hardware, die nicht angeschlossen oder nicht verwendet wird). Dies ist unter Linux meistens durch Module erreichbar.
  • Mikrokerne sind robuster:Wenn eine Nicht-Kernel-Komponente abstürzt, wird nicht das gesamte System mitgenommen. Ein fehlerhaftes Dateisystem oder ein fehlerhafter Gerätetreiber kann ein Linux-System zum Absturz bringen. Linux hat keine Möglichkeit, diese Probleme zu mindern, außer Programmierpraktiken und Tests.
  • Mikrokerne haben eine kleinere vertrauenswürdige Rechenbasis. Daher kann nicht einmal ein bösartiger Gerätetreiber oder Dateisystem die Kontrolle über das gesamte System übernehmen (z. B. könnte ein Treiber zweifelhafter Herkunft für Ihr neuestes USB-Gerät Ihre Festplatte nicht lesen).
  • Eine Konsequenz aus dem vorherigen Punkt ist, dass normale Benutzer ihre eigenen Komponenten laden können, die Kernelkomponenten in einem monolithischen Kernel wären.

Unix-GUIs werden über X-Window bereitgestellt, das Userland-Code ist (mit Ausnahme (eines Teils) des Videogerätetreibers). Viele moderne Unices ermöglichen es normalen Benutzern, Dateisystemtreiber über FUSE zu laden. Ein Teil der Linux-Netzwerkpaketfilterung kann im Userland durchgeführt werden. Gerätetreiber, Scheduler, Speichermanager und die meisten Netzwerkprotokolle sind jedoch immer noch Kernel-only.

Eine klassische (wenn auch veraltete) Lektüre über Linux und Mikrokernel ist die Tanenbaum-Torvalds-Debatte. Zwanzig Jahre später könnte man sagen, dass sich Linux sehr, sehr langsam in Richtung einer Mikrokernel-Struktur bewegt (ladbare Module erschienen früh, FUSE ist jünger), aber es ist noch ein langer Weg zu gehen.

Eine andere Sache, die sich geändert hat, ist die gestiegene Relevanz der Virtualisierung auf Desktop- und High-End-Embedded-Computern:Für einige Zwecke ist die relevante Unterscheidung nicht zwischen Kernel und Userland, sondern zwischen Hypervisor und den Gastbetriebssystemen.


Ein Mikrokernel begrenzt die Zeit, in der sich das System im Kernelmodus befindet, im Gegensatz zum Userspace, auf das absolut mögliche Minimum.

Wenn im Kernel-Modus ein Absturz auftritt, geht der gesamte Kernel und damit das gesamte System aus. Wenn im Benutzermodus ein Absturz auftritt, wird nur dieser Prozess unterbrochen. Linux ist in dieser Hinsicht robust, aber es ist immer noch möglich, dass jedes Kernel-Subsystem absichtlich oder versehentlich den Speicher eines anderen Kernel-Subsystems überschreibt.

Das Mikrokernel-Konzept bringt viele Dinge, die traditionell Kernel-Modus sind, wie Netzwerk- und Gerätetreiber, in den Benutzerbereich. Da der Mikrokernel nicht wirklich für vieles verantwortlich ist, bedeutet dies auch, dass er einfacher und zuverlässiger sein kann. Stellen Sie sich vor, wie das IP-Protokoll, indem es einfach und dumm ist, wirklich zu robusten Netzwerken führt, indem es die Komplexität an die Ränder verlagert und den Kern schlank und gemein lässt.


Sie sollten die andere Seite des Problems lesen:

Extreme High Performance Computing oder Warum Mikrokerne scheiße sind

Das Dateisystem gehört in den Kernel


Linux
  1. So aktualisieren Sie den Kernel auf dem Linux-Desktop

  2. Linux – Wie lädt man ein Kernel-Modul richtig neu?

  3. Linux – Wie unterscheidet sich der Linux-Kernel von Mikrokernel-Architekturen?

  4. Wie funktioniert copy_from_user aus dem Linux-Kernel intern?

  5. Wie bestimmt der Linux-Kernel die Reihenfolge der __init-Aufrufe?

So vergleichen Sie Verzeichnisse mit Meld unter Linux

So vergleichen Sie zwei Dateien im Linux-Terminal

So erstellen Sie einen Linux-Kernel von Grund auf neu

Wie funktioniert Swap-Speicher in Linux?

Wie führt Docker einen Linux-Kernel unter einem macOS-Host aus?

Wie lädt Linux das 'initrd'-Image?