
Wanneer u meer te weten wilt komen over de manier waarop besturingssystemen en de hardware die ze op het werk gebruiken en met elkaar communiceren, u misschien verrast bent om te zien wat eigenaardigheden of onderbenutting van 'bronnen' lijken te zijn. Waarom is dat? De SuperUser Q & A-post van vandaag biedt het antwoord op de vraag van een nieuwsgierige lezer. De vraag-en-antwoordsessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een door de gemeenschap gestuurde groep van Q & A-websites.
Foto's met dank aan Lemsipmatt (Flickr).
De vraag
Op Linux en Windows gebaseerde x86-systemen gebruiken alleen
Ring 0 voor kernelmodus en Ring 3 voor gebruikersmodus. Waarom kunnen processors zelfs vier verschillende ringen onderscheiden als ze er uiteindelijk toch maar twee gebruiken? Is dit veranderd met de AMD64-architectuur? Waarom gebruiken x86-CPU's slechts twee van de vier ringen?
De Antwoord
Er zijn twee hoofdredenen.
De eerste is dat, hoewel de x86-CPU's vier keer geheugenbescherming bieden, de granulariteit van de bescherming die daardoor wordt geboden, zich alleen op het niveau van het per segment bevindt. Dat wil zeggen, elk segment kan worden ingesteld op een specifieke ring (bevoegdheidsniveau) samen met andere beveiligingen zoals schrijf-uitgeschakeld. Maar er zijn niet veel segmentdescriptors beschikbaar. De meeste besturingssystemen willen een veel fijnere korreligheid van geheugenbescherming, zoals ... voor afzonderlijke pagina's.
Voer daarom op paginatabel gebaseerde beveiliging in. De meeste, zo niet alle, moderne x86-besturingssystemen negeren het segmenteringsmechanisme min of meer (voor zover ze dat kunnen hoe dan ook) en vertrouwen op de bescherming die beschikbaar is uit de low-order bits in paginatabelitems. Een daarvan wordt het "bevoorrechte" bit genoemd. Deze bit bepaalt of de processor zich in een van de "bevoorrechte" niveaus moet bevinden om toegang te krijgen tot de pagina. De "bevoorrechte" niveaus zijn
PL 0, 1 en 2 . Maar het is slechts één bit, dus op het niveau van pagina voor pagina is het aantal beschikbare "modi" voor geheugenbescherming slechts twee: een pagina kan toegankelijk zijn vanuit de niet-geprivilegieerde modus of niet. Vandaar, slechts twee ringen. Om voor elke pagina vier mogelijke ringen te hebben, moeten deze twee beveiligingsbits hebben in elke paginatabelingang om een van de vier mogelijke belnummers te coderen (net als de segmentdescriptors). Ze doen dit echter niet. De andere reden is een verlangen naar draagbaarheid van het besturingssysteem. Het gaat niet alleen om x86; Unix heeft ons geleerd dat een besturingssysteem relatief draagbaar kan zijn naar meerdere processorarchitecturen en dat het een goede zaak was. En sommige processoren ondersteunen slechts twee ringen. Door niet afhankelijk te zijn van meerdere ringen in de architectuur, maakten de implementeerders van het besturingssysteem de besturingssystemen draagbaarder.
Er is een derde reden die specifiek is voor de ontwikkeling van Windows NT. De ontwerpers van NT (David Cutler en zijn team, die door Microsoft waren ingehuurd bij DEC Western Region Labs) hadden uitgebreide eerdere ervaring met VMS; in feite waren Cutler en enkele anderen de oorspronkelijke ontwerpers van VMS. En de VAX-processor waarvoor VMS is ontworpen, heeft vier ringen (VMS gebruikt vier ringen). Maar de componenten in VMS's
Ringen 1 en 2
(Record Management Services en de CLI, respectievelijk) werden weggelaten uit het NT-ontwerp. Ring 2 in VMS ging niet echt over de beveiliging van het besturingssysteem, maar over het behouden van de CLI-omgeving van de gebruiker van het ene programma naar het andere en Windows had dat concept niet; de CLI werkt als een gewoon proces. Voor VMS's Ring 1 moest de RMS-code in Ring 1 vrij vaak Ring 0 bellen en zijn de ringovergangen duur. Het bleek veel efficiënter om gewoon naar Ring 0 te gaan en er klaar mee te zijn in plaats van veel Ring 0 overgangen binnen de Ring 1 code (nogmaals, niet dat NT sowieso zoiets als RMS heeft). Waarom x86 vier ringen implementeerde terwijl besturingssystemen ze niet gebruikten, dan heb je het over besturingssystemen met een veel recenter ontwerp dan x86. Veel van de systeemprogrammafuncties van x86 zijn ontworpen lang voordat NT of echte Unix-hash-kernels werden geïmplementeerd, en ze wisten niet echt wat het besturingssysteem zou gebruiken. Pas toen we op x86 raakten, konden we echte Unix-achtige of VMS-achtige kernels implementeren. Niet alleen negeren moderne x86-besturingssystemen segmentering grotendeels (ze hebben gewoon de C-, D- en S-segmenten opgezet met een basisadres van 0 en een grootte van 4 GB; F- en G-segmenten worden soms gebruikt om te wijzen naar belangrijke datastructuren van het besturingssysteem), ze negeren ook grotendeels dingen als "taakstatussegmenten". Het TSS-mechanisme was duidelijk ontworpen voor thread context switching, maar het blijkt te veel bijwerkingen te hebben, dus moderne x86-besturingssystemen doen dit "met de hand". De enige keer dat x86 NT hardwaretaken wijzigt, is voor enkele echt uitzonderlijke omstandigheden, zoals een dubbele foutuitzondering.
Met betrekking tot x64-architectuur zijn veel van deze niet meer gebruikte functies weggelaten. Het is op zich een goede zaak dat AMD met de kernteams van het besturingssysteem heeft gesproken en vroeg wat ze nodig hadden van x86, wat ze niet nodig hadden of niet wilden, en wat ze zouden willen toevoegen. Segmenten op x64 bestaan alleen in wat rudimentaire vorm kan worden genoemd, taakstatusomwisseling bestaat niet enz. En besturingssystemen blijven slechts twee ringen gebruiken.
Heeft u iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread
![]()
Hoe u e-mail in Outlook beter kunt beheren met snelle stappen en regels
Als u ons vertelt dat e-mail uit de mode is geraakt, vragen we u om onze inboxen te bekijken. De dagelijkse rommel van berichten kunnen ordenen en organiseren, is vrij essentieel voor het gezond houden van de werkplek. Het gaat ook niet alleen om spam. Spam bestaat nog steeds, een vervelende feit van het leven, maar er zijn manieren om daarmee om te gaan.
![]()
De Galaxy S7 vereenvoudigen voor uw Tech-Unsavvy-verwanten met de "Easy-modus"
Elke technisch geoefende geek weet hoe vervelend het is om minder slimme vrienden, familieleden of kinderen te helpen hun gadgets werken. Gelukkig heeft Samsung een manier ingebouwd om sommige van de primaire apps van de Galaxy S7 te vereenvoudigen met "Easy Mode". Hier is hoe het in te schakelen. Er zijn eigenlijk een paar verschillende manieren om Easy Mode in te schakelen, maar dan ter wille van eenvoud, we gaan gewoon de eenvoudigste manier bespreken - het heeft tenslotte niet veel zin om het proces eenvoudiger te maken.