Vous êtes sur la page 1sur 25

Interruptions

GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015


Jean-Franois Lalonde
Bref retour sur lappel de fonctions

3 mcanismes importants:
dtermination de ladresse de retour

passage de paramtres & valeur de retour

prservation de lenvironnement
Progression de PC
Progression normale:
PC = PC + 4

Branchements:
PC = adresse du branchement

Appel de fonction:
PC = adresse de la fonction, LR = adresse de retour

PC = LR lorsque la fonction est termine


Aujourdhui: interruptions

Pensons un micro-processeur qui voudrait lire les


valeurs crites au clavier par un utilisateur.
Comment faire?
Option #1: demander au clavier priodiquement sil a reu
une nouvelle touche, sinon, attendre!

Option #2: cest le clavier qui dit au micro-processeur quil a


reu une nouvelle touche!
Les interruptions
Une interruption interrompt lexcution des instructions par le microprocesseur.
Lors dune interruption:
lexcution du programme principal est suspendue;

une sous-routine traitant linterruption est excute;

puis le programme principal est continu.

Dirence entre interruptions et un branchement ou un appel de fonction?


les interruptions peuvent survenir nimporte quand pendant lexcution.
Une interruption survient
Terminer linstruction en cours.
Vrifier si linterruption peut tre traite.
Linterruption peut tre masque (dsactive) ou ne pas tre excute parce quune autre
interruption de priorit suprieure ou gale est en cours. Linterruption est mise de ct pour
tre excute ultrieurement (lorsquelle sera ractive ou lorsque linterruption de priorit
plus grande finira).

Sauvegarder (sur la pile):


ladresse de retour

les registres (en pratique, pas tous)

les drapeaux de lALU

Dterminer ladresse de la routine qui traitera linterruption (Interrupt Service Routine,


ou ISR). Cette routine est en mmoire code.
Excuter cette routine
PC = Adresse de lISR, donc lexcution dinstructions continue dans lISR.
Routines de traitement dinterruptions
Les routines de traitement dinterruptions (Interrupt Service
Routines ISR) sont en mmoire
Comment fait-on pour:
savoir quelle routine excuter pour quelle interruption?

quelle adresse est cette routine?

Table des vecteurs dinterruption

Table"des"vecteurs"d'interruption
#"d'INT Contenu
0 Adresse"de"la"routine""excuter"quand"l'INT"0"survient
1 Adresse"de"la"routine""excuter"quand"l'INT"1"survient
2 Adresse"de"la"routine""excuter"quand"l'INT"2"survient
3 Adresse"de"la"routine""excuter"quand"l'INT"3"survient

Table des vecteurs dinterruption
Contient ladresse de la sous-routine excuter
lorsquune interruption survient.
Chaque entre de la table est un vecteur qui mne aux
instructions excuter pour traiter linterruption.

Commence habituellement ladresse 0h de la mmoire


(ne pas mettre de code cet endroit!).
Habituellement en mmoire FLASH (contenu dcid par
le compilateur/programmeur)
peut tre dplace en RAM

peut tre modifie par le systme dexploitation.


Interruptions imbriques
Quarrive-t-il si une interruption survient lorsquon traite une
interruption?
Cela dpend de la priorit
Si la priorit de la nouvelle interruption est plus leve:
On interrompt lexcution et on traite cette nouvelle interruption

Si la priorit de la nouvelle interruption est moins leve:


On attend que le traitement de linterruption plus haute priorit soit
termin, et on traite cette nouvelle interruption par la suite

Sauvegarder les adresses de retour et certains registres


sur la pile permet dimbriquer les interruptions comme on
imbrique des fonctions
Une interruption se termine
Une instruction est ncessaire pour indiquer la fin de
linterruption. Cette instruction, retour dinterruption,
est excute par le microprocesseur de la faon
suivante:
Rcupre les valeurs des registres sauvegards sur la pile
lors de lentre dans linterruption

Rcupre ladresse de retour et les drapeaux sauvegards


sur la pile lors de lentre dans linterruption

