Anneaux de privilèges CPU: Pourquoi les anneaux 1 et 2 ne sont-ils pas utilisés?

102

Quelques questions concernant les sonneries de privilèges CPU x86:

  • Pourquoi les anneaux 1 et 2 ne sont-ils pas utilisés par la plupart des systèmes d'exploitation? Est-ce simplement pour maintenir la compatibilité du code avec d'autres architectures, ou y a-t-il une meilleure raison?

  • Existe-t-il des systèmes d'exploitation qui utilisent réellement ces anneaux? Ou sont-ils complètement inutilisés?

user541686
la source

Réponses:

111

En tant qu'écrivain de système d'exploitation amateur, j'ai trouvé que parce que la pagination (une partie importante du modèle de protection moderne) n'a qu'un concept de privilégié (anneau 0,1,2) et non privilégié, les avantages des anneaux 1 et 2 ont été considérablement réduits.

L'intention d'Intel en ayant les anneaux 1 et 2 est que le système d'exploitation place les pilotes de périphériques à ce niveau, donc ils sont privilégiés, mais quelque peu séparés du reste du code du noyau.

Les anneaux 1 et 2 sont en quelque sorte «majoritairement» privilégiés. Ils peuvent accéder aux pages du superviseur, mais s'ils tentent d'utiliser une instruction privilégiée, ils GPF comme le ferait ring 3. Ce n'est donc pas un mauvais endroit pour les pilotes comme prévu par Intel ...

Cela dit, ils ont certainement une utilisation dans certains modèles. En fait, pas toujours directement par le système d'exploitation. Par exemple, VirtualBox , une machine virtuelle , met le code du noyau invité dans l'anneau 1. Je suis également sûr que certains systèmes d'exploitation les utilisent, je ne pense tout simplement pas que ce soit une conception populaire pour le moment.

Evan Teran
la source
28
wHOA VirtualBox utilise l'anneau 1?! C'est purement génial !! Merci beaucoup pour l'info, c'est une excellente réponse! +1
user541686
10
OS / 2 a largement utilisé Ring 2 pour le code d'E / S. C'est pourquoi il est si difficile de virtualiser.
kinokijuf
De superuser.com/questions/1402537/… : "L'exécution du code de l'anneau 0 dans l'anneau 1 entraîne de nombreux défauts d'instruction supplémentaires, car l'anneau 1 n'est pas autorisé à exécuter des instructions privilégiées, dont l'anneau 0 de l'invité en contient beaucoup. de ces défauts, le VMM doit intervenir et émuler le code pour obtenir le comportement souhaité. Bien que cela fonctionne, émuler des milliers de ces défauts est très coûteux et nuit gravement aux performances de l'invité virtualisé. "
Dustin Oprea le
24

Du point de vue de la conception du système d'exploitation, avoir plusieurs anneaux privilégiés est une bizarrerie de x86 - la plupart des autres processeurs n'ont que deux modes (superviseur et utilisateur). En tant que tel, concevoir un système d'exploitation pour exiger plusieurs modes privilégiés l'empêchera immédiatement d'être porté sur un autre processeur. De plus, de nombreux packages de virtualisation modernes n'émulent pas correctement les niveaux de privilèges autres que 0 et 3, ce qui rend les systèmes d'exploitation qui utilisent ces niveaux beaucoup plus difficiles à tester.

duskwuff -inactif-
la source
7

Selon la page de Wikipédia sur Ring Security , les anneaux 1 et 2 sont utilisés pour les pilotes (anneau 1), les systèmes d'exploitation invités (anneau 1) et le code privilégié d'E / S (anneau 2), les hyperviseurs se trouvent en -1/0 (selon l'hyper-visière) pas 1 comme je l'ai déjà dit.

Cependant, les deux anneaux supplémentaires n'ont jamais vraiment aidé et sont donc devenus rarement utilisés. TBH, la plupart des codes utilisant les anneaux 1 et 2, ceux-ci les ont semi-réutilisés de leur utilisation d'origine (comme les hyperviseurs). La plupart des codes Windows de nos jours semblent traiter le système comme n'ayant que deux niveaux (noyau et utilisateur), probablement en raison de la surcharge associée à l'entrée et à la sortie du noyau du noyau.

Nécrolis
la source
1
Je pense que vous avez manqué un -quelque part. Êtes-vous sûr que les hyperviseurs utilisent l'anneau 1?
user541686
Heh, ne pensait pas, devrait être hyper-viseurs dans -1 et OS invités dans 1, mettra à jour aussi vite
Necrolis
4
Windows n'utilise que deux anneaux, car il a été conçu pour fonctionner sur d'autres processeurs (maintenant obsolètes) qui n'en avaient que deux.
David
Dans mon esprit, il y a peu de frais généraux à changer de mode. D'après ce que je comprends, seul le matériel pourrait attribuer plus de privilèges privilégiés au processeur (comme si une interruption IO-finie se produisait). Si ce changement de privilège se produit dans le matériel, je doute qu'il soit non trivial de changer d'anneau. Je pense que Windows, Linux ou MacOS n'utilisent que les deux anneaux les plus extrêmes, car les architectes réservent les anneaux du milieu pour des choses comme la virtualisation hébergée par le système d'exploitation.
Nate Symer