Kernel (Betriebssystem)

Ein Kernel verbindet die Anwendungssoftware zur Hardware eines Computers

Das Kernel ist ein Computer Programm im Kern eines Computers Betriebssystem und hat im Allgemeinen die vollständige Kontrolle über alles im System.[1] Es ist der Teil des Betriebssystemcodes, der immer im Speicher ansässig ist[2] und erleichtert die Interaktionen zwischen Hardware- und Softwarekomponenten. Ein vollständiger Kernel steuert alle Hardware -Ressourcen (z. B. E/A, Speicher, Kryptographie) über Gerätetreiber, Schiedsrichterkonflikte zwischen Prozessen zu solchen Ressourcen und optimiert die Nutzung gemeinsamer Ressourcen, z. CPU- und Cache -Nutzung, Dateisysteme und Netzwerkhöhlen. Auf den meisten Systemen ist der Kernel eines der ersten Programme, auf denen geladen wird Anlaufen (nach dem Bootloader). Es behandelt den Rest des Startups sowie den Gedächtnis, Peripheriegeräte, und Input-Output (I/o) Anfragen von Softwaresie übersetzen in Datenverarbeitung Anweisungen für die Zentrale Verarbeitungseinheit.

Der kritische Code des Kernels wird normalerweise in einen separaten Speicherbereich geladen, der vor Zugang durch geschützt ist Anwendungssoftware oder andere weniger kritische Teile des Betriebssystems. Der Kernel führt seine Aufgaben aus, z. B. das Ausführen von Prozessen und das Verwalten von Hardware -Geräten wie die Festplatteund Umgang mit Interrupts in diesem geschützten Kernelraum. Im Gegensatz dazu verwenden Anwendungsprogramme wie Browser, Textprozessoren oder Audio- oder Videoplayer einen separaten Speicherbereich. Benutzerraum. Diese Trennung verhindert, dass Benutzerdaten und Kerneldaten sich gegenseitig beeinträchtigen und Instabilität und Langsamkeit verursachen.[1] sowie die Verhinderung von fehlerhaften Anwendungen daran, andere Anwendungen zu beeinflussen oder das gesamte Betriebssystem zu stürzen. Auch in Systemen, in denen der Kernel in der Anwendung enthalten ist Adressräume, Gedächtnisschutz wird verwendet, um zu verhindern, dass nicht autorisierte Anwendungen den Kernel modifizieren.

Der Kernel Schnittstelle ist ein niedriger Ebene Abstraktionsschicht. Wenn ein Prozess fordert einen Dienst aus dem Kernel an, er muss a aufrufen Systemanrufnormalerweise durch a Wrapper -Funktion.

Es gibt verschiedene Kernel -Architektur -Designs. Monolithische Kerne vollständig in einer einzigen laufen Adressraum mit der CPU ausführend in Supervisor -Modushauptsächlich für Geschwindigkeit. Mikrokernel Führen Sie am meisten, aber nicht alle ihre Dienste im Benutzerbereich aus,[3] wie Benutzerprozesse, hauptsächlich aus Belastbarkeit und Modularität.[4] Minix 3 ist ein bemerkenswertes Beispiel für das Design von Mikrokernel. Stattdessen die Linux Kernel ist monolithisch, obwohl es auch modular ist, denn es kann einfügen und entfernen Ladbare Kernelmodule zur Laufzeit.

Diese zentrale Komponente eines Computersystems ist für die Ausführung von Programmen verantwortlich. Der Kernel übernimmt die Verantwortung für die Entscheidung jederzeit, welche der vielen laufenden Programme dem Prozessor oder den Prozessoren zugewiesen werden sollen.

Arbeitsspeicher

Arbeitsspeicher (RAM) wird verwendet, um sowohl Programmanweisungen als auch Daten zu speichern.[a] In der Regel müssen beide im Speicher vorhanden sein, damit ein Programm ausgeführt werden kann. Oft möchten mehrere Programme Zugriff auf Speicher, und häufig mehr Speicher als der Computer zur Verfügung stellt. Der Kernel ist dafür verantwortlich, zu entscheiden, welchen Speicher jeder Prozess verwenden kann, und zu bestimmen, was zu tun ist, wenn nicht genügend Speicher verfügbar ist.

Eingangs-/Ausgabegeräte

Zu den E/A -Geräten gehören Peripheriegeräte wie Tastaturen, Mäuse, Festplatten, Drucker, USB Geräte, Netzwerkadapter und Anzeigegeräte. Der Kernel weist Anfragen von Anwendungen zur Ausführung von E/A für ein geeignetes Gerät aus und bietet bequeme Methoden für die Verwendung des Geräts (normalerweise abstrahiert bis zu dem Punkt, an dem die Anwendung keine Implementierungsdetails des Geräts kennen muss).

Resourcenmanagement

Schlüsselaspekte notwendig in Resourcenmanagement definieren die Ausführungsdomäne (Adressraum) und der Schutzmechanismus, der verwendet wird, um den Zugang zu den Ressourcen innerhalb einer Domäne zu vermitteln.[5] Kerne bieten auch Methoden für Synchronisation und Interprozesskommunikation (IPC). Diese Implementierungen können sich innerhalb des Kernels selbst befinden oder der Kernel kann sich auch auf andere Prozesse verlassen, die er ausführt. Obwohl der Kernel IPC bereitstellen muss, um Zugriff auf die voneinander bereitgestellten Einrichtungen zu gewährleisten, müssen Kernel auch laufende Programme eine Methode zur Verfügung stellen, um Anfragen zum Zugriff auf diese Einrichtungen zu stellen. Der Kernel ist auch für den Kontextwechsel zwischen Prozessen oder Threads verantwortlich.

Speicherverwaltung

Der Kernel hat vollen Zugriff auf den Speicher des Systems und muss es den Prozessen ermöglichen, sicher auf diesen Speicher zuzugreifen, sobald sie erforderlich sind. Oft ist der erste Schritt dazu Virtuelle Adressierung, normalerweise erreicht durch Paging und/oder Segmentierung. Virtuelle Adressierung ermöglicht es dem Kernel, eine bestimmte physische Adresse eine weitere Adresse zu sein, die virtuelle Adresse. Virtuelle Adressräume können für verschiedene Prozesse unterschiedlich sein. Der Speicher, den ein Prozess unter einer bestimmten (virtuellen) Adresse zugreift, kann unterschiedlicher Speicher sein als ein anderer Prozess unter derselben Adresse. Dies ermöglicht es jedem Programm, sich so zu verhalten, als ob es das einzige ist (außer dem Kernel), der ausgeführt wird, und verhindert, dass Anwendungen sich gegenseitig abbrechen.[6]

Auf vielen Systemen kann sich die virtuelle Adresse eines Programms auf Daten beziehen, die derzeit nicht im Speicher sind. Die durch virtuelle Adressierung bereitgestellte Indirektionschicht ermöglicht es dem Betriebssystem, andere Datenspeicher wie a zu verwenden Festplatte, um zu speichern, was sonst im Hauptspeicher bleiben müsste (RAM). Infolgedessen können Betriebssysteme es Programmen ermöglichen, mehr Speicher zu verwenden, als das System physikalisch verfügbar ist. Wenn ein Programm Daten benötigt, die derzeit nicht in RAM sind, signalisiert die CPU an den Kernel, dass dies passiert ist, und der Kernel antwortet, indem er den Inhalt eines inaktiven Speicherblocks an die Festplatte schreibt (falls erforderlich) und sie durch die von den angeforderten Daten ersetzt werden von Daten ersetzt das Programm. Das Programm kann dann von dem Punkt wieder aufgenommen werden, an dem es gestoppt wurde. Dieses Schema ist allgemein bekannt als Paging fordern.

Die virtuelle Adressierung ermöglicht auch die Schaffung virtueller Speicher -Speicher in zwei unzusammenhängenden Bereichen, wobei einer für den Kernel reserviert wird (Kernelraum) und die andere für die Anwendungen (Benutzerraum). Die Anträge sind vom Prozessor nicht zulässig, um den Kernelspeicher zu beheben, wodurch ein Antrag daran hindert, den laufenden Kernel zu beschädigen. Diese grundlegende Aufteilung des Gedächtnispunkts hat viel zu den aktuellen Entwürfen tatsächlicher allgemeiner Kernel beigetragen und ist in solchen Systemen fast universell, obwohl einige Forschungskerne (z. B., Singularität) andere Ansätze.

Geräteverwaltung

Um nützliche Funktionen auszuführen, benötigen Prozesse Zugriff auf die Peripheriegeräte mit dem Computer verbunden, der vom Kernel durch gesteuert wird Gerätetreiber. Ein Gerätetreiber ist ein Computerprogramm, das ein Hardwaregerät einkapselt, überwacht und steuert Hardware/Software -Schnittstelle (HSI)) im Namen des Betriebssystems. Es bietet dem Betriebssystem eine API, Verfahren und Informationen zur Steuerung und Kommunikation mit einem bestimmten Stück Hardware. Gerätetreiber sind eine wichtige und wichtige Abhängigkeit für alle Betriebssysteme und deren Anwendungen. Das Designziel eines Fahrers ist Abstraktion; Die Funktion des Treibers besteht darin, die os-mandatierten abstrakten Funktionsaufrufe (Programmieraufrufe) in Gerätespezifische Aufrufe zu übersetzen. Theoretisch sollte ein Gerät korrekt mit einem geeigneten Treiber funktionieren. Gerätetreiber werden für z. Grafikkarten, Soundkarten, Drucker, Scanner, Modems und Netzwerkkarten.

