Der '''Kernel''', auch '''Betriebssystemkernel''' genannt, ist der zentraler Bestandteil und die Grundlage eines jeden [[Betriebssystem | Betriebssystems]]. Auf ihn bauen alle anderen Bestandteile des Betriebssystems wie Module, [[Treiber]] oder Anwendungen auf. Je nach Anwendungszweck wurden verschiedene Kernelarten mit individuellen Vor- und Nachteilen entwickelt. == Aufgaben eines Kernels == Ein Kernel hat grundsätzlich folgende Basisaufgaben: * [[Speicherverwaltung]] * [[Prozessverwaltung]] * [[Interprozesskommunikation]] * Geräte- und Hardwareverwaltung * Schnittstelle für [[Treiber]] * [[Syscall]]s für Anwendungsprogramme * [[Scheduling]] Architekturabhängige Teile dieser Aufgaben werden normalerweise in einem [[Hardware Abstraction Layer]] mit einer klar definierten Schnittstelle gekapselt, um die Wiederverwendbarkeit anderer Komponenten zu erhöhen. Dazu zählen teilweise schon (kleine) Treiber, wie z.B. bei [[x86]] bzw. [[x64]] für die [[PIT]], [[PIC]], [[Local APIC]] oder ähnlichem. Je nach Kernelart kommt diesen Aufgaben mehr oder weniger Gewicht zu. Außerdem können z.B. folgende Aufgaben hinzukommen: * [[Dateisystem]]verwaltung * ausgewählte weitere Treiber (z.B. Treiber zum Erkennen und Konfigurieren von [[PCI]]-Geräten) oder alle Treiber == Kernelarten == Folgende Kernelarten existieren: === Monolithischer Kernel === Als monolithischen Kernel bezeichnet man einen Betriebssystemkernel, der nicht nur die typischen Aufgaben eines solchen durchführt, sondern auch gleich Treiber für alle [[:Kategorie:Hardware | Hardware]], das virtuelle Dateisystem, Dateisystemtreiber und vieles mehr. Diese Treiber können entweder fest in den Kernel einkompiliert sein oder zur Laufzeit ladbar sein, laufen aber immer im Kernelmode. Das Treiberinterface besteht somit aus normalen Funktionsaufrufen, was zu einem deutlichen Geschwindigkeitsvorteil führen soll. Jedoch ist ein solcher Kernel nicht nur unflexibler, sondern auch deutlich fehleranfälliger und abgestürzte Module führen meist zu einem Absturz des gesamten Systems. Interprozesskommunikation spielt in einem solchen Kernel anfangs sicherlich erstmal eine untergeordnete Rolle, da die ges. Funktionalität direkt über den Kernel erreichbar ist. Dies vereinfacht die Entwicklung und das Das folgende Diagramm zeigt den groben Aufbau eines monolithischen Kernels: