Definition

Kernel

Der Kernel ist metaphorisch gesprochen das Herz des Betriebssystems (OS) eines Computers. Er ist der Kern, der grundlegende Dienste für alle anderen Teile des Betriebssystems bereitstellt. Er bildet die unterste Schicht zwischen dem Betriebssystem und der Hardware und hilft bei Aufgaben wie Prozess- und Speicherverwaltung, Dateisystemen, Gerätesteuerung und Netzwerken.

Während des normalen Systemstarts führt das UEFI (Unified Extensible Firmware Interface) eines Computers einen Hardware-Bootstrap oder eine Initialisierung durch. Anschließend führt es einen Bootloader aus, der den Kernel von einem Speichergerät – zum Beispiel einer Festplatte – in einen geschützten Speicherbereich lädt. Sobald der Kernel in den Computerspeicher geladen ist, überträgt das UEFI die Kontrolle an den Kernel. Anschließend lädt es andere Betriebssystemkomponenten, um den Systemstart abzuschließen und dem Benutzer das Steuern über die Benutzeroberfläche zu ermöglichen.

Wenn der Kernel beschädigt ist oder nicht lädt, lässt sich der Computer nicht mehr vollständig starten – wenn überhaupt. In diesem Fall ist ein Service erforderlich, um den Hardwareschaden zu beheben oder den Betriebssystem-Kernel in einer funktionierenden Version wiederherzustellen.

Aufbau eines Kernels
Abbildung 1: Ein Kernel sitzt zwischen der Hardware und dem Betriebssystem.

Was ist der Zweck des Kernels?

Im Großen und Ganzen erfüllt ein Betriebssystem-Kernel drei Hauptaufgaben.

  • Er stellt die Schnittstellen zur Verfügung, die Benutzer und Anwendungen für die Interaktion mit dem Computer benötigen.
  • Er startet und verwaltet Anwendungen.
  • Er verwaltet die zugrunde liegende Systemhardware.

Der Kernel bewältigt mit diesen drei Funktionen eine Reihe verschiedener Computeraufgaben, darunter die folgenden:

  • Laden und Verwalten von weniger kritischen Betriebssystemkomponenten, wie zum Beispiel Gerätetreibern
  • Organisieren und Verwalten von Threads und der verschiedenen Prozesse, die von laufenden Anwendungen erzeugt werden;
  • das Planen des Zugriffs auf den Kernel durch Anwendungen, und das Überwachen dieser Nutzung zum geplanten Zeitpunkt;
  • Zuweisen des Speicherplatzes an die verschiedenen Anwendungen;
  • Behandeln von Konflikten und Fehlern bei der Speicherzuweisung und -verwaltung;
  • Verwalten und Optimieren von Hardwareressourcen und -abhängigkeiten, wie zum Beispiel die Nutzung der Zentraleinheit (CPU) und des Cache, des Dateisystems und der Netzübertragungsmechanismen;
  • Verwaltung von und Zugriff auf Eingabe-/Ausgabegeräte wie Tastaturen, Mäuse, Festplattenlaufwerke, USB-Anschlüsse, Netzwerkadapter und Bildschirme; und
  • Verarbeiten von Systemaufrufen von Geräten und Anwendungen über verschiedene Mechanismen wie Hardware-Interrupts oder Gerätetreiber.

Zeitplanung und -verwaltung sind von zentraler Bedeutung für den Betrieb des Kernels. Computerhardware kann immer nur eine Sache auf einmal tun. Die Betriebssystemkomponenten und Anwendungen eines Computers bringen Dutzende oder sogar Hunderte von Prozessen hervor, die der Computer verarbeitet. Es ist unmöglich, dass alle diese Prozesse die Hardware des Computers – zum Beispiel eine Speicheradresse oder eine CPU-Befehlspipeline – gleichzeitig nutzen. Der Kernel ist die zentrale Verwaltungsstelle für diese Prozesse. Er weiß, welche Hardwareressourcen verfügbar sind und welche Prozesse sie benötigen. Anschließend weist er jedem Prozess Zeit für die Nutzung dieser Ressourcen zu.

