Misschien heb je wel eens gehoord van applicaties die in”kernel”-of”user”-modus draaien. Het komt allemaal neer op hoe besturingssystemen werken wanneer ze hun werk doen. Als je dat eenmaal begrijpt, is het gemakkelijk om het verschil tussen gebruikersmodus en kernelmodus te begrijpen.
Begrijpen wat een besturingssysteem doet
Een computer bestaat uit hardware, de elektronische componenten en software, de computercode die wordt uitgevoerd door die hardware. Maar wat misschien minder duidelijk is, is hoe ze samenwerken.
Inhoudsopgave
Het meest essentiële element van een computer is de bit of het’binaire cijfer’. Alles wat een computer doet, wordt weergegeven als enen en nullen. Verschillende computercomponenten vertegenwoordigen bits op verschillende manieren. In een CPU vertegenwoordigen microscopisch kleine transistors enen en nullen door aan of uit te staan. Die transistors zijn gerangschikt in logische structuren, logische poorten genaamd.
In elektronisch computergeheugen worden bits weergegeven door geheugencellen met een lading boven of onder een bepaalde drempel. Op een mechanische harde schijf worden bits weergegeven als magnetische fluctuaties gemeten op een draaiende plaat. Op optische schijven doen putjes en landjes die wel of niet laserlicht reflecteren hetzelfde werk.
Ongeacht hoe de fysieke weergave van binaire code wordt bereikt, u kunt uiteindelijk alle computercomponenten van de consument terugbrengen tot deze onbewerkte machinecode.
Dus hoe ga je van de mensvriendelijke interface van een computer naar de rauwe, lage-niveau processen in de computer zelf? Dat is waar het besturingssysteem binnenkomt. Het bestuurt rechtstreeks de hardware van de computer.
Deze software vertaalt alles wat applicaties (en dus de gebruiker) willen in de machinecode-instructies die de CPU en andere componenten begrijpen. Het meest cruciale stukje software in dit proces is de kernel.
Wat is de kernel?
De kernel is, zoals de naam al doet vermoeden, de kern van het besturingssysteem. De kernel is software die zich in RAM bevindt en alles bestuurt wat de computer doet. Als er iets in het geheugen wordt geschreven, is het de kernel die de uitvoering aanstuurt.
De kernel weet hoe hij moet communiceren met hardware zoals GPU’s en netwerkkaarten, maar weet misschien niet hoe hij deze optimaal moet gebruiken , gebaseerd op generieke standaarden in de computerindustrie.
De hardwarestuurprogramma’s komen hier van pas. Drivers vertellen je besturingssysteem hoe het met specifieke componenten moet werken, daarom heb je verschillende drivers nodig voor bijvoorbeeld Nvidia en AMD GPU’s.
Uitgerust met de juiste drivers, is de kernel de ultieme autoriteit binnen de computer , inclusief dingen doen die gegevens catastrofaal kunnen vernietigen.
De rol van Application Programming Interfaces (API’s)
In de tijd van MS-DOS moesten softwareontwikkelaars hun software speciaal voor de hardware van de gebruiker. Het meest beruchte voorbeeld hiervan op MS-DOS-systemen waren stuurprogramma’s voor geluidskaarten.
Een bepaald videospel zou de meest populaire kaarten moeten ondersteunen (Sound Blaster, Ad-lib, Gravis Ultrasound, enz.) en hopen dat de meeste spelers gedekt waren. Tegenwoordig werken dingen heel anders, dankzij API’s.
Het geluidskaartselectiescherm van Wolf3D
Microsoft DirectX is een goed voorbeeld. Als je een diepgaande uitleg wilt, ga dan naar Wat is DirectX en waarom is het belangrijk? Het belangrijkste om te weten is echter dat de API een standaard manier biedt voor softwareontwikkelaars om hardwarebronnen op te vragen bij componenten zoals de GPU. Bovendien moeten hardwaremakers er alleen voor zorgen dat hun producten voldoen aan DirectX om volledige compatibiliteit met gelijkaardige compatibele software te garanderen.
API’s bieden een vertaallaag tussen softwareapplicaties en de low-level kernel met zijn hardwaredrivers. Ja, dit komt met een kleine prestatiestraf. Toch is dit op moderne computers verwaarloosbaar, en het heeft een aantal voordelen, en dat is waar we uiteindelijk uitkomen bij de gebruikersmodus en de kernelmodus.
Gebruikersmodus vs. Kernelmodus
Moderne besturingssystemen voeren honderden of duizenden”processen”tegelijk uit, waardoor ze dynamisch CPU-tijd krijgen als dat nodig is op basis van hun prioriteiten en rekenkrachtvereisten.
Wanneer u een toepassing start, genereert deze processen en de De CPU kan ze zowel in gebruikersmodus als in kernelmodus uitvoeren.
Een Windows-proces dat in gebruikersmodus draait, heeft alleen toegang tot zijn eigen privé-adresruimte voor virtueel geheugen en afhandelingstabel. De software gebruikt deze tabellen om gegevens in RAM op te slaan en bronnen op te vragen. Er is geen directe toegang tot geheugen of andere hardware, en het is aan het besturingssysteem om die virtuele ruimtes toe te wijzen aan de daadwerkelijke hardware van de computer.
Dit is om vele redenen goed, maar het meest cruciale voordeel is dat de applicatie geen gegevens buiten de adresruimte van het virtuele geheugen overschrijven of wijzigen. Bovendien zijn bepaalde functies niet toegankelijk voor processen in de gebruikersmodus, voornamelijk functies die het systeem kunnen laten crashen of gegevens kunnen vernietigen.
Als een proces wordt gestart of in de kernelmodus wordt omgezet, heeft het volledige toegang tot het systeem bronnen, zelfs die gereserveerd zijn voor het besturingssysteem. In theorie zou het dus cruciale gegevens kunnen overschrijven die het besturingssysteem nodig heeft om correct te werken.
Valvallen en uitzonderingen
Het is belangrijk om te begrijpen dat deze twee modi op hardwareniveau worden afgedwongen door de CPU zelf. Als een toepassing die in de gebruikersmodus draait iets probeert te doen waarvoor toegang in de kernelmodus vereist is, genereert het een”trap”of”uitzondering”. Het besturingssysteem zal dan de applicatie afhandelen, meestal door deze af te sluiten en een crashlog te genereren zodat de ontwikkelaars kunnen zien wat er in het geheugen gebeurde toen de zaken ontspoorden.
De gevaren van de kernelmodus: The Blue Screen of Death
Als je ooit een Blue Screen of Death hebt meegemaakt (wie niet?) die je computer dwong uit te schakelen of opnieuw op te starten, is de kans groot dat het een kernel-modus was proces de schuld.
Als een proces in de kernelmodus iets doet wat het niet zou moeten doen, kan het besturingssysteem er niet van herstellen en stopt de hele computer. Wanneer een gebruikersmodusproces in de war raakt, crasht alleen de applicatie en kan de rest van de software en het besturingssysteem zonder problemen doorgaan.
Dit is een gebied waar API’s een essentiële rol spelen, aangezien het de API is die om privileges in de kernelmodus vraagt. Toepassingen in gebruikersmodus delegeren in wezen verzoeken waarvoor kernelmodusrechten nodig zouden zijn aan de API.
Dit is de reden waarom kernelmodus meestal alleen wordt verleend aan systeemprocessen op laag niveau die rechtstreeks toegang moeten hebben tot de hardware van de computer. Gewoonlijk wordt dit recht uitgebreid tot een proces omdat het meer prestaties nodig heeft dan de gebruikersmodus kan bieden. Sommige CPU-instructies werken alleen in de kernelmodus, dus als een proces deze functies moet gebruiken, moet het worden verhoogd.
Als je problemen hebt met het Blue Screen of Death, lees dan zeker onze Blue Screen of Death-gids voor probleemoplossing voor Windows 10!