close

Kernel

Zur Navigation springen Zur Suche springen
Image
Abstraktion von Software zu Hardware über den Kernel

Ein Kernel (englische Aussprache in IPA : [ˈkəːnəl] ) stellt in der Informatik den Kern oder das Herz eines Betriebssystems dar , dh die Software , die einen sicheren und kontrollierten Zugriff der Hardware auf die auf dem Computer ablaufenden Prozesse bereitstellt [1] . Da möglicherweise mehrere gleichzeitig laufen, kann der Kernel auch dafür verantwortlich sein, jedem Programm einen Teil der Maschinenzeit ( Scheduling ) und des Hardwarezugriffs zuzuweisen (Multitasking ) [2] .

Beschreibung

Ein Kernel ist nicht unbedingt erforderlich, um einen Computer zu betreiben. Programme können zwar direkt auf die Maschine geladen und ausgeführt werden, sofern deren Entwickler es für notwendig erachten, auf die Unterstützung des Betriebssystems zu verzichten.

Dies war die typische Arbeitsweise der ersten Computer, die vor dem Ausführen eines neuen Programms zurückgesetzt wurden. Später wurden einige Zusatzprogramme wie Programmlader und Debugger aus einem Nur-Lese-Speicher gestartet oder während der Übergänge des Computers von einer Anwendung zur anderen im Speicher abgelegt : Sie bildeten de facto die Grundlage für die Erstellung der ersten Betriebssysteme .

Eine andere Situation, in der das Fehlen eines Betriebssystems wünschenswert ist, ist das Beispiel minimalistischer Mikrocontroller.

Der direkte Zugriff auf den Kernel durch einen Benutzer / Administrator kann im Benutzermodus oder im Kernelmodus erfolgen .

Klassifizierung

Image
Vergleich zwischen den verschiedenen Kerneln

Der direkte Zugriff auf Hardware kann ebenfalls sehr komplex sein, daher implementieren Kernel normalerweise eine oder mehrere Arten von Hardware-Abstraktion, den sogenannten Hardware - Abstraktions-Layer ( HAL ). Diese Abstraktionen dienen dazu, die Komplexität zu "verstecken" und bieten eine saubere und einheitliche Schnittstelle zur zugrunde liegenden Hardware, um Entwicklern die Arbeit zu erleichtern.

Kernel können basierend auf dem Grad der Hardware-Abstraktion in vier Kategorien eingeteilt werden:

  • Monolithische Kernel , die direkt eine vollständige Abstraktion der zugrunde liegenden Hardware implementieren.
  • Mikrokerne , die einen schmalen und einfachen Satz an Hardwareabstraktion bereitstellen und Software (sogenannte Gerätetreiber oder Server ) verwenden, um mehr Funktionalität bereitzustellen.
  • Hybride Kernel (oder modifizierte Microkernels ), die sich von reinen Microkernels durch die Implementierung einiger Zusatzfunktionen zur Leistungssteigerung unterscheiden.
  • Esokernel , die alle Einschränkungen im Zusammenhang mit der Hardwareabstraktion aufheben und sich darauf beschränken, den gleichzeitigen Zugriff darauf zu garantieren, sodass einzelne Anwendungen die traditionellen Abstraktionen des Betriebssystems mithilfe spezieller Bibliotheken unabhängig implementieren können .

Monolithische Kerne vom Typ I

Image
Grafische Darstellung eines monolithischen Kernels

Der monolithische Ansatz definiert eine hochrangige virtuelle Schnittstelle auf Hardware und Software mit einer Reihe von Grundelementen oder Systemaufrufen zur Implementierung von Betriebssystemdiensten wie Prozessverwaltung , Multitasking und Speicherverwaltung in verschiedenen Modulen, die im Supervisor-Modus ausgeführt werden .

Obwohl jedes Modul, das diese Operationen bedient, von den anderen getrennt ist, ist die Code-Integration sehr eng und schwierig durchzuführen, und da alle Module im selben Bereich arbeiten, kann ein Fehler in einem von ihnen das gesamte System blockieren. Wenn die Implementierung jedoch vollständig und sicher ist, macht die enge interne Integration der Komponenten einen guten monolithischen Kernel äußerst effizient.

