CONCEPTION D'UN OS - Segmentation & Interruptions

Interruptions - Vecteur d'interruption

Vecteur d'interruption

Une table permet d'associer a chaque interruption une routine à exécuter, c'est la table IDT (Interrupt Descriptor Table). A chaque interruption est associée un "vecteur" qui est un index dans cette table afin de déclencher la bonne procédure.

Le processeur accède à cette procédure grâce à l'index sur l'IDT associé à l'interruption.

Cette table contient donc 256 entrées, une par interruptions. Les 32 premières sont réservées aux exceptions, les 16 suivantes aux interruptions matérielles puis les suivantes aux interruptions logicielles.
Il faut que le contrôleur d'interruptions soit configuré pour que lors d'une levée d'IRQ0 le processeur accède à l'entrée 32 de la table. Pour l'IRQ x, il faut donc accéder à l'entrée x + 32 de l'IDT pour trouver l'adresse de la routine associée à l'interruption.

Entrées de l'IDT

La table IDT contient des descripteurs systèmes appeles 'gates'. Il y a plusieurs types de gates, mais pour traiter les interruptions materielles et les exceptions, on utilise classiquement les 'interrupt gate'. Un descripteur est une structure qui pointe sur une routine.

Un descripteur a une longueur fixe de 64 bits.
Il y a 3 types de descripteurs :

Registre important

IDTR

La table IDT est à implémenter par le développeur du système d'exploitation. Il est donc important de pouvoir trouver son adresse.
Pour cela, il y a un registre IDTR qui contient l'adresse de l'IDT. Le registre IDTR, de longueur 48 bits, se compose de deux champs. Le premier champ contient l’adresse du début de l'IDT en mémoire. Le second champ correspond à la limite de l'IDT en mémoire, et est calculé de la manière suivante : IDT_limit = taille IDT – 1. Grâce à ce registre, on peut placer l’IDT dans n’importe quel emplacement mémoire.

2 instructions assembleurs sont nécessaires aussi :