Der Kernel ist für den Betrieb eines Computers von entscheidender Bedeutung, und muss daher im Arbeitsspeicher des Systems sorgfältig geschützt werden. Der Kernel-Bereich ist ein geschützter Bereich des Speichers. Das stellt sicher, dass andere Anwendungen und Daten den Kernel nicht überschreiben oder beeinträchtigen und dadurch Leistungsprobleme, Instabilität oder andere negative Folgen verursachen. Stattdessen werden die Anwendungen in den allgemein zugänglichen Benutzerspeicher geladen und ausgeführt.

Das Gegenstück zum Kernel ist die Shell, welche die äußerste Hülle des Betriebssystems bildet. Kernel und Shell sind Begriffe, die in Unix-Betriebssystemen häufiger verwendet werden als in IBM-Mainframe- und Microsoft-Windows-Systemen.

Ein Kernel ist nicht mit dem UEFI oder BIOS zu verwechseln, das ein unabhängiges Programm ist, das auf einem Chip in der Platine eines Computers läuft.

Gerätetreiber

Ein wichtiger Teil des Kernel-Betriebs ist die Kommunikation mit Hardware-Geräten innerhalb und außerhalb des physischen Computers. Es wäre jedoch sehr aufwändig, ein Betriebssystem zu schreiben, das mit allen Hardwaregeräten dieser Welt kompatibel ist. Stattdessen kommuniziert der Kernel mit den angeschlossenen Geräten über deren eigene Gerätetreiber.

Wenn ein Betriebssystem auf einem Computer installiert wird, fügt die Installation Gerätetreiber für alle erkannten Geräte hinzu. Das hilft dabei, die Betriebssysteminstallation auf das jeweilige System zuzuschneiden und gerade so viele Komponenten hinzuzufügen, dass die vorhandenen Geräte unterstützt werden. Wenn ein neues oder besseres Gerät ein vorhandenes Gerät ersetzt, wird der Gerätetreiber aktualisiert oder ersetzt.

Gerätetreiber lassen sich in Kernel- und Benutzermodustreiber unterteilen. Ein Kernel-Treiber ist ein allgemeiner Treiber, der zusammen mit dem Betriebssystem geladen wird. Diese Treiber eignen sich oft für kleine Kategorien von wichtigen Hardwaregeräten, wie CPU- und Motherboard-Gerätetreiber.

Benutzermodustreiber umfassen eine Reihe von Ad-hoc-Treibern für Zusatzgeräte wie Drucker, Grafikkarten, Mäuse, erweiterte Soundsysteme und andere Plug-and-Play-Geräte.

Kernelmodus versus Benutzermodus

Computerentwickler haben die Bedeutung der Sicherheit und die Notwendigkeit, kritische Funktionen zu schützen, schon lange erkannt. Bereits vor dem Internet oder sogar vor dem Aufkommen von Netzwerken mussten sie sorgfältig regeln, wie Softwarekomponenten auf Systemhardware und -ressourcen zugreifen. Prozessoren wurden so entwickelt, dass sie zwei Betriebsmodi unterstützen: den Kernel-Modus und den Benutzermodus.

Kernel-Modus

Der Kernelmodus bezieht sich auf den Prozessormodus, der Software den vollständigen und uneingeschränkten Zugriff auf das System und seine Ressourcen ermöglicht. Der Betriebssystem-Kernel und die Kernel-Treiber, wie zum Beispiel der Dateisystemtreiber, werden in den geschützten Speicherbereich geladen und arbeiten in diesem hoch privilegierten Kernel-Modus.

Benutzermodus

Der Benutzermodus bezieht sich auf den Prozessormodus, in dem benutzerbasierte Anwendungen, wie zum Beispiel ein Textverarbeitungsprogramm oder ein Videospiel, geladen und ausgeführt werden können. Der Kernel bereitet den Speicherbereich und die Ressourcen für die Verwendung durch die Anwendung vor und startet die Anwendung innerhalb dieses Benutzerspeicherbereichs.

Anwendungen im Benutzermodus sind weniger privilegiert und können nicht direkt auf Systemressourcen zugreifen. Stattdessen muss eine im Benutzermodus laufende Anwendung Systemaufrufe an den Kernel richten, um auf Systemressourcen zuzugreifen. Der Kernel fungiert dann als Manager, Scheduler und Gatekeeper für diese Ressourcen und verhindert konkurrierende Ressourcenanforderungen.

Der Prozessor schaltet in den Kernelmodus, wenn der Kernel seine Systemaufrufe verarbeitet, und schaltet dann zurück in den Benutzermodus, um die Anwendung(en) weiter zu betreiben.