Der bemerkenswerteste Nachteil monolithischer Kernel ist jedoch, dass es nicht möglich ist, ein neues Hardwaregerät hinzuzufügen, ohne sein Modul zum Kernel hinzuzufügen, was eine Neukompilierung des Kernels erfordert . Alternativ können Sie einen Kernel mit allen Hardware-Unterstützungsmodulen kompilieren, auf Kosten einer erheblichen Vergrößerung ihrer Größe. Die modernsten monolithischen Kernel wie der Linux-Kernel und FreeBSD können jedoch Module zur Laufzeit laden, wenn sie in der Konfigurationsphase vorgesehen sind (die Konfigurationsphase ist die Phase, die der Kompilierungsphase vorausgeht, in der Sie auswählen können, welche Funktionen oder Treiber verwendet werden sollen Teil des neuen Kernels sein), wodurch der Kernel bei Bedarf erweitert werden kann, während die Größe des Codes im Kernelraum auf einem Minimum gehalten wird.

Beispiele für monolithische Kerne:

  • Herkömmliche UNIX -Kernel , wie BSD -Kernel .
  • Der Linux-Kernel .
  • Kernel wie AGNIX durchsuchen .

Mikrokernel

Image
Grafische Darstellung eines Mikrokernels

Der Mikrokernel - Ansatz besteht darin , einen Kernkern zu definieren , der ausschließlich eine Reihe von Grundelementen oder Systemaufrufen bereitstellt , um minimale Betriebssystemdienste wie Thread - Management , Adressräume oder Kommunikation zwischen Prozessen zu implementieren . Auf diesen minimalen Kernel (daher das Präfix „micro“) werden einige Server eingefügt, dh separate Programme vom Kernel, die mit ihm über die oben genannten Systemaufrufe kommunizieren, um die verschiedenen Funktionen des Systems zu implementieren.

Das Hauptziel ist die Trennung der grundlegenden Dienstimplementierungen von den Betriebsstrukturen des Systems. Beispielsweise kann der Ein-/Ausgabe-Sperrprozess als Servermodul auf Benutzerebene implementiert werden. Diese Module auf Benutzerebene, die verwendet werden, um High-Level-Dienste für das System bereitzustellen, sind modular aufgebaut und vereinfachen die Struktur und das Design des Kernels. Ein Serverdienst, der nicht mehr funktioniert, führt nicht zum Absturz des gesamten Systems und kann unabhängig vom Rest neu gestartet werden.

Es gibt einige Arten von Mikrokernen, die nicht genau als solche definiert werden können, da sie einige Funktionen nicht in Form von Servern implementieren, obwohl sie andere Eigenschaften haben, die Mikrokerne definieren. Das bekannteste davon ist Exec , kurz für Executive Multitasking (und sein direkter Nachfolger ExecSG ), der der AmigaOS -Kernel ist .

Beispiele für Mikrokernel und Mikrokernel-basierte Betriebssysteme:

Image
AIX - Logo (Betriebssystem) , Betriebssystem, basierend auf Mikrokernel
Image
BeOS , ein weiteres Mikrokernel-basiertes Betriebssystem

Monolithische Kernel und Mikrokernel: Vergleich

Monolithische Kernel werden gegenüber Mikrokerneln häufig bevorzugt, da die Überprüfung der Steuercodes in einem Adressraum weniger komplex ist. So basiert XNU , der macOS -Kernel , auf einem Mach-3.0-Kernel und BSD-Komponenten im gleichen Adressraum, um die für Mikrokernel typischen Latenzzeiten zu reduzieren. XNU ist somit ein Hochleistungskernel, da er teilweise auf einer Hybridlösung basiert und auf keinen Fall als Mikrokernel betrachtet werden kann. In der offiziellen Apple-Dokumentation wird XNU eindeutig als Modular Monolithic Kernel bezeichnet.

Monolithische Kernel gelten seit Anfang der 1990er Jahre als obsolet. Der Linux -Kernel als monolithischer Kernel und nicht als Mikrokernel war eines der Themen des berühmten Glaubenskriegs zwischen Linus Torvalds (dem Schöpfer von Linux ) und Andrew Tanenbaum (berühmter Betriebssystemlehrer, Autor von Minix ) – weitere Einzelheiten sind auf der verfügbar Netz.

Gründe gibt es eigentlich auf beiden Seiten.

