„Kernel (Betriebssystem)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
gw.phinware.de (Diskussion)
K Linux ist AFAIR kein echtes GNU-Projekt
 
(401 dazwischenliegende Versionen von mehr als 100 Benutzern, die nicht angezeigt werden)
Zeile 1: Zeile 1:
Ein '''Kernel''' (englisch [{{IPA|ˈkɝːnəl}}], übersetzt ''Kern''), auch '''Betriebssystemkern''' (oder verkürzt ''Systemkern''), ist der zentrale Bestandteil eines [[Betriebssystem]]s. In ihm ist die Prozess- und Datenorganisation festgelegt, auf der alle weiteren [[Software]]<nowiki/>bestandteile des Betriebssystems aufbauen. Er bildet die unterste [[Schichtenarchitektur|Softwareschicht]] des Systems und hat direkten Zugriff auf die Hardware. Weitere Softwarekomponenten eines Betriebssystems liegen in der Regel in einer übergeordneten Schicht.<ref name="Modern Operating Systems"/> Die Konstruktion eines Betriebssystem-Kernels gehört zum Themenbereich der [[Informatik]] und der [[Softwaretechnik]].
Kernel


Gängige Anforderungen an einen Kernel sind Parallelverarbeitung verschiedener Aufgaben ([[Multitasking]]), Einhaltung zeitkritischer Grenzen, Offenheit für unterschiedlichste Anwendungen und Erweiterungen.
Fachbegriff Computer [[Software]]


== Bestandteile ==
Ein Kernel (abhängig von der Struktur) ist in Schichten (oder Layer, siehe [[Schichtenarchitektur]]) aufgeteilt, wobei die unteren (maschinennahen) Schichten die Basis für die darüber liegenden bilden. Die oberen Schichten können Funktionen der unteren Schichten aufrufen, aber nicht umgekehrt.


Folgende Schichten sind vorhanden (von unten nach oben):
* [[Hardwareabstraktionsschicht|Schnittstelle zur Hardware]] (Geräte, Speicher, Prozessoren)
* [[Speicherverwaltung]] (evtl. einschließlich [[Virtuelle Speicherverwaltung|virtuellem Hauptspeicher]])
* Prozessverwaltung (auch [[Prozess-Scheduler|Scheduler]] genannt)
* Geräteverwaltung (auch [[Device Management]] genannt)
* [[Dateisystem]]e


[[Datei:OS-structure.de.svg|mini|hochkant=2.5|Die Struktur von monolithischem Kernel, Mikrokernel und Hybridkernel im Vergleich]]
Ein Kernel ist der Kern eines [[Betriebssystem]]s. Darin sind elementare Prozess- und Datenorganisation festgelegt, auf denen alle weiteren Softwarebestandteile des Betriebssystems aufbauen.


Wenn alle diese Funktionen im Kernel selbst integriert sind, spricht man von einem [[Monolithischer Kernel|monolithischen Kernel]]. Bei einem [[Mikrokernel]] hingegen finden wesentliche Teile in getrennten [[Prozess (Informatik)|Prozessen]] statt.
Die Konstruktion eines stabilen Kernels ist eine anspruchsvolle Aufgabe aus dem Bereich der Informatik und des Softwareengineering.
Eine Zwischenstufe stellt der [[Hybridkernel]] dar, bei dem eine Teilmenge der Funktionen Teil des Kernels und der Rest ausgelagert ist.


Neben den genannten Varianten existieren zudem [[Exokernel]], die sich darauf beschränken, die Hardware zwischen den Prozessen aufzuteilen. Alle weiteren Schritte werden den Prozessen selbst überlassen. Der Einsatz von Exokerneln ist selten.<ref name="Modern Operating Systems">Andrew S. Tanenbaum, Herbert Bos: ''Introduction.'' In: ''Modern Operating Systems'', Nr. 4, 2015, S. 3–84.</ref>


