da.phhsnews.com


da.phhsnews.com / Hvorfor bruger x86-CPU'er kun to ud af fire "ringe"?

Hvorfor bruger x86-CPU'er kun to ud af fire "ringe"?


Når du lærer mere om, hvordan operativsystemer og hardware de kører på arbejde og interagere med hinanden, kan du blive overrasket for at se, hvad der synes at være underligt eller underudnyttelse af "ressourcer" der forekommer. Hvorfor det? Dagens SuperUser Q & A-indlæg har svaret på en nysgerrig læsers spørgsmål.

Dagens Spørgsmål og Svar-sessions kommer til vores side med SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

Foto med tilladelse til Lemsipmatt (Flickr).

Spørgsmålet

SuperUser-læser AdHominem vil vide, hvorfor x86-CPU'er kun bruger to ud af fire ringe:

Linux og Windows-baseret x86-systemer bruger kun Ring 0 til kernel-tilstand og Ring 3 til brugertilstand. Hvorfor adskiller processorer endda fire forskellige ringe, hvis de alle ender med at bruge to af dem alligevel? Har dette ændret sig med AMD64-arkitekturen?

Hvorfor bruger x86-CPU'er kun to ud af fire ringe?

Svaret

SuperUser-bidragsyderen Jamie Hanrahan har svaret for os:

Der er to primære årsager.

Den første er, at selv om x86-CPU'erne tilbyder fire ringe af hukommelsesbeskyttelse, er beskyttelsesgraden af ​​den beskyttelse, der tilbydes derved, kun på per-segmentniveau. Det vil sige, hvert segment kan indstilles til en bestemt ring (privilegiumniveau) sammen med andre beskyttelser som skriveaktiveret. Men der er ikke så mange segmentbeskrivere til rådighed. De fleste operativsystemer vil gerne have en meget finere grad af hukommelsesbeskyttelse, som ... for enkelte sider.

Så indtast sidebaseret beskyttelse. De fleste, om ikke alle, moderne x86-operativsystemer ignorerer mere eller mindre segmenteringsmekanismen (så meget som de kan alligevel) og stole på den beskyttelse, der er tilgængelig fra lavordensbitene i sidetabellposter. En af disse kaldes den "privilegerede" bit. Denne bit styrer, hvorvidt processoren skal være i et af de "privilegerede" niveauer for at få adgang til siden. De "privilegerede" niveauer er PL 0, 1 og 2 . Men det er kun en smule, så på sidebeskyttelsesniveauet er antallet af "tilstande", der er tilgængelige med hensyn til hukommelsesbeskyttelse, kun to: En side kan være tilgængelig fra ikke-privilegeret tilstand, eller ej. Derfor er der kun to ringe. For at have fire mulige ringe for hver side, skulle de have to beskyttelsesbitar i hver sidebordindgang for at kode et af fire mulige ringnumre (ligesom segmentbeskriverne). Men det gør de ikke.

Den anden grund er et ønske om operativsystemportabilitet. Det handler ikke kun om x86; Unix lærte os, at et operativsystem kunne være relativt bærbart til flere processor arkitekturer, og at det var en god ting. Og nogle processorer understøtter kun to ringe. Ved ikke at afhænge af flere ringe i arkitekturen gjorde operativsystemets implementere operativsystemerne mere bærbare.

Der er en tredje grund til, at der er specifikke for Windows NT-udvikling. NT's designere (David Cutler og hans team, som Microsoft hyrede fra DEC Western Region Labs) havde omfattende tidligere erfaring med VMS; Faktisk var Cutler og nogle af de andre blandt VMS oprindelige designere. Og VAX-processoren, som VMS blev designet til, har fire ringe (VMS bruger fire ringe).

Men de komponenter, der løb i VMS's Rings 1 og 2 (Record Management Services og CLI) blev udeladt af NT-design. Ring 2 i VMS handlede ikke kun om operativsystemsikkerhed, men snarere om at bevare brugerens CLI-miljø fra et program til det næste, og Windows havde ikke det koncept; CLI kører som en almindelig proces. Hvad angår VMS's Ring 1 , havde RMS-koden i Ring 1 at ringe til Ring 0 ganske ofte, og ringovergange er dyre. Det viste sig at være langt mere effektivt at bare gå til Ring 0 og gøres med det i stedet for at have mange Ring 0 overgange inden for Ring 1 kode (igen, ikke at NT har noget som RMS alligevel).

Hvad angår hvorfor x86 implementerede fire ringe, mens operativsystemerne ikke brugte dem, taler du om operativsystemer med langt nyere design end x86. Mange af systemprogrammeringsfunktionerne i x86 blev designet længe før NT eller sande Unix-ish kerner blev implementeret på det, og de vidste ikke rigtigt, hvad operativsystemet ville bruge. Det var først, indtil vi fik paging på x86, at vi kunne implementere ægte Unix-ish- eller VMS-lignende kerner.

Ikke alene forbyder moderne x86-operativsystemer i høj grad segmentering (de stiller kun C-, D- og S-segmenterne op med en baseadresse på 0 og størrelse på 4 GB, F og G-segmenter bruges nogle gange til at pege på centrale operativsystemdatastrukturer), de ignorerer også stort set ting som "task state-segmenter". TSS-mekanismen var klart designet til trådkontekstskifte, men det viser sig at have for mange bivirkninger, så moderne x86-operativsystemer gør det "for hånd". Den eneste gang, x86 NT ændrer hardwareopgaver, er for nogle helt usædvanlige forhold, som en dobbeltfejl undtagelse.

Hvad angår x64-arkitekturen, blev mange af disse afbrudte funktioner udeladt. Til deres kredit talte AMD faktisk til operativsystemkernelag og spurgte, hvad de havde brug for fra x86, hvad de ikke behøvede eller ikke ønskede, og hvad de gerne vil tilføje. Segmenter på x64 eksisterer kun i det, der kan kaldes vestigial form, der eksisterer ikke task state switching osv., Og operativsystemerne bruger kun to ringe.


Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Se hele diskussionsgruppen her.


Sådan deler du Apple Live-fotos med alle

Sådan deler du Apple Live-fotos med alle

Live-fotos er en nifty innovation Apple, der for nylig blev introduceret i iOS 9, giver brugerne mulighed for grundlæggende at skyde korte videoer, der vises som fotos. Desværre er den eneste måde at dele dem nemt på med andre iPhone-brugere. Sådan deler du dem med alle. Vi kan virkelig lide Live Photos og synes, at de er en fantastisk måde at fange minner ud over det samme gamle fotoformat.

(how-to)

Sådan aktiveres systemgendannelse (og reparationssystemproblemer) på Windows 10

Sådan aktiveres systemgendannelse (og reparationssystemproblemer) på Windows 10

Med Windows 10 synes Microsoft at have deaktiveret Systemgendannelse som standard - i hvert fald på nogle pc'er. Systemgendannelse har eksisteret siden Windows ME, hvilket skaber snapshots af systemfiler, som du kan gendanne, hvis der opstår et problem. Windows 10 indeholder stadig Systemgendannelse, så du kan genaktivere den, hvis du føler dig mere komfortabel med Systemgendannelse som en sikkerhedsnet.

(how-to)