Perché le CPU x86 usano solo due "quattro" anelli su quattro?

0
207

perché-do-X 86-CPU-solo-uso-due-out-of-quattro-ring-00

Quando apprendi di più su come funzionano i sistemi operativi e l'hardware che funzionano e interagiscono tra loro, potresti essere sorpreso di vedere che cosa si verificano stranezze o sottoutilizzazione delle “risorse”. Perché? Il post di domande e risposte di SuperUser di oggi ha la risposta alla domanda di un curioso lettore.

La sessione di domande e risposte di oggi ci viene fornita da SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte guidato dalla community.

Foto per gentile concessione di Lemsipmatt (Flickr).

La domanda

Il lettore SuperUser AdHominem vuole sapere perché le CPU x86 usano solo due squilli su quattro:

Utilizzano solo sistemi x86 basati su Linux e Windows Anello 0 per la modalità kernel e Anello 3 per la modalità utente. Perché i processori distinguono anche quattro diversi anelli se finiscono comunque per usarne solo due? Questo è cambiato con l'architettura AMD64?

Perché le CPU x86 usano solo due squilli su quattro?

La risposta

La collaboratrice di SuperUser Jamie Hanrahan ha la risposta per noi:

Ci sono due ragioni principali.

Il primo è che, sebbene le CPU x86 offrano quattro anelli di protezione della memoria, la granularità della protezione offerta è quindi solo a livello di segmento. Cioè, ogni segmento può essere impostato su un anello specifico (livello di privilegio) insieme ad altre protezioni come disabilitato alla scrittura. Ma non ci sono molti descrittori di segmenti disponibili. La maggior parte dei sistemi operativi vorrebbe avere una granularità molto più fine della protezione della memoria, come … per le singole pagine.

Quindi, inserisci la protezione basata sulla tabella delle pagine. La maggior parte, se non tutti, i moderni sistemi operativi x86 ignorano più o meno il meccanismo di segmentazione (per quanto possono comunque) e fanno affidamento sulla protezione disponibile dai bit di basso ordine nelle voci della tabella delle pagine. Uno di questi è chiamato bit “privilegiato”. Questo bit controlla se il processore deve trovarsi in uno dei livelli “privilegiati” per accedere alla pagina. I livelli “privilegiati” sono PL 0, 1 e 2. Ma è solo un bit, quindi a livello di protezione pagina per pagina, il numero di “modalità” disponibili per quanto riguarda la protezione della memoria è solo due: una pagina può essere accessibile dalla modalità non privilegiata o meno. Quindi, solo due squilli. Per avere quattro possibili squilli per ogni pagina, dovrebbero avere due bit di protezione in ciascuna voce della tabella delle pagine per codificare uno dei quattro possibili squilli (proprio come i descrittori di segmento). Tuttavia, non lo fanno.

L'altra ragione è il desiderio di portabilità del sistema operativo. Non si tratta solo di x86; Unix ci ha insegnato che un sistema operativo potrebbe essere relativamente portabile su più architetture di processori e che era una buona cosa. E alcuni processori supportano solo due anelli. Non dipendendo da più anelli nell'architettura, gli implementatori del sistema operativo hanno reso i sistemi operativi più portatili.

C'è un terzo motivo che è specifico per lo sviluppo di Windows NT. I designer di NT (David Cutler e il suo team, che Microsoft ha assunto dai DEC Western Region Labs) avevano una vasta esperienza precedente in VMS; infatti, Cutler e alcuni altri erano tra i designer originali di VMS. E il processore VAX per cui è stato progettato VMS ha quattro squilli (VMS utilizza quattro squilli).

Ma i componenti che giravano su VMS Anelli 1 e 2 (Record Management Services e CLI, rispettivamente) sono stati esclusi dal progetto NT. Anello 2 in VMS non si trattava in realtà di sicurezza del sistema operativo, ma piuttosto di preservare l'ambiente della CLI dell'utente da un programma all'altro e Windows non aveva questo concetto; la CLI viene eseguita come un normale processo. Per quanto riguarda VMS Anello 1, il codice RMS in Anello 1 ho dovuto chiamare Anello 0 abbastanza spesso e le transizioni ad anello sono costose. Si è rivelato molto più efficiente Anello 0 ed essere fatto con esso invece di averne un sacco Anello 0 transizioni all'interno del Anello 1 codice (di nuovo, non che NT abbia comunque qualcosa come RMS).

Per quanto riguarda il motivo per cui x86 ha implementato quattro anelli mentre i sistemi operativi non li hanno utilizzati, stai parlando di sistemi operativi di progettazione molto più recente di x86. Molte funzionalità di programmazione del sistema di x86 sono state progettate molto prima che NT o i veri kernel Unix fossero implementati su di esso, e non sapevano davvero quale sistema operativo avrebbe usato. Non è stato fino a quando non abbiamo ottenuto il paging su x86 che abbiamo potuto implementare veri kernel Unix o VMS.

Non solo i moderni sistemi operativi x86 ignorano ampiamente la segmentazione (hanno semplicemente impostato i segmenti C, D e S con un indirizzo base di 0 e dimensioni di 4 GB; i segmenti F e G sono talvolta usati per indicare le strutture dei dati del sistema operativo chiave ), ignorano anche in gran parte cose come “segmenti di stato delle attività”. Il meccanismo TSS è stato chiaramente progettato per cambiare il contesto del thread, ma risulta avere troppi effetti collaterali, quindi i moderni sistemi operativi x86 lo fanno “a mano”. L'unica volta che x86 NT modifica le attività hardware è per alcune condizioni davvero eccezionali, come un'eccezione a doppio errore.

Per quanto riguarda l'architettura x64, molte di queste funzionalità in disuso sono state escluse. A loro merito, AMD ha effettivamente parlato con i team del kernel del sistema operativo e ha chiesto di cosa avevano bisogno da x86, di cosa non avevano bisogno o che non volevano e cosa vorrebbero aggiungere. I segmenti su x64 esistono solo in quella che potrebbe essere chiamata forma vestigiale, il cambio di stato dell'attività non esiste, ecc., E i sistemi operativi continuano a usare solo due anelli.


Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere altre risposte da altri utenti esperti di Stack Exchange? Dai un'occhiata al thread completo di discussione qui.