Der Kernel selbst läuft im sogenannten [[Kernel-Mode]], zusammen mit Gerätetreibern und anderen hardwarenahen Anwendungen. Der Kernel ist vom Kernel-Mode zu unterscheiden. Bei Windows NT ist nicht jede Anwendung, die im Kernel-Mode läuft, auch Teil des Kernels. So laufen neben dem eigentlichen Kernel (ntoskrnl.exe) noch andere Anwendungen im Kernel-Mode, z.&nbsp;B. die Hardware Abstraction Layer (hal.dll).<ref name="Windows Internals">''Mark Russinovich, David A.Solomon, Alex Ionescu.'' In: ''Windows Internals'', Nr. 6, 2012, S. 47.</ref>


== Aufgaben ==
Anforderungen sind: Parallelverarbeitung verschiedener Aufgaben, Einhaltung zeitkritischer Grenzen, Offenheit für unterschiedlichste Anwendungen und Erweiterungen.
Ein Betriebssystem-Kernel hat die folgenden Aufgaben:
* Schnittstelle zu [[Anwendungssoftware|Anwenderprogrammen]] (Starten, Beenden, Ein-/Ausgabe, Speicherzugriff)
* Kontrolle des Zugriffs auf [[Prozessor]], Geräte, Speicher (Scheduler, Gerätetreiber, Speicherschutz). Möglichst alleiniger Zugriff des Kernels auf diese Ressourcen.
* Verteilung der [[Ressource]]n wie zum Beispiel der Prozessorzeit bzw. der Prozessoren auf die Anwenderprogramme.
* Strukturierung der Ressourcen, etwa Abbildung von [[Dateisystem]]en auf blockorientierte Geräte wie [[Festplattenlaufwerk]]e, [[Protokollstapel|Netzwerkstack]] auf Netzwerkkarten.
* Auflösung von Zugriffskonflikten, etwa [[Lock|Verriegelung]] bei Mehrprozessorsystemen, Warteschlangen bei knappen Ressourcen.
* [[Virtualisierung (Informatik)|Virtualisierung]] der Ressourcen (Prozessor: Prozesse, Festplatte: Dateien, Netzwerkkarte: z.&nbsp;B. Sockets, Speicher: virtueller Speicher, Geräte: Spezialdateien).
* Überwachung von Zugriffsrechten auf Dateien und Geräte bei [[Mehrbenutzersystem]]en.<ref name="Modern Operating Systems"/>


== Prozesse ==
Zur Realisierung eines Betriebssystems wird oft das Konzept des [[Prozess (Informatik)|Prozesses]] (Task) verwendet. Ein Prozess enthält (mindestens) einen [[Registersatz]] des Prozessors und kann über den Scheduler angehalten und wieder gestartet werden. Jeder Prozess hat kontrollierten Zugriff auf einen Teil des Speichers sowie Ein- und Ausgabekanäle, die auf Dateien oder Geräte zugreifen. Mit dem Betriebssystem-Kernel kommuniziert er über Systemaufrufe. Ein Programm läuft normalerweise in genau einem, in Ausnahmefällen auch in mehreren Prozessen. Auch manche Systemdienste laufen innerhalb von Prozessen.<ref name="Modern Operating Systems"/>


== Starten ==
{{Hauptartikel|Booten}}