Es ist erwähnenswert, dass Kernel- und Benutzermodus Prozessorzustände sind und nichts mit dem eigentlichen Solid State Memory zu tun haben. Der für den Kernel-Modus verwendete Speicher ist nicht an sich sicher oder geschützt. Abstürze von Kernel-Treibern und Speicherfehler innerhalb des Kernel-Speicherbereichs können das Betriebssystem und den Computer trotzdem zum Absturz bringen.

Arten von Kernels

Kernel lassen sich in drei Architekturen einteilen: monolithisch, Mikrokernel und Hybrid. Der Hauptunterschied zwischen diesen Typen besteht in der Anzahl der von ihnen unterstützten Adressräume.

  • Ein Mikrokernel delegiert Benutzerprozesse und -dienste sowie Kernel-Dienste in verschiedene Adressräume.
  • Ein monolithischer Kernel implementiert Dienste im gleichen Adressraum.
  • Ein hybrider Kernel, wie der Microsoft Windows NT- und der Apple XNU-Kernel, versucht, das Verhalten und die Vorteile von Mikrokernel- und monolithischen Kernelarchitekturen zu kombinieren.

Insgesamt stellen diese Kernel-Implementierungen einen Kompromiss dar: Administratoren erhalten beim Mikrokernel die Flexibilität von mehr Quellcode, während sie beim monolithischen Kernel mehr Sicherheit ohne Anpassungsmöglichkeiten erhalten.

Zu den spezifischen Unterschieden zwischen den drei Kernel-Typen gehören die folgenden:

Mikrokernel

Microkernels haben alle ihre Dienste im Kernel-Adressraum. Für ihr Kommunikationsprotokoll verwenden Mikrokerne das Message Passing, das Datenpakete, Signale und Funktionen an die richtigen Prozesse weiterleitet. Mikrokernel bieten eine größere Flexibilität als monolithische Kernel; um einen neuen Dienst hinzuzufügen, müssen Administratoren den Benutzeradressraum für einen Mikrokernel ändern.

Aufgrund ihrer isolierten Natur sind Mikrokernel sicherer als monolithische Kernel. Sie bleiben unbeeinflusst, wenn ein Dienst innerhalb des Adressraums ausfällt.

Monolithische Kernel

Monolithische Kernel sind größer als Mikrokernel, da sie sowohl Kernel- als auch Benutzerdienste im selben Adressraum unterbringen. Monolithische Kernel nutzen ein schnelleres Systemaufruf-Kommunikationsprotokoll als Mikrokernel, um Prozesse zwischen der Hardware und der Software auszuführen. Sie sind weniger flexibel als Mikrokerne und erfordern mehr Arbeit; Administratoren müssen den gesamten Kernel rekonstruieren, um einen neuen Dienst zu unterstützen.

Monolithische Kernel stellen ein größeres Sicherheitsrisiko für Systeme dar als Mikrokernel, denn wenn ein Dienst ausfällt, wird das gesamte System heruntergefahren. Monolithische Kernel benötigen auch nicht so viel Quellcode wie ein Mikrokernel, was bedeutet, dass sie weniger anfällig für Fehler sind und weniger Fehlersuche erfordern.

Der Linux-Kernel ist ein monolithischer Kernel und wächst stetig weiter; im Jahr 2018 hatte er 20 Millionen Codezeilen. Er ist in eine Vielzahl von Subsystemen unterteilt. Zu diesen Hauptgruppen gehören eine Systemaufrufschnittstelle, die Prozessverwaltung, der Netzwerkstapel, die Speicherverwaltung, das virtuelle Dateisystem und die Gerätetreiber.

Administratoren können den Linux-Kernel in ihre Betriebssysteme portieren und Live-Updates durchführen. Da Linux ein Open-Source-System ist, eignet es sich besser für Serversysteme und Umgebungen, die in Echtzeit gewartet werden müssen.

Hybride Kernel

Apple entwickelte 1996 den XNU OS-Kernel als eine Mischung aus dem Mach- und dem Berkeley Software Distribution -Kernel (BSD) und kombinierte ihn mit einer Objective-C-Programmierschnittstelle (API). Da es sich um eine Kombination aus monolithischem Kernel und Mikrokernel handelt, verfügt er über eine höhere Modularität, und Teile des Betriebssystems sind speichergeschützt.