Met PC = adresse de retour de linterruption


Contrleur dinterruptions (NVIC)
Les interruptions de lordinateur sont gres par le contrleur
dinterruption.
Le contrleur dinterruptions:
reoit les signaux dinterruptions

peut activer (masquer) ou dsactiver certaines interruptions.

modifier la priorit des interruptions.

signale les interruptions au microprocesseur laide de fils ddis


cette fin.

peut tre configur via des instructions dans la mmoire

Dans le cas du processeur ARM, le contrleur dinterruptions est


inclus dans le cur.
Contrleur dinterruptions
Types dinterruptions
Systme: reset, NMI (non-maskable Interrupt), faute
matrielle gnrale, etc.
Exception: le processeur peut gnrer des interruptions
sil nest pas capable de lire ou dexcuter une
instruction (opcode invalide, division par 0, mmoire
protge, etc).
Matrielles: gnres par les priphriques
Logicielles: il y a une instruction qui permet de gnrer
une interruption dans tous les jeux dinstructions
Il y a aussi des interruptions pour le mode debug...
Interruptions du systme
Linterruption reset est linterruption systme la plus
commune. Cette interruption peut survenir pour plusieurs
raisons:
mise sous tension, activation de la broche reset du
microprocesseur, instruction reset, etc.

Lors dun reset, toutes les autres interruptions sont ignores


Linterruption NMI (Non Maskable Interrupt) est aussi
frquente dans les systmes ordinateurs. NMI est une
interruption que ne peut pas tre dsactive par le logiciel
et qui est souvent utilise pour dtecter une faute
dalimentation ou une mise hors tension.
Exceptions
Les exceptions surviennent quand un vnement
logiciel spcial arrive. Cet vnement logiciel empche
le microprocesseur dexcuter linstruction en cours
pour diverses raisons:
instruction invalide, division par 0, rfrence une adresse
invalide, accs invalide une adresse protge, faute
matrielle, etc.

Les exceptions ont un trs haut niveau de priorit parce


le microprocesseur est dans une impasse: il ne peut
excuter linstruction en cours en raison dune erreur de
programmation!
Interruptions matrielles
Les interruptions matrielles sont gnres par les
priphriques
La plupart des priphriques ont une ligne de contrle
relie au contrleur dinterruptions qui leur permet de
signaler un vnement.
Lors dune interruption de priphrique, le
microprocesseur obtient automatiquement le # de
linterruption du NVIC et utilise ce numro pour trouver
lISR excuter partir de la table des vecteurs
dinterruptions.
Interruptions logicielles
Les interruptions logicielles sont des interruptions
provoques par le programmeur. Le programmeur
utilise une instruction qui dclenche une interruption.
Les interruptions logicielles ont un eet similaire un appel
de fonction avec une dirence fondamentale:
ladresse de la fonction appele est dans la table des vecteurs
dinterruption plutt qutre une adresse relative au programme.

Les interruptions logicielles servent souvent appeler des


fonctions du systme dexploitation dont ladresse est
inconnue du programmeur, mais gre par le systme
dexploitation (grce la table des vecteurs dinterruption).
Interruptions et systme dexploitation

2 utilits principales:
accs aux priphriques

excution de plusieurs processus


Interruptions et systme dexploitation
Accs aux priphriques
Chaque priphrique (ex: clavier, imprimante) peut se
comporter lgrement diremment des autres

Cest le systme dexploitation (Operating System, ou


OS) qui rend les programmes indpendants du matriel.
Comment?
Cest lOS qui modifie les ISR excuter en fonction du
matriel branch dans lordinateur (via la table des vecteurs
dinterruption)

Les programmes peuvent donc utiliser la table des


vecteurs dinterruption comme dhabitude
Accs aux priphriques
Exemple: recevoir une valeur du clavier
interruption matrielle (cest lutilisateur qui tape au clavier)

Exemple: envoyer des donnes limprimante


interruption logicielle (cest notre programme qui veut
imprimer)

Le systme dexploitation permet au mme programme