Zu den Hardwareebene gehören häufige Abstraktionen von Gerätefahrern::

  • Direkt anbinden
  • Verwenden einer hochrangigen Schnittstelle (Video BIOS)
  • Verwenden eines Gerätetreibers auf niedrigerer Ebene (Dateitreiber mit Datentreibern)
  • Simulation der Arbeit mit Hardware, während etwas ganz anderes macht

Auf Softwareebene umfassen die Abstraktionen des Gerätefahrers::

  • Ermöglichen Sie dem Betriebssystem direkten Zugriff auf Hardware -Ressourcen
  • Nur Primitive implementieren
  • Implementierung einer Schnittstelle für Nicht-Fahrer-Software wie z. Twain
  • Implementierung einer Sprache (oft eine hochrangige Sprache wie z. PostScript)

Um dem Benutzer beispielsweise etwas auf dem Bildschirm anzuzeigen, würde eine Anwendung eine Anfrage an den Kernel stellen, die die Anfrage an ihren Anzeigetreiber weiterleiten würde, der dann dafür verantwortlich ist, das Zeichen/Pixel zu zeichnen.[6]

Ein Kernel muss eine Liste der verfügbaren Geräte verwalten. Diese Liste kann im Voraus bekannt sein (z. B. auf einem Eingebettetes System wo der Kernel umgeschrieben wird, wenn sich die verfügbaren Hardware ändert), konfiguriert vom Benutzer (typisch für ältere PCs und auf Systeme, die nicht für den persönlichen Gebrauch ausgelegt sind) oder vom Betriebssystem zur Laufzeit (normalerweise genannt Stecker und Spiel). In Plug-and-Play-Systemen führt ein Geräte-Manager zunächst einen Scan für verschiedene Durchführung durch periphere Busse, wie zum Beispiel Periphere Komponentenverbindung (PCI) oder Universeller Serienbus (USB), um installierte Geräte zu erkennen und dann nach den entsprechenden Treibern zu suchen.

Da die Geräteverwaltung sehr ist OS-Spezifisch werden diese Treiber durch jede Art von Kerneldesign unterschiedlich behandelt, aber in jedem Fall muss der Kernel das bereitstellen I/o Damit die Fahrer über einige physisch auf ihre Geräte zugreifen können Hafen oder Speicherort. Bei der Gestaltung des Geräteverwaltungssystems müssen wichtige Entscheidungen getroffen werden, da einige Konstruktionen Zugriffe möglicherweise beinhalten Kontextschalter, machen den Betrieb sehr cpu-intensiv und verursachen leicht einen erheblichen Leistungsaufwand.

Systemaufrufe

Bei einem Systemaufruf ist ein Systemanruf, wie ein Prozess einen Dienst aus dem Kernel eines Betriebssystems verlangt, den er normalerweise nicht ausführen kann. Systemaufrufe bieten die Schnittstelle zwischen einem Prozess und dem Betriebssystem. Die meisten Operationen, die mit dem System interagieren, erfordern Berechtigungen, die einem Prozess auf Benutzerebene nicht zur Verfügung stehen, z. B. E/A, die mit einem auf dem System vorhandenen Gerät oder einer beliebigen Form der Kommunikation mit anderen Prozessen durchgeführt werden, erfordert die Verwendung von Systemanrufen.

Ein Systemanruf ist ein Mechanismus, der vom Anwendungsprogramm verwendet wird, um einen Dienst aus dem Betriebssystem anzufordern. Sie verwenden a Maschinensprache Anweisung, der dazu führt, dass der Prozessor den Modus ändert. Ein Beispiel wäre vom Supervisor -Modus zum geschützten Modus. Hier führt das Betriebssystem Aktionen wie den Zugriff auf Hardware -Geräte oder die durch Speicherverwaltungseinheit. Im Allgemeinen bietet das Betriebssystem eine Bibliothek, die zwischen dem Betriebssystem und normalen Benutzerprogrammen liegt. Normalerweise ist es a C Bibliothek wie zum Beispiel Glibc oder Windows -API. Die Bibliothek übernimmt die Details der Übergabe von Informationen auf niedrigem Niveau an den Kernel und die Umstellung in den Supervisor-Modus. Die Systemanrufe beinhalten Close, Öffnen, Lesen, Warten und Schreiben.

Um nützliche Arbeiten auszuführen, muss ein Prozess in der Lage sein, auf die vom Kernel erbrachten Dienste zugreifen zu können. Dies wird von jedem Kernel unterschiedlich implementiert, aber die meisten bieten a C Bibliothek oder an API, was wiederum die zugehörigen Kernelfunktionen hervorruft.[7]

Die Methode zum Aufrufen der Kernelfunktion variiert vom Kernel bis zum Kernel. Wenn die Speicherisolierung verwendet wird, ist es für einen Benutzerprozess unmöglich, den Kernel direkt aufzurufen, da dies ein Verstoß gegen die Zugriffskontrollregeln des Prozessors darstellt. Ein paar Möglichkeiten sind:

  • Mit einer Software simuliert unterbrechen. Diese Methode ist für die meisten Hardware verfügbar und ist daher sehr häufig.
  • Verwendung einer Rufen Sie Tor an. Ein Call -Gate ist eine Sonderadresse, die vom Kernel in einer Liste im Kernel -Speicher an einem dem Prozessor bekannten Ort gespeichert ist. Wenn der Prozessor einen Aufruf an diese Adresse erkennt, leitet er stattdessen an den Zielort weiter, ohne einen Zugriffsverletzung zu verursachen. Dies erfordert Hardwareunterstützung, aber die Hardware dafür ist ziemlich häufig.
  • Mit einem besonderen Systemanruf Anweisung. Diese Technik erfordert eine spezielle Hardwareunterstützung, die gemeinsame Architekturen (insbesondere, x86) kann fehlen. Systemanweisungen wurden jedoch zu aktuellen Modellen von X86 -Prozessoren hinzugefügt, und einige Betriebssysteme für PCs verwenden diese, sofern verfügbar.
  • Verwenden einer Speicherwarteschlange. Eine Anwendung, die eine große Anzahl von Anfragen stellt, aber nicht auf das Ergebnis von jedem warten muss, kann Einzelheiten zu Anfragen zu einem Speicherbereich hinzufügen, den der Kernel regelmäßig scannt, um Anforderungen zu finden.

Kernel -Designentscheidungen

Schutz

Eine wichtige Überlegung bei der Gestaltung eines Kernels ist die Unterstützung, die sie für Schutz vor Fehlern bietet (Fehlertoleranz) und aus böswilligen Verhaltensweisen (Sicherheit). Diese beiden Aspekte sind normalerweise nicht klar unterschieden, und die Annahme dieser Unterscheidung im Kernel -Design führt zur Ablehnung von a Hierarchische Struktur zum Schutz.[5]

Die vom Kernel bereitgestellten Mechanismen oder Richtlinien können nach mehreren Kriterien klassifiziert werden, darunter: statisch (erzwungen bei Zeit kompilieren) oder dynamisch (erzwungen bei Laufzeit); vorbeugender oder nach der Erkennung; nach den Schutzprinzipien, die sie erfüllen (z. B.,, Denning[8][9]); ob sie hardware unterstützt oder sprachbasiert sind; ob sie eher ein offener Mechanismus oder eine Bindungspolitik sind; und viele mehr.

Unterstützung für hierarchische Schutzdomänen[10] wird normalerweise mit Verwendung implementiert CPU -Modi.

Viele Kerne bieten die Implementierung von "Funktionen", d. H. Objekte, die dem Benutzercode bereitgestellt werden, der einen begrenzten Zugriff auf ein vom Kernel verwaltetes zugrunde liegendes Objekt ermöglicht. Ein häufiges Beispiel ist die Dateibehandlung: Eine Datei ist eine Darstellung von Informationen, die auf einem permanenten Speichergerät gespeichert sind. Der Kernel kann möglicherweise viele verschiedene Vorgänge ausführen, einschließlich Lesen, Schreiben, Löschen oder Ausführen. Eine Anwendung auf Benutzerebene kann jedoch nur einige dieser Vorgänge ausführen (z. B. dürfen die Datei möglicherweise nur lesen). Eine gemeinsame Implementierung davon ist, dass der Kernel der Anwendung ein Objekt bereitstellt (normalerweise so genannt "Dateihandle"), das die Anwendung dann auf Operationen aufrufen kann, dessen Gültigkeit der Kernel zum Zeitpunkt der Anforderung des Betriebs überprüft. Ein solches System kann erweitert werden, um alle Objekte abzudecken, die der Kernel verwaltet, und tatsächlich auf Objekte, die von anderen Benutzeranwendungen bereitgestellt werden.

Eine effiziente und einfache Möglichkeit, die Hardware -Unterstützung von Funktionen zu unterstützen, besteht darin, an die zu delegieren Speicherverwaltungseinheit (MMU) Die Verantwortung für die Überprüfung der Zugriffsrechte für jeden Speicherzugriff, ein Mechanismus genannt Fähigkeitsbasierte Adressierung.[11] In den meisten kommerziellen Computerarchitekturen fehlt eine solche MMU -Unterstützung für Fähigkeiten.

Ein alternativer Ansatz besteht darin, Funktionen mit allgemein unterstützten hierarchischen Domänen zu simulieren. In diesem Ansatz muss jedes geschützte Objekt in einem Adressraum liegen, auf den die Anwendung keinen Zugriff hat. Der Kernel unterhält auch eine Liste von Funktionen in einem solchen Speicher. Wenn eine Anwendung auf ein durch eine Fähigkeit geschütztes Objekt zugreifen muss, wird ein Systemaufruf ausgeführt. Der Kernel überprüft dann, ob die Fähigkeit der Anwendung die IT -Berechtigung zur Durchführung der angeforderten Aktion gewährt und ob sie den Zugriff für ihn (entweder direkt. oder durch Delegieren der Anfrage an einen anderen Prozess auf Benutzerebene). Die Leistungskosten des Adressraumschalters begrenzt die Praktikabilität dieses Ansatzes in Systemen mit komplexen Wechselwirkungen zwischen Objekten, wird jedoch in aktuellen Betriebssystemen für Objekte verwendet, auf die nicht häufig zugegriffen wird oder nicht erwartet wird, dass sie schnell funktioniert.[12][13]

