no.phhsnews.com


no.phhsnews.com / Hvorfor bruker x86-CPUer bare to av fire "Rings"?

Hvorfor bruker x86-CPUer bare to av fire "Rings"?


Når du lærer mer om hvordan operativsystemer og maskinvaren de kjører på jobb og samhandler med hverandre, kan du bli overrasket for å se hva som synes å være oddities eller underutnyttelse av "ressurser" som forekommer. Hvorfor det? Dagens SuperUser Q & A-post har svaret på en nysgjerrig leser spørsmålet.

Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppe av Q & A-nettsteder.

Spørsmålet

SuperUser-leser AdHominem vil vite hvorfor x86-CPUer bare bruker to av fire ringer:

Linux og Windows-baserte x86-systemer bruker bare

Ring 0 for kjernemodus og Ring 3 for brukermodus. Hvorfor skiller prosessorer selv fire forskjellige ringer hvis de alle ender opp med å bare bruke to av dem uansett? Har dette endret seg med AMD64-arkitekturen? Hvorfor bruker x86-CPUer bare to av fire ringer?

Svaret

SuperUser-bidragsyter Jamie Hanrahan har svaret for oss:

Det er to primære årsaker.

Den første er at selv om x86-CPUene tilbyr fire ringe med minnebeskyttelse, er beskyttelsesgraden av beskyttelse som tilbys derved kun på per-segmentnivå. Det vil si, hvert segment kan settes til en bestemt ring (privilegiumnivå) sammen med andre beskyttelser som skrive-deaktivert. Men det er ikke så mange segmentbeskrivelser tilgjengelig. De fleste operativsystemer vil gjerne ha en mye finere granularitet av minnebeskyttelse, som ... for enkelte sider.

Så skriv inn sidebasert beskyttelse. De fleste, om ikke alle, moderne x86-operativsystemer, ignorerer mer eller mindre segmenteringsmekanismen (så mye som de kan i alle fall) og stole på beskyttelsen som er tilgjengelig fra lavordningsbitene i sidetabelloppføringene. En av disse kalles den "privilegerte" biten. Denne biten kontrollerer hvorvidt prosessoren må være i et av de "privilegerte" nivåene for å få tilgang til siden. De "privilegerte" nivåene er

PL 0, 1 og 2 . Men det er bare en bit, så på sidebeskyttelsesnivået er antall "moduser" som er tilgjengelige med hensyn til minnesbeskyttelse, bare to: En side kan være tilgjengelig fra ikke-privilegert modus, eller ikke. Derfor bare to ringer. For å få fire mulige ringer for hver side, må de ha to beskyttelsesbiter i hver sidebordoppføring for å kode et av fire mulige ringnumre (akkurat som segmentbeskrivelsene). Men de gjør det ikke. Den andre grunnen er et ønske om operativsystemportabilitet. Det handler ikke bare om x86; Unix lærte oss at et operativsystem kunne være relativt bærbart for flere prosessorarkitekturer, og at det var en god ting. Og noen prosessorer støtter bare to ringer. Ved å ikke avhenge av flere ringer i arkitekturen, gjorde operativsystemets implementatorer operativsystemene mer bærbare.

Det er en tredje grunn som er spesifikk for Windows NT-utvikling. NTs designere (David Cutler og hans team, som Microsoft hyret fra DEC Western Region Labs) hadde omfattende tidligere erfaring på VMS; Faktisk var Cutler og noen av de andre blant VMS opprinnelige designere. Og VAX-prosessoren som VMS ble designet for, har fire ringer (VMS bruker fire ringer).

Men komponentene som kjørte i VMS

Rings 1 og 2 (Record Management Services og CLI) ble forlatt av NT-design. Ring 2 i VMS handlet ikke bare om operativsystemsikkerhet, men heller om å bevare brukerens CLI-miljø fra ett program til det neste, og Windows hadde ikke det konseptet; CLI går som en vanlig prosess. For VMSs Ring 1 måtte RMS-koden i Ring 1 ringe inn Ring 0 ganske ofte, og ringoverganger er dyre. Det viste seg å være langt mer effektivt å bare gå til Ring 0 og bli ferdig med det heller enn å ha mange Ring 0 overganger i Ring 1 kode (igjen, ikke at NT har noe som RMS uansett). For hvorfor x86 implementerte fire ringer mens operativsystemene ikke brukte dem, snakker du om operativsystemer med langt nyere design enn x86. Mange av systemprogrammeringsfunksjonene til x86 ble designet lenge før NT eller ekte Unix-ish kjerner ble implementert på det, og de visste ikke helt hva operativsystemet skulle bruke. Det var ikke før vi fikk paging på x86 at vi kunne implementere ekte Unix-ish eller VMS-lignende kjerner.

Ikke bare ignorerer moderne x86 operativsystemer i stor grad segmentering (de har bare satt opp C-, D- og S-segmentene med en baseadresse på 0 og størrelse på 4 GB, F og G-segmenter er noen ganger brukt til å peke på viktige operativsystemdatastrukturer), og de ignorerer i stor grad ting som "oppgavestatsegmenter". TSS-mekanismen var klart utviklet for kontekstveksling av tråd, men det viser seg å ha for mange bivirkninger, slik at moderne x86-operativsystemer gjør det "for hånd". Den eneste gangen x86 NT endrer maskinvareoppgaver, er for noen virkelig eksepsjonelle forhold, som et dobbeltfeil unntak.

Om x64-arkitekturen ble mange av disse ubrukte funksjonene utelatt. For deres kreditt snakket AMD faktisk til operativsystemkjernelag og spurte hva de trengte fra x86, hva de ikke behøvde eller ikke ønsket, og hva de ville legge til. Segmenter på x64 eksisterer bare i det som kan kalles vestigial form, oppgavestatskontakt eksisterer ikke, etc., og operativsystemene fortsetter å bruke bare to ringer.

Har noe å legge til forklaringen? Lyder av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Se hele diskusjonstråden her.



Forhindre folk fra å videresende eller svare alle i Outlook

Forhindre folk fra å videresende eller svare alle i Outlook

Hvis du ofte sender ut massebrev på e-post og fortsetter å få brukere til å svare på alle mottakere, eller må deaktivere muligheten til å videresende en e-post, Microsoft Exchange og Outlook har du dekket. Exchange og Outlook aktiverer sine egne spesialflagger som kan deaktivere denne funksjonaliteten, og det kan være svært nyttig hvis du trenger mer kontroll over dine sendte e-poster.

(how-to)

Slik tilpasser du «Svar med tekst» Meldinger til samtaler på iPhone

Slik tilpasser du «Svar med tekst» Meldinger til samtaler på iPhone

Du kan enkelt ignorere eller avvise samtaler på iPhone. Men hva om du i det minste vil sende en rask melding for å bekrefte samtalen? Det er tre standard tekstmeldinger du kan sende som svar på samtaler på iPhone. Hvis ingen av standard tekstmeldingssvarene tjener ditt formål, kan du endre dem. For å tilpasse svarene "Svar med tekst", trykk på "Innstillinger" på startskjermen på iPhone.

(how-to)

Interessante Artikler