Monolithische Kernel sind in der Regel leichter korrekt zu entwerfen und können sich daher schneller entwickeln als ein Mikrokernel-basiertes System. Erfolgsgeschichten gibt es auf beiden Seiten. Mikrokerne werden häufig in eingebetteten Systemen in unternehmenskritischen Roboterautomatisierungen oder medizinischen Anwendungen verwendet, da sich Systemkomponenten in separaten, privaten und geschützten Speicherbereichen befinden. Dies ist mit monolithischen Kerneln nicht möglich, auch nicht mit modernen ladbaren Modulen.

Neben dem Mach-Kernel , dem bekanntesten Allzweck-Mikrokernel, wurden viele andere Mikrokernel für spezielle Zwecke entwickelt. Insbesondere Kernel L3 wurde entwickelt, um zu demonstrieren, dass Mikrokerne nicht unbedingt langsam sind. Die Mikrokernel der L4-Familie , Nachfolger von L3, haben eine Implementierung namens Fiasco , die den Linux-Kernel zusammen mit anderen L4-Prozessen in separaten Adressräumen ausführen kann.

QNX ist ein Betriebssystem, das seit Anfang der achtziger Jahre auf dem Markt ist und eine wirklich minimalistische Mikrokernel-Implementierung hat. Dieses System war beim Erreichen der Ziele des Mikrokernel-Paradigmas viel erfolgreicher als Mach. Es kommt dort zum Einsatz, wo die Software keine Fehler machen darf, zum Beispiel in den Roboterarmen des Space Shuttles oder in Maschinen, die Glas verarbeiten, wo schon ein kleiner Fehler Hunderttausende Euro kosten kann.

Hybridkerne

Image
Grafische Darstellung eines hybriden Kernels

Hybrid-Kernel sind im Wesentlichen Mikrokerne, die „nicht wesentlichen“ Code auf der Kernel-Space-Ebene haben, sodass dieser Code schneller ausgeführt werden kann, als wenn er auf einer höheren Ebene implementiert wäre. Dies war ein Kompromiss, der von vielen Betriebssystementwicklern angenommen wurde, bevor bewiesen wurde, dass reine Mikrokerne stattdessen eine hohe Leistung haben könnten. Viele moderne Betriebssysteme fallen in diese Kategorie – Microsoft Windows ist das bekannteste Beispiel. XNU , der Mac OS X-Kernel, ist aufgrund der Einbeziehung von BSD-Code in einen Mach-basierten Kernel auch effektiv ein modifizierter Mikrokernel. DragonFly BSD war das erste nicht-Mach-basierte BSD-System, das die hybride Kernel-Architektur übernahm.

Verwechseln Sie den Begriff „Hybrid-Kernel“ nicht mit monolithischen Kerneln, die Module nach dem Booten laden können, da „Hybrid“ impliziert, dass der betreffende Kernel architektonische Konzepte und Mechanismen teilt, die sowohl für monolithische als auch für Mikrokernel typisch sind, insbesondere die Weitergabe von Nachrichten und die Migration von Teilen von "unwesentlichem" Code auf eine höhere Ebene, wobei aus Leistungsgründen nur der Code auf Kernel-Ebene benötigt wird.

Beispiele für Hybridkerne:

Esokernel

Image
Grafische Darstellung eines Exokernels

Exokernels oder Exokernels, auch als „vertikale Betriebssysteme“ bekannt, sind ein radikal anderer Ansatz für das Design von Betriebssystemen. Kerngedanke ist die „Trennung der Sicherheit vom Management“.

Niemand weiß besser als ein Entwickler, wie man die verfügbare Hardware effizient nutzt, also ist es das Ziel, ihnen die Macht zu geben, Entscheidungen zu treffen. Esokernel sind extrem klein und kompakt, da ihre Funktionalität absichtlich auf Ressourcenschutz und Multiplexing beschränkt ist.

"Klassische" Kernel (sowohl monolithisch als auch Mikrokernel) abstrahieren Hardware, verstecken Ressourcen hinter einer Hardware-Abstraktionsschicht ) oder hinter "sicheren" Servern. Wenn in diesen "klassischen" Systemen beispielsweise Speicher zugewiesen wird, kann das Programm nicht wissen, in welcher physischen Seite dieser vom Betriebssystem reserviert wird, und wenn eine Datei geschrieben wird, gibt es keine Möglichkeit, direkt zu wissen, in welchem ​​​​Sektor der Festplatte zugeteilt wurde. Dies ist die Abstraktionsebene, die ein Exokernel zu vermeiden versucht. Es ermöglicht einer Anwendung, bestimmte Speicherbereiche, bestimmte Sektoren auf der Festplatte usw. anzufordern, und stellt nur sicher, dass die erforderlichen Ressourcen verfügbar sind und Anwendungen darauf zugreifen können.