Wenn die Firmware keine Schutzmechanismen unterstützt, ist es möglich, den Schutz auf höherer Ebene zu simulieren, beispielsweise durch Simulation von Funktionen durch Manipulation Seitentabellen, aber es gibt Leistungsauswirkungen.[14] Der Mangel an Hardwareunterstützung ist jedoch möglicherweise kein Problem für Systeme, die sich für den Sprachschutz entscheiden.[15]

Eine wichtige Entscheidung für Kerneldesign ist die Wahl der Abstraktionsniveaus, in denen die Sicherheitsmechanismen und -richtlinien implementiert werden sollten. Kernel -Sicherheitsmechanismen spielen eine entscheidende Rolle bei der Unterstützung der Sicherheit auf höheren Ebenen.[11][16][17][18][19]

Ein Ansatz besteht darin, die Firmware- und Kernel -Unterstützung für die Fehlertoleranz (siehe oben) zu verwenden und die Sicherheitsrichtlinie für böswilliges Verhalten darüber zu erstellen (Hinzufügen von Funktionen wie z. Kryptographie bei Bedarf Mechanismen), die eine Verantwortung an die delegieren Compiler. Ansätze, die die Durchsetzung der Sicherheitspolitik an den Compiler und/oder die Bewerbungsstufe delegieren, werden häufig aufgerufen Sprachbasierte Sicherheit.

Das Fehlen vieler kritischer Sicherheitsmechanismen in aktuellen Mainstream -Betriebssystemen behindert die Implementierung angemessener Sicherheitspolitik bei der Anwendung Abstraktionsstufe.[16] Tatsächlich ist ein weit verbreitetes Missverständnis in der Computersicherheit, dass jede Sicherheitsrichtlinie unabhängig von der Kernel -Unterstützung in einer Anwendung implementiert werden kann.[16]

Hardware- oder Sprachbasierter Schutz

Typische Computersysteme verwenden heute Hardware-durchlässige Regeln darüber, auf welche Programme auf welche Daten zugreifen dürfen. Der Prozessor überwacht die Ausführung und stoppt ein Programm, das gegen eine Regel verstößt, z. B. einen Benutzerprozess, der versucht, in den Kernel -Speicher zu schreiben. In Systemen, denen die Fähigkeiten nicht unterstützt werden, werden Prozesse unter Verwendung separater Adressräume voneinander isoliert.[20] Anrufe von Benutzerprozessen in den Kernel werden reguliert, indem sie eine der oben beschriebenen Systemaufrufmethoden verwenden.

Ein alternativer Ansatz besteht darin, den sprachbasierten Schutz zu verwenden. In einem Sprachbasiertes SchutzsystemDer Kernel erlaubt nur den Code auszuführen, der von einer vertrauenswürdigen Sprache erstellt wurde Compiler. Die Sprache kann dann so gestaltet werden, dass es für den Programmierer unmöglich ist, sie anzuweisen, etwas zu tun, das gegen eine Sicherheitsanforderung verstößt.[15]

Zu den Vorteilen dieses Ansatzes gehören:

  • Keine Notwendigkeit für separate Adressräume. Das Umschalten zwischen Adressräumen ist ein langsamer Betrieb, der viel Overhead bewirkt, und derzeit werden viele Optimierungsarbeiten durchgeführt, um unnötige Schalter in aktuellen Betriebssystemen zu verhindern. Das Umschalten ist in einem sprachbasierten Schutzsystem völlig unnötig, da der gesamte Code sicher im gleichen Adressraum arbeiten kann.
  • Flexibilität. Jedes Schutzschema, das über eine Programmiersprache ausgedrückt werden kann, kann mit dieser Methode implementiert werden. Änderungen des Schutzschemas (z. B. von einem hierarchischen System zu einer Fähigkeitsbasis) erfordern keine neue Hardware.

Nachteile umfassen:

  • Längere Anwendungsstartzeit. Anwendungen müssen überprüft werden, wenn sie begonnen haben, um sicherzustellen Bytecode.
  • Unflexibel Typsysteme. Bei herkömmlichen Systemen führen Anwendungen häufig Vorgänge aus Geben Sie sicher. Solche Vorgänge können in einem sprachbasierten Schutzsystem nicht zulässig sein, was bedeutet, dass Anwendungen möglicherweise neu geschrieben werden müssen und in einigen Fällen die Leistung verlieren können.

Beispiele für Systeme mit sprachbasiertem Schutz umfassen JX und Microsoft's Singularität.

Prozesskooperation

Edsger Dijkstra bewies das aus logischer Sicht, Atomic sperren und Operationen entsperren, die auf Binary operieren Semaphoren sind ausreichende Primitive, um jede Funktionalität der Prozesskooperation auszudrücken.[21] Dieser Ansatz fehlt jedoch im Hinblick auf Sicherheit und Effizienz, während a Nachrichtenübergang Ansatz ist flexibler.[22] Es gibt auch eine Reihe anderer Ansätze (entweder unter- oder höherer Ebene), wobei viele moderne Kernel Unterstützung für Systeme wie unterstützen geteilte Erinnerung und Remote -Verfahrensanrufe.

E/A -Geräteverwaltung

Die Idee eines Kernels, in dem E/A-Geräte gleichmäßig mit anderen Prozessen wie parallelen Kooperationsverfahren behandelt werden, wurde zunächst vorgeschlagen und implementiert Brinch Hansen (Obwohl ähnliche Ideen 1967 vorgeschlagen wurden[23][24]). In Hansens Beschreibung werden die "gemeinsamen" Prozesse genannt interne Prozesse, während die E/A -Geräte aufgerufen werden externe Prozesse.[22]

Ähnlich wie der physische Speicher kann der direkte Zugriff auf Controller -Ports und -Einregister den Controller zum Absturz bringen. Abhängig von der Komplexität des Geräts können einige Geräte überraschend komplex werden, um zu programmieren und mehrere verschiedene Controller zu verwenden. Aus diesem Grund ist es wichtig, eine abstraktere Schnittstelle zur Verwaltung des Geräts bereitzustellen. Diese Schnittstelle erfolgt normalerweise von a Gerätetreiber oder Hardware -Abstraktionsschicht. Häufig erfordern Anwendungen Zugriff auf diese Geräte. Der Kernel muss die Liste dieser Geräte beibehalten, indem er das System in irgendeiner Weise für sie abfragt. Dies kann über das BIOS oder über einen der verschiedenen Systembusse (wie PCI/PCIe oder USB) erfolgen. Wenn ein Beispiel für einen Video -Treiber anhand eines Video -Treibers eine Operation auf einem Gerät anfordert, z. B. ein Zeichen anzeigt, muss der Kernel diese Anforderung an den aktuellen aktiven Video -Treiber senden. Der Videotreiber muss diese Anfrage wiederum ausführen. Dies ist ein Beispiel für Interprozesskommunikation (IPC).

Kernelweite Design-Ansätze

Natürlich können die oben aufgeführten Aufgaben und Merkmale in vielerlei Hinsicht in vielerlei Hinsicht voneinander geliefert werden.

Das Prinzip von Trennung von Mechanismus und Politik ist der wesentliche Unterschied zwischen der Philosophie von Mikro- und monolithischen Kerneln.[25][26] Hier ein Mechanismus ist die Unterstützung, die die Implementierung vieler verschiedener Richtlinien ermöglicht, während eine Richtlinie eine bestimmte "Betriebsart" ist. Beispiel:

  • Mechanismus: Benutzeranmeldungsversuche werden an einen Autorisierungsserver weitergeleitet
  • Politik: Der Autorisierungsserver benötigt ein Passwort, das gegen gespeicherte Passwörter in einer Datenbank verifiziert wird

Da der Mechanismus und der Mechanismus und die Politik getrennt sind, kann die Richtlinie leicht in z. erfordern die Verwendung von a Sicherheitstoken.

In minimalem Mikrokernel sind nur einige sehr grundlegende Richtlinien enthalten, die enthalten sind.[26] und seine Mechanismen ermöglichen es, was über dem Kernel (dem verbleibenden Teil des Betriebssystems und der anderen Anwendungen) ausgeführt wird, zu entscheiden, welche Richtlinien eingehen sollen (als Speichermanagement, Prozessplanung auf hoher Ebene, Dateisystemverwaltung usw.).[5][22] Ein monolithischer Kernel neigt stattdessen dazu, viele Richtlinien zu enthalten, wodurch der Rest des Systems auf sie angewiesen ist.

Per Brinch Hansen präsentierte Argumente für die Trennung von Mechanismus und Politik.[5][22] Das Versäumnis, diese Trennung ordnungsgemäß zu erfüllen[5] Ein Problem, das in der Computerarchitektur üblich ist.[27][28][29] Das monolithische Design wird durch den Architekturansatz "Kernel -Modus"/"Benutzermodus" zum Schutz (technisch genannt Hierarchische Schutzdomänen), was in herkömmlichen kommerziellen Systemen üblich ist;[30] Tatsächlich ist jedes Modul, das Schutz benötigt, vorzugsweise in den Kernel einbezogen.[30] Dieser Zusammenhang zwischen monolithischem Design und "privilegiertem Modus" kann zum Schlüsselproblem der Mechanismus-Policy-Trennung rekonditioniert werden.[5] Tatsächlich verschmilzt der architektonische Ansatz "privilegierter Modus" den Schutzmechanismus mit den Sicherheitspolitik, während der wichtigste alternative architektonische Ansatz, Fähigkeitsbasierte Adressierungunterscheidet deutlich zwischen den beiden und führt natürlich zu einem Mikrokernel -Design[5] (sehen Trennung von Schutz und Sicherheit).

