User-Mode vs. Kernel-Mode: Unterschiede im Überblick
Eine CPU kennt den User-Mode, in dem Anwendungen laufen, und den Kernel-Mode (privilegierter Modus), in dem der Betriebssystemkern läuft. Im User-Mode können privilegierte Befehle wie das Einrichten von Seitentabellen, Ein-/Ausgabeoperationen oder das Sperren von Interrupts nicht ausgeführt werden, und es ist nur der Speicher des eigenen Prozesses zugänglich. Werden etwa Dateizugriffe benötigt, wird der Kernel per Systemaufruf beauftragt. So wird verhindert, dass Fehler oder böswilliges Verhalten einer Anwendung andere Prozesse, das Betriebssystem oder die Hardware beeinträchtigen.
| Merkmal | User-Mode | Kernel-Mode |
|---|---|---|
| Laufende Programme | Anwendungen | Betriebssystemkern, viele Gerätetreiber |
| Ausführbare Befehle | Nur normale Befehle. Die Ausführung privilegierter Befehle löst eine Ausnahme aus | Alle Befehle. Wechsel von Seitentabellen, Freigeben und Sperren von Interrupts, Setzen von Steuerregistern usw. |
| Zugänglicher Speicher | Nur die für den Benutzer freigegebenen Seiten im virtuellen Adressraum des eigenen Prozesses | Alles einschließlich des Kernelbereichs. Auch physischer Speicher und Geräteregister sind zugänglich |
| Gerätezugriff | Nicht direkt möglich. Der Kernel wird per Systemaufruf beauftragt | Direktes Lesen und Schreiben von Registern und Behandlung von Interrupts |
| Bezeichnung je Architektur (Beispiele) | Ring 3 bei x86, EL0 bei Arm, U-Mode bei RISC-V | Ring 0 bei x86, EL1 bei Arm, S-Mode bei RISC-V |
| Auslöser des Moduswechsels | In den Kernel-Mode gelangt man durch Systemaufrufbefehle (syscall, svc, ecall usw.), Geräte- oder Timer-Interrupts und Ausnahmen (Seitenfehler, Division durch 0, ungültige Befehle usw.) | Ein spezieller Rücksprungbefehl (sret, eret usw.) stellt Rücksprungadresse und Modus gleichzeitig wieder her und kehrt in den User-Mode zurück |
| Kosten des Wechsels (Richtwert) | Ein Systemaufruf hin und zurück dauert etwa 100 ns bis 1 µs. Durch Gegenmaßnahmen gegen Sicherheitslücken kann es mehr werden | Innerhalb des Kernels sind Aufrufe normale Funktionsaufrufe ohne Moduswechsel. Ein Prozesswechsel (Kontextwechsel) ist noch aufwendiger |
| Folgen eines Fehlers | Nur der betroffene Prozess wird zwangsweise beendet | Das gesamte System kann stehen bleiben (Kernel Panic usw.) |
Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.