Accueil🇫🇷Chercher

Interrupt Descriptor Table

L'IDT (de l'anglais Interrupt Descriptor Table) est une table de données située dans la mémoire d'un ordinateur d'architecture x86, et permettant au microprocesseur de gérer les interruptions.

Il s'agit d'un tableau comportant au maximum 256 descripteurs de octets chacun, soit un descripteur par interruption. Son emplacement en mĂ©moire est enregistrĂ© Ă  l'intĂ©rieur du registre IDTR du processeur. Lors du dĂ©clenchement d'une interruption, le processeur lit la ligne correspondante dans l'IDT et effectue le traitement associĂ© aux valeurs lues sur cette ligne.

Le registre IDTR est un registre de 48 bits, dont les 16 bits les plus faibles reprĂ©sentent la taille en octets de l'IDT, tandis que les 32 bits supĂ©rieurs reprĂ©sentent l'adresse physique de l'IDT en mĂ©moire. Ce registre n'est accessible que par l'intermĂ©diaire de deux instructions assembleur : lidt (Charge un emplacement mĂ©moire dans l'IDTR) et sidt (Place dans un emplacement mĂ©moire le contenu de l'IDTR).

Les 32 premières interruptions (no 0 Ă  31) sont rĂ©servĂ©es aux exceptions (erreurs) gĂ©nĂ©rĂ©es par le microprocesseur. Les 16 interruption matĂ©rielles sont gĂ©nĂ©ralement associĂ©es aux interruptions no 32 Ă  47. NĂ©anmoins toutes les interruptions sont librement appelables par les programmes utilisateurs par le biais de l'instruction Ă  condition que le système d'exploitation le lui permette.

Descripteur et classification

Format d'un descripteur

Chaque descripteur a la structure suivante : (des bits les plus hauts vers les bits les plus bas)

  • 16 bits : les 16 bits les plus faibles de l'offset de la fonction (gestionnaire d'interruption ou d'exception) associĂ©e Ă  l'interruption
  • 16 bits : le sĂ©lecteur du segment de code
  • 1 bit : drapeau IF (sur "1" pour activer le masquage des interruptions masquables)
  • 2 bits : DPL, de 0 Ă  3 inclus, qui indique le niveau de privilèges requis pour appeler l'interruption (0 est le plus Ă©levĂ©)
  • 1 bit : doit ĂŞtre mis Ă  0
  • 4 bits : le type d'interruption (porte d'interruption, de trappe ou de tâche)
  • 8 bits : rĂ©servĂ© pour un futur usage (doit ĂŞtre Ă  0)
  • 16 bits : les 16 bits les plus hauts de l'offset de la fonction associĂ©e Ă  l'interruption

Classification et terminologie Intel

Il existe différents types de porte :

  • interruption dont le drapeau IF est toujours baissĂ© (dĂ©sactivation des interruptions) ;
  • trappe semblables aux portes de type interruption mais le drapeau IF est levĂ© ;
  • tâche contiennent le sĂ©lecteur du TSS du processus courant (très peu utilisĂ©es).

Classification et terminologie Linux

Linux classe différemment les différents types de portes (descripteur) qu'il intègre dans l'IDT :

  • Les portes d'interruption sont des portes intel de type interruption dont le DPL est Ă©gal Ă  0 (les programmes utilisateurs ne peuvent appeler ces vecteurs par l'interruption "int").
  • La porte d'interruption systèmes est une porte intel de type interruption dont le DPL est Ă©gal Ă  3. Il n'en existe qu'une seule : l'instruction "int3".
  • Les portes de trappe sont des portes de trappe intel dont le DPL est Ă©gal Ă  0.
  • Les portes systèmes sont des portes de trappe intel dont le DPL est Ă©gal Ă  3. Elles concernent les exceptions "into", "bound" et "int0x80" (appel système)
  • La porte de tâche est une porte de type tâche intel dont le DPL est Ă©gal Ă  0. Elle concerne uniquement l'exception "erreur double"

Emplacement mémoire de l'IDT

Lorsque le BIOS passe la main au système d'exploitation, aucune IDT n'existe. En effet, l'IVT utilisée par le microprocesseur en mode réel ne possède pas le même format que l'IDT et n'est donc pas utilisable en mode protégé. Cela n'est cependant pas un problème car le drapeau d'interruption (IF) est à 0, empêchant le déclenchement de toute interruption masquable tant que cela est nécessaire.

Le système d'exploitation s'occupe de créer les différentes entrées de l'IDT puis de fournir son emplacement et sa longueur au microprocesseur par l'intermédiaire de l'instruction d'assembleur lidt. Cet emplacement est généralement situé près du code du noyau. Il est néanmoins à noter que le microprocesseur applique la pagination lors de la lecture de l'IDT, ce qui permet au système d'exploitation (bien que ce ne soit appliqué par aucun des principaux systèmes d'exploitation) de créer une IDT différente pour chaque programme en cours d'exécution.

IDT sur d'autres architectures de processeurs

Il existe des équivalents à l'IDT sur de nombreuses autres architectures de processeur, mais ceux-ci ont un format bien différent.

Notes et références

    Annexes

    Articles connexes

    Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.