Während Monolithische Kerne Führen Sie ihren gesamten Code im selben Adressraum aus (aus.Kernelraum), Mikrokernel Versuchen Sie, den größten Teil ihrer Dienste im Benutzerbereich auszuführen, um die Wartbarkeit und Modularität der Codebasis zu verbessern.[4] Die meisten Kerne passen nicht genau in eine dieser Kategorien, sondern sind zwischen diesen beiden Entwürfen eher gefunden. Diese nennt man Hybridkerne. Exotischere Designs wie Nanokernel und Exokernel sind verfügbar, werden jedoch selten für Produktionssysteme verwendet. Das Xen Hypervisor ist zum Beispiel ein Exokernel.

Monolithische Kerne

Diagramm eines monolithischen Kernels

In einem monolithischen Kernel werden alle OS -Dienste zusammen mit dem Hauptkern -Thread ausgeführt, wodurch sich auch im gleichen Speicherbereich befindet. Dieser Ansatz bietet einen reichhaltigen und leistungsstarken Hardware -Zugriff. Einige Entwickler, wie z. Unix Entwickler Ken Thompsonbehaupten, dass es "einfacher ist, einen monolithischen Kernel umzusetzen"[31] als Mikrokernel. Die Hauptnachteile von monolithischen Kerneln sind die Abhängigkeiten zwischen Systemkomponenten - ein Fehler in einem Gerätetreiber könnte das gesamte System abbrechen - und die Tatsache, dass große Kernel sehr schwer zu warten sind.

Monolithische Kerne, die traditionell von UNIX-ähnlichen Betriebssystemen verwendet wurden, enthalten alle Kernfunktionen des Betriebssystems und die Gerätetreiber. Dies ist das traditionelle Design von UNIX -Systemen. Ein monolithischer Kernel ist ein einziges Programm, das den gesamten Code enthält, der für jede Kernel-bezogene Aufgabe erforderlich ist. Jeder Teil, auf den die meisten Programme, die nicht in eine Bibliothek gesteckt werden können, zugegriffen werden sollen, befindet sich im Kernel -Bereich: Gerätetreiber, Scheduler, Speicherhandhabung, Dateisysteme und Netzwerkstapel. Viele Systemanrufe werden an Anwendungen bereitgestellt, damit sie auf alle diese Dienste zugreifen können. Ein monolithischer Kernel, der ursprünglich mit Subsystemen beladen ist, die möglicherweise nicht benötigt werden, kann bis zu einem Punkt abgestimmt werden, an dem es so schnell oder schneller ist als derjenige, der speziell für die Hardware entwickelt wurde, obwohl es im allgemeinen Sinne relevanter ist. Moderne monolithische Kerne, wie die von denen von Linux (Einer der Kerne der Kerne GNU Betriebssystem) und Freebsd Kernel, die beide in die Kategorie der Unix-ähnlichen Betriebssysteme fallen, bietet die Möglichkeit, Module zur Laufzeit zu laden, wodurch eine einfache Erweiterung der Fähigkeiten des Kernels nach Bedarf ermöglicht wird und gleichzeitig dazu beiträgt, die Menge an Code zu minimieren, die im Kernelraum ausgeführt wird. Im monolithischen Kernel hängen einige Vorteile an folgenden Punkten ab:

  • Da es weniger Software gibt, ist es schneller.
  • Da es sich um eine einzelne Software handelt, sollte es sowohl in der Quelle als auch in kompilierten Formen kleiner sein.
  • Weniger Code bedeutet im Allgemeinen weniger Fehler, die zu weniger Sicherheitsproblemen führen können.

Die meisten Arbeiten im monolithischen Kernel erfolgen über Systemaufrufe. Dies sind Schnittstellen, die normalerweise in einer tabellarischen Struktur aufbewahrt werden und auf ein Subsystem im Kernel wie Festplattenoperationen zugreifen. Im Wesentlichen werden Anrufe in Programmen getätigt und eine geprüfte Kopie der Anfrage durch den Systemanruf weitergegeben. Daher nicht weit, um überhaupt zu reisen. Das monolithische Linux Der Kernel kann nicht nur aufgrund seiner Fähigkeit, Module dynamisch zu laden, sondern auch aufgrund seiner einfachen Anpassung extrem klein gemacht werden. In der Tat gibt es einige Versionen, die klein genug sind, um mit einer großen Anzahl von Versorgungsunternehmen und anderen Programmen auf einer einzelnen Diskette zusammenzufassen und dennoch ein voll funktionsfähiges Betriebssystem zu bieten (eines der beliebtesten davon ist Mulinux). Diese Fähigkeit, seinen Kernel zu miniaturisieren Linux in eingebettete Systeme.

Diese Arten von Kerneln bestehen aus den Kernfunktionen des Betriebssystems und den Gerätetreibern, die zur Laufzeit laden können. Sie bieten reichhaltige und leistungsstarke Abstraktionen der zugrunde liegenden Hardware. Sie bieten einen kleinen Satz einfacher Hardwareabstraktionen und verwenden Anwendungen, die als Server bezeichnet werden, um mehr Funktionen zu liefern. Dieser spezielle Ansatz definiert eine virtuelle Schnittstelle auf hoher Ebene über die Hardware mit einer Reihe von Systemaufrufen, um Betriebssystemdienste wie Prozessmanagement, Parallelität und Speicherverwaltung in mehreren Modulen zu implementieren, die im Supervisor-Modus ausgeführt werden. Dieses Design hat mehrere Mängel und Einschränkungen:

  • Die Codierung im Kernel kann eine Herausforderung sein, teilweise, weil man keine gemeinsamen Bibliotheken verwenden kann (wie ein Vollgeeigneter libc) und weil man einen Debugger auf Quellenebene verwenden muss wie GDB. Das Neustart des Computers ist häufig erforderlich. Dies ist nicht nur ein Problem der Bequemlichkeit für die Entwickler. Wenn das Debuggen schwieriger ist und wenn Schwierigkeiten stärker werden, wird es wahrscheinlicher, dass der Code "buggier" ist.
  • Fehler in einem Teil des Kernels haben starke Nebenwirkungen; Da jede Funktion im Kernel über alle Privilegien verfügt, kann ein Fehler in einer Funktion die Datenstruktur eines anderen, völlig unabhängigen Teils des Kernels oder eines laufenden Programms beschädigen.
  • Körner werden oft sehr groß und schwer zu pflegen.
  • Selbst wenn die Module, die diese Operationen bedienen, vom Ganzen getrennt sind, ist die Codeintegration eng und schwer korrekt zu tun.
  • Da die Module im selben laufen AdressraumEin Fehler kann das gesamte System senken.
  • Monolithische Kerne sind nicht tragbar; Daher müssen sie für jede neue Architektur umgeschrieben werden, für die das Betriebssystem verwendet werden soll.
In dem Mikrokernel Ansatz bietet der Kernel selbst nur grundlegende Funktionen, die die Ausführung von ermöglicht Server, separate Programme, bei denen ehemalige Kernelfunktionen wie Gerätetreiber, GUI -Server usw. angenommen werden.

Beispiele für monolithische Kerne sind AIX Kernel, HP-UX-Kernel und Solaris-Kernel.

Mikrokernel

Microkernel (ebenfalls abgekürzte μK oder UK) ist der Begriff, der einen Ansatz für das Betriebssystemdesign beschreibt, mit dem die Funktionalität des Systems aus dem traditionellen "Kernel" verwandelt wird, in eine Reihe von "Servern", die durch einen "minimalen" Kernel kommunizieren so wenig wie möglich im "Systemraum" und so weit wie möglich im "Benutzerraum". Ein Mikrokernel, das für eine bestimmte Plattform oder ein bestimmtes Gerät ausgelegt ist, wird immer nur das für den Betrieb haben. Der Mikrokernel -Ansatz besteht darin, eine einfache Abstraktion über die Hardware mit einer Reihe von Primitiven zu definieren oder Systemaufrufe Um minimale Betriebssystemdienste wie z. Speicherverwaltung, Multitasking, und Interprozesskommunikation. Andere Dienste, einschließlich der normalerweise vom Kernel erbrachten, wie z. Networking, werden in User-Space-Programmen implementiert, bezeichnet als als Server. Mikrokernel sind leichter zu warten als monolithische Kernel, aber die große Anzahl von Systemaufrufen und Kontextschalter Könnte das System verlangsamen, da sie normalerweise mehr Overhead als einfache Funktionsaufrufe erzeugen.

