Next: Cache de traduction Up: Support des systèmes Previous: Traduction d'adresses

Segmentation et traduction d'adresses sur le PentiumPro

Afin de pouvoir adresser la mémoire physique, l'adresse logique, manipulée par le PentiumPro, doit subir deux traductions, la segmentation qui fournit l'adresse virtuelle et la pagination dont résulte l'adresse physique. La segmentation est visible du jeu d'instructions et est obligatoirement exécutée.

La segmentation de l'espace d'adressage virtuel sur le PentiumPro a pour but d'offrir, à la vision du programmeur, un espace d'adressage discontinu : les déplacements à l'intérieur de chaque segment sont vérifiés séparément et les droits d'accès à chaque segment sont individuellement contrôlés. Ceci permet, entre autres, de limiter aux frontières du segment, l'influence d'erreurs de programmation comme, par exemple, un débordement de pile.

Traduction de l'adresse logique en adresse virtuelle

Le mécanisme de segmentation de l'espace virtuel du PentiumPro permet d'offrir un partage simplifié des données entre différents processus tout en permettant une protection efficace des données : il ne permet en aucune façon d'étendre l'espace virtuel du PentiumPro. Il ne fournit un espace virtuel linéaire que de 4 Giga-octets.

La figure montre le principe du mécanisme de segmentation et de pagination du PentiumPro. Pour tout accès à la mémoire, un registre de segment est spécifié (soit implicitement, soit explicitement à l'aide de préfixe aux instructions), seul le déplacement à l'intérieur du segment est calculé par le programme. L'adresse logique du PentiumPro tient sur 46 bits : 32 bits calculés dans l'instruction et 14 bits de numéro de segment sélectionné. Le déplacement dans le segment est additionné à l'adresse de base du segment pour obtenir l'adresse virtuelle qui ensuite sera traduite en adresse physique.

Six registres de segments (CS : Code Segment, SS : Stack Segment, DS : Data Segment, ES, FS et GS) peuvent fournir les descripteurs de segments utilisés par un processus (taille du segment, adresse de base, droits d'accès...). Les droits d'accès (lecture, écriture, etc.) sont vérifiés sur le segment, on vérifie de plus l'absence de débordement de segment (c'est-à-dire, adresse calculée < taille du segment). La manipulation des segments est faite par le système d'exploitation. Le contenu des registres de segments est modifié à chaque changement de contexte, bien entendu, mais peut aussi être changé explicitement par l'utilisateur pour accéder à des objets différents.

Sélection d'un modèle de segmentation sur le PentiumPro

Plusieurs modèles de segmentation peuvent être utilisés sur le microprocesseur PentiumPro ; le choix se fait suivant les deux critères de sécurité et de performance qui ont tendance à s'opposer. En effet, l'ajout de préfixes de segments ralentit les changements de contexte.

Tables de descripteurs de segments du PentiumPro

Le PentiumPro possède un support matériel pour l'implémentation en mémoire des descripteurs de segments. Deux types de tables servent à ranger en mémoire les descripteurs de segments, la GDT (Global Descriptor Table) qui contient les descripteurs de segments de tous les programmes, et la LDT (Local Descriptor Table). Chaque table peut contenir 2 descripteurs. Il y a une LDT par programme qui s'exécute. On peut cependant, si le système d'exploitation le permet, partager une LDT entre plusieurs programmes ou n'utiliser que la GDT. Les adresses de base des deux tables de descripteurs sont représentées dans le microprocesseur dans les registres GDTR et LDTR.

Traduction d'adresse virtuelle en adresse physique

Pour le PentiumPro, la pagination est complémentaire de la segmentation. Si la segmentation était utilisée seule, tout segment devrait être contenu entièrement dans la mémoire. La pagination sur le PentiumPro permet de plus d'exécuter des programmes dans le mode 8086 virtuel.

La figure décrit le mécanisme de pagination du PentiumPro. Le PentiumPro utilise deux niveaux de table de pages pour adresser une page en mémoire physique. Les dix bits de poids fort de l'adresse linéaire obtenue après segmentation servent à indexer le répertoire de tables. La table de pages ainsi sélectionnée est indexée par la partie <<table>> de l'adresse linéaire (10 bits). L'entrée désignée pointe sur l'adresse de base de la page à laquelle il faut ajouter le déplacement (les 12 bits de poids faible) de l'adresse pour obtenir l'adresse physique.

Avertissement :

Le PentiumPro tout comme le Pentium dispose d'un mécanisme non documenté permettant d'utiliser des pages de 4 Moctets et d'étendre l'espace virtuel et physique adressable. En l'absence de documentation, ces mécanismes ne sont pas traités dans ce paragraphe.



Next: Cache de traduction Up: Support des systèmes Previous: Traduction d'adresses


flloansi@IRISA.irisa.fr
Tue Jun 4 09:57:56 MET DST 1996