de parler plusieurs modles de claviers et
dimprimantes
Interruptions et systme dexploitation

Les interruptions permettent lexcution de plusieurs


processus
Comment?
Une horloge gnre des interruptions priodiquement

chaque interruption, on change le processus excuter


Priorits
Que faire si une interruption survient lorsquune autre interruption
est traite?
Les interruptions ont des priorits: une interruption haute-priorit
peut interrompre une interruption ayant un niveau de priorit plus
bas.
Certaines interruptions peuvent survenir nimporte quand, mme
pendant une autre interruption.
Certaines interruptions, comme reset, ont une priorit (maximale
pour reset) qui ne peut pas tre change.
Ordre de priorit (ARM)
Reset > systme > exceptions > matrielles > logicielles
Interruptions ARM
Entre: Lors dune interruption, le microprocesseur sauvegarde automatiquement
les drapeaux, ladresse de retour (PC), le registre de lien (R14), R12 et R3 R0 sur
la pile, dans cet ordre.
La table des vecteurs dinterruption du processeur ARM est ladresse 0 de la
mmoire. Il y a cependant possibilit de la relocaliser aprs le dmarrage (en
crivant un registre spcial du cur ou du NVIC). Le format et le contenu de la table
des vecteurs dinterruptions dpend de la version de cur ARM utilise:
ARM7: La table des vecteurs dinterruption a 32 entres de 4 bytes (128 octets au total).
Chaque entre de la table contient une instruction plutt quune adresse ou vecteur. Cette
instruction est habituellement une instruction de branchement La dernire entre de la
table, rserve pour le FIQ (Fast Interrupt reQuest) ne contient pas de branchement, mais
du code. Cela permet dacclrer le traitement dune interruption FIQ.

ARM Cortex M3: La table des vecteurs dinterruption contient des adresses, celles des
routines de service des interruptions (ISR). La table a 64 entres, toujours de 4 octets (256
octets au total). Il faut noter que la premire entre de la table (adresse 0) nest pas un
vecteur dinterruption, mais plutt la valeur initiale de SP.

Les interruptions ARM ont plusieurs niveaux de priorit et peuvent tre masques.
Interruptions ARM
Sortie: Pour sortir dune interruption, il faut mettre PC = 0xFFFFFFFX. Mettre PC
cette valeur, appele EXCEPTION_RETURN cause un retour dinterruption. Le X,
entre 0 et F, est un paramtre de retour de linterruption.
Lors dune sortie dinterruption, le microprocesseur dpile automatiquement R0 R3, R12,
LR, PC (adresse de retour) et les drapeaux.

Lors de lentre dans linterruption, le microprocesseur met EXCEPTION_RETURN dans LR.


La valeur dEXCEPTION_RETURN est habituellement 0xFFFFFFFF. Linstruction permettant
de retourner dune interruption est gnralement BX LR, comme lors dun appel de sous-
routine

Le cur ARM a plusieurs mcanismes pour acclrer lentre et la sortie dune


interruption.
Les instructions sont courtes. Les instructions longues (store/load multiples) peuvent tre
interrompues. Finir linstruction en cours est court.

Plusieurs oprations se font en parallle lors de lentre dans linterruption.

Si des interruptions se chevauchent, le processeur vite des empilements et dpilement


inutiles.
Interruptions ARM et OS
Pour les concepteurs de cur ARM, toutes les interruptions
sont gres par le systme dexploitation. Le cur a deux
modes dopration: normal (thread) et privilgi (handler). Le
mode privilgi (handler) est entr automatiquement lors
dexcution dinterruptions. Certaines oprations du
processeurs ne sont permises quen mode privilgi.
Le cur ARM implmente une minuterie (un timer) qui permet
de gnrer des interruptions priodiquement. toutes les X
millisecondes, linterruption du Systick timer peut survenir si le
cur est programm cet eet.
Le microprocesseur ARM supporte les interruptions logicielles.
Linstruction SVC #X (SuperVisor Call) permet dappeler une
interruption avec son numro.