Page d'accueil » comment » Pourquoi les processeurs x86 n'utilisent-ils que deux anneaux sur quatre?

    Pourquoi les processeurs x86 n'utilisent-ils que deux anneaux sur quatre?

    En apprenant plus sur la manière dont les systèmes d'exploitation et le matériel sur lequel ils fonctionnent fonctionnent et interagissent les uns avec les autres, vous serez peut-être surpris de voir ce qui semble être des anomalies ou une sous-utilisation des «ressources». Pourquoi donc? Le message Q & R du SuperUser d'aujourd'hui répond à une question d'un lecteur curieux.

    La séance de questions et réponses d'aujourd'hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté..

    Photo gracieuseté de Lemsipmatt (Flickr).

    La question

    Le lecteur superutilisateur AdHominem veut savoir pourquoi les processeurs x86 n’utilisent que deux anneaux sur quatre:

    Les systèmes x86 basés sur Linux et Windows utilisent uniquement Bague 0 pour le mode noyau et Anneau 3 pour le mode utilisateur. Pourquoi les processeurs distinguent-ils même quatre anneaux différents s'ils finissent tous par n'en utiliser que deux? Cela a-t-il changé avec l'architecture AMD64??

    Pourquoi les processeurs x86 n'utilisent-ils que deux anneaux sur quatre??

    La réponse

    Jamie Hanrahan, contributeur à SuperUser, a la solution pour nous:

    Il y a deux raisons principales.

    La première est que, bien que les processeurs x86 offrent quatre anneaux de protection de la mémoire, la granularité de la protection offerte ne concerne que le niveau par segment. Autrement dit, chaque segment peut être défini sur un anneau spécifique (niveau de privilège) avec d'autres protections telles que l'écriture désactivée. Mais il n'y a pas beaucoup de descripteurs de segment disponibles. La plupart des systèmes d'exploitation souhaiteraient disposer d'une protection de la mémoire beaucoup plus fine, comme… pour des pages individuelles..

    Alors, entrez protection de table de page. La plupart des systèmes d'exploitation x86 modernes, sinon tous, ignorent plus ou moins le mécanisme de segmentation (dans la mesure du possible) et s'appuient sur la protection offerte par les bits de poids faible dans les entrées de table de page. L'un d'eux s'appelle le bit «privilégié». Ce bit contrôle si le processeur doit être dans l’un des niveaux «privilégiés» pour accéder à la page. Les niveaux «privilégiés» sont PL 0, 1 et 2. Mais il ne s'agit que d'un bit. Ainsi, au niveau de la protection page par page, le nombre de «modes» disponibles en ce qui concerne la protection de la mémoire n'est que de deux: une page peut être accessible à partir du mode non privilégié ou non. Par conséquent, juste deux anneaux. Pour avoir quatre anneaux possibles pour chaque page, ils devraient avoir deux bits de protection dans chaque entrée du tableau de pages pour coder l'un des quatre numéros d'anneau possibles (tout comme les descripteurs de segment). Cependant, ils ne.

    L'autre raison est le désir de la portabilité du système d'exploitation. Il ne s'agit pas uniquement de x86; Unix nous a appris qu'un système d'exploitation pouvait être relativement portable pour plusieurs architectures de processeurs, et que c'était une bonne chose. Et certains processeurs ne prennent en charge que deux anneaux. En ne dépendant pas de plusieurs anneaux dans l'architecture, les développeurs du système d'exploitation ont rendu les systèmes d'exploitation plus portables..

    Il existe une troisième raison spécifique au développement Windows NT. Les concepteurs de NT (David Cutler et son équipe, que Microsoft a embauchés chez DEC Western Region Labs) possédaient une vaste expérience de VMS. En fait, Cutler et quelques-uns des autres faisaient partie des concepteurs originaux de VMS. Et le processeur VAX pour lequel VMS a été conçu possède quatre sonneries (VMS utilise quatre sonneries).

    Mais les composants qui fonctionnaient dans les VMS Bagues 1 et 2 (Record Management Services et CLI, respectivement) ont été laissés en dehors de la conception NT. Anneau 2 dans VMS, il ne s’agissait pas vraiment de sécurité du système d’exploitation, mais de préserver l’environnement CLI de l’utilisateur d’un programme à l’autre, et Windows n’avait pas ce concept; la CLI s'exécute comme un processus ordinaire. Quant aux VMS Anneau 1, le code RMS dans Anneau 1 dû appeler dans Bague 0 assez souvent, et les transitions en anneau sont chères. Il s'est avéré être beaucoup plus efficace d'aller simplement à Bague 0 et être fait avec elle plutôt que d'avoir beaucoup de Bague 0 transitions au sein du Anneau 1 code (encore une fois, pas que NT ait quoi que ce soit comme RMS).

    Pour ce qui est de savoir pourquoi x86 implémentait quatre anneaux alors que les systèmes d’exploitation ne les utilisaient pas, vous parlez de systèmes d’exploitation de conception beaucoup plus récente que x86. Un grand nombre des fonctionnalités de programmation système de x86 ont été conçues bien avant que les noyaux NT ou Unix-ish ne soient réellement implémentés, et ils ne savaient pas vraiment ce que le système d'exploitation utiliserait. Ce n’est qu’avec la pagination sur x86 que nous avons pu implémenter de vrais noyaux Unix ou VMS..

    Non seulement les systèmes d'exploitation x86 modernes ignorent en grande partie la segmentation (ils ne font que configurer les segments C, D et S avec une adresse de base de 0 et une taille de 4 Go; les segments F et G sont parfois utilisés pour pointer sur des structures de données clés du système d'exploitation ), ils ignorent aussi en grande partie des choses comme les «segments d’état de tâche». Le mécanisme TSS a été clairement conçu pour la commutation de contexte de thread, mais il a trop d’effets secondaires, de sorte que les systèmes d’exploitation x86 modernes le font «à la main». La seule fois où x86 NT modifie des tâches matérielles est pour certaines conditions vraiment exceptionnelles, comme une exception à double faute.

    En ce qui concerne l'architecture x64, beaucoup de ces fonctionnalités désaffectées ont été omises. À leur crédit, AMD a en fait parlé aux équipes du noyau du système d’exploitation et leur a demandé ce qu’ils attendaient de x86, ce dont ils n’avaient pas besoin ou pas, et ce qu’ils souhaiteraient ajouter. Les segments sur x64 n'existent que sous ce que l'on pourrait appeler une forme résiduelle, le basculement de l'état des tâches n'existe pas, etc., et les systèmes d'exploitation continuent à n'utiliser que deux anneaux..


    Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.