Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 7
Gestion des événements, systèmes d'interruptions
Année 2002-2003

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 :

Cette demande est enregistrée et ensuite refusée ou acceptée.Interruption :
en conséquence de l'acceptation d'une demande, le processus en cours est interrompu. Une sauvegarde plus ou moins complète de son contexte est faite par les mécanismes câblés, elle est complétée par une sauvegarde programmée.

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é :

Le processeur est mis en mode privilégié en réponse à une interruption. Il peut exister une hiérarchie de privilèges alors liée à une hiérarchie de priorités.Note :C'est bien un privilège au sens habituel. Ce n'est pas une préférence banale ou un choix comme le disent nombre de cuistres, par exemple «la (route) nationale 6 est encombrée, privilégiez (sic) la 7!» au lieu de choisissez ou préférez.

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 :

Ce forçage est faite comme suit. Le cycle d'interruption qui suit l'arrivée d'une demande d'interruption validée est similaire à un cycle d'acquisition d'instruction (FETCH). Un signal INTA est construit qui acquitte la demande interne d'interruption de séquence. Le circuit doit émettre soit l'instruction RST seule, soit CALL accompagné d'un argument.L'instruction RST a le format suivant :

Son décodage placer le mot suivant de 16 bits :

dans le compteur ordinal. L'effet est de lancer la recherche de l'instruction exécutable à cette adresse. Cette instruction donne donc accès à huit adresses. On peut dire que ces huit adresses, non consécutives, constituent une table de vecteurs d'interruption.

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 programmeur doit avoir constitué une table d'au plus 128 mots de 16 bits qui seront les adresses de redémarrage. L'adresse de début de la table est logée dans le registre I sous la forme de 8 bits de poids forts, complétés implicitement par des 0. L'octet forcé est l'adresse paire dans la table du mot qui contient l'adresse de début du sous-programme d'interruption. Le registre I est remis 0 par le RESET. Il doit être chargé à la valeur désirée avant de pouvoir accepter les interruptions. Cette valeur peut être modifiée à tout moment suivant les besoins.Lorsque la ligne d'interruption est activée, et que le système d'interruption est validé, la séquence d'interruption est exécutée à la fin de l'instruction en cours de traitement. Cette séquence dure 19 temps d'horloge. La conjonction des signaux M1 et IORQ signifie au périphérique demandeur d'interruption le plus prioritaire d'avoir à positionner sur les lignes de données sa combinaison binaire propre. Une chaîne des périphériques permet à un seul équipement de répondre à cette interrogation de l'unité centrale.

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.

Questionnaire

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