• Aucun résultat trouvé

Principe

Dans le document ARCHITECTUREDES ORDINATEURS (Page 135-140)

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.

Dans le document ARCHITECTUREDES ORDINATEURS (Page 135-140)