next up previous contents
suivant: Passage en mode 32 monter: Le chargeur de démarrage précédent: Le fichier "multiboot.h"   Table des matières

GDT et segmentation

Une table de descripteurs de segment est un ``tableau'' de descripteur de segments. Cette ``structure'' a une taille variable et peut contenir jusqu'à 8192 descripteur. La GDT (Global Descriptor Table) est l'un des deux types de table de descripteurs.

Chaque système doit avoir une GDT de définie, qui sera alors utilisée par tous les programmes et tâches du système. Mais la GDT n'est pas elle-même un segment, juste une structure de données. Son adresse de base (adresse de début) et sa limite (sa taille, exprimée en octets) doivent être chargées dans le registre GDTR.

Image gdtr
Le registre GDTR2.1

On utilise pour cela l'instruction assembleur lgdt, qui prend en paramètre une structure GDTR correctement remplie. Le processeur est alors informé de l'emplacement et de la taille de la GDT, et pourra alors l'utiliser. A noter que le premier descripteur de la GDT n'est pas utilisé par le processeur, et est donc mis à NULL.

Intéressons-nous désormais à la structure d'un descripteur de segment pour comprendre les différences entre segment de code et de données, user et kernel, tss... Voici la structure générale d'un descripteur de segment, et donc d'une entrée de la GDT:

Image segment
Un descripteur de segment2.2

Ainsi, pour fixer le type et la nature d'un segment, il suffit de renseigner les différents champs aux valeurs désirées. Par exemple, pour des segments de privilège Kernel, il faut fixer le champ DPL à la valeur 0x0, tandis que pour des segments de privilège User, la valeur est de 0x3.

La GDT mise en place dans Koinkoin est la suivante:

Image gdt
La GDT de Koinkoin

Chacun des segments recouvre l'ensemble de la mémoire disponible. En effet dans KoinKoin, les propriétés de partitionnement mémoire de la segmentation ne sont pas utilisé, puisque le cloisonnement mémoire est assuré par la pagination. La segmentation de la mémoire s'avérerai donc plus contraignante et limitante qu'utile.

Vous aurez sans doute remarqué que nous utilisons un unique TSS pour le système. En effet compte tenu que nous avons mis en place un changement de contexte manuel, nous n'avons besoin que d'un unique TSS global.


next up previous contents
suivant: Passage en mode 32 monter: Le chargeur de démarrage précédent: Le fichier "multiboot.h"   Table des matières
nicolas 2006-07-30