Aufteilung des Arbeitsspeichers mit einem Linux-Kernel
Abbildung 2: Der Kernel-Adressenraum ist in Windows für physischen Arbeitsspeicher auf die oben abgebildete Weise konfiguriert.

Geschichte und Entwicklung des Kernels

Vor dem Kernel kodierten die Entwickler Aktionen direkt für den Prozessor.

Der erste Versuch, ein Betriebssystem zu entwickeln, das einen Kernel zur Übermittlung von Nachrichten verwendet, war 1969 das RC 4000 Multiprogramming System. Der Programmierer Per Brinch Hansen entdeckte, dass es einfacher war, einen Kern zu schaffen und dann ein Betriebssystem aufzubauen, anstatt bestehende Betriebssysteme zu konvertieren, damit sie mit neuer Hardware kompatibel waren. Dieser Kern – oder Kernel - enthielt den gesamten Quellcode für die Kommunikation und zur Unterstützung von Systemen, so dass eine direkte Programmierung auf der CPU nicht mehr erforderlich war.

Nach RC 4000 begannen die Forscher der Bell Labs mit der Arbeit an Unix, das die Entwicklung von Betriebssystemen und Kernel und deren Integration radikal veränderte. Das Ziel von Unix war es, kleinere Dienstprogramme zu entwickeln, die bestimmte Aufgaben gut erledigen, statt sich mit einem Multitasking größerer Systemdienstprogramme abzumühen. Vom Standpunkt des Benutzers aus betrachtet, vereinfacht dies die Erstellung von Shell-Skripten, die einfache Werkzeuge kombinieren.

Mit der zunehmenden Verbreitung von Unix kamen verschiedene Unix-ähnliche Betriebssysteme auf den Markt, darunter BSD, NeXTSTEP und Linux. Die Unix-Struktur hielt die Idee aufrecht, dass es einfacher war, einen Kernel auf einem Betriebssystem aufzubauen, das Software wiederverwendet und über konsistente Hardware verfügt, als sich auf ein zeitlich begrenztes System zu verlassen, das kein Betriebssystem benötigt.

Unix brachte Betriebssysteme für mehr Einzelsysteme, aber die Forscher an der Carnegie Mellon University erweiterten die Kernel-Technologie. Von 1985 bis 1994 arbeiteten sie an dem Mach-Kernel. Im Gegensatz zu BSD ist der Mach-Kernel betriebssystemunabhängig und unterstützt mehrere Prozessorarchitekturen. Die Forscher machten ihn binärkompatibel mit vorhandener BSD-Software, so dass er sofort eingesetzt und weiter erprobt werden konnte.

Das ursprüngliche Ziel des Mach-Kerns war es, eine sauberere Version von Unix und eine portablere Version des Accent-Kerns für die Interprozessorkommunikation (IPC) von Carnegie Mellon zu schaffen. Im Laufe der Zeit brachte der Kernel neue Funktionen, wie Ports und IPC-basierte Programme, und entwickelte sich schließlich zu einem 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 Bildungs- und Forschungszwecke. Diese Distribution enthielt eine Mikrokernel-basierte Struktur, Multitasking, einen geschützten Modus, erweiterte Speicherunterstützung und einen C-Compiler des American National Standards Institute.

Der nächste große Fortschritt in der Kernel-Technologie kam 1992 mit der Veröffentlichung des Linux-Kernels. Der Gründer Linus Torvalds entwickelte ihn als Hobby, lizenzierte den Kernel jedoch unter einer allgemeinen öffentlichen Lizenz und machte ihn damit zu einer offenen Quelle. Er wurde zunächst mit 176.250 Codezeilen veröffentlicht.

Die meisten Betriebssysteme – und ihre Kernel – lassen sich auf Unix zurückführen, aber es gibt einen Ausreißer: Windows. Angesichts der Beliebtheit von DOS- und IBM-kompatiblen PCs entwickelte Microsoft den NT-Kernel und baute sein Betriebssystem auf DOS auf. Aus diesem Grund unterscheidet sich das Schreiben von Befehlen für Windows von Unix-basierten Systemen.

Diese Definition wurde zuletzt im September 2022 aktualisiert

Erfahren Sie mehr über Serverbetriebssysteme

ComputerWeekly.de
Close