• Aucun résultat trouvé

Cours 10, Les interruptions

N/A
N/A
Protected

Academic year: 2022

Partager "Cours 10, Les interruptions"

Copied!
15
0
0

Texte intégral

(1)

Etienne Tremblay

Ordinateurs, Structure et Applications

GIF-1001

Université Laval, Hiver 2012

Cours 10, Les interruptions

(2)

Les interruptions du 8086

• Une interruption interrompt l’exécution séquentielle des instructions par le CPU. Lors d’une interruption, l’exécution du programme principal est

suspendue. Une sous-routine traitant l’interruption est exécutée, puis le programme principal est continué.

– Les sauts conditionnels ou inconditionnels ainsi que les appels de sous-routines ne sont pas des interruptions.

• Il existe plusieurs catégories d’interruptions: les exceptions, les interruptions matérielles et les interruptions logicielles. Les interruptions matérielles

surviennent lorsque les lignes RST, NMI ou INTR du 8086 sont activées.

Les interruptions logicielles surviennent lorsque l’instruction INT apparaît et les exceptions se produisent quand le microprocesseur ne peut exécuter une instruction (exemples: instruction invalide, division par zéro, …).

• Toutes les interruptions ont un numéro de 0 à 255d, sauf reset. Certains numéros sont fixés par le matériel, d’autres par les concepteurs du 8086 et finalement il en reste de disponibles pour le programmeur.

• Les interruptions ont des priorités. Elles sont, du plus prioritaire au moins prioritaire: Reset, Exceptions, INT, NMI et INTR. À l’intérieur d’une de ces catégories, l’INT avec le numéro le plus bas est habituellement la plus prioritaire. Une interruption de haute priorité peut interrompre une

interruption de priorité inférieure. Une interruption de basse priorité ne peut

(3)

Interruptions vectorisées

La table des vecteurs d’interruption contient l’adresse de la sous-routine à exécuter lorsqu’un interruption survient. Pour chaque interruption, la table contient 4 bytes d’information: CS et IP. Chaque entrée de la table est un “vecteur” qui mène aux instruction à exécuter pour traiter l’interruption. La taille de la table des vecteurs d’interruption est donc 256ints * 4bytes = 1Ko.

La table des vecteurs d’interruption commence à l’adresse 00000h et elle finit à l’adresse 003FFh. Ne pas mettre de segments à cet endroit!!!

# d'Int 4 040506

07

Mémoire

CS et IP pour Int 0 CS et IP pour Int 1 CS et IP pour Int 2 CS et IP pour Int 3 CS et IP pour Int 4

00000h 07564h (0706:0504)

00004h

Code exécuté lorsque l'INT1

survient

• Lorsqu’une interruption survient, le numéro de l’interruption permet de trouver l’emplacement des instructions à exécuter. Le numéro de l’interruption est multiplié par 4 afin de trouver l’adresse du CS et du IP à rechercher (IP est à l’adresse inférieure, suivi de CS). Puis un JMP à CS:IP est fait. CS:IP est un « vecteur » vers le code à exécuter afin de répondre à l’interruption.

- Exemple: Si le contenu de la mémoire, à partir de l’adresse 00000h est 00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, etc... et que l’interruption 1 survient, alors la routine à l’adresse 0706:0504 sera

exécutée.

• Reset est la seule interruption sans numéro.

Pour reset, CS:IP = FFFF0H. Ce sont les valeurs de CS et IP au démarrage de l’ordinateur

(4)

Séquence d’évènements après une interruption

• Lors d’une interruption logicielle ou matérielle, les évènements suivants se produisent:

– Le 8086 termine l’instruction en cours.

– Le drapeau IF est testé si l’interruption provient de la ligne d’interruption

matérielle (INTR). Si le drapeau est à 0, l’interruption est masquée (ignorée, mais toujours active).

– Si une autre interruption de priorité supérieure ou égale est en cours, l’interruption est mise de côté pour être exécutée ultérieurement.

– Trois registres sont mis sur la pile (PUSH) dans l’ordre qui suit: les drapeaux, CS actuel, puis IP actuel. Le drapeau IF est mis à 0 après le PUSH des flags.

