Ein UNIX-Kernel stellt eine Umgebung zur Verfügung, in welcher Anwendungen ausgeführt werden können. Aufgrund dessen muss der Kernel eine Vielzahl von Diensten und betreffenden Schnittstellen implementieren. Anwendungen kommunizieren und interagieren über diese Schnittstellen mit der Hardware, normalerweise wird der direkte Kontakt mit Hardwareressourcen vermieden.
Eine CPU kann entweder im User-Modus oder im Kernel-Modus laufen. In der Praktik können die meisten CPUs mehr als zwei Ausführungszustände aufweisen. Als Beispiel haben etwa die 80*86 Mikroprozessoren vier Ausführungszustände. Jedoch verwenden alle Standard-UNIX-Kernels nur den User-Modus und den Kernel-Modus. Zudem können Programme auf UNIX im User-Modus oder im Kernel-Modus ausgeführt werden. Wenn ein Programm im User-Mode ausgeführt wir kann es weder auf Kernel-Datenstrukturen, noch auf Kernel-Programme zugreifen. Wenn das Programm im Kernel-Modus ausgeführt wird, gibt es keine geltenden Einschränkungen mehr. Alle CPU-Modelle erhalten spezifische Anweisungen über das Umschalten vom User-Modus in den Kernel-Modus und umgekehrt. Normalerweise werden Programme nur im User-Modus ausgeführt und wechseln nur dann in den Kernel-Modus, wenn ein vom Kernel bereitgestellter Dienst erforderlich ist. Sobald dieser Dienst beendet und nicht mehr weiter benötigt wird, wechselt das Programm automatisch wieder in den User-Modus.
Prozesse sind dynamische Entitäten, welche meistens im System eine begrenzte Lebensdauer aufweisen. Eine Routinegruppe im Kernel ist für die Erstellung, die Eliminierung sowie für die Synchronisation der Prozesse zuständig. Der Kernel selber ist kein Prozess, jedoch ein Prozessmanager.
Die Umstellung eines Programms vom User-Mode in den Kernel-Mode läuft dann folgendermassen ab: Der Kernel weiss, dass Prozesse welche einen Kernel-Service erfordern, Programmierkonstrukte verwenden, welche als Systemaufrufe bezeichnet werden. Jeder einzelne dieser Systemaufrufe richtet eine Parametergruppe ein, welche die Prozessanforderung identifiziert. Dann führt die Parametergruppe je nach Prozessanforderung eine hardwareabhängige CPU-Anweisung aus, um vom User-Mode in den Kernel-Mode zu wechseln.
Neben Benutzerpozessen beinhalten UNIX-Systeme bevorrechtigte Prozesse, welche man als ‚Kernel-Threads‘ bezeichnet. Diese besitzen folgende Eigenschaften:
- Sie sind im Kernel-Modus im Kernel-Adressraum vorhanden.
- Sie interagieren nicht mit Benutzern und benötigen daher keine Endgeräte.
- Sie werden beim Starten des Systems erstellt und bleiben bis zum Herunterfahren des Systems aktiv.
Ein UNIX-Kernel erledigt aber weit mehr als nur Systemaufrufe. Kernelroutinen können auf ganz verschiedene Arten aktiviert werden. Zum Beispiel kann die prozessausführende CPU eine Ausnahme, also etwa eine ungültige Anweisung signalisieren. Der Kernel behandelt dann die Ausnahme für den Prozess, welcher diese verursacht hat. Zudem können Peripheriegeräte (Mäuse, Externe HDDs etc.) ein Interruptsignal an die CPU ausgeben, um sie über ein Ereignis zu informieren, zum Beispiel eine Anforderung um Aufmerksamkeit oder eine Statusänderung. Das Kernel-Programm „Interrupt-Handler“ übernimmt dann die Ausgabe eines solchen Interruptsignals. Peripheriegeräte arbeiten in Bezug auf die CPU asynchron, was bedeutet, dass solche Interrupts meistens zu unvorhersehbaren Zeiten auftreten. Des Weiteren muss, wenn ein Kernel-Thread ausgeführt wird, das entsprechende Programm (da es auch im Kernel ausgeführt wird) als Teil des Kernels betrachtet werden. Damit der Kernel Prozesse verwalten kann, wird jeder einzelne Prozess mithilfe eines Prozessdeskriptors dargestellt, welcher Informationen zum aktuellen Status des Prozesses enthält.