CONCEPTION D'UN OS - Segmentation & Interruptions

Segmentation - Traduction

Structure des adresses

L'adresse logique est composée d'un sélecteur de segment et d'un offset et est directement manipulée par le programmeur quand il veut accéder à un endroit particulier de la mémoire. Le sélecteur permet de pointer sur un bloc de mémoire d'une certaine taille (un segment) et l'offset est un déplacement dans ce bloc par rapport à sa base. Le sélecteur de segment permet de spécifier quelle entrée de la table de descripteurs (LDT ou GDT) il faut utiliser pour trouver l'adresse physique.

Le sélecteur de segment comprend le niveau de privilèges indiquant avec quel niveau on souhaite accéder au segment, la localisation du descripteur et l'index du descripteur de segment dans la table.

Les registres d'offset sont n'importe quel registre général (eax, ebx, ecx, edx), ou le pointeur d'instruction courante (eip), ou les registres de pile (esp, ebp). Tous ces registres sont sur 32 bits, ce qui autorise les segments à faire jusqu'à 4 Go.
Les registres de segment sont les registres cs, ds, es, fs, gs, et ss, tous d'une largeur de 16 bits.

Mecanisme de traduction

En mode réel, le mécanisme d'accès à la mémoire est très simple et fixe. L'adresse finale est calculée par le processeur de la manière suivante :

adresse = segment * 16 + offset

et les segments font tous 64 Ko.
En mode protégé, comme on l'a vu, il y a une arithmétique plus complexe pour former l'adresse physique. Le schéma ci-dessus présente ce mécanisme :

Traduction

Le sélecteur de segment permet d'accéder à la table de descripteurs adéquate (LDT ou GDT) et directement à l'index qui contient le descripteur associé à la tâche. Le niveau de privilège est alors vérifié.
Le descripteur de segment permet de récupérer l'adresse de base du segment.

Une fois cette adresse de segment récupérée, l'offset est alors ajoutée à cette adresse afin d'obtenir l'adresse physique. L'offset est l'adresse de la donnée relative au début du segment. On accède ainsi à une donnée en mémoire

Scénario de lecture

En résumé, voici comment une application déclenche la lecture d’une case mémoire en utilisant une adresse logique