Aller au contenu

Global Descriptor Table

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 23 décembre 2019 à 02:47 et modifiée en dernier par Mi Ga (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

La Table globale de descripteurs (GDT : Global Descriptor Table en anglais) est une structure de données utilisée par les processeurs de la famille x86 (le premier à l'avoir utilisée est le Intel 80286) pour référencer les descripteurs de segment les plus utilisés par les processus.

C'est une partie spéciale de la mémoire principale utilisée dans le mode protégé. Dans ce mode, au contraire du mode réel, on ne peut pas accéder comme on le désire à n'importe quelle portion de la mémoire. La gestion de la mémoire en mode protégé est plus complexe, mais offre de nombreux avantages dont la protection de l'espace d'adressage de chaque programme.

En mode protégé, les adresses de segments contenues dans les registres de segments CS, DS, ES et SS ont toujours 16 bits mais ne représentent plus des endroits physiques. Les registres de segments contiennent des « sélecteurs », dont une partie sert d'indice dans GDT où se trouvent décrits les segments de la mémoire. En consultant cette table, le processeur prend connaissance de l'adresse de base du segment. Enfin l'adresse finale est déterminée en ajoutant un décalage donné sous la forme d'un pointeur FAR à l'adresse trouvée.

Schéma de principe de la segmentation avec la GDT.

La structure d'un sélecteur est la suivante :

  • bit 0 à 1 : RPL → Requested Privilege Level, c'est-à-dire le niveau de privilège du segment référencé.
  • bit 2 : TI → Task Indicator, indique si l'index est relatif à la GDT ou à une LDT (Local Descriptor Table)
  • bit 3 à 15 : INDEX → indice dans la GDT ou une LDT.

Les 8 premiers indices de la GDT sont réservés à une utilisation particulière. L'indice 0 de la GDT n'est pas utilisé.

Utilisation de GDT par Windows

Chargeur d'amorçage NTLDR

Le chargeur d'amorçage NTLDR fait passer le processeur du mode réel au mode protégé (voir Processus de démarrage de Windows NT#Phase de chargement à l'amorçage).

Autres chargeurs

Utilisation de GDT par linux

Sous Linux, il n'existe qu'une seule GDT par processeur. En effet, Linux n'utilisant que très peu la segmentation, les adresses linéaires correspondent aux adresses logiques et sont donc identiques pour tous les processus (systèmes ou utilisateurs).

Voir les chargeurs d"amorçage de linux :

Sources

  • Michael Tischer, Bible PC - Programmation Système. Micro Application, 1996.
  • Volume III: Intel System Programming Guide (édition relative au Pentium IV)

Voir aussi