Definition

Kernel

Mitarbeiter: Jessica Lulka

Der Kernel ist das wesentliche Zentrum eines Computerbetriebssystems (OS). Er ist der Kern, der grundlegende Dienste für alle anderen Teile des Betriebssystems bereitstellt. Er ist die Hauptschicht zwischen dem Betriebssystem und der Hardware, und er unterstützt die Prozess- und Speicherverwaltung, den Dateisystemen, der Gerätesteuerung und der Vernetzung.

Fortsetzung des Inhalts unten

Ein Kernel wird oft der Shell gegenübergestellt, die der äußerste Teil eines Betriebssystems ist, der mit Benutzerbefehlen interagiert. Kernel und Shell sind Begriffe, die in Unix-Betriebssystemen häufiger verwendet werden als in IBM-Mainframe- oder Microsoft-Windows-Systemen.

Ein Kernel ist nicht mit dem grundlegenden Ein-/Ausgabesystem ( Basic Input/Output System BIOS) zu verwechseln, bei dem es sich um ein unabhängiges Programm handelt, das auf einem Chip innerhalb der Leiterplatte eines Computers gespeichert ist.

Typischerweise enthält ein Kernel einen Interrupt-Handler, der alle angefragten oder abgeschlossenen Ein-/Ausgabe-Operationen (E/A, Input/Output, I/O) ausführt, die durch den Kernel bedient werden; einen Scheduler, der bestimmt, wie Programme sich die Verarbeitungszeit des Kernels teilen und einen Supervisor, der dafür zuständig ist, den Programmen zum festgelegten Zeitpunkt den Computer zur Nutzung zuzuteilen.

Aufbau eines KernelsAbbildung 1: Aufbau eines Kernels.

Ein Kernel kann auch einen Manager für die Adressräume des Betriebssystems im Speicher oder in der Speicherung enthalten. Der Manager teilt die Adressräume unter allen Komponenten und anderen Benutzern der Dienste des Kernels auf. Andere Teile des Betriebssystems und Anwendungsprogramme fordern die Dienste eines Kernels über eine Reihe von Programmschnittstellen an, die als Systemaufrufe bezeichnet werden.

Gerätetreiber

Gerätetreiber helfen dem Kernel beim Ausführen von Aktionen. Gerätetreiber sind Codestücke, die ausgeführt werden, wenn ein zugehöriges Gerät über einen USB-Anschluss oder einen Software-Download an das Betriebssystem oder die Hardware angeschlossen werden.

Gerätetreiber helfen, die Lücke zwischen Benutzeranwendungen und Hardware zu schließen und das Innenleben des Codes zu rationalisieren. Um eine ordnungsgemäße Funktionalität zu gewährleisten, muss im Kernel für jedes im System vorhandene Peripheriegerät ein Gerätetreiber eingebettet sein.

Es gibt verschiedene Arten von Gerätetreibern. Jeder adressiert unterschiedliche Datenübertragungsarten. Einige Haupttypen sind:

  • Zeichengerätetreiber implementieren, öffnen, schließen, lesen und schreiben Daten und gewähren dem Benutzer Zugriff auf den Datenstrom.
  • Block-Gerätetreiber bieten Gerätezugriff für Hardware, die wahlfrei zugängliche Daten in festen Blöcken überträgt.
  • Netzwerkgerätetreiber übertragen Datenpakete für Hardwareschnittstellen, die eine Verbindung zu externen Systemen herstellen.

Da das Betriebssystem den Code, aus dem der Kernel besteht, kontinuierlich benötigt, wird der Code normalerweise in den Computerspeicher in einem geschützten Bereich geladen, so dass er nicht mit weniger häufig verwendeten Teilen des Betriebssystems überlagert wird.

Geschichte und Entwicklung des Kernels

Vor dem Kernel kodierten die Entwickler Aktionen direkt für den Prozessor, anstatt sich auf ein Betriebssystem zu verlassen, um die Interaktionen zwischen Hardware und Software zu vervollständigen.

Der erste Versuch, ein Betriebssystem zu schaffen, das Nachrichten über den Kernel weiterleitet, wurde 1969 mit dem RC 4000 Multiprogramming System unternommen. Der Programmierer Per Brinch Hansen entdeckte, dass es einfacher war, einen Kernel zu erstellen und dann ein Betriebssystem aufzubauen, anstatt bestehende Betriebssysteme zu konvertieren, damit sie mit neuer Hardware kompatibel sind. Dieser Nukleus – oder Kernel – enthielt den gesamten Quellcode, um die Kommunikation zu erleichtern und Systeme zu unterstützen. Dadurch fiel die Notwendigkeit, direkt auf der CPU zu programmieren, weg.

Nach dem RC 4000 begannen die Bell Labs-Forscher mit der Arbeit an Unix, das die Entwicklung von Betriebssystemen und die Kernel-Integration radikal veränderte. Das Ziel von Unix war es, kleinere Dienstprogramme zu schaffen, die bestimmte Aufgaben gut erledigen, statt die Systemwerkzeuge mehrere Aufgaben gleichzeitig zu durchführen zu lassen. Aus der Sicht des Benutzers vereinfacht dies die Erstellung von Shell-Skripten, die einfache Werkzeuge kombinieren.

Als die Akzeptanz von Unix zunahm, kam eine Vielzahl von Unix-ähnlichen Computerbetriebssystemen auf den Markt, darunter Berkeley Software Distribution (BSD), NeXTSTEP und Linux. Unix hatte ein für alle Mal bewiesen, dass es viel einfacher war, einen Kernel auf einem Betriebssystem zu bauen, das Software wiederverwendet und konsistente Hardware hat, statt sich auf ein Timesharing-System zu verlassen, das kein Betriebssystem benötigt.