Nur Teile, die wirklich in einem privilegierten Modus sein müssen, befinden sich im Kernel-Bereich: IPC (Inter-Process Communication), Basic Scheduler oder Planing Primitive, grundlegende Speicherhandhabung, grundlegende E/A-Primitive. Viele kritische Teile werden jetzt im Benutzerbereich ausgeführt: Der vollständige Scheduler, Speicherhandhabung, Dateisysteme und Netzwerkstapel. Mikrokerne wurden als Reaktion auf das traditionelle "monolithische" Kerneldesign erfunden, wobei alle Systemfunktionen in ein statisches Programm in einem speziellen "System" -Modus des Prozessors eingelegt wurden. Im Mikrokernel werden nur die grundlegendsten Aufgaben ausgeführt, z. Einige Systeme, die Mikrokerne verwenden, sind QNX und der Hurd. Im Falle des Qnx und Hurd Benutzersitzungen können ganze Schnappschüsse des Systems selbst oder Ansichten sein, wie es genannt wird. Die Essenz der Mikrokernel -Architektur zeigt einige ihrer Vorteile:

  • Einfacher zu pflegen
  • Patches können in einer separaten Instanz getestet und dann eingetauscht werden, um eine Produktionsinstanz zu übernehmen.
  • Schnelle Entwicklungszeit und neue Software können getestet werden, ohne den Kernel neu starten zu müssen.
  • Mehr Persistenz im Allgemeinen, wenn eine Instanz nicht mehr ist, ist es oft möglich, ihn durch einen operativen Spiegel zu ersetzen.

Die meisten Mikrokernel verwenden a Nachrichtenübergang System zur Bearbeitung von Anforderungen von einem Server zum anderen. Das Nachrichtenübergangssystem arbeitet im Allgemeinen auf a Hafen Basis mit dem Mikrokernel. Wenn beispielsweise eine Anfrage nach mehr Speicher gesendet wird, wird mit dem Mikrokernel ein Port geöffnet und die Anfrage gesendet. Sobald sie im Mikrokernel sind, ähneln die Schritte wie Systemaufrufe. Die Begründung war, dass es die Modularität in der Systemarchitektur einbringen würde, was ein saubereres System beinhaltet, einfacher zu debuggen oder dynamisch zu ändern, anpassbar für die Bedürfnisse der Benutzer und eine stärkere Ausführung. Sie sind Teil der Betriebssysteme wie Gnu Hurd, Minix, Mklinux, Qnx und Redox OS. Obwohl Mikrokernel für sich selbst sehr klein sind, sind sie in Kombination mit all ihren erforderlichen Hilfscode oft größer als monolithische Kerne. Befürworter von monolithischen Kerneln weisen auch darauf hin, dass die zweistufige Struktur von Mikrokernel-Systemen, bei denen der größte Teil des Betriebssystems nicht direkt mit der Hardware interagiert, nicht-signifikante Kosten in Bezug auf die Systemeffizienz schafft. Diese Arten von Kerneln bieten normalerweise nur die minimalen Dienste an, wie z. B. die Definition von Speicheradressenräumen, Inter-Process Communication (IPC) und das Prozessmanagement. Die anderen Funktionen wie das Ausführen der Hardwareprozesse werden nicht direkt von Mikrokernel behandelt. Befürworter von Mikrokördern weisen darauf hin, dass diese monolithischen Kerne den Nachteil haben, dass ein Fehler im Kernel das gesamte System zum Absturz bringen kann. Wenn ein Mikrokernel ein Kernelprozess stürzt, ist es jedoch immer noch möglich, einen Absturz des Systems als Ganzes zu verhindern, indem der Dienst lediglich neu gestartet wird, der den Fehler verursacht hat.

Andere vom Kernel erbrachte Dienste wie das Netzwerk werden in User-Space-Programmen implementiert, die als als bezeichnet Server. Mit Servern können das Betriebssystem durch einfaches Starten und Stoppen von Programmen geändert werden. Für eine Maschine ohne Networking -Unterstützung wird der Netzwerkserver beispielsweise nicht gestartet. Die Aufgabe, sich in und aus dem Kern zu bewegen, um Daten zwischen den verschiedenen Anwendungen und Servern zu verschieben, schafft einen Aufwand, was sich im Vergleich zu monolithischen Kerneln nachteilig auf die Effizienz von Mikrokörns auswirkt.

Nachteile im Mikrokernel existieren jedoch. Einige sind:

  • Größeres Laufen Speicherpfunddruck
  • Weitere Software für die Schnittstelle sind erforderlich. Es besteht ein Potenzial für den Leistungsverlust.
  • Messaging -Fehler kann aufgrund der längeren Reise schwieriger zu beheben sein, die sie für die One -Off -Kopie in einem monolithischen Kernel unternehmen müssen.
  • Das Prozessmanagement im Allgemeinen kann sehr kompliziert sein.

Die Nachteile für Mikrokernel sind extrem kontextbasiert. Beispielsweise funktionieren sie gut für kleine einzelne (und kritische) Systeme, da wenn nicht viele Prozesse ausgeführt werden müssen, werden die Komplikationen des Prozessmanagements effektiv gemindert.

Ein Mikrokernel ermöglicht die Implementierung des verbleibenden Teils des Betriebssystems als normales Anwendungsprogramm in a hochrangige Spracheund die Verwendung verschiedener Betriebssysteme auf demselben unveränderten Kernel. Es ist auch möglich, dynamisch zwischen Betriebssystemen zu wechseln und gleichzeitig mehr als einen aktiven aktiv zu haben.[22]

Monolithische Kerne gegen Mikrokernel

Wenn der Computerkern wächst, wächst die Größe und Verwundbarkeit von Its Vertrauenswürdige Computerbasis; Und neben der Reduzierung der Sicherheit gibt es das Problem, die zu vergrößern Speicherpfunddruck. Dies wird bis zu einem gewissen Grad durch Perfektionierungen der gemildert virtueller Speicher System, aber nicht alle Computerarchitekturen virtuelle Speicherunterstützung haben.[32] Um den Fußabdruck des Kernels zu verringern, muss eine umfangreiche Bearbeitung durchgeführt werden, um den unnötigen Code sorgfältig zu entfernen, was mit nicht offenen Abhängigkeiten zwischen Teilen eines Kernels mit Millionen von Codezeilen sehr schwierig sein kann.

In den frühen neunziger Jahren wurden monolithische Kernel aufgrund der verschiedenen Mängel von monolithischen Kerneln gegenüber Mikrokernel von praktisch allen Forschern des Betriebssystems als veraltet angesehen. Infolgedessen das Design von Linux Als monolithischer Kernel als ein Mikrokernel war das Thema einer berühmten Debatte zwischen Linus Torvalds und Andrew Tanenbaum.[33] Auf beiden Seiten des Arguments, das in der vorgestellt wird Tanenbaum -Torvalds Debatte.

Leistung

Monolithische Kerne sind so konzipiert, dass sie ihren gesamten Code im gleichen Adressraum haben (Kernelraum), von denen einige Entwickler behaupten, die Leistung des Systems zu erhöhen.[34] Einige Entwickler behaupten auch, dass monolithische Systeme, wenn sie gut geschrieben sind, äußerst effizient sind.[34] Das monolithische Modell ist tendenziell effizienter[35] durch die Verwendung des gemeinsamen Kernelspeichers und nicht durch das langsamere IPC -System von Mikrokernel -Designs, das normalerweise auf Nachrichtenübergang.

Die Leistung von Microkernels war sowohl in den 1980er als auch in den frühen 1990er Jahren schlecht.[36][37] Untersuchungen, die die Leistung dieser Mikrokernel empirisch gemessen haben, analysierten jedoch nicht die Gründe für eine solche Ineffizienz.[36] Die Erklärungen dieser Daten wurden "Folklore" überlassen, mit der Annahme, dass sie auf die erhöhte Häufigkeit von Schalter vom "Kernel-Modus" zum "Benutzermodus" zur erhöhten Frequenz von zurückzuführen sind Interprozesskommunikation und zur erhöhten Häufigkeit von Kontextschalter.[36]

Wie 1995 erraten, hätten auch die Gründe für die schlechte Leistung von Mikrokernel gewesen sein: (1) eine tatsächliche Ineffizienz des gesamten Mikrokernels sich nähern, (2) die besondere Konzepte in diesen Microkernels implementiert und (3) die besondere Implementierung dieser Konzepte. Daher musste es untersucht werden, wenn die Lösung für den Aufbau eines effizienten Mikrokernels im Gegensatz zu früheren Versuchen die korrekten Konstruktionstechniken angewendet hat.[36]

Am anderen Ende die Hierarchische Schutzdomänen Architektur, die zum Design eines monolithischen Kernels führt[30] hat jedes Mal einen signifikanten Leistungsnachteil, wenn eine Wechselwirkung zwischen verschiedenen Schutzebenen besteht (d. H. Wenn ein Prozess eine Datenstruktur sowohl im "Benutzermodus" als auch im "Supervisor -Modus" manipulieren muss), da dies das Kopieren von Nachrichten erfordert nach Wert.[38]

Das Hybridkern Ansatz kombiniert die Geschwindigkeit und das einfachere Design eines monolithischen Kernels mit der Modularität und Ausführungssicherheit eines Mikrokernels

Hybrid- (oder modulare) Kerne

Hybridkerne werden in den meisten kommerziellen Betriebssystemen verwendet, wie z. Microsoft Windows NT 3,1, NT 3.5, NT 3,51, NT 4,0, 2000, XP, Vista, 7, 8, 8,1 und 10. Apple Inceigene Mac OS verwendet einen hybriden Kernel, der genannt wird Xnu das basiert auf Code von OSF/1's Mach Kernel (OSFMK 7.3)[39] und Freebsd's monolithischer Kernel. Sie ähneln Mikrokerneln, außer dass sie einen zusätzlichen Code im Kernel-Raum enthalten, um die Leistung zu steigern. Diese Kerne stellen einen Kompromiss dar, der von einigen Entwicklern implementiert wurde, um die Hauptvorteile sowohl von monolithischen als auch von Mikrokernern zu berücksichtigen. Diese Arten von Kerneln sind Erweiterungen von Mikrokörnern mit einigen Eigenschaften monolithischer Kerne. Im Gegensatz zu monolithischen Kerneln können diese Kernelarten nicht zur Laufzeit alleine laden. Hybridkerne sind Mikrokerne, die im Kernel-Raum einen "nicht wesentlichen" Code haben, damit der Code schneller ausgeführt worden wäre als im Benutzerraum. Hybridkörner sind ein Kompromiss zwischen den monolithischen und mikrokernellen Designs. Dies impliziert einige Dienste (wie die Netzwerkstapel oder der Dateisystem) Im Kernel -Raum, um den Leistungsaufwand eines herkömmlichen Mikrokernels zu verringern, aber dennoch Kernelcode (wie Gerätefahrer) als Server im Benutzerbereich ausführt.

