Gebruikersmodus versus kernelmodus: instructies en bescherming
Een CPU heeft een gebruikersmodus waarin applicaties draaien en een kernelmodus (bevoorrechte modus) waarin de kernel van het besturingssysteem draait. In gebruikersmodus kunnen bevoorrechte instructies, zoals het instellen van paginatabellen, in- en uitvoerbewerkingen of het uitschakelen van interrupts, niet worden uitgevoerd, en is alleen het geheugen van het eigen proces toegankelijk. Voor zaken als het lezen en schrijven van bestanden vraagt een applicatie de kernel om hulp via een systeemaanroep. Zo wordt voorkomen dat fouten of kwade opzet in één applicatie andere processen, het besturingssysteem of de hardware treffen.
| Kenmerk | Gebruikersmodus | Kernelmodus |
|---|---|---|
| Programma's die erin draaien | Applicaties | De kernel van het besturingssysteem en de meeste apparaatstuurprogramma's |
| Uitvoerbare instructies | Alleen gewone instructies. Het uitvoeren van een bevoorrechte instructie geeft een exceptie | Alle instructies. Wisselen van paginatabellen, interrupts in- en uitschakelen, controleregisters instellen enzovoort |
| Toegankelijk geheugen | Alleen de pagina's in de virtuele adresruimte van het eigen proces die voor de gebruiker zijn toegestaan | Alles, inclusief het kernelgebied. Kan ook fysiek geheugen en apparaatregisters benaderen |
| Bediening van apparaten | Niet rechtstreeks. Via een systeemaanroep aan de kernel gevraagd | Leest en schrijft rechtstreeks registers en verwerkt interrupts |
| Namen in architecturen (voorbeelden) | Ring 3 bij x86, EL0 bij Arm, U-modus bij RISC-V | Ring 0 bij x86, EL1 bij Arm, S-modus bij RISC-V |
| Aanleiding voor een moduswissel | De kernelmodus wordt binnengegaan via systeemaanroepinstructies (syscall, svc, ecall enz.), interrupts van apparaten of timers en excepties (paginafouten, deling door 0, ongeldige instructies enz.) | Terugkeer naar de gebruikersmodus via een speciale returninstructie (sret, eret enz.) die het terugkeeradres en de modus tegelijk herstelt |
| Kosten van omschakelen (indicatief) | Een systeemaanroep heen en terug kost ruwweg 100 ns tot 1 µs. Kan toenemen door maatregelen tegen kwetsbaarheden | Verwerking binnen de kernel gebruikt functieaanroepen, zonder moduswissel. Een proceswissel (contextwissel) is nog zwaarder |
| Gevolgen van een fout | Alleen dat proces wordt geforceerd beëindigd | Het hele systeem kan vastlopen (kernel panic enz.) |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.