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.

KenmerkGebruikersmodusKernelmodus
Programma's die erin draaienApplicatiesDe kernel van het besturingssysteem en de meeste apparaatstuurprogramma's
Uitvoerbare instructiesAlleen gewone instructies. Het uitvoeren van een bevoorrechte instructie geeft een exceptieAlle instructies. Wisselen van paginatabellen, interrupts in- en uitschakelen, controleregisters instellen enzovoort
Toegankelijk geheugenAlleen de pagina's in de virtuele adresruimte van het eigen proces die voor de gebruiker zijn toegestaanAlles, inclusief het kernelgebied. Kan ook fysiek geheugen en apparaatregisters benaderen
Bediening van apparatenNiet rechtstreeks. Via een systeemaanroep aan de kernel gevraagdLeest en schrijft rechtstreeks registers en verwerkt interrupts
Namen in architecturen (voorbeelden)Ring 3 bij x86, EL0 bij Arm, U-modus bij RISC-VRing 0 bij x86, EL1 bij Arm, S-modus bij RISC-V
Aanleiding voor een moduswisselDe 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 kwetsbaarhedenVerwerking binnen de kernel gebruikt functieaanroepen, zonder moduswissel. Een proceswissel (contextwissel) is nog zwaarder
Gevolgen van een foutAlleen dat proces wordt geforceerd beëindigdHet hele systeem kan vastlopen (kernel panic enz.)

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

Gebruikersmodus
Gewone verwerking in applicaties en bibliotheken. Rekenwerk en geheugentoegang gebeuren snel in gebruikersmodus, zonder tussenkomst van de kernel.
Kernelmodus
Verwerking waarbij resourcebeheer en bescherming nodig zijn, zoals bestands- en netwerk-I/O, geheugentoewijzing, proceswissels en interruptafhandeling.
Prestatietechnieken
Om het aantal systeemaanroepen te beperken worden gegevens in een buffer in de gebruikersruimte verzameld en in één keer weggeschreven, of wordt een deel van de verwerking via gedeeld geheugen of speciale mechanismen in gebruikersmodus afgehandeld.

Veelgestelde vragen

Waarom worden gebruikersmodus en kernelmodus gescheiden?

Om te voorkomen dat applicaties eigenmachtig paginatabellen of apparaten manipuleren. Door de scheiding kan een programma met een fout het geheugen van andere processen of het besturingssysteem niet beschadigen of apparaten overnemen, en volstaat het om dat programma te beëindigen.

Wanneer wordt van gebruikersmodus naar kernelmodus overgeschakeld?

Er zijn drie aanleidingen: een systeemaanroep die het programma zelf doet, een interrupt van een apparaat of timer, en een exceptie door het uitvoeren van een instructie, zoals een paginafout of een deling door 0. In alle gevallen schakelt de CPU van modus en begint de verwerking bij een vast ingangspunt van de kernel.

Waarom zijn systeemaanroepen traag?

Naast de moduswissel zijn het opslaan en herstellen van registers, het controleren van argumenten en verwerking bij het binnengaan en verlaten van de kernel nodig. Als als maatregel tegen kwetsbaarheden ook de paginatabellen worden gewisseld, is het nog zwaarder. Eén aanroep is kort, maar bij elke kleine lees- of schrijfbewerking een aanroep doen wordt een grote last.

Zijn een moduswissel en een contextwissel hetzelfde?

Nee. Bij een moduswissel door een systeemaanroep gaat hetzelfde proces alleen de kernelverwerking in. Een contextwissel vervangt het proces of de thread die wordt uitgevoerd en gaat ook gepaard met onder meer het wisselen van de adresruimte, en is daardoor zwaarder.

Test uw begrip

Wat is het belangrijkste doel van het onderscheid tussen bevoorrechte modus (kernelmodus) en gebruikersmodus in de CPU?

  1. AInstructies van toepassingen met voorrang sneller dan kernelinstructies kunnen uitvoeren
  2. BToepassingen beschermen tegen willekeurige bewerking van paginatabellen en apparaten
  3. CTwee instructies tegelijk door één CPU kunnen laten uitvoeren
Antwoord en toelichting tonen

Antwoord: B. Toepassingen beschermen tegen willekeurige bewerking van paginatabellen en apparaten

Als toepassingen vrij paginatabellen konden wijzigen, I/O-apparaten konden bedienen en interrupts konden uitschakelen, zouden ze het geheugen van andere programma's kunnen beschadigen of het hele systeem kunnen stilleggen. Daarom laat de CPU deze instructies alleen in de bevoorrechte modus toe, zodat alleen de kernel van het besturingssysteem ze kan gebruiken. Een poging ze in de gebruikersmodus uit te voeren geeft een exception. Het is geen mechanisme voor snelheid of gelijktijdige uitvoering.