Viele traditionell monolithische Kerne addieren jetzt zumindest die Modulfunktion (oder verwenden). Das bekannteste dieser Kerne ist der Linux -Kernel. Der modulare Kernel kann im Wesentlichen Teile davon haben, die in den Kernkern -Binär- oder Binärdateien integriert sind, die in den Speicher auf Bedarf gelangen. Es ist wichtig anzumerken, dass ein Code -verdorbenes Modul das Potenzial hat, einen laufenden Kernel zu destabilisieren. Viele Menschen werden in diesem Punkt verwirrt, wenn sie über Mikrokerne diskutieren. Es ist möglich, einen Treiber für einen Mikrokernel in einem völlig separaten Speicherplatz zu schreiben und ihn vor "Live" zu testen. Wenn ein Kernelmodul geladen ist, greift es auf den Speicherraum des monolithischen Teils zu, indem es ihm hinzufügt, was es benötigt, wodurch die Tür für mögliche Verschmutzung geöffnet wird. Einige Vorteile des modularen (oder) Hybridkerns sind:

  • Schnellere Entwicklungszeit für Treiber, die in den Modulen aus operieren können. Für das Testen ist kein Neustart erforderlich (vorausgesetzt, der Kernel ist nicht destabilisiert).
  • Auf der Demand -Fähigkeit und der Zeit, einen ganzen Kernel für Dinge wie neue Treiber oder Subsysteme zu verbringen.
  • Eine schnellere Integration der Technologie von Drittanbietern (im Zusammenhang mit der Entwicklung, aber dennoch für sich selbst relevant).

Module kommunizieren im Allgemeinen mit dem Kernel mit einer Modulschnittstelle irgendeiner Art. Die Schnittstelle ist verallgemeinert (obwohl es speziell für ein bestimmtes Betriebssystem), sodass es nicht immer möglich ist, Module zu verwenden. Oft benötigen die Gerätetreiber möglicherweise mehr Flexibilität als die Modulschnittstelle. Im Wesentlichen sind es zwei Systemanrufe, und häufig können die Sicherheitsüberprüfungen, die nur einmal im monolithischen Kernel durchgeführt werden müssen, jetzt zweimal durchgeführt werden. Einige der Nachteile des modularen Ansatzes sind:

  • Mit mehr Schnittstellen besteht die Möglichkeit erhöhter Fehler (was mehr Sicherheitslöcher impliziert).
  • Die Aufrechterhaltung von Modulen kann für einige Administratoren bei Problemen wie Symbolunterschieden verwirrend sein.

Nanokernel

Ein Nanokernel delegiert praktisch alle Dienste - einschließlich der grundlegendsten wie Controller unterbrechen oder der Timer- zu Gerätetreiber Damit die Kernel -Speicheranforderung noch kleiner als ein herkömmlicher Mikrokernel ist.[40]

Exokernel

Exokernel sind ein noch experimenteller Ansatz für das Design des Betriebssystems. Sie unterscheiden sich von anderen Arten von Kerneln, um ihre Funktionalität auf den Schutz und die Multiplexe der Rohhardware zu beschränken, und bieten keine Hardwareabstraktionen, auf denen Anwendungen entwickelt werden können. Mit dieser Trennung des Hardwareschutzes vor Hardwareverwaltung können Anwendungsentwickler bestimmen, wie die verfügbare Hardware für jedes bestimmte Programm die effizienteste Nutzung nutzen kann.

Exokernel an sich sind extrem klein. Sie werden jedoch von Bibliotheksbetriebssystemen begleitet (siehe auch Unikernel), Bereitstellung von Anwendungsentwicklern die Funktionen eines herkömmlichen Betriebssystems. Dies hängt davon ab, dass jeder Benutzer seinen eigenen Rest des Kernels von Nahkampf schreibt, was eine sehr gefährdete, komplexe und ziemlich entmutigende Aufgabe ist-insbesondere in einer zeitbeschränkten produktionsorientierten Umgebung, weshalb Exokernel nie nie gefangen auf. Ein wesentlicher Vorteil von Exokernel-basierten Systemen besteht darin, dass sie mehrere Bibliotheksbetriebssysteme einbeziehen können, wobei jeweils ein anderes exportiert wird APIzum Beispiel eine für hohe Ebene UI Entwicklung und eine für Echtzeit Kontrolle.

Geschichte der Kernelentwicklung

Frühe Betriebssystemkerne

Streng genommen ist ein Betriebssystem (und damit ein Kernel) nicht erforderlich einen Computer ausführen. Programme können direkt auf der "Bare Metal" -Maschine geladen und ausgeführt werden, sofern die Autoren dieser Programme bereit sind, ohne Hardware -Abstraktions- oder Betriebssystemunterstützung zu arbeiten. Die meisten frühen Computer arbeiteten in den 1950er und frühen 1960er Jahren auf diese Weise, die zwischen der Ausführung verschiedener Programme zurückgesetzt und neu geladen wurden. Schließlich kleine Nebenprogramme wie Programmlader und Debugger wurden zwischen den Läufen im Speicher gelassen oder geladen von Rom. Bei der Entwicklung bildeten sie die Grundlage für das, was zum frühen Betriebssystemkörner wurde. Das "Rohmetall" Ansatz wird heute noch heute bei einigen verwendet Videospielkonsolen und eingebettete Systeme,[41] Im Allgemeinen verwenden neuere Computer moderne Betriebssysteme und Kernel.

1969 die RC 4000 Multiprogrammierungssystem stellte die Systemdesignphilosophie eines kleinen Kerns ein, "auf den Betriebssysteme für verschiedene Zwecke geordnet werden könnten", ordnungsgemäß ","[42] Was würde der Microkernel -Ansatz genannt werden.

Time-Sharing-Betriebssysteme

Im Jahrzehnt vorhergehen UnixDie Computer waren enorm an Kraft gewachsen - bis zu dem Punkt, an dem Computerbetreiber nach neuen Wegen suchten, um die Menschen dazu zu bringen, ihre Freizeit auf ihren Maschinen zu nutzen. Eine der Hauptentwicklungen in dieser Zeit war Zeitteilung, wobei eine Reihe von Benutzern kleine Scheiben Computerzeit erhielten, mit einer Geschwindigkeit, mit der sie anscheinend anscheinend mit ihrer eigenen, langsameren Maschine verbunden waren.[43]

Die Entwicklung von Zeitaustauschsystemen führte zu einer Reihe von Problemen. Einer war, dass Benutzer, insbesondere an Universitäten, an denen die Systeme entwickelt wurden, zu wollen schienen hacken das System, um mehr zu bekommen Zentralprozessor Zeit. Deshalb, Sicherheit und Zugangskontrolle wurde ein wichtiger Schwerpunkt der Mehrheit Projekt im Jahr 1965.[44] Ein weiteres fortlaufendes Problem war die ordnungsgemäße Behandlung von Computerressourcen: Benutzer verbrachten die meiste Zeit damit, auf das Terminal zu starren und darüber nachzudenken, was eingibt, anstatt die Ressourcen des Computers tatsächlich zu verwenden, und ein Zeit-Sharing-System sollte der CPU-Zeit an einen aktiven Benutzer Zeit geben Während dieser Zeiträume. Schließlich boten die Systeme normalerweise a Speicherhierarchie Mehrere Schichten tief und die Verteilung dieser teuren Ressource führte zu wichtigen Entwicklungen in virtueller Speicher Systeme.

Amiga

Das Kommodore Amiga wurde 1985 veröffentlicht und gehörte zu den ersten - und sicherlich am erfolgreichsten - Heimcomputern mit einer fortschrittlichen Kernelarchitektur. Die Exekutivkomponente des Amigaos Kernels, Exec.Libraryverwendet ein Mikrokernel-Nachrichten-Passing-Design, aber es gibt andere Kernelkomponenten wie Graphics.Library, die direkten Zugriff auf die Hardware haben. Es gibt keinen Speicherschutz, und der Kernel wird fast immer im Benutzermodus ausgeführt. Im Kernel-Modus werden nur spezielle Aktionen ausgeführt, und User-Mode-Anwendungen können das Betriebssystem bitten, seinen Code im Kernel-Modus auszuführen.

Unix

Ein Diagramm der Beziehung zwischen Vorgänger/Nachfolger für Familienbeziehungen für Unix-artig Systeme

Während der Entwurfsphase von Unix, Programmierer beschlossen, alle hohen Ebenen zu modellieren Gerät als Datei, weil sie den Zweck von geglaubt haben Berechnung war Datenumwandlung.[45]

