19. interruptions Flashcards
Une interruption interrompt
l’exécution des instructions
par le microprocesseur.
Lors d’une interruption: 3 étapes
- l’exécution du programme principal est suspendue;
- une routine (fonction) traitant l’interruption est exécutée;
- puis le programme principal est continué.
Quelle est la différence entre une interruption et un
branchement?
les interruptions peuvent survenir n’importe quand pendant
l’exécution.
4 Types d’interruptions
- Système: reset, faute matérielle générale, etc.
- Exception: erreur au cours de l’exécution des instructions, par
exemple: - instruction invalide
- division par 0
- tentative d’accès à de la mémoire protégée
- Matérielles: générées par les périphériques, par exemple:
- le clavier dans notre scénario 1 plus haut
- l’imprimante lorsqu’elle a terminé, etc.
- Logicielles: générées par le programmeur avec une instruction
spéciale (présente dans tous les jeux d’instructions)
Il y a 7 types d’interruptions dans le microprocesseur ARM
- Reset: redémarrage du microprocesseur
- Interruption logicielle: activée par l’instruction SVC pour utiliser les
fonctions systèmes (par exemple pour communiquer avec les
périphériques); - Data abort: accès mémoire invalide lors d’un LDR;
- Prefetch abort: accès mémoire invalide lors de la lecture d’une
instruction (étape « lecture » dans le pipeline) - Instruction indéfinie: erreur dans le décodage d’une instruction
- IRQ: activée par un périphérique (Interrupt ReQuest)
- FIQ: activée par un périphérique, mais qui peut être traité plus
rapidement qu’une IRQ (Fast Interrupt reQuest)
expliquer concept de priorité
une interruption
de haute priorité peut interrompre une interruption
ayant un niveau de priorité plus bas.
* Certaines interruptions peuvent survenir n’importe
quand, même pendant une autre interruption.
* Certaines interruptions, comme «reset», ont une
priorité (maximale pour «reset») qui ne peut pas
être changée.
lister ordre de priorité (haut vers bas)
reset, data abort, FIQ, IRQ, prefetch abort, interruption logicielle et instruction indéfinie
Qu’arrive-t-il si une interruption survient lorsqu’on
traite une interruption?
Cela dépend de la priorité
* Si la priorité de la nouvelle interruption est plus élevée:
* On interrompt l’exécution et on traite cette nouvelle
interruption
- Si la priorité de la nouvelle interruption est moins élevée:
- On attend que le traitement de l’interruption à plus haute
priorité soit terminé, et on traite cette nouvelle interruption
par la suite
étapes de traitement d’interruptions
Interruption!
1. Terminer l’instruction en cours
2. Déterminer s’il faut traiter l’interruption.
3. Sauvegarder le contexte
4. Déterminer l’adresse de la routine de traitement de l’interruption
5. Exécuter cette routine
Traitement de l’interruption…
1. Restaurer le contexte
2. Reprendre là ou le processeur était rendu
fonctions « spéciales » que l’on appelle que pour
traiter les interruptions
Les routines de traitement d’interruptions
Où sont-elles situées?
- en mémoire!
Comment fait-on pour savoir:
* quelle routine exécuter pour quelle interruption?
* à quelle adresse est cette routine?
Grâce à la table des vecteurs d’interruption
Table des vecteurs d’interruption
* Contient une—— (en ARM) qui branche vers
la ——- de l’interruption
* Commence à l’adresse —– de la mémoire
* peut être déplacée ——-
* dans un système complet, la table est modifiée par le
————.
Table des vecteurs d’interruption
* Contient une instruction (en ARM) qui branche vers
la routine de traitement de l’interruption
* Commence à l’adresse 0x0 de la mémoire
* peut être déplacée ailleurs
* dans un système complet, la table est modifiée par le
système d’exploitation.
nombre de registre ARM et leur utilité
16 registres de 32 bits:
* R0 à R12: registres généraux
- R13 à R15: registres spécifiques (ayant des
fonctionnalités pré-établies) - R13: Pointeur de pile (Stack Pointer ou SP)
- R14: Registre de liens (Link Register ou LR)
- R15: Compteur de programme (Program Counter ou PC)
- 1 registre d’état, le Current Program Status Register
(CPSR) - mémorise les résultats d’opérations arithmétiques
- stocke le « mode d’exécution »
Un microprocesseur possède plusieurs
modes
En temps normal, le microprocesseur est en mode
utilisateur
Lorsqu’une interruption survient, le microprocesseur
adopte le mode correspondant à
l’interruption
traitée
Le microprocesseur ARM possède 6 modes, qui
correspondent aux interruptions disponibles:
User: le mode « par défaut » disponible pour le programmeur
2. Supervisor: activé par une instruction du programmeur pour
utiliser les fonctions systèmes (par exemple pour communiquer
avec les périphériques);
3. Abort: activé lors d’un accès mémoire invalide;
4. Undefined: activé lors d’une erreur dans le décodage d’une
instruction (instruction invalide)
5. IRQ: activé par un périphérique (Interrupt ReQuest)
6. FIQ: activé par un périphérique, mais qui peut être traité plus
rapidement qu’une IRQ (Fast Interrupt reQuest)
Chaque mode possède ses ——- qui lui sont
propres
* le microprocesseur ARM vu dans le cours possède —-
—– physiques en tout!
* seulement— sont accessibles à la fois
Chaque mode possède ses registres qui lui sont
propres
* le microprocesseur ARM vu dans le cours possède 31
registres physiques en tout!
* seulement 16 sont accessibles à la fois
Une pile spéciale est disponible pour chaque type
d
interruption
On peut donc sauvegarder les registres avec —- et
—- à l’intérieur des routines de traitement de l’interruption
On peut donc sauvegarder les registres avec PUSH et
POP à l’intérieur des routines de traitement de l’interruption
Le « contexte » d’un programme représente
informations importantes à son bon déroulement.
Quelles sont ces informations
- PC (notre vieil ami)
- Les drapeaux dans le CPSR
- Les registres
Qu’arrive-t-il au contexte lors d’une interruption
PC (notre vieil ami)
* est sauvegardé automatiquement dans LR
- Le CPSR
- est sauvegardé automatiquement dans le SPSR
- Les registres
- dépend du mode!
Dans la routine de traitement de l’interruption, on peut simplement
utiliser les registres —- —–
Dans la routine de traitement de l’interruption, on peut simplement
utiliser les registres comme d’habitude
Dans plusieurs architectures, une instruction spéciale est utilisée
pour indiquer
la fin d’une interruption
En ARM, c’est, comment dire, un peu bizarre… il faut
utiliser une
instruction
* qui change les drapeaux (avec S)
* et qui stocke son résultat dans PC (!)
Les interruptions de l’ordinateur sont gérées par
le contrôleur
d’interruption
rôle du contrôleur d’interruptions
reçoit les signaux d’interruptions
* peut activer (masquer) ou désactiver certaines interruptions.
* modifier la priorité des interruptions.
* signale les interruptions au microprocesseur à l’aide de fils dédiés à
cette fin.
* peut être configuré via des instructions dans la mémoire
Dans le cas du processeur ARM, le contrôleur d’interruptions
est inclus dans
le coeur
L’interruption —- est l’interruption système la plus
prioritaire
L’interruption reset est l’interruption système la plus
prioritaire
Cette interruption peut survenir pour
plusieurs raisons
mise sous tension, activation de la broche reset du
microprocesseur, instruction reset, etc.
Lors d’un reset, toutes les autres interruptions sont
ignorées
Les exceptions surviennent quand
un évènement
logiciel spécial arrive. Par exemple:
* instruction invalide
* division par 0
* référence à une adresse invalide
* accès invalide à une adresse protégée
Les exceptions ont un très —– niveau de priorité
parce que
Les exceptions ont un très haut niveau de priorité
parce le microprocesseur est dans une impasse: il
ne peut exécuter l’instruction en cours en raison
d’une erreur de programmation!
Les interruptions matérielles sont générées par
les
périphériques
La plupart des périphériques ont une ligne de
contrôle reliée———— qui permet de —————-
La plupart des périphériques ont une ligne de
contrôle reliée au contrôleur d’interruptions qui leur
permet de signaler un événement.
Lors d’une interruption de périphérique, le
microprocesseur obtient automatiquement le —– de
l’interruption du contrôleur et utilise ce —- pour
trouver l—– à exécuter à partir de —-
Lors d’une interruption de périphérique, le
microprocesseur obtient automatiquement le # de
l’interruption du contrôleur et utilise ce numéro pour
trouver l’ISR à exécuter à partir de la table des
vecteurs d’interruptions
Les interruptions logicielles sont
des interruptions
« provoquées » par le programmeur. Le programmeur
utilise une instruction qui déclenche une interruption
Les interruptions logicielles ont un effet similaire à un
appel de fonction avec une différence fondamentale
l’adresse de la fonction appelée est dans la table des vecteurs
d’interruption plutôt qu’être une adresse relative au programme
Les interruptions logicielles servent souvent à
appeler des
fonctions du système d’exploitation dont l’adresse est
inconnue du programmeur, mais gérée par le système
d’exploitation (grâce à la table des vecteurs
d’interruption).
2 utilités principales des interruptions
accès aux périphériques
* exécution de plusieurs processus
C’est le —————-() qui rend les programmes « indépendants » du
matériel. Comment?
système d’exploitation (Operating System
C’est l’OS qui modifie les routines de traitement des
interruptions à exécuter en fonction du matériel branché dans
l’ordinateur (via la table des vecteurs d’interruption)
Les programmes peuvent donc utiliser
la table des
vecteurs d’interruption comme d’habitude
Le système d’exploitation permet au même
programme de
parler » à plusieurs modèles de
claviers et d’imprimantes
Les interruptions permettent l’exécution de
plusieurs processus
* Comment?
Une horloge génère des interruptions périodiquement
* À chaque interruption, on change le processus à
exécuter