Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
Chapitre 3 : LES INTERRUPTIONS
1. Introduction :
Dans un ordinateur, ils co-existent deux types de programmes :
− Les programmes usagers qui font un calcul utile.
− Les programmes du SE qui font un travail de superviseur de tous les événements qui
arrivent à la machine.
Ces deux types de programmes se partagent les ressources communes de la machine et plus
particulièrement le processeur. Lorsqu’un programme est en cours d’exécution, plusieurs
événements peuvent survenir, à savoir :
• Les événements synchrones qui sont liés à l’exécution du programme en cours, ce sont
de deux types :
1. Les déroutements qui sont provoqués par des déroulements anormaux des
instructions du programme : Division par zéro, Exécution d’une instruction
inexistante ou interdite, Tentative d’accès à une zone protégée, …etc.
2. Les SVC correspondent à des appels à des fonctions du système d'exploitation,
comme par exemple des demandes d'E/S.
• Les événements asynchrones, ce sont des événements extérieurs qui doivent être pris
en compte et qui viennent interférer de façon imprévisible avec le programme en cours de
déroulement normal. Il s'agit en particulier:
1. Fin d’opération d’E/S.
2. Signal d’horloge.
La supervision ou le contrôle de ces deux types d’événements se fait par un contrôle continu sur
l’arrivée de ceux-ci.
Problème : Par quel mécanisme peut-on réduire le temps de contrôle du SE ?
Solution : Au lieu que ça soit le processeur qui contrôle continuellement l’état d’une ressource,
c’est plutôt à la ressource d’informer le processeur central sur son état au moment significatif.
C’est ce que l’on appelle le principe d’interruptions de programmes.
2. Définition et Mécanisme de base :
2.1. Définition : Une interruption est un signal déclenché par un événement interne à la machine
ou externe, qui provoque l'arrêt immédiat d'un programme en cours d'exécution, et cela juste
à la fin de l'opération courante, plus particulièrement dans un point que l’on appelle point
observable ou interruptible du processeur (c’est un point entre l’exécution de deux
opérations élémentaires), et cela au profit d'un programme plus prioritaire appelé
programme d'interruption (ou Traitant de l’interruption). Ensuite, le programme interrompu
reprend son exécution à l'endroit où il avait été interrompu.
Physiquement, l’interruption se traduit par un signal envoyé au processeur. Elle permet de
forcer le processeur à suspendre l’exécution du programme en cours, et à déclencher
l’exécution d’un autre programme prédéfini, spécifique à l’événement (appelé la cause de
l’interruption) et qui permet d'exécuter le traitement de l'interruption ; ce dernier peut avoir
plusieurs appellations : Traitant de l’interruption (Interrupt-Handler) ou Rit (Routine
d’interruption), ou encore ISR (Interrupt Service Routine). Le traitant de l’interruption fait
1
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
d’abord une sauvegarde du contexte du processus interrompu avant de réaliser son propre
traitement. A la fin de celui-ci, le contexte du processus interrompu est restauré ce qui lui
permet de continuer son exécution convenablement à l’endroit où il a été interrompu.
Les interruptions sont les sonnettes que tirent les périphériques pour dire au processeur
que quelque chose se passe. Mais si chaque périphérique pouvait envoyer directement un
signal au processeur, il faudrait sur celui-ci autant de broches (jouant le rôle de cordons de
sonnette) que de périphériques. Pour éviter cela, les périphériques envoient leur requête
d'interruption à une puce à laquelle ils sont connectés, c’est le contrôleur d'interruption.
C'est ce contrôleur qui va envoyer à leur place une interruption au processeur. Les requêtes
faites par le contrôleur sont appelées IRQ (Interrupt Request). Le contrôleur d'interruption est
le dispositif incorporé au séquenceur qui détecte les signaux d'interruption. Ces signaux
arrivent de façon asynchrone, à n'importe quel moment, mais ils ne sont pris en compte qu'à
la fin de l'opération en cours.
Figure 1 : Déroulement d’une routine d’interruption
2.2. Schéma général d'un programme d'interruption : Une interruption (en général) a pour
fonction de forcer un processeur à réagir face à un événement. L'exécution du programme en
cours est suspendu et, un programme d‘interruption est exécuté. Le programme repris
ensuite par le processeur peut être le programme interrompu ou un autre (voir figure 2).
Figure 2 : Mécanisme de gestion d’une interruption
2
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
2.3. Structure générale d’un traitant : Un traitant d’une interruption a toujours la structure
suivante :
Traitant_ITi:
1. Sauvegarder la valeur des registres généraux (dans un emplacement particulier de la
mémoire, appelé par défaut zonei). Cette étape est couramment appelée la sauvegarde du
grand contexte, qui est réalisée par l’instruction Sauver (zonei).
2. Traiter la cause de l’interruption (le programme de l’interruption).
3. Restaurer la valeur des registres généraux (grand contexte) par l’instruction Restaurer
(zonei).
4. Restaurer le mode du programme interrompu et charger dans le compteur ordinal la valeur
préalablement sauvegardée, là où le programme a été interrompu, et cela par l’instruction :
Lpsw (ancien-mep-Iti) qui signifie load_MEP et qui provoque le retour au programme
interrompu. Cette étape est appelée l’acquittement de l’interruption.
3. Notions de base :
3.1. Mode d’exécution : En exécutant un programme, deux modes peuvent avoir lieu :
• Mode Utilisateur (Esclave) : accès restreint, certaines instructions sont interdites (pas
d’accès direct aux périphériques). Il peut être interrompu par d’autres processus. Les appels
systèmes (SVC) permettent à un processus en mode utilisateur d’accéder (temporairement) à
des fonctions nécessitant le mode noyau.
• Mode Superviseur ou Noyau (ou Maître) : accès sans restriction (manipulation de la
mémoire, dialogue avec les contrôleurs de périphériques, etc.). Le Noyau ou Superviseur est
l’entité système permettant la gestion des processus. Seul le noyau a un accès directe à
toutes les ressources, il regroupe la gestion des E/S, l’ordonnancement des processus, la
gestion de la mémoire, la gestion des interruptions.
Un processus utilisateur souhaitant accéder à un périphérique devra passer tout d’abord
par un appel-système (SVC). Un appel-système est une requête traité par le noyau pour le
compte d’un processus. La notion de noyau et d’appel-système permettent de protéger les
données sensibles du système, car seul ce dernier peut les modifier. De plus, un appel-
système n’est pas interruptible, ce qui fait qu’il n’y a pas de concurrence entre ceux-ci.
3.2. Contexte et mot d’état du processeur : Le contexte d'un processeur est constitué de
l'ensemble des informations qui définissent son état à un instant donné, étant :
Grand Contexte Petit Contexte
registres généraux registres spécialisés : MEP
les registres généraux : Ils sont adressables et modifiables par l'utilisateur (c’est à dire par
le programme);
3
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
les registres spécialisés : Ils sont en principe inaccessibles directement par l'utilisateur et
sont regroupés dans le MEP, Mot d'Etat du Processeur ; en anglais PSW, Processor Staus
Word.
Le MEP contient les informations suivantes:
Activité Mode Masquage Compteur Ordinal : CØ
l’activité ou l'état d'exécution du processeur (actif ou en attente). Le processeur
dans l'état actif peut exécuter et enchaîner les instructions. Le changement
d'état Actif ==>Attente est réalisé par le processeur lui-même, soit par l'exécution
d'une instruction spécialisée, soit par (auto)-modification du MEP. Le
passage Attente ==>Actif ne peut évidemment pas être effectué par le processeur
lui-même puisqu'il est en attente. Il ne peut être obtenu que par un événement
extérieur (une interruption).
le mode (maître ou esclave). Comme nous l’avons déjà vu, il y a deux modes
d’exécution, le mode utilisateur (ou mode esclave ou mode user) et le mode
noyau ou mode superviseur (mode maître ou mode kernel). Les instructions
privilégiées comprennent en particulier les instructions d'E/S, celles touchant aux
interruptions (armement, désarmement, masquage, démasquage,
déclenchement, ainsi que celles touchant à la sécurité et à la protection.
Le masque d'interruption (Masqué ou Démasqué). Lorsque les interruptions sont
masquées, le processeur ne peut être interrompu, jusqu'à ce qu'il les démasque,
Comme il y a plusieurs sortes d'interruptions, chacune d'entre elles peut être
masquée/démasquée. L'ensemble des états de chaque type d'interruptions
constitue un masque d'interruptions.
le compteur ordinal. Est un registre qui contient l'adresse de la prochaine
instruction à exécuter.
3.3. Commutation de contexte : Lorsqu’une interruption survient, une commutation de
contexte automatique permet en une seule opération (par hardware) indivisible de (voir
figure 3):
(a) Ranger dans un emplacement spécifié de la mémoire, le contenu courant du
mot d'état du processus, c’est dans l’ ancien_mep_iti
(b) Charger dans le mot d'état du processeur un nouveau contenu préparé à
l‘avance dans un emplacement spécifié de la mémoire (c’est le nouveau_mep_iti),
qui correspond à l’interruption. Le compteur ordinal donc est écrasé, la nouvelle
valeur étant l'adresse du code du traitant d'interruption. Ce dernier sera alors
exécuté et la première chose qu'il doit faire est de terminer la sauvegarde du
grand contexte (registres généraux) du processus dans une zone mémoire, par
une instruction que nous appellerons symboliquement Sauver(Zone ou PCB).
4
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
Figue 3 : Mécanisme de commutation de contexte
- NB : Le temps pour faire une commutation de contexte est appelé l’overhead1 dans
lequel le SE ne fait pas de travail utile (temps dépendant du support matériel).
3.4. Vecteur d’interruptions : Lors de l'occurrence d'une interruption, le processeur
reçoit un index qui pointe dans le vecteur d’interruptions. Cet index est généré par
le processeur dans le cas des déroutements (interruption logicielle) et il est fourni
dans le cas d'une interruption matérielle par un circuit de la carte mère appelé
contrôleur d'interruption (pour plus de détails, voir plus loin). Au vu de cet index,
le processeur accède à l'entrée correspondante de la table d'interruption (voir
figure 4).
Lorsque le signal d’une interruption arrive, il modifie l'état d'un indicateur
(Drapeau ou Flag) dans le registre d’interruptions qui est régulièrement testé par
l'unité centrale. Une fois que le signal est détecté, il faut déterminer la cause de
l'interruption. Pour cela, on utilise un indicateur, pour les différentes causes
d’interruption. On associe à chaque cause d’interruption un numéro k qui
l’identifie. On dispose également dans la zone basse de la mémoire centrale d’une
table appelée Vecteur d’interruptions (vi). Les cases vi[k] de cette table
contiennent l’adresse de la routine à exécuter lors d’une interruption de cause k.
Cette routine est appelée le traitant d’interruption de cause k.
Un vecteur d’interruption a donc la structure suivante :
N° d’interruption @ du traitant
0 @_traitant_it0
1 @_traitant_it1
2 @_traitant_it2
3 @_traitant_it3
N @_traitant_itN
Figure 4 : Vecteur d’interruptions
1
Overhead : L'overhead est le temps (nécessaire) pris par le système d'exploitation pour exécuter ses fonctions internes. On peut citer comme
exemples : les fonctions d'ordonnancement de programmes et de processus, le traitement des interruptions, le traitement des trappes ... Un bon
système tend à minimiser son overhead pour pouvoir allouer un maximum de temps UC aux programmes utilisateur.
5
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
Le schéma de la Figure 5 donne un
aperçu de la structure et du contenu de
la Zone système, après chargement des
routines d’interruption et initialisation
des vecteurs d’interruptions. La Table
d’Interruptions, située à l’adresse 0 de la
mémoire, regroupe toutes les adresses
des traitants d’interruptions. vi[k]
représente le traitant de l’interruption i.
Figure 5 : Table et routines d’interruptions
3.5. Contrôleur d’interruption : Le contrôleur d'interruptions est un circuit spécial de la carte
mère, extérieur au processeur, dont le rôle est de distribuer et de mettre en attente les
demandes d'interruptions provenant des différents périphériques (voir figure 6).
INTR
Contrôleur d'interruption
s
INTA
80386
D15
.... 16 broches
D0
Bus
.....
7 0
8 broches pour recevoir
les codes de 256 interrup
tions
Figure 6 : Contrôleur d’interruptions
-Le contrôleur est relié aux interfaces gérant les périphériques par les bornes IRQ
(InterRupt reQuest). Il gère les demandes d'interruption envoyées par les périphériques,
de façon à les envoyer une par une au processeur (via INTR).
- Avant d'envoyer l'interruption suivante, le contrôleur attend d'avoir reçu le signal
INTA(Interrupt acknowledge), indiquant que le processeur a bien traité l'interruption en
cours.
3.6. Registre d’interruption : Chaque catégorie d’interruption est connue, on associe un bit à
chacune, cela forme ce que l’on appelle le registre d’interruption. On permet à chacune
d’interruption de modifier seulement son bit.
6
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
4. Catégories d’interruptions : Les interruptions peuvent être des origines diverses, mais on peut
les classer en deux grandes classes (ou catégories):
− Les interruptions externes ou matérielles.
− Les interruptions internes ou logicielles.
4.1. Interruptions externes (indépendantes du processus) : Ce sont les interruptions causées par
des organes externes au processeur central, comme les horloges de temps, les périphériques
d’E/S, …etc.
4.2. Interruptions internes : Ce sont des interruptions causées par des anomalies dans l’exécution
du programme en cours et elles sont divisées en deux sous-classes :
4.2.1. Déroutements (Trap en anglais ou Exception en termes de langage de
programmation comme en ADA et JAVA) : Quand un indicateur de changement d'état
est modifié par une cause liée à l'exécution d'une instruction en cours, on dit qu'il y a
déroutement (Trap). Le mécanisme de déroutement a essentiellement pour rôle de
traiter une anomalie dans le déroulement d'une instruction:
o Données incorrectes (débordement arithmétique, division par zéro, etc.)
o Tentative d'exécution d'une opération interdite par un dispositif de
protection (violation de la mémoire, l'exécution d'une instruction
privilégiées en mode esclave).
Remarque : Etant donné le caractère synchrone du déroutement, la notion de
masquage n'a pas de sens, un déroutement peut être supprimé (non traité) mais non
retardé.
4.2.2. Appels au superviseur (SuperVisor Call ou SVC) : Ce sont des instructions qui
permettent à l'utilisateur d'accéder, depuis son programme, à un service particulier
du système d'exploitation. Le mécanisme de cet appel commence par vérifier les
droits de l'utilisateur à effectuer cette demande, puis la validité des paramètres
transmis. Ce mécanisme permettra à l'utilisateur, par le biais de la procédure système
appelée, de fonctionner en mode maître tout en protégeant le système d'actions
malveillantes. Donc Cette façon de procéder permet au système de :
- Se protéger des usagers ;
- Vérifier les droits d’accès au service demandé.
L’appel au superviseur est en fait un appel de procédure système avec un passage de
paramètres. Le service demandé par l’utilisateur sera choisi au moyen d’un paramètre
supplémentaire désignant la cause de l’appel (voir figure 7).
7
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
Figure 7 : Exemple d’Appel au superviseur
Un SVC est traité comme interruption pour permettre une commutation du contexte,
ainsi, il a les avantages suivants :
L’interruption provoque un branchement vers le traitant d’interruption mais aussi
un changement de mode (EsclaveMaître). Il y a donc un passage automatique
du programme utilisateur qui s’exécute en mode esclave vers le SE en mode
maître.
Il existe un et un seul point d’entrée vers le SE pour les processus utilisateur. Il est
donc plus facile (du point de vue du concepteur du système) de sécuriser l’appel
des routines système.
Si on part du principe que le vecteur d’interruptions se trouve dans une zone
inaccessible au programme utilisateur, alors ce dernier n’a aucun moyen de
passer en mode maître et l’instruction SVC est le seul point de passage.
- Le traitant de l’interruption SVC a la structure suivante :
Structure d’un SVC :
1. sauver le contexte du demandeur
2. vérifier la nature de la requête
3. vérifier les arguments (paramètres) de la requête
4. vérifier les droits du demandeur
5. exécuter la demande
6. restaurer le contexte du demandeur
7. retour vers le demandeur
5. Priorité et Système hiérarchisé d’interruptions : La notion de priorité affectée à un niveau
d’interruption découle du fait que les différents équipements nécessitant un traitement d’
interruption ne requièrent généralement pas la même urgence de traitement de la part de l’UC:
on admettra aisément qu’une interruption émanant d’une unité d’E/S lente telle qu’un clavier ne
peut pas avoir la même urgence de prise en compte que celle émanant d’une unité d’E/S rapide
telle qu’un disque. Le mécanisme d’interruption est donc construit de telle sorte que chaque
niveau d’interruption a une priorité fixée d’avance, dans un intervalle allant de la priorité la plus
faible (ou plus basse) à la priorité la plus forte (ou plus élevée). Arbitrairement, les concepteurs
8
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
d’ordinateurs ont choisi d’allouer la priorité la plus élevée à l’interruption de niveau 0 et la plus
faible à l’interruption de niveau N, pour une machine qui dispose de N+1 niveaux d’interruption.
On peut envisager une hiérarchie de priorité des interruptions. Ainsi, lorsque plusieurs
interruptions arrivent en même temps, c’est la plus prioritaire qui est prise en charge en premier.
Cela implique aussi que la routine elle-même d’une interruption peut être interrompue par une
interruption plus prioritaire (voir figure 8).
Figure 8 : Interruptions en cascade
Les fils d’interruptions peuvent être hiérarchisés c’est-à-dire classés par ordre de priorités
respectives. Un traitant d’interruption peut donc être lui-même interrompu par une
demande d’interruption intervenant sur un fil de priorité supérieure. Il passe alors à l’état
d’attente. La figure 9 représente l’activité des programmes dans le temps pour un
système hiérarchisé à 8 niveaux où le niveau 0 est le plus prioritaire, le niveau 7
correspondant au niveau moins prioritaire (programme d’arrière-plan).
, après avoir exécuté complétement l’int. niv 1
Figure 9 : Effet de la hiérarchisation d’un système d’interruptions
Chaque niveau d’interruption peut être dans l’un des états suivants :
état masqué : Lorsque le nombre de niveaux d’interruption est limité, un registre spécialisé de
la CPU contient ce que l’on appelle le masque d’interruption. A chaque niveau est associé un
bit indiquant s’il est autorisé ou masqué. Donc dans l’état masqué le niveau est inhibé par
9
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
programme de sorte que l’interruption a pu être mémorisée mais ne peut être prise en
compte par la CPU.
Une interruption masquée ne peut interrompre le processeur, mais toute demande
d’interruption faite durant le masquage est retardée (mémorisée) pour être traitée à la levée
du masquage. Lors du traitement d’une interruption, les interruptions moins prioritaires sont
automatiquement et temporairement désactivées. Ainsi, les interruptions de même niveau de
priorité ou d’un niveau plus bas peuvent être masquées, alors qu’une interruption de priorité
supérieure est en cours d’exécution.
état Armé / Désarmé : Une interruption d’un niveau désarmée ne peut interrompre le
processeur. Ceci se passe comme si la cause de l’interruption était supprimée. Toute demande
d’interruption faite durant son désarmement est perdue. On utilise ce procédé quand on
désire qu’un élément ne doive plus interrompre. On peut armer ou désarmer un niveau
d’interruption par programme en utilisant des instructions privilégiées. Cette possibilité est
donc réservée au SE.
état d’attente : l’interruption peut être prise en compte immédiatement si deux conditions
sont remplies :
– aucun niveau de priorité supérieure n’est en état d’attente ;
– la CPU se trouve dans un point interruptible.
10
B. H. 2020
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique
11
B. H. 2020