Table donnant, pour chaque type d'interruption ou d'exception, l'adresse de début du gestionnaire correspondant. Le CPU la consulte à partir du numéro de la cause pour déterminer où commence le traitement.
Lorsqu'une interruption ou une exception est acceptée, le matériel détermine un numéro, appelé vecteur, qui identifie sa cause : un temporisateur, un périphérique particulier, un défaut de page, une instruction illégale ou un appel système. Le CPU sauvegarde l'adresse de l'instruction suivante et l'état, comme le mode de fonctionnement, puis utilise le vecteur comme indice dans la table des vecteurs d'interruption, en lisant généralement l'entrée située à base + vecteur × taille d'entrée. Cette entrée contient l'adresse de début du gestionnaire. Le gestionnaire sauvegarde les registres qu'il utilise, traite l'événement et exécute une instruction de retour d'interruption.
Où se trouve la table
Les architectures diffèrent dans le détail. Sur les microcontrôleurs Arm Cortex-M, la table se trouve au début de la mémoire de code : son premier mot est le pointeur de pile initial, le deuxième l'adresse du gestionnaire de reset, et les mots suivants pointent vers les gestionnaires de fautes et de périphériques ; sur la plupart des cœurs, un registre de décalage de la table des vecteurs (VTOR) permet au logiciel de la déplacer. En mode réel x86, la table occupe le premier Ko de mémoire avec 256 entrées de quatre octets, tandis que les modes protégé et long utilisent une table des descripteurs d'interruption (IDT) localisée par le registre IDTR. RISC-V utilise le registre mtvec, qui peut envoyer tous les traps vers un seul gestionnaire ou vectoriser les interruptions vers des adresses distinctes.
Sa mise en place dans un firmware embarqué
Sur un microcontrôleur sans système d'exploitation, la table des vecteurs doit se trouver à l'adresse attendue par le matériel dès le reset. Le code de démarrage la définit comme un tableau de pointeurs de fonctions dans sa propre section, et le script d'édition de liens place cette section à l'adresse flash requise. Les fichiers de démarrage typiques attribuent à chaque entrée un gestionnaire par défaut faible (weak), souvent une boucle infinie, si bien que l'application ne redéfinit que les interruptions qu'elle utilise en définissant des fonctions portant les noms correspondants. Un nom de gestionnaire mal orthographié compile donc sans erreur, mais dirige silencieusement l'interruption vers la boucle par défaut.
Table des vecteurs ou scrutation
Un schéma vectorisé envoie chaque cause directement vers son propre gestionnaire : le CPU n'a pas besoin de lire des registres d'état pour découvrir ce qui s'est passé, ce qui réduit la latence d'interruption. L'alternative est un point d'entrée unique dont le gestionnaire lit un registre de cause et répartit le traitement par logiciel, comme le fait le mode direct de RISC-V. Sur un système d'exploitation généraliste, le noyau remplit la table au démarrage afin que les tics du temporisateur, les interruptions des périphériques, les défauts de page et les appels système atteignent chacun la bonne routine du noyau.
Questions fréquentes
Qu'est-ce qu'un vecteur d'interruption ?
Un vecteur d'interruption est le numéro attribué à une source d'interruption ou d'exception, utilisé comme indice dans la table des vecteurs. Le terme désigne aussi, par extension, l'entrée de la table elle-même, qui contient l'adresse du gestionnaire.
Où se trouve la table des vecteurs sur un microcontrôleur ARM Cortex-M ?
Par défaut, elle se trouve au début de la mémoire de démarrage, généralement la flash. Sa première entrée est la valeur initiale du pointeur de pile et sa deuxième le gestionnaire de reset ; sur la plupart des cœurs, le registre de décalage de la table des vecteurs (VTOR) permet de la déplacer, par exemple en RAM.
Quelle est la différence entre l'IVT et l'IDT sur x86 ?
La table des vecteurs d'interruption (IVT) est la table du mode réel, composée de 256 adresses segment:offset en bas de la mémoire. La table des descripteurs d'interruption (IDT) la remplace en modes protégé et long ; elle contient des descripteurs avec des informations de privilège et peut être placée n'importe où grâce au registre IDTR.