– Un JMP est exécuté à l’adresse CS:IP trouvée dans la table des vecteurs d’interruption à partir du numéro de l’interruption.

– La routine de service de l’interruption (ISR ou Interrupt Service Routine) désignée par la table des vecteurs d’interruption est exécutée.

– Théoriquement, la dernière instruction de l’ISR est IRET (Interrupt RETurn). Un IRET est équivalent à trois POP dans cet ordre: IP, CS et drapeaux.

(5)

Exceptions

• Les exceptions surviennent quand un évènement logiciel spécial arrive. Lors de la plupart des exceptions le microprocesseur ne peut pas exécuter

l’instruction en cours pour diverses raisons: instruction invalide, division par 0, référence à une adresse invalide, accès invalide à une adresse protégée (pas avec le 8086), faute matérielle, etc. Voici quelques exceptions du 8086:

– L’interruption 0 survient lorsque le diviseur de DIV ou IDIV est 0.

– L’interruption 4 survient lorsque le drapeau Overflow est 1 et que l’instruction INTO est exécutée.

– Les interruptions 1 et 3 servent pour du debug de programme.

• Les exceptions désactivent les interruptions matérielles et elles sont plus prioritaires que les interruptions logicielles.

(6)

Interruptions matérielles (1)

(7)

Interruptions matérielles (2)

• Le 8086 a trois broches pour les interruptions matérielles: RESET, NMI et INTR.

• La broche RESET crée un reset du CPU si elle est HIGH pendant au moins quatre cycles d’horloge.

• La broche NMI (Non Maskable Interrupt) déclenche l’interruption 2

lorsqu’elle passe de LOW à HIGH. L’interruption NMI n’est pas désactivé lorsque IF est 0, contrairement aux interruptions sur INTR, d’où son nom.

Une utilisation typique de NMI est la détection de mise hors tension.

• La broche INTR sert à toutes les autres interruptions matérielles du 8086.

Une interruption est se produit lorsque la ligne est à Vcc.

• Étant donné que le 8086 n’utilise qu’une ligne pour la plupart des

interruptions matérielles (INTR), un PIC (Programmable Interrupt Controler) servait initialement a multiplexer 8 interruptions pour n’en former qu’une seule. Comme 8 interruptions s’est révélé rapidement insuffisant, un autre PIC a été ajouté. Afin de respecter le design déjà en place, l’interruption matérielle 2 a été re-dirigée (voir plus loin). Le 8086 supporte donc 16 interruptions matérielles (nommées IRQ0 à IRQ15).

– De nos jours, les PICs sont inclus dans le chipset.

– À chaque interruption matérielle correspond un numéro d’interruption qui n’est pas égal au numéro d’interruption matériel. Par exemple, IRQ0 est l’INT 08. La page suivante donne une correspondance typique entre les IRQ et les

périphériques du PC.

(8)

Interruptions matérielles (3)

INT (Hex) IRQ Function

77 IRQ15 Reserved

76 IRQ14 Hard Disk Drive

75 IRQ13 Maths Co-Processor

74 IRQ12 PS/2 Mouse

73 IRQ11 Reserved

72 IRQ10 Reserved

71 IRQ9 Redirected IRQ2 70 IRQ8 Real Time Clock 0F IRQ7 Parallel Port

0E IRQ6 Floppy Disk Controller 0D IRQ5 Reserved/Sound Card 0C IRQ4 Serial Port

0B IRQ3 Serial Port

0A IRQ2 PIC2

(9)

Interruptions matérielles (4)

• La séquence d’évènements suivante se produit lorsqu’un périphérique produit une interruption:

– Le PIC reçoit et traite l’interruption

• Un registre interne du PIC permet au programmeur du 8086 de masquer (désactiver) certaines interruptions

• Le PIC met l’interruption dans un buffer

• Le PIC regarde les priorités des interruptions et détermine si l’interruption matérielle courante est la plus prioritaire

– La ligne INTR est activée par le PIC pour dire au 8086 qu’il y a interruption

