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.



Slik blinker du en ny ROM til Android-telefonen din

Slik blinker du en ny ROM til Android-telefonen din

Når du kjøpte telefonen, var den avansert, hadde den nyeste versjonen av Android, og fikk hjertet ditt til å synge. Et år eller to senere, blir det ikke nye oppdateringer, og forestillingen er litt treg. Du kan puste nytt liv i telefonen, for ikke å nevne, legg til massevis av nyttige funksjoner ved å blinke den med en ny tilpasset ROM.

(how-to)

Det beste alternativet for overføring på Mac

Det beste alternativet for overføring på Mac

Overføring ble lenge ansett som en av de beste BitTorrent-klientene for Mac, men det er nylig sett tilbake kompromisser fra sine servere. Hvis du er bekymret for overføringens sikkerhet, er det noen andre gode alternativer. I mars 2016 ble Transmissions servere kompromittert, og den offisielle Mac-versjonen av Transmission inneholdt ransomware.

(how-to)