next up previous contents
suivant: l'idtr monter: Introduction précédent: Introduction   Table des matières

l'idt

Une table permet d'associer à chaque interruption une routine à executer, c'est la table IDT (Interrupt Descriptor Table). A chaque interruption est associe un "vecteur" qui est un index dans cette table afin de déclencher la bonne procédure.
Image schema_idt_fonctionnement
Représentation du fonctionnement de l'idt et des interruption
L'idt est un tableau contenant des entrées spécifiant l'adresse mémoire où se trouve la fonction 8.1 liée à l'interruption.

La table IDT contient des descripteurs systèmes appeles 'gates'. Il y a plusieurs types de gates, mais pour traiter les interruptions materielles, les exceptions et les interruptions logicielles dans notre cas, 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 :

Nous utilisons uniquement les interrupt gate pour plusieurs raisons :
  1. Notre modélisation à plusieurs couches nous permet de nous passer des task gates. Ainsi nous sauvegardons les registres sans avoir besoins du tss. Si nous utilisions les tss, il nous en faudrait 1 par tâche ce qui encombrerait la mémoire inutilement8.2
  2. Nous n'utilisons pas les trap gates car nous souhaitons que nos interruptions ne soient pas interuptible. Cela impliquerait la mise en place de système d'accès concurrent sur les appels systèmes, ce qui est fastidieux et pas obligatoirement plus efficace.8.3
Voici la description des entrées de l'idt :
Image descripteur_interruption
Représentation d'une entrée de l'idt
Le sélecteur de segment va permettre de trouver le bon descripteur de segment et l'offset sur 32 bits et en fait une adresse linéaire pointant sur le handler. Le champ DPL permet de déterminer à quel degré de privilège l'interruption peut être exécuté. Nous remplissons ainsi l'idt avec les handler de bas niveau (les wrappers)8.4Voici les étapes de la vérification des droits l'ors des interruptions par l'unité de controle :
  1. Elle détermine le vecteur i associée à l'interruption ou exception.
  2. Elle détermine le descripteur de segment de code où se trouve le handler.
  3. Etape sécurité :
  4. Changement éventuel de pile si CPL <> DPL.
  5. Sauvegarde eflags, cs, eip.
  6. Elle charge dans cs et eip le segment et l'offset contenu dans le "gate desciptor".
  7. Lorsque le handler est terminé l'exécution iret va procéder à la restauration de contexte.
  8. Dépilement de cs, eip, eflags.
  9. Vérifie si le CPL <> DPL du handler si c'est le cas on restaure ss et sp qui ont été sauvegardé lors de l'étape 4.
  10. fin


next up previous contents
suivant: l'idtr monter: Introduction précédent: Introduction   Table des matières
nicolas 2006-07-30