Unix brachte Betriebssysteme auf individuellere Systeme, aber Forscher an der Carnegie Mellon erweiterten die Kernel-Technologie. Von 1985 bis 1994 erweiterten sie die Arbeit am Mach-Kernel. Im Gegensatz zu BSD ist der Mach-Kernel betriebssystemunabhängig und unterstützt mehrere Prozessorarchitekturen. Die Forscher machten ihn binärkompatibel mit der bestehenden BSD-Software, so dass er für den sofortigen Einsatz und weitere Experimente zur Verfügung stand.

Das ursprüngliche Ziel des Mach-Kernels war es, eine sauberere Version von Unix und eine portablere Version des IPC-Kernels (Accent Interprocess Communication) von Carnegie Mellon zu entwickeln. Mit der Zeit brachte der Kernel neue Funktionen mit sich, wie zum Beispiel. Ports und IPC-basierte Programme, und entwickelte sich schließlich zum sogenannten Mikrokernel.

Kurz nach dem Mach-Kernel, im Jahr 1986, veröffentlichte der Entwickler Andrew Tanenbaum von der Vrije Universiteit Amsterdam MINIX (mini-Unix) für Anwendungsfälle in Lehre und Forschung. Diese Distribution enthielt eine auf einem Mikrokernel basierende Struktur, Multitasking, einen geschützten Modus, erweiterte Speicherunterstützung und einen C-Compiler des American National Standards Institute (ANSI).

Der nächste große Fortschritt in der Kerneltechnologie kam 1992 mit der Veröffentlichung des Linux-Kernels. Der Gründer Linus Torvalds entwickelte ihn als Hobby, aber er lizenzierte den Kernel immer noch unter der GNU General Public License (GPL) und stellte ihn damit als Open Source zur Verfügung. Er wurde zuerst mit 176.250 Zeilen Code veröffentlicht.

Die Mehrheit der Betriebssysteme – und ihrer Kernel – kann auf Unix zurückgeführt werden, aber es gibt einen Ausreißer: Windows. Um and die Popularität von von DOS- und IBM-kompatiblen PCs anzuknüpfen, entwickelte Microsoft den NT-Kernel und richtete sein Betriebssystem an DOS auf, weshalb sich das Schreiben von Befehlen für Windows von Unix-basierten Systemen unterscheidet.

Arten von Kerneln

Der Linux-Kernel wächst ständig weiter, Im Jahr 2019 umfasste er 25 Millionen Zeilen Code. Der Kernel besteht aus aufgeschichteten Subsystemen. Zu den Hauptgruppen gehören eine Systemaufrufschnittstelle, Prozessverwaltung, Netzwerk-Stack, Speicherverwaltung, virtuelles Dateisystem, Arch- und Gerätetreiber.

Administratoren können den Linux-Kernel in ihre Betriebssysteme portieren und Live-Updates ausführen. Diese Funktionen und die Tatsache, dass Linux Open Source ist, machen es besser geeignet für Serversysteme oder Umgebungen, die Echtzeitwartung erfordern.

Über Linux hinaus hat Apple 1996 den XNU-Betriebssystemkern als Hybrid aus Mach- und BSD-Kernel entwickelt und ihn mit einer Objective-C-Programmierschnittstelle (API) gepaart. Da es sich um eine Kombination aus monolithischem Kernel und Mikrokernel handelt, wurde die Modularität erhöht, und Teile des Betriebssystems erhalten Speicherschutz.

Mikrokerne versus monolithische Kernel

Kerne lassen sich in zwei Hauptarchitekturen unterteilen: monolithische und Mikrokerne. Der Hauptunterschied zwischen diesen Typen liegt in der Anzahl der von ihnen unterstützten Adressräume.

Ein Mikrokernel delegiert Benutzerdienste und Kerneldienste in verschiedene Adressräume, während monolithische Kernel Dienste im gleichen Adressraum implementieren. Der Mikrokernel hat alle seine Dienste in einem Kernel-Adressraum. Der monolithische Kernel ist größer, weil er sowohl Kernel- als auch Benutzerdienste im gleichen Adressraum beherbergt.

Auch das Kommunikationsprotokoll unterscheidet sich zwischen den beiden, wobei monolithische Kernel einen schnelleren Systemaufruf verwenden, um Prozesse zwischen der Hardware und der Software auszuführen. Mikrokerne verwenden Message-Passing, das Datenpakete, Signale und Funktionen an die richtigen Prozesse sendet.

Mikrokerne bieten größere Flexibilität. Wenn es darum geht, einen neuen Dienst hinzuzufügen, können Administratoren den Benutzeradressraum ändern. Monolithische Kernel erfordern mehr Arbeit, da die Administratoren den gesamten Kernel rekonstruieren müssen, um den neuen Dienst zu unterstützen.

Aufgrund ihrer isolierten Natur sind Mikrokerne sicherer und bleiben unbeeinflusst, wenn ein Dienst innerhalb des Adressraums ausfällt. Monolithische Kernel stellen ein größeres Sicherheitsrisiko für Systeme dar, da beim Ausfall eines Dienstes das gesamte System heruntergefahren wird.

Monolithische Kernel benötigen nicht so viel Quellcode wie ein Mikrokernel, was bedeutet, dass sie weniger anfällig für Fehler sind. Insgesamt ist die Wahl des Kernels immer ein Kompromiss: entweder erhalten Administratoren die Flexibilität von mehr Quellcode oder mehr Sicherheit, aber weniger Anpassungsmöglichkeiten.

Diese Definition wurde zuletzt im September 2020 aktualisiert

Erfahren Sie mehr über Serverbetriebssysteme

ComputerWeekly.de

Close