Zum Beispiel, Drucker wurden an einem bekannten Ort als "Datei" dargestellt - als Daten in die Datei kopiert wurden, druckte sie aus. Andere Systeme, um eine ähnliche Funktionalität zu liefern, neigten dazu, Geräte auf niedrigerer Ebene zu virtualisieren - dh beides Geräte und Dateien wären Fälle einiger niedrigeres Level Konzept. Virtualisierung Das System auf der Dateiebene ermöglichte es den Benutzern, das gesamte System mit ihrem vorhandenen System zu manipulieren Dokumentenverwaltung Dienstprogramme und Konzepte, dramatisch vereinfachen den Betrieb. Als Erweiterung desselben Paradigmas ermöglicht Unix Programmierer, Dateien mithilfe einer Reihe kleiner Programme mit dem Konzept von zu manipulieren Rohre, die es den Benutzern ermöglichten, Vorgänge in Stufen abzuschließen und eine Datei über eine Kette von Einzweck-Tools zu füttern. Obwohl das Endergebnis das gleiche war, erhöhte die Verwendung kleinerer Programme auf diese Weise die Flexibilität sowie die einfache Entwicklung und Verwendung, sodass der Benutzer seinen Workflow durch Hinzufügen oder Entfernen eines Programms aus der Kette ändern kann.

Im Unix -Modell die Betriebssystem besteht aus zwei Teilen: Erstens die riesige Sammlung von Dienstprogrammen, die die meisten Vorgänge vorantreiben; Zweitens der Kernel, der die Programme ausführt.[45] Unter Unix ist die Unterscheidung zwischen den beiden aus programmierender Sicht ziemlich dünn; Der Kernel ist ein Programm, das im Supervisor -Modus ausgeführt wird.[46] Dies fungiert als Programmlader und Supervisor für die kleinen Versorgungsprogramme, die den Rest des Systems ausmachen und bereitstellen Sperren und I/o Dienstleistungen für diese Programme; Darüber hinaus hat der Kernel überhaupt nicht eingegriffen Benutzerraum.

Im Laufe der Jahre änderte sich das Computermodell und die Behandlung von UNIX von durch alles als Datei oder Byte Stream war nicht mehr so ​​universell anwendbar wie zuvor. Obwohl a Terminal Könnte als Datei oder Byte -Stream behandelt werden, der gedruckt oder gelesen wird, der gleiche schien für a nicht wahr zu sein grafische Benutzeroberfläche. Networking stellte ein anderes Problem dar. Selbst wenn die Netzwerkkommunikation mit dem Dateizugriff verglichen werden kann, befasste sich die paketorientierte Architektur mit niedrigem Niveau mit diskreten Datenbrocken und nicht mit ganzen Dateien. Als die Fähigkeit von Computern zunahm, wurde Unix zunehmend mit Code überfüllt. Es liegt auch daran, dass die Modularität des Unix -Kernels ausführlich skalierbar ist.[47] Während Kerne vielleicht 100.000 gehabt haben können Zeilen von Code In den siebziger und achtziger Jahren mögen Kerne Linux, von modernen Unix -Nachfolgern mögen GNU, haben mehr als 13 Millionen Linien.[48]

Moderne Unix-Derivate basieren im Allgemeinen auf modulladenden monolithischen Kerneln. Beispiele hierfür sind die Linux Kernel in den vielen Verteilungen von GNU, IBM AIX, ebenso wie Berkeley Software Distribution Variante Kerne wie Freebsd, Dragonflybsd, OpenBSD, Netbsd, und Mac OS. Abgesehen von diesen Alternativen halten Amateurentwickler eine aktive Betriebssystementwicklungsgemeinschaft, bevölkert von selbst geschriebenen Hobby-Kerneln, die hauptsächlich viele Funktionen mit Linux-, FreeBSD-, DragonflyBsd-, OpenBSD- oder NetBSD-Kerneln teilen und/oder mit ihnen kompatibel sind.[49]

Mac OS

Apfel startete zuerst seine Klassischer Mac OS 1984, gebündelt mit seinem Macintosh persönlicher Computer. Apple wechselte in ein Nanokernel -Design in Mac OS 8.6. Dagegen die Moderne Mac OS (ursprünglich Mac OS X) basiert auf Darwin, das einen hybriden Kernel verwendet, der genannt wird Xnu, was durch Kombination der geschaffen wurde 4.3bsd Kernel und der Mach Kernel.[50]

Microsoft Windows

Microsoft Windows wurde erstmals 1985 als Add-On veröffentlicht MS-DOS. Aufgrund seiner Abhängigkeit von einem anderen Betriebssystem wurden anfängliche Veröffentlichungen von Windows vor Windows 95 als als als angesehen Betriebsumgebung (nicht zu verwechseln mit einem Betriebssystem). Diese Produktlinie entwickelte sich in den 1980er und 1990er Jahren weiterhin mit dem Windows 9x Serie addiert 32-Bit-Adressierung und präventive Multitasking; endete mit der Veröffentlichung von Fenster mich in 2000.

Microsoft hat sich ebenfalls entwickelt Windows NT, ein Betriebssystem mit einer sehr ähnlichen Schnittstelle, aber für High-End- und Geschäftsanwender vorgesehen. Diese Zeile begann mit der Veröffentlichung von Windows NT 3.1 1993 und wurde allgemeine Benutzer mit der Veröffentlichung von vorgestellt Windows XP Im Oktober 2001 - Ersetzen Windows 9x mit einem völlig anderen, viel anspruchsvolleren Betriebssystem. Dies ist die Linie, mit der fortgesetzt wird Windows 11.

Das Architektur von Windows NTDer Kernel gilt als Hybridkernel, da der Kernel selbst Aufgaben wie den Fenstermanager und die IPC -Manager mit einem Client/Server -Schicht -Subsystemmodell enthält.[51] Es wurde als modifiziert gestaltet Mikrokernel, wie der Windows NT -Kernel von der beeinflusst wurde Mach Microkernel erfüllt aber nicht alle Kriterien eines reinen Mikrokernels.

IBM Supervisor

Aufsichtsprogramm oder Supervisor ist ein Computer Programm, normalerweise Teil eines Betriebssystem, das kontrolliert die Ausführung anderer Routinen und reguliert Arbeitsplanung, Input-Output Operationen, Fehleraktionenund ähnliche Funktionen und reguliert den Arbeitsfluss in a Datenverarbeitung System.

Historisch gesehen war dieser Begriff im Wesentlichen mit damit verbunden IBM's Linie von Mainframe Betriebssysteme beginnend mit OS/360. In anderen Betriebssystemen wird der Vorgesetzte im Allgemeinen als Kernel bezeichnet.

In den 1970er Jahren legte IBM den Vorgesetzten weiter ab Zustand von der Hardware, was zu einem führt Hypervisor Das war aktiviert Vollständige Virtualisierung, d. H. Die Kapazität, mehrere Betriebssysteme auf derselben Maschine vollständig voneinander auszuführen. Daher wurde das erste derartige System genannt Virtuelle Maschine oder VM.

Entwicklung von Mikrokernel

Obwohl Mach, entwickelt von Richard Rashid bei Carnegie Mellon Universität, ist das bekannteste allgemeine Mikrokernel, andere Mikrokernel wurden mit spezifischeren Zielen entwickelt. Das L4 Microkernel -Familie (hauptsächlich der L3 und der L4 -Kernel) wurde erstellt, um zu zeigen, dass Mikrokernel nicht unbedingt langsam sind.[52] Neuere Implementierungen wie z. Fiasko und Pistazien können laufen Linux Neben anderen L4 -Prozessen in separaten Adressräumen.[53][54]

Zusätzlich, Qnx ist ein Mikrokernel, das hauptsächlich in verwendet wird eingebettete Systeme,[55] und die Quelloffene Software Minix, obwohl sie ursprünglich für Bildungszwecke geschaffen wurde, konzentriert sich nun darauf, a zu sein äußerst zuverlässig und Selbstheilung Microkernel OS.

Siehe auch

Anmerkungen

  1. ^ Es kann von der abhängen Rechnerarchitektur