– Un pulse de 0Vdc provenant du 8086 apparaît sur la ligne INTA pour signaler au PIC que l’interruption est reçue (Acknowledged). La ligne INTR est désactivée après le pulse.

– Un deuxième pulse de 0Vdc provenant du 8086 demande au PIC de mettre le numéro de l’interruption sur le bus de donnée.

– Le PIC met le numéro de l’INT sur le bus de donnée: il ne met pas le numéro de l’IRQ.

– Le 8086 exécute la routine de service de l’interruption

– Une instruction à la fin de la routine envoie un EOI (End Of Interrupt) au PIC pour lui signaler que l’interruption est traitée.

(10)

Interruptions matérielles (5)

• L’insertion d’un deuxième PIC sur la ligne IRQ2 du premier PIC a plusieurs conséquences découlant surtout d’un désir de conserver la compatibilité avec les designs n’ayant qu’un seul PIC:

– Les périphériques connectées sur IRQ2 ont été connectés sur IRQ9 (re- direction). Comme le vecteur d’interruption de IRQ9 n’est pas le même que celui de IRQ2, il faut que IRQ9 appelle le vecteur d’interruption de IRQ2 pour les designs avec un seul PIC.

– Désactiver l’IRQ2 à l’intérieur du PIC principal désactive les IRQ8 à IRQ15.

– Les interruptions matérielles 8 à 15 sont plus prioritaires que les interruptions matérielles 3 à 7.

– Les routines de service d’interruptions matérielles IRQ8 à IRQ15 doivent gérer deux PICs, c’est-à-dire envoyer deux End Of Interrupt.

(11)

Interruptions logicielles

• Une interruption logicielle s’appelle avec l’instruction INT # où # est le numéro de l’interruption.

• Chaque interruption peut avoir des sous-fonctions. Pour spécifier une sous- fonction, il faut placer dans un registre prédéterminé le numéro de la sous- fonction voulu avant d'appeler l'interruption (le registre est souvent AH). La sous-routine de service de l’interruption testera la valeur du registre

prédéterminé et aiguillera la sous-routine en conséquence.

• Voici quelques exemples tirés de EMU8086:

INT 20h - Quitte le système d'exploitation.

INT 21h / AH=09h - Sortie d'une chaîne de caractères depuis DS:DX.

INT 21h / AH=0Ah - Entrée d'une chaîne de caractères vers DS:DX, le premier octet indique la taille du buffer, le deuxième octet indique le nombre de

caractères réellement lus.

INT 21h / AH=4Ch - Quitte le système d'exploitation.

INT 21h / AH=01h - lit un caractère sur l'entrée standard, avec écho, le résultat est stocké dans AL.

INT 21h / AH=02h - écrit un caractère vers la sortie standard, DL = le caractère à écrire, après exécution, AL = DL.

(12)

Interruptions logicielles et système d’exploitation

Les systèmes d’exploitations gèrent habituellement les périphériques. Les

programmes de l’usager accèdent aux périphériques par la biais de fonctions du système d’exploitation.

Les ordinateurs ont souvent du matériel différent et les fonctions permettant d’accéder à ce matériel changent en fonction du matériel. Le programmeur ne veut pas se

soucier de toutes les configurations de matériel possibles lorsqu’il accède à un périphérique.

La table des vecteurs d’interruption permet de changer facilement l’adresse de la routine traitant l’interruption d’un périphérique. Avec le 8086, cette table est

habituellement gérée par le système d’exploitation.

Le programmeur ne veut pas apprendre les adresses des fonctions du système d’exploitation, ni changer son programme si le système d’exploitation change.

Les interruptions logicielles sont généralement utilisées pour appeler des fonctions du système d’exploitation, principalement afin d’accéder aux périphériques.

– Le BIOS fournit un ensemble de fonctions d’accès aux périphériques

– Le système fournit un ensemble de fonctions d’accès aux périphériques. Il change la table des vecteurs d’interruption en fonction du matériel de l’ordinateur.

– Périphérique = clavier, écran, horloge…

– Les interruptions sont habituellement exécutées en mode superviseur: il s’agit d’un mode privilégié (celui du système d’exploitation) ayant tout le contrôle du système.