Beim ''[[Booten]]'' eines Rechners wird nach einem möglichen [[Power-on self-test|Hardwarecheck]] und einer teilweisen Geräte-[[Initialisierung]] der Kernel mithilfe eines ''[[Bootloader]]s'' in den Speicher geladen und gestartet. Der Kernel initialisiert dann die Geräte vollständig und startet einen weiteren [[Prozess]].<ref>{{Internetquelle|url=https://openbook.rheinwerk-verlag.de/linux/linux_kap27_005.html|titel=Rheinwerk Computing :: Linux - 27 Bootstrap und Shutdown|zugriff=2017-05-25}}</ref><ref>{{Internetquelle|url=https://openbook.rheinwerk-verlag.de/linux/linux_kap27_006.html|titel=Rheinwerk Computing :: Linux - 27 Bootstrap und Shutdown|zugriff=2017-05-25}}</ref> Bei [[MS-DOS]] ist das ein [[Kommandozeileninterpreter]], bei komplexeren Betriebssystemen eine bestimmte [[Anwendungssoftware|Anwendung]]. Bei [[Unixoides System|unixoiden Systemen]] ist dies normalerweise <code>[[init]]</code>, welches alle [[Dienstprogramm|Systemdienste]] lädt und gegebenenfalls nach einem ''[[Login (Informationstechnik)|Login]]'', eine [[grafische Benutzeroberfläche]] startet.
Ein Kernel - auch wenn allgemein konzipiert - wird immer konkret angepasst an eine bestimmte Hardware bzw. an eine Prozessorgruppe


== Arten ==
.
Können auf einem Kernel mehrere Prozesse gleichzeitig laufen, spricht man von Multitasking-Kerneln. In Wirklichkeit wird jedoch von der [[Prozessor|CPU]] immer nur ein Prozess gleichzeitig behandelt (außer bei Mehrkernsystemen). Den Wechsel regelt in den meisten Fällen der [[Prozess-Scheduler|Scheduler]]. Wird ein Multitasking-Kernel durch eine Zugriffsverwaltung auf Prozesse und Geräte ergänzt, erhält man ein Multiuser-(oder Mehrbenutzer-)System. Darauf können mehrere Benutzer gleichzeitig arbeiten. Jeder Benutzer muss sich einloggen (Authentifizierung). Der Kernel teilt jeden Prozess einem Benutzer zu; ein Benutzer kann mehrere Prozesse besitzen. Abhängig vom Benutzer werden Prozessrechte eingeschränkt. Der Kernel ist für die Separation der Prozesse und damit der Benutzer zuständig.


Obwohl heutige Desktopsysteme in der Regel nur von einem Benutzer gleichzeitig verwendet werden, sind sie als Mehrbenutzersystem ausgelegt. Zum einen können dann mehrere Nutzer mit jeweils eigenen [[Zugriffsrecht|Rechten]] und Präferenzen das System verwenden und zum anderen besteht die Möglichkeit, dass neben dem Nutzer, der den Rechner direkt benutzt, ein anderer von einem anderen Rechner aus andere Programme ausführt. Zusätzlich werden die Systemdienste unter anonymen Benutzern gestartet. Jedem Systemdienst und jedem Benutzer können dadurch eigene, eingeschränkte Zugriffsrechte eingeräumt werden, die für die Arbeit nötig sind, wodurch sich die Systemsicherheit drastisch erhöht.


== Trivia ==
Bei [[Commodore International|Commodore]] hieß der Kernel lange Zeit „[[Kernal]]“. Gerüchten zufolge ergab sich das aus einem Schreibfehler in den Handbüchern zu den Commodore-Computern, der dann kurzerhand von Commodore als eigener Begriff für den ''Kernel'' erklärt und nachträglich als [[Backronym]] umgedeutet wurde: „'''K'''eyboard '''E'''ntry '''R'''ead, '''N'''etwork, '''A'''nd '''L'''ink“.


== Siehe auch ==
''Beispiele:'' [[Linux]] von [[Linus Torvalds]] 1991 erstellt und seitdem wie ein [[GNU]]-Projekt weltweit weiterentwickelt.
* [[Windows NT]] (Kernel)
* [[Linux (Kernel)]]
* [[User Mode Linux]]
* [[Kernel-based Virtual Machine]]


== Weblinks ==
* [https://msdn.microsoft.com/en-us/library/windows/hardware/ff554836(v=vs.85).aspx Kernel und User Mode bei Windows NT]

== Einzelnachweise ==
<references />

{{Navigationsleiste Kerneltypen}}
{{Normdaten|TYP=s|GND=4338679-9}}

[[Kategorie:Betriebssystemtheorie]]
[[Kategorie:Betriebssystemkomponente|!]]

Aktuelle Version vom 7. November 2023, 18:17 Uhr

Ein Kernel (englisch [ˈkɝːnəl], übersetzt Kern), auch Betriebssystemkern (oder verkürzt Systemkern), ist der zentrale Bestandteil eines Betriebssystems. In ihm ist die Prozess- und Datenorganisation festgelegt, auf der alle weiteren Softwarebestandteile des Betriebssystems aufbauen. Er bildet die unterste Softwareschicht des Systems und hat direkten Zugriff auf die Hardware. Weitere Softwarekomponenten eines Betriebssystems liegen in der Regel in einer übergeordneten Schicht.[1] Die Konstruktion eines Betriebssystem-Kernels gehört zum Themenbereich der Informatik und der Softwaretechnik.

Gängige Anforderungen an einen Kernel sind Parallelverarbeitung verschiedener Aufgaben (Multitasking), Einhaltung zeitkritischer Grenzen, Offenheit für unterschiedlichste Anwendungen und Erweiterungen.

Bestandteile[Bearbeiten | Quelltext bearbeiten]

Ein Kernel (abhängig von der Struktur) ist in Schichten (oder Layer, siehe Schichtenarchitektur) aufgeteilt, wobei die unteren (maschinennahen) Schichten die Basis für die darüber liegenden bilden. Die oberen Schichten können Funktionen der unteren Schichten aufrufen, aber nicht umgekehrt.

Folgende Schichten sind vorhanden (von unten nach oben):

Die Struktur von monolithischem Kernel, Mikrokernel und Hybridkernel im Vergleich

Wenn alle diese Funktionen im Kernel selbst integriert sind, spricht man von einem monolithischen Kernel. Bei einem Mikrokernel hingegen finden wesentliche Teile in getrennten Prozessen statt. Eine Zwischenstufe stellt der Hybridkernel dar, bei dem eine Teilmenge der Funktionen Teil des Kernels und der Rest ausgelagert ist.

Neben den genannten Varianten existieren zudem Exokernel, die sich darauf beschränken, die Hardware zwischen den Prozessen aufzuteilen. Alle weiteren Schritte werden den Prozessen selbst überlassen. Der Einsatz von Exokerneln ist selten.[1]

Der Kernel selbst läuft im sogenannten Kernel-Mode, zusammen mit Gerätetreibern und anderen hardwarenahen Anwendungen. Der Kernel ist vom Kernel-Mode zu unterscheiden. Bei Windows NT ist nicht jede Anwendung, die im Kernel-Mode läuft, auch Teil des Kernels. So laufen neben dem eigentlichen Kernel (ntoskrnl.exe) noch andere Anwendungen im Kernel-Mode, z. B. die Hardware Abstraction Layer (hal.dll).[2]

Aufgaben[Bearbeiten | Quelltext bearbeiten]

Ein Betriebssystem-Kernel hat die folgenden Aufgaben:

  • Schnittstelle zu Anwenderprogrammen (Starten, Beenden, Ein-/Ausgabe, Speicherzugriff)
  • Kontrolle des Zugriffs auf Prozessor, Geräte, Speicher (Scheduler, Gerätetreiber, Speicherschutz). Möglichst alleiniger Zugriff des Kernels auf diese Ressourcen.
  • Verteilung der Ressourcen wie zum Beispiel der Prozessorzeit bzw. der Prozessoren auf die Anwenderprogramme.
  • Strukturierung der Ressourcen, etwa Abbildung von Dateisystemen auf blockorientierte Geräte wie Festplattenlaufwerke, Netzwerkstack auf Netzwerkkarten.
  • Auflösung von Zugriffskonflikten, etwa Verriegelung bei Mehrprozessorsystemen, Warteschlangen bei knappen Ressourcen.
  • Virtualisierung der Ressourcen (Prozessor: Prozesse, Festplatte: Dateien, Netzwerkkarte: z. B. Sockets, Speicher: virtueller Speicher, Geräte: Spezialdateien).
  • Überwachung von Zugriffsrechten auf Dateien und Geräte bei Mehrbenutzersystemen.[1]

Prozesse[Bearbeiten | Quelltext bearbeiten]

Zur Realisierung eines Betriebssystems wird oft das Konzept des Prozesses (Task) verwendet. Ein Prozess enthält (mindestens) einen Registersatz des Prozessors und kann über den Scheduler angehalten und wieder gestartet werden. Jeder Prozess hat kontrollierten Zugriff auf einen Teil des Speichers sowie Ein- und Ausgabekanäle, die auf Dateien oder Geräte zugreifen. Mit dem Betriebssystem-Kernel kommuniziert er über Systemaufrufe. Ein Programm läuft normalerweise in genau einem, in Ausnahmefällen auch in mehreren Prozessen. Auch manche Systemdienste laufen innerhalb von Prozessen.[1]

Starten[Bearbeiten | Quelltext bearbeiten]

Beim Booten eines Rechners wird nach einem möglichen Hardwarecheck und einer teilweisen Geräte-Initialisierung der Kernel mithilfe eines Bootloaders in den Speicher geladen und gestartet. Der Kernel initialisiert dann die Geräte vollständig und startet einen weiteren Prozess.[3][4] Bei MS-DOS ist das ein Kommandozeileninterpreter, bei komplexeren Betriebssystemen eine bestimmte Anwendung. Bei unixoiden Systemen ist dies normalerweise init, welches alle Systemdienste lädt und gegebenenfalls nach einem Login, eine grafische Benutzeroberfläche startet.

Arten[Bearbeiten | Quelltext bearbeiten]

Können auf einem Kernel mehrere Prozesse gleichzeitig laufen, spricht man von Multitasking-Kerneln. In Wirklichkeit wird jedoch von der CPU immer nur ein Prozess gleichzeitig behandelt (außer bei Mehrkernsystemen). Den Wechsel regelt in den meisten Fällen der Scheduler. Wird ein Multitasking-Kernel durch eine Zugriffsverwaltung auf Prozesse und Geräte ergänzt, erhält man ein Multiuser-(oder Mehrbenutzer-)System. Darauf können mehrere Benutzer gleichzeitig arbeiten. Jeder Benutzer muss sich einloggen (Authentifizierung). Der Kernel teilt jeden Prozess einem Benutzer zu; ein Benutzer kann mehrere Prozesse besitzen. Abhängig vom Benutzer werden Prozessrechte eingeschränkt. Der Kernel ist für die Separation der Prozesse und damit der Benutzer zuständig.

Obwohl heutige Desktopsysteme in der Regel nur von einem Benutzer gleichzeitig verwendet werden, sind sie als Mehrbenutzersystem ausgelegt. Zum einen können dann mehrere Nutzer mit jeweils eigenen Rechten und Präferenzen das System verwenden und zum anderen besteht die Möglichkeit, dass neben dem Nutzer, der den Rechner direkt benutzt, ein anderer von einem anderen Rechner aus andere Programme ausführt. Zusätzlich werden die Systemdienste unter anonymen Benutzern gestartet. Jedem Systemdienst und jedem Benutzer können dadurch eigene, eingeschränkte Zugriffsrechte eingeräumt werden, die für die Arbeit nötig sind, wodurch sich die Systemsicherheit drastisch erhöht.

Trivia[Bearbeiten | Quelltext bearbeiten]

Bei Commodore hieß der Kernel lange Zeit „Kernal“. Gerüchten zufolge ergab sich das aus einem Schreibfehler in den Handbüchern zu den Commodore-Computern, der dann kurzerhand von Commodore als eigener Begriff für den Kernel erklärt und nachträglich als Backronym umgedeutet wurde: „Keyboard Entry Read, Network, And Link“.

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. a b c d Andrew S. Tanenbaum, Herbert Bos: Introduction. In: Modern Operating Systems, Nr. 4, 2015, S. 3–84.
  2. Mark Russinovich, David A.Solomon, Alex Ionescu. In: Windows Internals, Nr. 6, 2012, S. 47.
  3. Rheinwerk Computing :: Linux - 27 Bootstrap und Shutdown. Abgerufen am 25. Mai 2017.
  4. Rheinwerk Computing :: Linux - 27 Bootstrap und Shutdown. Abgerufen am 25. Mai 2017.