CPU Privilege Rings: Perché gli anelli 1 e 2 non vengono utilizzati?


102

Un paio di domande riguardanti il ​​privilegio della CPU x86 squilla:

  • Perché gli anelli 1 e 2 non vengono utilizzati dalla maggior parte dei sistemi operativi? È solo per mantenere la compatibilità del codice con altre architetture o c'è una ragione migliore?

  • Esistono sistemi operativi che effettivamente utilizzano questi anelli? O sono completamente inutilizzati?


Risposte:


111

Come scrittore di sistemi operativi per hobby, ho scoperto che poiché il paging (una parte importante del moderno modello di protezione) ha solo un concetto di privilegiato (anello 0,1,2) e non privilegiato, il vantaggio degli anelli 1 e 2 è stato notevolmente ridotto.

L'intento di Intel nell'avere gli anelli 1 e 2 è che il sistema operativo metta i driver di dispositivo a quel livello, quindi sono privilegiati, ma in qualche modo separati dal resto del codice del kernel.

Gli anelli 1 e 2 sono in un certo senso "per lo più" privilegiati. Possono accedere alle pagine del supervisore, ma se tentano di utilizzare un'istruzione privilegiata, continuano a GPF come farebbe l'anello 3. Quindi non è un brutto posto per i driver come previsto da Intel ...

Detto questo, hanno sicuramente un uso in alcuni progetti. Infatti, non sempre direttamente dal sistema operativo. Ad esempio, VirtualBox , una macchina virtuale , mette il codice del kernel guest nell'anello 1. Sono anche sicuro che alcuni sistemi operativi ne fanno uso, semplicemente non credo che sia un design popolare al momento.


28
wHOA VirtualBox usa l'anello 1 ?! Questa è pura meraviglia !! Grazie mille per le informazioni, è un'ottima risposta! +1
user541686

10
OS / 2 ha utilizzato ampiamente Ring 2 per il codice I / O. Questo è il motivo per cui è così difficile virtualizzare.
kinokijuf

Da superuser.com/questions/1402537/… : "L'esecuzione del codice dell'anello 0 nell'anello 1 causa molti errori di istruzione aggiuntivi, poiché l'anello 1 non è autorizzato a eseguire istruzioni privilegiate, di cui l'anello 0 dell'ospite ne contiene molte. Con ciascuna di questi errori, il VMM deve intervenire ed emulare il codice per ottenere il comportamento desiderato. Anche se funziona, emulare migliaia di questi errori è molto costoso e danneggia gravemente le prestazioni del guest virtualizzato. "
Dustin Oprea

24

Dal punto di vista della progettazione del sistema operativo, avere più anelli privilegiati è una stranezza di x86: la maggior parte delle altre CPU ha solo due modalità (supervisore e utente). In quanto tale, progettare un sistema operativo per richiedere più modalità privilegiate ne impedirà immediatamente il porting su qualsiasi altra CPU. Inoltre, molti pacchetti di virtualizzazione moderni non emulano correttamente i livelli di privilegio diversi da 0 e 3, rendendo i sistemi operativi che utilizzano questi livelli molto più difficili da testare.


7

Secondo la pagina di Wikipedia su Ring Security , gli anelli 1 e 2 sono utilizzati per i driver (anello 1), i sistemi operativi guest (anello 1) e il codice privilegiato i / o (anello 2), gli hypervisor si trovano in -1/0 (a seconda l'hyper-visor) non 1 come ho affermato in precedenza.

Tuttavia, i due anelli extra non sono mai stati di grande aiuto e quindi sono stati usati raramente. TBH, la maggior parte del codice che utilizza gli anelli 1 e 2 li ha semi-riproposti dal loro uso originale (come gli hypervisor). La maggior parte del codice di Windows in questi giorni sembra trattare il sistema come se avesse solo due livelli (kernel e utente), probabilmente a causa del sovraccarico associato all'ingresso e all'uscita dalla terra del kernel.


1
Penso che ti sia perso un -posto. Sei sicuro che gli hypervisor utilizzino l'anello 1?
user541686

Eh, non stavo pensando, dovrebbe essere hyper-visor in -1 e OS guest in 1, si aggiornerà così velocemente
Necrolis

4
Windows utilizza solo due anelli perché è stato progettato per funzionare su altri processori (ora defunti) che ne avevano solo due.
David,

Nella mia mente, c'è poco sovraccarico per cambiare modalità. Da quello che ho capito, solo l'hardware potrebbe assegnare più privilegi privilegiati alla cpu (come se si fosse verificato un interrupt IO finito). Se questo cambio di privilegio avviene nell'hardware, dubito che non sia banale cambiare anello. Penso che Windows, Linux o MacOS utilizzino solo i due anelli più estremi perché gli architetti riservano gli anelli intermedi per cose come la virtualizzazione ospitata dal sistema operativo.
Nate Symer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.