Verweise

  1. ^ a b "Kernel". Linfo. Bellevue Linux -Benutzergruppe. Archiviert Aus dem Original am 8. Dezember 2006. Abgerufen 15. September 2016.
  2. ^ Randal E. Bryant; David R. O’Hallaron (2016). Computersysteme: Perspektive eines Programmierers (Dritter Aufl.). Pearson. p. 17. ISBN 978-0134092669.
  3. ^ vgl. Daemon (Computer)
  4. ^ a b Roch 2004
  5. ^ a b c d e f g Wulf 1974 S. 337–345
  6. ^ a b Silberschatz 1991
  7. ^ Tanenbaum, Andrew S. (2008). Modern Operating Systems (3. Aufl.). Prentice Hall. S. 50–51. ISBN 978-0-13-600663-3. . . . Nahezu alle Systemanrufe werden aus C -Programmen aufgerufen, indem sie einen Bibliotheksverfahren aufrufen. . . Die Bibliotheksverfahren. . . Führen Sie einen Trap -Befehl aus, um vom Benutzermodus in den Kernel -Modus zu wechseln und die Ausführung zu starten. . .
  8. ^ Denning 1976
  9. ^ Swift 2005, S. 29 Zitat: "Isolation, Ressourcenkontrolle, Entscheidungsüberprüfung (Überprüfung) und Fehlerwiederherstellung."
  10. ^ Schroeder 72
  11. ^ a b Linden 76
  12. ^ Stephane Eranian und David Mosberger, Virtueller Speicher im IA-64 Linux-Kernel Archiviert 2018-04-03 bei der Wayback -Maschine, Prentice Hall PTR, 2002
  13. ^ Silberschatz & Galvin, Betriebssystemkonzepte, 4. Aufl., S. 445 & 446
  14. ^ Hoch, Charles; J. C. Browne (Juli 1980). "Eine Implementierung von Funktionen für die PDP-11/45". ACM SIGOPS -Betriebssysteme Überprüfung. 14 (3): 22–32. doi:10.1145/850697.850701. S2CID 17487360.
  15. ^ a b Ein sprachbasierter Sicherheitsansatz Archiviert 2018-12-22 bei der Wayback -Maschine, Schneider F., Morrissett G. (Cornell University) und Harper R. (Carnegie Mellon University)
  16. ^ a b c P. A. Loscocco, S.D. Smalley, P.A. Muckelbauer, R.C. Taylor, S.J. Turner und J. F. Farrell. Die Unvermeidlichkeit des Scheiterns: Die fehlerhafte Annahme der Sicherheit in modernen Computerumgebungen Archiviert 2007-06-21 am Wayback -Maschine. In Proceedings der 21. National Information Systems Security Conference, Seiten 303–314, Oktober 1998. [1] Archiviert 2011-07-21 bei der Wayback -Maschine.
  17. ^ Lepreau, Jay; Ford, Bryan; Hiber, Mike (1996). "Die anhaltende Relevanz des lokalen Betriebssystems für globale Anwendungen". Proceedings des 7. Workshops über ACM Sigops Europäische Workshop -Systeme für weltweite Anwendungen - EW 7. p. 133. doi:10.1145/504450.504477. S2CID 10027108.
  18. ^ J. Anderson, Planungsstudie zur Planung der Computersicherheitstechnologie Archiviert 2011-07-21 bei der Wayback -Maschine, Air Force Elect. Systems Div., ESD-TR-73-51, Oktober 1972.
  19. ^ Jerry H. Salzer; Mike D. Schroeder (September 1975). "Der Schutz von Informationen in Computersystemen". Proceedings of the IEEE. 63 (9): 1278–1308. Citeseerx 10.1.1.126.9257. doi:10.1109/proc.1975.9939. S2CID 269166. Archiviert vom Original am 2021-03-08. Abgerufen 2007-07-15.
  20. ^ Jonathan S. Shapiro; Jonathan M. Smith; David J. Farber (1999). "Eros: Ein schnelles Fähigkeitssystem". Verfahren des 17. ACM -Symposiums über Betriebssystemprinzipien. 33 (5): 170–185. doi:10.1145/319344.319163.
  21. ^ Dijkstra, E. W. Kooperierende sequentielle Prozesse. Mathematik. Dep., Technological U., Eindhoven, September 1965.
  22. ^ a b c d e Brinch Hansen 70 S. 238–241
  23. ^ Harrison, M. C.; Schwartz, J. T. (1967). "Sharer, ein Zeit -Sharing -System für die CDC 6600". Kommunikation der ACM. 10 (10): 659–665. doi:10.1145/363717.363778. S2CID 14550794. Abgerufen 2007-01-07.
  24. ^ Huxtable, D. H. R.; Warwick, M. T. (1967). Dynamische Vorgesetzte - ihre Gestaltung und Konstruktion. S. 11.1–11.17. doi:10.1145/800001.811675. ISBN 9781450373708. S2CID 17709902. Archiviert vom Original am 2020-02-24. Abgerufen 2007-01-07.
  25. ^ Baisiardi 1988
  26. ^ a b Levin 75
  27. ^ Denning 1980
  28. ^ Jürgen Nehmer, "Die Unsterblichkeit von Betriebssystemen oder: Ist die Forschung in Betriebssystemen noch gerechtfertigt?",", Vorlesungsnotizen in Informatik; Vol. 563. Verfahren des Internationalen Workshops zu Betriebssystemen der 90er und darüber hinaus. S. 77–83 (1991) ISBN3-540-54987-0 [2] Archiviert 2017-03-31 bei der Wayback -Maschine Zitat: "Die letzten 25 Jahre haben gezeigt, dass die Forschung zur Betriebssystemarchitektur einen geringen Einfluss auf den bestehenden Hauptstrom hatte [sic] Systeme. "
  29. ^ Levy 84, S.1 Zitat: "Obwohl die Komplexität von Computeranwendungen jährlich zunimmt, bleibt die zugrunde liegende Hardwarearchitektur für Anwendungen seit Jahrzehnten unverändert."
  30. ^ a b c Levy 84, S.1 Zitat: "Konventionelle Architekturen unterstützen eine einzelne privilegierte Betriebsart. Diese Struktur führt zu monolithischem Design; jedes Modul, das Schutz benötigt Geschützte Domäne könnten Systeme als Sammlung unabhängiger Module entwickelt werden, die von jedem Benutzer erweitert sind. "
  31. ^ "Offene Quellen: Stimmen aus der Open -Source -Revolution". 1-56592-582-3. 29. März 1999. Archiviert vom Original am 1. Februar 2020. Abgerufen 24. März 2019.
  32. ^ Die virtuelle Adressierung wird am häufigsten durch ein integriertes erreicht Speicherverwaltungseinheit.
  33. ^ Aufnahmen der Debatte zwischen Torvalds und Tanenbaum finden Sie bei Dina.dk Archiviert 2012-10-03 bei der Wayback -Maschine, Groups.google.com Archiviert 2013-05-26 bei der Wayback -Maschine, oreilly.com Archiviert 2014-09-21 bei der Wayback -Maschine und Die Website von Andrew Tanenbaum Archiviert 2015-08-05 in der Wayback -Maschine
  34. ^ a b Matthew Russell. "Was ist Darwin (und wie macht es Mac OS X)". O'Reilly Media. Archiviert vom Original am 2007-12-08. Abgerufen 2008-12-09. Zitat: "Die eng gekoppelte Natur eines monolithischen Kernels ermöglicht es ihm, die zugrunde liegende Hardware [...] sehr effizient zu nutzen [...]. Leider sind diese Vorteile den Kosten, dass das Mikrokernel viele Informationen in und aus dem Kernelraum durch einen als Kontextschalter bezeichneten Prozess übergeben muss. Kontextschalter führen zu erheblichen Overheads und führen daher zu einer Leistungsstrafe. "
  35. ^ "Betriebssysteme/Kernel -Modelle - Wikiversity". en.wikiversity.org. Archiviert vom Original am 2014-12-18. Abgerufen 2014-12-18.
  36. ^ a b c d Lügen 95
  37. ^ Härtig 97
  38. ^ Hansen 73, Abschnitt 7.3 S.233 "Wechselwirkungen zwischen verschiedenen Schutzebenen erfordern die Übertragung von Nachrichten nach Wert"
  39. ^ Magee, Jim. WWDC 2000 Session 106 - Mac OS X: Kernel. 14 Minuten in. Archiviert von das Original am 2021-10-30.
  40. ^ Keykos Nanokernel Architektur Archiviert 2011-06-21 bei der Wayback -Maschine
  41. ^ Ball: Embedded Microprozessor Designs, p. 129
  42. ^ Hansen 2001 (OS), S. 17–18
  43. ^ "BSTJ -Version von C.ACM Unix Paper". glockenlabs.com. Archiviert vom Original am 2005-12-30. Abgerufen 2006-08-17.
  44. ^ Einführung und Übersicht über das Mehrschichtsystem Archiviert 2011-07-09 bei der Wayback -Maschine, von F. J. Corbató und V. A. VisSotsky.
  45. ^ a b "Die Einzel -Unix -Spezifikation". Die offene Gruppe. Archiviert von das Original am 2016-10-04. Abgerufen 2016-09-29.
  46. ^ Die höchste Privilegienstufe enthält verschiedene Namen in verschiedenen Architekturen, wie z. B. Supervisor -Modus, Kernel -Modus, CPL0, DPL0, Ring 0 usw. Ring (Computersicherheit) für mehr Informationen.
  47. ^ "Unix 'Rache". Asymco.com. 29. September 2010. Archiviert Aus dem Original am 9. November 2010. Abgerufen 2. Oktober 2010.
  48. ^ Wheeler, David A. (12. Oktober 2004). "Linux Kernel 2.6: Es ist mehr wert!".
  49. ^ Diese Gemeinschaft sammelt sich meistens bei Bona Fide OS -Entwicklung Archiviert 2022-01-17 am Wayback -Maschine, Das Mega-Tokyo Message Board Archiviert 2022-01-25 am Wayback -Maschine und andere Websites für Betriebssysteme enthusiast.
  50. ^ Xnu: Der Kernel Archiviert 2011-08-12 im Wayback -Maschine
  51. ^ "Windows - Offizielle Site für Microsoft Windows 10 Home & Pro OS, Laptops, PCs, Tablets und mehr". Windows.com. Archiviert vom Original am 2011-08-20. Abgerufen 2019-03-24.
  52. ^ "Die L4 Microkernel -Familie - Übersicht". os.inf.tu-dresden.de. Archiviert vom Original am 2006-08-21. Abgerufen 2006-08-11.
  53. ^ "Das Fiasco Microkernel - Übersicht". os.inf.tu-dresden.de. Archiviert vom Original am 2006-06-16. Abgerufen 2006-07-10.
  54. ^ Zoller (Inaktiv), Heinz (7. Dezember 2013). "L4KA - L4KA -Projekt". www.l4ka.org. Archiviert Aus dem Original am 19. April 2001. Abgerufen 24. März 2019.
  55. ^ "QNX -Betriebssysteme". Blackberry.qnx.com. Archiviert vom Original am 2019-03-24. Abgerufen 2019-03-24.

Quellen

Weitere Lektüre

  • Andrew Tanenbaum, Betriebssysteme - Design und Implementierung (dritte Ausgabe);
  • Andrew Tanenbaum, Moderne Betriebssysteme (zweite Ausgabe);
  • Daniel P. Bovet, Marco Cesati, Der Linux -Kernel;
  • David A. Peterson, Nitin Indurkhya, Patterson, Computerorganisation und Design, Morgan Koffman ( ISBN1-55860-428-6);
  • B.S. Kreide, Computerorganisation und Architektur, Macmillan P. ( ISBN0-333-64551-0).

Externe Links