If-Koubou

De ce procesoarele x86 utilizează numai două din patru "inele"?

De ce procesoarele x86 utilizează numai două din patru "inele"? (Cum să)

Când aflați mai multe despre modul în care sistemele de operare și hardware-ul pe care le rulează lucrează și interacționează unul cu celălalt, este posibil să fiți surprinși să vedeți ce pare a fi ciudățenii sau subutilizarea "resurselor" apărute. De ce este asta? Postarea de astăzi SuperUser Q & A are răspunsul la o întrebare curioasă a cititorului.

Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor Q & A.

Fotografie prin amabilitatea lui Lemsipmatt (Flickr).

Intrebarea

Cititorul super-utilizator AdHominem vrea să știe de ce procesoarele x86 utilizează numai două din cele patru sonerii:

Sistemele x86 bazate pe sistemele Linux și Windows utilizează numai Inelul 0 pentru modul kernel și Inelul 3 pentru modul de utilizare. De ce procesoarele disting chiar și cele patru inele diferite, dacă totuși se termină doar cu două dintre ele? Sa schimbat acest lucru cu arhitectura AMD64?

De ce CPU-urile x86 utilizează numai două din cele patru sonerii?

Răspunsul

Contribuitorul SuperUser Jamie Hanrahan are răspunsul pentru noi:

Există două motive primare.

Primul este că, deși CPU-urile x86 oferă patru inele de protecție a memoriei, granularitatea protecției oferite de acestea este doar la nivelul pe segment. Adică, fiecare segment poate fi setat la un anumit inel (nivel de privilegiu) împreună cu alte protecții cum ar fi dezactivarea scriere. Dar nu sunt disponibili atât de mulți descriptori de segment. Majoritatea sistemelor de operare ar dori să aibă o granularitate mult mai fină de protecție a memoriei, ca de exemplu ... pentru pagini individuale.

Deci, introduceți protecția bazată pe tabel. Cele mai multe, dacă nu toate, sistemele de operare moderne x86 ignoră mai mult sau mai puțin mecanismul de segmentare (oricât de mult pot) și se bazează pe protecția disponibilă de la biții de ordin mic din intrările din tabelele de pagini. Unul dintre acestea se numește bitul "privilegiat". Acest bit controlează dacă procesorul trebuie sau nu să fie la unul dintre nivelurile "privilegiate" pentru a accesa pagina. Nivelurile "privilegiate" sunt PL 0, 1 și 2. Dar este doar un bit, deci la nivelul de protecție a paginilor, numărul de "moduri" disponibile în ceea ce privește protecția memoriei este doar două: o pagină poate fi accesibilă din modul non-privilegiat sau nu. Prin urmare, doar două inele. Pentru a avea patru intrări posibile pentru fiecare pagină, ar trebui să aibă doi biți de protecție în fiecare intrare de tabelă pentru a codifica unul din cele patru numere de apel (la fel ca și descriptorii segmentului). Cu toate acestea, nu au.

Celălalt motiv este o dorință pentru portabilitatea sistemului de operare. Nu este vorba despre x86; Unix ne-a învățat că un sistem de operare ar putea fi relativ portabil pentru mai multe arhitecturi de procesoare și că a fost un lucru bun. Și unii procesori suportă doar două inele. Nu depinzând de mai multe inele din arhitectură, implementatorii de sisteme de operare au făcut sistemele de operare mai portabile.

Există un al treilea motiv care este specific dezvoltării Windows NT. NT designerii (David Cutler și echipa sa, pe care Microsoft la angajat departe de DEC Western Labs) a avut o vastă experiență anterioară în VMS; De fapt, Cutler și câțiva dintre ceilalți erau printre designerii originali ai VMS. Procesorul VAX pentru care a fost proiectat VMS are patru inele (VMS utilizează patru inele).

Dar componentele care au fugit în VMS Inelele 1 și 2 (Record Management Services și CLI, respectiv) au fost lăsate în afara designului NT. Inelul 2 în VMS nu era vorba despre securitatea sistemelor de operare, ci mai degrabă despre păstrarea mediului CLI al utilizatorului de la un program la altul, iar Windows nu avea acest concept; CLI rulează ca un proces obișnuit. În ceea ce privește VMS Inelul 1, codul RMS din Inelul 1 a trebuit să sune Inelul 0 destul de des, iar tranzițiile inelului sunt costisitoare. S-a dovedit a fi mult mai eficient decât să mergem Inelul 0 și să fie făcut cu ea, mai degrabă decât să aibă o mulțime de Inelul 0 tranziții în cadrul Inelul 1 cod (din nou, nu că NT are ceva de genul RMS oricum).

În ceea ce privește motivul pentru care x86 a implementat patru semnale în timp ce sistemele de operare nu le foloseau, vorbim despre sisteme de operare cu design mult mai recent decât x86. O mulțime de caracteristici de programare a sistemului x86 au fost proiectate cu mult înainte ca NT sau adevărate kernel-uri Unix-ish să fie implementate pe aceasta și nu știau cu adevărat ce ar folosi sistemul de operare. Abia după ce am făcut pagini de pe x86, am putea să implementăm kerneluri de tip Unix-ish sau VMS.

Nu numai sistemele de operare moderne x86 ignoră în mare parte segmentarea (doar au configurat segmentele C, D și S cu o adresă de bază de 0 și o dimensiune de 4 GB; Segmentele F și G sunt uneori utilizate pentru a indica structurile de date cheie ale sistemului de operare ), ei ignoră, de asemenea, lucruri precum "segmente de stare de activitate". Mecanismul TSS a fost conceput în mod clar pentru a schimba contextul firului, dar se pare că are prea multe efecte secundare, astfel încât sistemele de operare moderne x86 o fac "cu mâna". Singura dată când x86 NT modifică sarcini hardware este pentru unele condiții cu adevărat excepționale, cum ar fi o excepție dublă de eroare.

În ceea ce privește arhitectura x64, multe dintre aceste caracteristici neutilizate au fost lăsate afară. Pentru credința lor, AMD a vorbit de fapt cu echipele de nucleu ale sistemului de operare și a întrebat ce au nevoie de la x86, ceea ce nu au avut nevoie sau nu au vrut și ce ar dori să le adauge. Segmentele de pe x64 există doar în ceea ce se poate numi formă vestigioasă, comutarea de stare a sarcinii nu există etc., iar sistemele de operare continuă să utilizeze doar două semnale.

Aveți ceva de adăugat la explicație? Sunați în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.