Nous fumes
très frappé en effet de voir comment le temps réel,
qui joue le premier rôle dans toute philosophie de l'évolution,
échappe aux mathématiques.
Henri Bergson, La pensée et le mouvant.
7.0 PRÉSENTATION
Les ordinateurs doivent réagir à des sollicitations externes et internes nommées interruptions ou événements.
Leurs mécanismes internes constituent un lien avec le temps physique inconnu de la machine symbolique.
Ce chapitre contient :
.un glossaire
des termes propres aux interruptions;
.les systèmes
d'interruptions de trois microprocesseurs simples;
.quelques codeurs
de priorités;
.un complément relatif
aux
interruptions logicielles;
.les modifications apportées
au fonctionnement d'un pipeline en cas d'interruption;
.un exemple de système
d'interruptions plus compliqué que les précédents.
7.1. GLOSSAIRE COMMENTÉ EN GUISE D'INTRODUCTION
Demande d'interruption :C'est la manifestation d'un organe extérieur, d'un périphérique, d'un organe interne, d'un processus. Sa cause immédiate est l'un des items suivants :
Masquage :
le système, en tant qu'exécutant
un processus, peut interdire la prise en compte d'une demande. Ceci se
fait déjà systématiquement et universellement pendant
l'exécution d'une instruction et peut être fait à la
demande selon la capacité du matériel.
Exception :
cette variante de vocabulaire
désigne une interruption logicielle liée à une exécution
fautive (division impossible, adressage hors segment etc.).
Hiérarchie et Priorité
:
une interruption cause une perte
de temps, il est donc utile de n'accepter une demande d'interruption que
si sa cause est prioritaire par rapport à celle qui a donné
vie au processus en cours d'exécution.
On utilise en général
le mot priorité pour qualifier les causes, et hiérarchie
pour désigner l'organisation des acceptations et des refus, vue
par le processeur. Il s'agit alors d'un ordre total plus que d'une hiérarchie
stricto sensu, car un processus étant en cours, une demande sera
considérée soit comme plus prioritaire, soit comme moins
prioritaire. Le processus de traitement ad'hoc hérite la priorité
de sa cause.
Invalidation :
une invalidation fait disparaître
l'enregistrement de la demande d'interruption qui devra être émise
à nouveau ou sera perdue.
Masquage :
le masquage rend la demande
d'interruption inefficace mais conserve son enregistrement.
Point d'entrée
:
une demande d'interruption entre
dans un circuit par un point d'entrée. Il y a longtemps, il s'agissait
d'un fil arrivant au processeur; ce peut être une configuration de
bits sur plusieurs broches sur le circuit processeur ou sur un autre circuit
nommé contrôleur d'interruption. Le nombre de points d'entrées
conditionne fortement l'aptitude du processeur à répondre
aux sollicitations extérieures. Les interruptions logicielles n'ont
pas de point d'entrée.
Contexte
d'une tâche ou d'un processus :
la tâche ou le processus
ont besoin de données pour reprendre son exécution après
suspension, à tout le moins le compteur ordinal et le registre d'état,
plus généralement tout ou partie des registres, de mémoires
spécialisées comme la ram vidéo et de segments de
mémoire si leur contenu peut être recouvert pendant la suspension.
Sauvegarde
du contexte :
opération toujours partiellement
câblée qui place le contexte dans une pile (rapide), une zone
de mémoire réservée (plus lent) ou encore sur support
externe (très lent).
Contrôleur d'interruption
:
ce processeur est spécialisé
dans la manipulation de registres relatifs aux interruptions, demandes
et acceptations. Les contrôleurs sont internes au processeur ou externes
sous la forme d'un boîtier additionnel.
Codeur de priorité
:
il est utilisé en cas
de sources multiples externes. Il reçoit les demandes dans des registres.
Il délivre la demande la plus prioritaire du stock. Il augmente
le nombre de sources possibles.
Cascade :
technique consistant à
relier, s'ils ont été prévus pour cela, des codeurs
de priorités identiques, chacun opérant un filtrage propre.
Les boîtiers sont eux-mêmes hiérarchisés par
leur position dans la cascade ou chaîne.
Vecteur d'interruption
:
traditionnellement, c'est un
contenu logé dans un registre défini, spécial, général,
compteur ordinal, ou un mot de mémoire. Ce contenu est associé
à une ou à des demandes d'interruptions par des positions
de bits ou des configurations. Il fait l'objet d'un traitement interprétatif.
Ce peut être un simple pointeur.
Par exemple : si le contenant est le compteur ordinal, le résultat sera un branchement inconditionnel; si c'est un autre registre, un programme analysera ce contenu.
Plus récemment, on a nommé vecteur une adresse de branchement contenue dans une table dite table des vecteurs. Une interruption logicielle, par exemple INT XX, où XX est un octet provoque le branchement à l'adresse contenue dans la position XX de la table des vecteurs.
Scrutation :
est employé dans deux
sens voisins.
En temps réel industriel,
pour une interrogation des sources d'information externes par lecture périodique.
Elle est faite par une tâche très prioritaire.
En système d'exploitation,
pour une tâche à très haute priorité non interruptible
par une classe de demandeurs. Elle contient un processus d'examen de ces
demandes pour les prendre en compte sur décision calculée
par elle-même.
Tâche :
ce terme est propre aux systèmes
fonctionnant en temps réel. Il désigne un programme, généralement
court, activé par une interruption pour réaliser le traitement
associé.
Privilège
:
le privilège d'exécution
désigne un état dans lequel le processus n'est pas limité
:
On trouvera plus loin le vocabulaire relatif à l'influence des interruptions sur le fonctionnement d'un pipeline.
7.2. DESCRIPTION et COMPARAISON de SYSTÈMES D'INTERRUPTIONS SIMPLES
Les systèmes d'interruption sont devenus très complexes. Les cours d'architectures des systèmes informatiques ne les traitent pratiquement jamais, considérant que le système d'exploitation les masque parfaitement ou encore qu'ils sont trop longs à traiter. Nous avons choisi de revenir en arrière de plusieurs générations de façon à trouver des systèmes suffisamment simples pour les présenter, analyser leurs mécanismes et les comparer. On a choisi trois processeurs de la même génération dite des 8 bits de données fabriqués avec la technique d'alors N-MOS. Ils présentent à eux trois la quasi totalité des types d'interruptions et des solutions existant pour les interruptions matérielles d'origine externe.
Le lecteur trouvera plus loin une analyse succincte d'un système plus complexe.
7.2.1. Microprocesseur Intel 8085
C'est un microprocesseur de 1976. Il possède cinq points d'entrée physiques hiérarchisés, sous la forme de cinq broches sur le circuit.
TRAP priorité la
plus haute
RST7.5
RST6.5
RST5.5
INTR priorité
la plus basse
Les entrées d'interruption sont asynchrones. Une demande peut ainsi arriver à un moment quelconque du cycle d'instruction. La logique interne de l'unité centrale synchronise la requête externe de manière à établir une correspondance correcte avec les signaux d'horloge interne. Lors du dernier état du cycle d'instruction dans lequel la demande d'interruption s'est produite, la bascule interne d'interruption est mise à «1». Par ce moyen, l'unité centrale termine l'exécution de l'instruction en cours avant de traiter l'interruption.
On note deux types de fonctionnement
différents relatifs :
a) au groupe TRAP, RST7.5, RST6.5,
RST5.5
b) à l'entrée
INTR.
Dans le groupe a), lorsqu'un organe périphérique émet une interruption en portant simplement au niveau haut la ligne désirée, une tâche est exécutée par le chargement d'une adresse dans le compteur ordinal. Cette adresse de départ est fixée ne varietur :
Pour TRAP adresse
de départ : 24H
Pour RST7.5 adresse de départ
: 2CH
Pour RST6.5 adresse de départ
: 34H
Pour RST5.5 adresse de départ
: 3CH
Dans le groupe b), entrée INTR, le microprocesseur ne fait pas seul le branchement à une adresse. Un autre circuit doit forcer sur le bus de données une des deux instructions dont les mnémoniques sont :
L'instruction CALL a le
format suivant :
Le décodage du code d'opération
a pour effet de faire lire deux octets successifs sur le bus de données,
de les placer dans le compteur ordinal et de lancer la recherche d'instruction
à cette adresse. Ces deux octets sont l'adresse de départ
de la tâche d'interruption.
Dans les deux types de fonctionnement, le compteur ordinal est préalablement sauvegardé par câblage, il est placé en mémoire au sommet de la pile pointée en permanence par le registre STACK POINTER.
Les instructions CALL, CC, CM, CNC, CNZ, CP, CPE, CPO, CZ, PUSH utilisées pour la sauvegarde du contexte chargent la pile.
Les instructions RET, RC, RM, RNC, RNZ, RP, RPE, RPO, RZ, POP la déchargent.
Il est possible de valider le système d'interruption par l'instruction EI (enable interrupt) et de l'invalider par l'instruction DI (disable interrupt). Il est à noter que dès qu'une interruption est reconnue, le système d'interruption est automatiquement désarmé. Il appartient au programmeur de le réarmer. La routine de sous-programme d'interruption n'a aucune priorité et peut ainsi, si le système est réarmé, être elle même interrompue.
En plus de la validation et de
l'invalidation du système d'interruption, un masquage est possible
par niveau. Toutefois, le niveau TRAP ne peut être ni masqué
ni invalidé. Pour les autres niveaux, l'instruction SIM masque comme
suit :
L'instruction RIM lit l'état
du système d'interruption comme suit :
7.2.2. Microprocesseur Motorola 6800
C'est un microprocesseur de 1975. Son système d'interruption a 3 points d'entrée nommés RES, NMI, IRQ.
La prise en compte d'une interruption provoque l'arrêt du programme courant et le branchement à l'adresse constituée par les contenus concaténés de paires d'octets de mémoire d'emplacement fixe.
pour RES les contenus de FFFE
et FFFF
pour NMI les contenus de FFFC
et FFFD
pour IRQ les contenus de FFF8
et FFF9
Ces trois paires d'octets constituent
la table des vecteurs d'interruptions.
Après l'achèvement
de l'instruction en cours, une interruption est prise en compte en 12µs.
Point d'entrée RES
: reset
Cette interruption provoque
la réinitialisation du processeur.
Lorsque le niveau RES devient
bas, FFFE est forcé sur le bus d'adresses. Lorsque le niveau RES
redevient haut, le compteur ordinal est chargé avec le contenu des
adresses FFFE et FFFF. Cette interruption est utilisée comme séquence
de redémarrage après un défaut d'alimentation. Pour
cette raison, il n'y a aucune sauvegarde de l'état du programme
et du compteur ordinal. Cette interruption n'est pas masquable.
Point d'entrée NMI
: non-maskable interrupt.
Comme son nom l'indique, elle
non plus n'est pas masquable. Elle est reconnue lorsque la ligne passe
au niveau logique zéro. Elle est utilisée pour la détection
d'un défaut d'alimentation ou par un périphérique
exigeant un traitement urgent de l'interruption.
Hormis le fait qu'elle ne peut être masquée, cette interruption a un fonctionnement similaire à celui de IRQ. À la fin de l'instruction en cours, le processeur sauvegarde le compteur ordinal, les registres d'état et les accumulateurs dans la pile, puis positionne le masque d'interruption à «1» et force le compteur ordinal par les contenus des octets d'adresses FFFC et FFFD.
Point d'entrée IRQ
: interrupt request.
C'est le point d'entrée
normal du système d'interruption. Les différentes sources
d'interruption doivent être reliées en OU câblé
sur IRQ. Les entrées proviennent généralement des
circuits PIA (interfaces parallèles) ou ACIA (interfaces pour transmission
asynchrones en série), mais peuvent aussi provenir de toute autre
source définie par l'utilisateur.
Lors d'une demande sur IRQ, après que l'instruction en cours est terminée il y a examen du masque d'interruption dans le registre d'état. Si celui-ci est levé, l'interruption est ignorée, s'il est bas, le contenu du compteur ordinal ainsi que le registre d'état et les accumulateurs sont sauvegardés dans la pile. Le masque d'interruption est levé et le programme exécute l'instruction pointée par les contenus des octets d'adresses FFF8 et FFF9.
Les instructions CLI, SEI et RTI agissent sur le masque d'interruption. CLI pour le mettre à 1, SET pour le mettre à 0 (c'est-à-dire pour valider le niveau IRQ) et RTI qui est l'instruction de fin d'un sous-programme d'interruption rétablit le contexte, c'est-à-dire revalide le système d'interruption en positionnant le masque à 0. (Si l'on considère que ce registre d'état n'a pas été manipulé dans la pile durant le traitement de l'interruption). La reconnaissance de la source d'interruption sur l'entrée IRQ se fait par interrogation successive des différentes sources possibles.
L'ordre du balayage peut induire une hiérarchie entre les différentes sources. Le programme peut mettre en attente l'interruption après sa reconnaissance. Un programme approprié permet toute gestion des interruptions sur cette ligne. Il est également possible de vectoriser le système d'interruption sur ce niveau IRQ. Cet artifice peut être également utilisé sur tout autre microprocesseur utilisant comme méthode de branchement à un sous-programme d'interruption le contenu d'une adresse fixe. Il suffit lors de la détection de cette adresse de remplacer cette adresse de mémoire par une autre adresse, fonction du niveau d'interruption considéré.
Le multiplexeur a pour rôle de laisser passer les lignes en provenance du M6800 lorsque l'adresse FFFE/F n'est pas choisie inversement de donner la valeur délivrée par le codeur de priorité lorsque cette adresse est détectée.
Interruption logicielle (SWI)
Le fonctionnement de cette interruption
est analogue à celui de l'interruption IRQ, si ce n'est qu'elle
est déclenchée par logiciel, c'est-à-dire par l'exécution
de l'instruction SWI. Le contenu du compteur ordinal, le registre d'état
et les accumulateurs sont rangés dans la pile. Le masque d'interruption
est mis à 1. Le programme d'interruption est exécuté,
il est à l'adresse pointée par le contenu de [FFFA FFFB].
7.2.3. Microprocesseur Zilog Z80
C'est un microprocesseur de 1976. Son système d'interruption a deux points d'entrée: NMI et INT hiérarchisés.
Point d'entrée NMI
: non maskable interrupt.
Comme son nom l'indique, ce
niveau n'est pas masquable, il a la plus haute priorité et il est
toujours reconnu à la fin de l'instruction en cours d'exécution
indépendamment de l'état du registre de validation d'interruption.
Cette interruption provoque automatiquement le redémarrage à
l'adresse 0066 H.
Le compteur ordinal est sauvegardé dans la pile située dans une zone de mémoire quelconque pointée par le registre SP (stack pointer). La valeur du masque d'interruption IFF1 est sauvegardé dans IFF2, puis IFF1 est mis à zéro interdisant toute interruption masquable INT.
La fin du sous-programme d'interruption non masquable se termine par l'instruction RETN. Cette instruction restitue la valeur du compteur ordinal et recopie la valeur de IFF2 dans IFF1.
Point d'entrée INT
: interrupt request
Ce niveau est reconnu à
la fin de l'instruction en cours si le système d'interruption est
validé.
Les instructions DI et EI invalident et valident respectivement le système d'interruption. Elles positionnent les bascules IFF1 et IFF2 à 0 pour DI et à 1 pour EI.
Sur ce point d'entrée
INT, on définit par programme trois modes différents de fonctionnement
des interruptions :
- Mode 0 : celui d'INTR
du 8085
- Mode 1 : branchement
en 0038 H
- Mode 2 : appel indirect
La sélection du mode de fonctionnement est faite par les instructions IM0, IM1 et IM2 qui forcent respectivement le mode 0, le mode 1 et le mode 2. Au démarrage, le mode est 0.
Le compteur ordinal est sauvegardé dans la pile et le système d'interruption est désarmé. Le sous-programme d'interruption se termine par l'instruction RETI. Cette instruction restitue le compteur ordinal de la pile et valide le système d'interruption.
7.2.4 Un mini-ordinateurLe
PDP-8 de DEC a eu un très grand succès commercial. Son système
d'interruptions était très simple :
Une interruption exécutait
un saut à l'adresse 0 et invalidait le système d'interruption.
Trois instructions étaient disponibles :
Mnémonique | Code | Effet |
SKON | 6000 | Saute l'instruction suivante si le système d'interruption est actif et l'invalide. |
ION | 6001 | Exécute l'instruction suivante et active le système d'interruption. Ce devait être l'avant dernière instruction de la tâche appelée. |
IOF | 6002 | Invalide le système d'interruption. |
Conservatoire national des arts et métiers
Notes des cours d'Architectures des systèmes
informatiques
CHAPITRE 7
Gestion des événements, systèmes
d'interruptions
Année 2002-2003