Homepage » come » Perché le CPU x86 usano solo due di quattro squilli?

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

    Quando si apprende di più su come i sistemi operativi e l'hardware su cui funzionano funzionano e interagiscono tra loro, si può essere sorpresi di vedere ciò che sembra essere stranezze o sottoutilizzazione di "risorse" che si verificano. Perché? Il post di Q & A di SuperUser di oggi ha la risposta alla domanda di un lettore curioso.

    La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte basato sulla comunità.

    Foto per gentile concessione di Lemsipmatt (Flickr).

    La domanda

    Lettore SuperUser AdHominem vuole sapere perché le CPU x86 usano solo due anelli su quattro:

    Solo i sistemi x86 basati su Linux e Windows utilizzano Anello 0 per la modalità kernel e Anello 3 per la modalità utente. Perché i processori distinguono anche quattro diversi anelli se finiscono tutti con solo due di essi? È cambiato con l'architettura AMD64?

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

    La risposta

    Il collaboratore 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 privilegiato) insieme ad altre protezioni come disabilitato in 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 possano comunque) e fanno affidamento sulla protezione disponibile dai bit di basso ordine nelle voci della tabella di pagina. Uno di questi è chiamato il bit "privilegiato". Questo bit controlla se il processore deve essere 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 "modi" disponibili per quanto riguarda la protezione della memoria è solo due: una pagina può essere accessibile dalla modalità non privilegiata, o no. Quindi, solo due anelli. Per avere quattro possibili anelli per ogni pagina, dovrebbero avere due bit di protezione in ciascuna voce della tabella di pagina per codificare uno dei quattro possibili numeri di squilli (proprio come i descrittori di segmento). Tuttavia, non lo fanno.

    L'altro motivo è il desiderio di portabilità del sistema operativo. Non si tratta solo di x86; Unix ci ha insegnato che un sistema operativo poteva essere relativamente portabile a più architetture di processore 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 rendevano più portatili i sistemi operativi.

    C'è una terza ragione specifica per lo sviluppo di Windows NT. I progettisti di NT (David Cutler e il suo team, che Microsoft aveva ingaggiato dai DEC Western Region Labs) avevano una vasta esperienza precedente su VMS; infatti, Cutler e alcuni altri erano tra i designer originali di VMS. E il processore VAX per il quale è stato progettato VMS ha quattro anelli (VMS utilizza quattro anelli).

    Ma i componenti che giravano nei VMS Anelli 1 e 2 (Record Management Services e CLI, rispettivamente) sono stati lasciati fuori dal design NT. Anello 2 in VMS non si trattava di sicurezza del sistema operativo, ma piuttosto di preservare l'ambiente CLI dell'utente da un programma all'altro, e Windows non aveva quel concetto; la CLI funziona come un processo ordinario. Per quanto riguarda i VMS Anello 1, il codice RMS in Anello 1 dovuto chiamare Anello 0 abbastanza spesso, e le transizioni ad anello sono costose. Risultò molto più efficiente andare semplicemente a Anello 0 e sii fatto con esso piuttosto che avere un sacco di 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 usavano, si sta parlando di sistemi operativi di progettazione molto più recente di x86. Molte delle funzionalità di programmazione del sistema di x86 sono state progettate molto tempo prima che venissero implementati NT o veri kernel Unix-ish e non sapevano realmente quale sarebbe stato il sistema operativo. Non è stato fino a quando non abbiamo avuto il paging su x86 che potremmo implementare veri kernel Unix-ish o VMS-like.

    Non solo i moderni sistemi operativi x86 ignorano in gran parte la segmentazione (hanno appena impostato i segmenti C, D e S con un indirizzo base di 0 e una dimensione di 4 GB, i segmenti F e G sono talvolta utilizzati per puntare a strutture di dati chiave del sistema operativo ), inoltre ignorano in gran parte cose come "segmenti dello stato di attività". Il meccanismo TSS è stato chiaramente progettato per il cambio di contesto dei thread, ma risulta avere troppi effetti collaterali, quindi i moderni sistemi operativi x86 lo fanno "a mano". L'unica volta in cui x86 NT cambia le attività hardware è per alcune condizioni veramente eccezionali, come un'eccezione a doppio errore.

    Per quanto riguarda l'architettura x64, molte di queste funzionalità in disuso sono state tralasciate. A loro merito, AMD ha effettivamente parlato con i team del kernel del sistema operativo e ha chiesto cosa avevano bisogno di x86, cosa non avevano bisogno o non volevano e cosa avrebbero voluto aggiungere. I segmenti su x64 esistono solo in quella che potrebbe essere chiamata forma vestigiale, la commutazione dello stato delle attività non esiste, ecc., Ei sistemi operativi continuano a utilizzare solo due anelli.


    Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.