Hoe heet het mechanisme waarmee een toepassing het besturingssysteem verzoekt bijvoorbeeld een bestand te lezen of te schrijven?

  1. ASysteemaanroep (system call)
  2. BContextwisseling (context switch)
  3. CDemand paging
Antwoord en toelichting tonen

Antwoord: A. Systeemaanroep (system call)

Omdat toepassingen in de gebruikersmodus draaien, kunnen ze schijven en apparaten niet rechtstreeks bedienen. Daarom gebruiken ze een systeemaanroep: met een speciale instructie wordt naar de bevoorrechte modus overgeschakeld, wordt kernelcode aangeroepen en worden onder meer het lezen en schrijven van bestanden, geheugentoewijzing en het aanmaken van processen aangevraagd. Na afloop keert de uitvoering terug naar de gebruikersmodus. Een contextwisseling is het omschakelen naar een ander proces en demand paging is een methode waarbij pagina's pas worden ingelezen als ze nodig zijn.

Welke uitleg van het verschil tussen een interrupt en een exception is gangbaar?

  1. AEen interrupt wordt alleen door software veroorzaakt en een exception alleen door hardwareschakelingen
  2. BEen interrupt ontstaat door een externe oorzaak zoals een apparaat, en een exception als gevolg van het uitvoeren van een instructie
  3. CNa een interrupt kan niet naar het oorspronkelijke proces worden teruggekeerd, na een exception altijd wel
Antwoord en toelichting tonen

Antwoord: B. Een interrupt ontstaat door een externe oorzaak zoals een apparaat, en een exception als gevolg van het uitvoeren van een instructie

Een interrupt is (asynchroon) en ontstaat op een niet vooraf bekend moment door een externe oorzaak die los staat van de uitgevoerde instructie, zoals een voltooiingsmelding van een I/O-apparaat of een timer. Een exception is (synchroon) en ontstaat als gevolg van het uitvoeren van een bepaalde instructie, zoals deling door nul, een ongeldige instructie, een paginafout of een systeemaanroepinstructie. Na verwerking door de handler kan in beide gevallen vaak worden teruggekeerd naar het oorspronkelijke proces, dus het onderscheid wordt niet gemaakt op terugkeerbaarheid.

  1. Wat gebeurt er juist wanneer de laatste ecall-instructie van de bovenstaande RISC-V-code wordt uitgevoerd?
  2. Waarom wordt bij terugkeer naar het oorspronkelijke programma na afhandeling van een interrupt of exception een speciale terugkeerinstructie (zoals sret en mret van RISC-V) gebruikt in plaats van een gewone terugkeerinstructie van een functie?
  3. Wat is de belangrijkste reden dat het sneller is om kleine gegevens eerst in een buffer in de gebruikersruimte te verzamelen en gebundeld weg te schrijven dan bij het byte voor byte wegschrijven telkens een systeemaanroep te doen?

Oefenvragen over Besturingssysteem en hardware

Belangrijke termen uitgelegd

Bevoorrechte modus (privileged mode)
CPU-modus die alleen de OS-kernel kan gebruiken. Hierin kunnen gevaarlijke instructies worden uitgevoerd, zoals het instellen van paginatabellen en I/O-bewerkingen; onderscheiden van de gebruikersmodus waarin applicaties draaien.
Systeemaanroep (system call)
Mechanisme waarmee een applicatie het besturingssysteem vraagt om bijvoorbeeld bestanden te lezen of te schrijven of geheugen toe te wijzen. Met een speciale instructie wordt een exceptie opgewekt, naar de bevoorrechte modus geschakeld en de kernelcode aangeroepen.
Interrupt handler
Verwerking die de CPU uitvoert wanneer een interrupt of exception optreedt. Slaat de toestand van de onderbroken verwerking op, handelt af wat bij de oorzaak hoort en keert terug naar de oorspronkelijke verwerking. Het uitgangspunt is de verwerking zo kort mogelijk te houden.
Paginatabel
Tabel met de toewijzing van paginanummers van virtuele adressen aan paginanummers van fysieke adressen. Wordt per proces door het besturingssysteem gemaakt en door de MMU van de CPU gebruikt om adressen te vertalen. Elke ingang bevat ook bits voor beveiliging.
Contextwissel (context switch)
Het omschakelen van het proces of de thread dat de CPU uitvoert. De toestand zoals registers en programmateller wordt opgeslagen en hersteld; bij een proceswissel wordt ook de adresruimte omgeschakeld.

Verwante vergelijkingen