– Le terme SVC (SuperVisor Call instruction) est habituellement employé pour désigner une interruption logicielle appelant une fonction du système d’exploitation.

(13)

Table résumée des INTs

INT (Hex) IRQ Common Uses

00 - 01 Exception Handlers -

2 Non-Maskable IRQ Non-Maskable IRQ (Parity Errors)

03 - 07 Exception Handlers -

8 Hardware IRQ0 System Timer

9 Hardware IRQ1 Keyboard

0A Hardware IRQ2 Redirected

0B Hardware IRQ3 Serial Comms. COM2/COM4

0C Hardware IRQ4 Serial Comms. COM1/COM3

0D Hardware IRQ5 Reserved/Sound Card

0E Hardware IRQ6 Floppy Disk Controller

0F Hardware IRQ7 Parallel Comms.

10 - 6F Software Interrupts -

70 Hardware IRQ8 Real Time Clock

71 Hardware IRQ9 Redirected IRQ2

72 Hardware IRQ10 Reserved

73 Hardware IRQ11 Reserved

74 Hardware IRQ12 PS/2 Mouse

75 Hardware IRQ13 Math's Co-Processor

76 Hardware IRQ14 Hard Disk Drive

77 Hardware IRQ15 Reserved

78 - FF Software Interrupts -

(14)

Détournement des Interruptions

• Lors du démarrage du PC, la table des vecteurs d’interruption, en RAM

parce qu’il faut pouvoir la changer, est chargée avec des valeurs par défaut.

• Pour détourner une interruption, il suffit de changer la table des vecteurs d’interruptions. Changer le CS et l’IP à l’adresse 4*(# de l’INT à détourner) permet de changer le code exécuté lorsque l’interruption se produira.

• En temps normal, la nouvelle ISR appellera l’ancienne ISR sous certaines conditions. Pour cette raison, sauvegarder le CS et l’IP de l’instruction que l’on remplace est une pratique recommandée (habituellement la sauvegarde se fait dans des variables déclarées à cet effet).

• Le fichier DetourneInt21h.asm est un exemple de programme détournant une interruption.

(15)

Références et exercices

• Références

– Irv Englander, section 9.3 – DetourneInt21h.asm

– http://www.beyondlogic.org/interrupts/interupt.htm

– http://coen.boisestate.edu/ssmith/ee332/overheads/Interrupts-11.pdf

• Exercices

– Qu’est qu’une interruption?

– Supposons que les 256 premiers bytes de la mémoire valent de 00h à FFh. À quelle adresse se trouvera le code à exécuter lors de l’IRQ2?

– Donnée la priorité de chaque interruption dans la « Table résumée des INTs ». Mettre 0 pour l’INT la plus prioritaire et 255 pour la moins

prioritaire.

– Comment fonctionnent les interruptions matérielles d’un 8086 avec 2 PICs?

Références

Documents relatifs

The UNIVAC 418-111 Real-Time Operating System File Control Routine provides preprogrammed methods of handling files on rna gnetic tape and mass storage sub-

ROUTINE DU SOIR enlever le manteau.. mettre

Nous pouvons représenter graphiquement un cheminement de partie en partant du point (9, 7) et en se déplaçant vers la droite après un pile et vers le haut après un face.. Il est

Comme ils ont quelques réminiscences du calcul des probabilités, ils se mettent d'accord pour que Zig qui a deux points de plus que Puce empoche 72,65€ tandis que Puce récupère

Comme ils ont quelques réminiscences du calcul des probabilités, ils se mettent d'accord pour que Zig qui a deux points de plus que Puce empoche 72,65€ tandis que Puce récupère

Si n est le nombre de parties déjà jouées et p le nombre de parties gagnées par Zig, pour remporter le pot Zig doit encore gagner S – p parties et Puce ne doit pas en rapporter

Windows interrupt dispatcher invokes the interrupt service routine Windows interrupt dispatcher invokes the interrupt service routine ISR runs in the context of the interrupted

si lorsqu’il n’a pas accès à une ressource met la thread courante en attente jusqu’à ce que la resource arrive. –