Da ein Esokernel eine Schnittstelle auf sehr niedriger Ebene zur Hardware bereitstellt, der jegliche für andere Betriebssysteme typische High-Level-Funktionalität fehlt, wird er von einer Betriebssystembibliothek (libOS im Fachjargon) begleitet, die eine Schnittstelle mit dem zugrunde liegenden Exokernel bildet und somit eine Anwendung bereitstellt Entwickler mit der Funktionalität eines kompletten Betriebssystems.

Dies alles hat eine wichtige Implikation: Es ist möglich, mehrere libOS auf dem System zu haben. Wenn Sie beispielsweise ein libOS installieren, das eine Unix-API exportiert, und eines, das eine Windows-API exportiert, können Sie Anwendungen, die für UNIX und Windows kompiliert wurden, gleichzeitig ausführen. Die Entwicklung von libOS erfolgt auf Benutzerebene, ohne Neustart, Debugging auf der Konsole und bei vollem Speicherschutz.

Derzeit sind Esokernel hauptsächlich Forschungsprojekte und werden nicht in kommerziellen Betriebssystemen verwendet. Ein Beispiel für ein Esokernel-basiertes System ist Nemesis , das von der University of Cambridge , der University of Glasgow , Citrix Systems und dem Swedish Institute of Informatics entwickelt wurde . Das MIT hat auch mehrere Esokernel-basierte Systeme entwickelt.

Kein Kernel

Die sogenannte „No-Kernel“-Software muss nicht auf einen einzigen Einstiegspunkt beschränkt sein, der ebenfalls zentralisiert ist. Ein Beispiel sind Projekte wie TUNES und UnununiumOS, die ein Betriebssystem ohne Kernel erstellen wollten (beide Projekte wurden eingestellt).

Notizen

  1. ^ Brian Bagnall, On The Edge: Der spektakuläre Aufstieg und Fall von Commodore , Variant Press, 2006, p. 202, ISBN 978-0-97-386490-8 . 
    ( DE )

    „Der Kernel ist der grundlegendste Teil eines Programms, typischerweise eines Betriebssystems, das sich zu jeder Zeit im Speicher befindet und die grundlegenden Dienste bereitstellt. Es ist der Teil des Betriebssystems, der der Maschine am nächsten ist und die Hardware direkt aktivieren oder eine Schnittstelle zu einer anderen Softwareschicht bilden kann, die die Hardware antreibt.

    ( ES )

    "Der Kernel ist der grundlegendste Teil eines Programms, normalerweise eines Betriebssystems, das sich ständig im Speicher befindet und grundlegende Dienste bereitstellt: Es ist der Teil des Betriebssystems, der der Maschine am nächsten ist und der die ' Hardware direkt oder über eine Schnittstelle mit einer anderen Softwareschicht, die die Hardware verwaltet.

  2. ^ LifeV , Multitasking Management in the Operating System Kernel , auf kukuruku.co , 13. Mai 2014. Abgerufen am 1. November 2016 .
    ( DE )

    „Da auf einem Prozessorkern zu einem Zeitpunkt nur eine Anweisung ausgeführt werden kann, kann nur ein Thread aktiv sein. Der Prozess der Auswahl des aktiven Rechenthreads wird Scheduling genannt. Das Modul, das für die Auswahl zuständig ist, wird wiederum Scheduler genannt.

    ( ES )

    „Da jeder vom Kernel verwaltete Prozessor zu einem bestimmten Zeitpunkt nur eine Anweisung gleichzeitig ausführen kann, kann es nur einen aktiven Thread geben. Der Prozess, durch den der aktive Berechnungs-Thread ausgewählt wird, wird Scheduling genannt. Das Modul, das für diese Auswahl verantwortlich ist, wird wiederum Scheduler genannt.

  3. ^ Es wird ursprünglich in GNU Hurd und nicht in MacOS verwendet, das XNU verwendet , einen modularen Hybrid-Kernel, der aus der Vereinigung von Mach und dem FreeBSD -Kernel hervorgegangen ist .

Bibliographie

Verwandte Artikel

Andere Projekte