6.4 Traitement des interruptions
6.4.1 Principe
Apr`es positionnement de la bascule d’interruption commence le traitement mat´eriel de cette interruption. Il comporte les phases suivantes :
La premi`ere phase
La premi`ere phase du traitement peut se d´ecomposer de la fa¸con suivante :
− l’instruction en cours se termine ;
− l’adresse de retour (celle de l’instruction suivante) et le contenu du registre des drapeaux sont sauvegard´es dans une pile (par un m´ecanisme simi-laire `a celui mis en œuvre lors d’un appel de sous-programme). Selon la machine ou le type d’interruption, le contenu des registres, ou d’une partie des registres, est sauvegard´e dans la pile. Si ce n’est pas le cas, il appar-tiendra au programme de traitement de faire les sauvegardes n´ecessaires ;
− les interruptions sont ´eventuellement inhib´ees, auquel cas le programme de traitement devra les revalider si n´ecessaire. Sur les machines multi-mode, le fonctionnement du processeur passe en mode syst`eme (ou su-perviseur) ;
− le processeur envoie ´eventuellement un signal d’acquittement sur une ligne de commande du bus de contrˆole. Cet acquittement sera utilis´e par la logique de l’unit´e d’´echange qui a ´emis l’interruption.
Calcul de l’adresse de traitement
La machine commence le traitement d’interruption `a une adresse qui peut ˆetre d´etermin´ee de plusieurs fa¸cons :
1. mode non calcul´e-direct: c’est celui que l’on rencontre le plus souvent lors d’une r´einitialisation mat´erielle. Le compteur ordinal est charg´e avec une valeur pr´e-d´etermin´ee.
Exemple 6.4 Dans le microprocesseur Intel I8080, lors d’un red´emarrage, le compteur ordinal ´etait mis `a z´ero tandis que, dans le microprocesseur I8086 du mˆeme fabricant, le registre de segment de code CS est charg´e avec F000H et le compteur ordinal avec FFF0H.
Exemple 6.5 Le 8085 d’Intel poss`edait cinq entr´ees d’interruptions ap-pel´ees TRAP, RST 5.5, RST 6.5, RST 7.5 et INTR dans un ordre d´ecroissant de priorit´e. La moins prioriraire, INTR, est trait´ee de
la fa¸con suivante : lors du premier acquittement INTA, le contrˆoleur d’interruption (PIC Programmable Interrupt Controller) renvoie une instruction CALL sur le bus de donn´ees. L’ex´ecution de cette instruc-tion par le processeur provoque l’´emission de deux acquittements suppl´ementaires permettant au PIC de fournir deux octets d’adresse compl´etant l’instruction CALL.
2. mode non calcul´e-indirect: `a chaque ligne d’interruption est associ´ee une (ou plusieurs) cellule(s) m´emoire contenant l’adresse du sous-programme de traitement ad hoc.
Exemple 6.6 Dans le microprocesseur Motorola MC6800, l’interruption non masquable NMI provoque le chargement du compteur ordinal par le contenu des deux cases m´emoire d’adresses FFFC16 et FFFD16.
3. mode calcul´e-direct: le contenu du compteur ordinal est calcul´e `a par-tir d’une information fournie par l’unit´e d’´echange qui a interrompu le processeur.
Exemple 6.7 Dans le microprocesseur Intel 8080 le compteur ordi-nal ´etait charg´e avec la valeur n ×8, o`u n est une valeur donn´ee par le contrˆoleur d’interruption sur le bus de donn´ees. En fait le cy-cle d’acquittement ressemble beaucoup `a un cycle de lecture instruc-tion (instrucinstruc-tion fetch). Le contrˆoleur d’interruption attend le signal d’acquittement fourni par le processeur pour prendre le contrˆole du bus et y “afficher” une instruction RST n (restart) o`u n est le num´ero d’interruption. Le processeur ex´ecute cette instruction qui consiste `a une sauvegarde dans la pile du contenu du compteur ordinal suivi d’un branchement en 8n.
4. mode calcul´e-indirect: l’unit´e d’´echange positionne sur le bus de donn´ees un num´ero d’identification que vient lire le processeur. Ce num´ero ap-pell´e pointeur de vecteur d’interruption est en fait une entr´ee dans une table d’adresses. Ces adresses sont celles des programmes de traitement, adresses qui peuvent ˆetre modifi´ees `a volont´e. La table qui les contient s’appelle table des vecteurs d’interruption. On parle d’interruptions vec-toris´ees. Lafigure6.40 suivante illustre le mode calcul´e-indirect .
− `a l’instantt1 l’unit´e d’´echange envoie une interruption ;
− `a t2 le processeur r´epond par un acquittement ;
− L’unit´e d’´echange positionne ent3le bus de donn´ees avec un num´ero d’interruptionN que le processeur vient lire ;
Processeur
Bus de données
Contrôleur INT INTA
Mémoire
Interruptions t1 t2
t3
t4
Table
de vecteurs Numéro
Figure6.40 : Vecteurs d’interruptions
− `a l’instant t4 le processeur va lire en m´emoire `a l’adresse calcul´ee f(N) l’adresse de traitement de l’interruption.
On notera l’obligation pour le contrˆoleur d’interruption d’attendre l’arriv´ee du signal d’acquittement. Il lui faut en effet savoir si le bus est libre lorsque il pr´esente le num´ero de l’interruption.
La troisi`eme phase
Le programme de traitement d’interruption se termine par une instruction sp´eciale de retour d’interruption (REI,RTI. . . ) qui se charge de r´ecup´erer dans la pile l’adresse de retour et, ´eventuellement, le contenu d’autres registres.
Cette instruction est semblable `a l’instruction retour de sous-programme (RET, RTS. . . ).
6.4.2 Exemples
1.Une machine dispose d’un bus d’adresses de seize lignes, d’un bus de donn´ees de huit lignes et d’un registre de pile de 16 bits. L’adresse de traitement de l’interruption que l’on d´esire traiter se trouve en FFF816(poids fort) et FFF916
(poids faible). On consid`ere la situation initiale (sch´ema 6.41) :
− le compteur ordinal contient 1C0016,
− et le pointeur de pile A01C16.
Le pointeur de pile donne l’adresse du premier ´el´ement libre de la pile.
Apr`es interruption, l’adresse de retour 1C0216 est rang´ee dans la pile (on suppose que c’est la seule information mise en pile). Le pointeur de pile est mis `a jour `a la valeur :
(A01C16−2) = A01A16
Le compteur ordinal est charg´e avec l’adresse rang´ee en FFF816et FFF916, soit 270016 (sch´ema6.42).
Instruction de l'interruption : $2700
Compteur ordinal
Pointeur de pile 0001 1100 0000 0000
1010 0000 0001 1100
φ φ φ φ φ φ φ φ
Figure6.41 : Situation initiale Début du
0010 0111 0000 0000
Adresse de
1010 0000 0001 1010
φ φ φ φ φ φ φ φ
φ φ φ φ φ φ φ φ
Figure6.42 : Apr`es interruption
A lafin du traitement, le compteur ordinal est r´einitialis´e avec l’adresse qui avait ´et´e sauvegard´ee dans la pile. Le pointeur de pile est remis `a jour (sch´ema 6.43).
0001 1100 0000 0010
1010 0000 0001 1100
φ φ φ φ φ φ φ φ
Figure6.43 : Traitement du retour d’interruption
2.Le microprocesseur I8086 fournit deux acquittements (INTA pour INTer-rupt Acknowledge) lors de la prise en compte de l’interINTer-ruption. Le premier sert
`a “geler” l’´etat du contrˆoleur d’interruptions (sch´ema6.44). Le second sert au
transfert du num´ero d’interruption (1). Ce dernier est ensuite multipli´e par 4 pour obtenir une entr´ee dans la table des vecteurs (2). Si le contrˆoleur pr´esente 12H, le processeur lira `a l’adresse 4×12H l’adresse de traitement rang´ee sur quatre octets (3). Le contenu des deux cases m´emoire d’adresses 48H et 49H est alors charg´e dans le compteur ordinal et celui de 4AH et 4BH dans le re-gistre de segment de code (voir chapitre sur la m´emoire). Puis le traitement commence (4).
Figure6.44 : Vecteurs d’interruption sur I8086
3.Dans le microprocesseur M68000 de MOTOROLA, trois lignes codent le num´ero de l’interruption sous la forme (IPL0, IPL1 et IPL2). Si le num´ero cor-respondant<IPL2,IPL1,IPL0>est sup´erieur au num´ero cod´e dans le “registre d’interruptions” <i2,i1,i0>, alors l’interruption est accept´ee (le niveau 7 est donc toujours pris en compte). Le traitement commence de la fa¸con suivante :
1. Sauvegarde du compteur ordinal ; 2. Sauvegarde des drapeaux ; 3. Passage en mode superviseur ; 4. Trace Bit:= 0 ;
5. <i2,i1,i0>:=<IPL2,IPL1,IPL0>.
L’adresse de traitement peut ˆetre r´ecup´er´ee de deux fa¸cons :
1. Enmode vectoris´e: le processeur va lire sur le bus un num´ero traduisant le niveau d’interruption N (un octet). Il multiplie N par 4 et obtient ainsi l’adresse de l’adresse (handle) de traitement sur 32 bits ;
2. En mode compatible M6800 (mode auto-vectoris´e ou non calcul´e-direct) correspondant aux niveaux d’interruptions 25 `a 31 du mode vectoris´e.
Les vecteurs 0 `a 63 sont en principe r´eserv´es `a MOTOROLA. Ainsi le vecteur 5 correspond-il `a la division par 0, 8 au traitement des tentatives d’ex´ecution en mode syst`eme (Privilege Violation), etc.