# Interruption matérielle

Une interruption matérielle (en anglais Interrupt ReQuest ou IRQ) est une interruption déclenchée par un périphérique d'entrée-sortie d'un microprocesseur ou d'un microcontrôleur.
Les interruptions matérielles sont utilisées en informatique lorsqu’il est nécessaire de réagir en temps réel à un événement asynchrone, ou bien, de manière plus générale, afin d’économiser le temps d’exécution lié à une boucle de consultation (polling loop). L’autre sorte d’interruption est l’interruption logicielle (software interrupt ou soft IRQ en anglais), généralement déclenchée par une instruction spéciale du processeur. Les deux sortes d’interruptions déclenchent un basculement de contexte vers le gestionnaire d’interruption associé.

## Description vulgarisée

De nombreux ensembles de circuits électroniques spécialisés placés dans les ordinateurs assurent chacun une fonction bien précise, par exemple gérer l'affichage à l'écran ou bien l'activité d'un disque ou d'une interface réseau. Ils sont dits spécialisés car ils sont incapables de réaliser d'autres fonctions que celles pour lesquelles ils sont conçus, tandis que le processeur principal (UCT) reste leur chef d'orchestre et le carrefour des communications. Les composants de chaque ensemble se trouvent d'ordinaire rassemblés sur une carte d'extension ou sur une zone de la carte-mère.
La plupart de ces ensembles spécialisés ne peuvent assurer seuls toutes les fonctions nécessaires à leurs missions. Donc ils sollicitent parfois l'assistance du processeur principal, ne serait-ce que pour fournir ou obtenir des informations issues d'autres éléments de la machine. Pour ce faire, le processeur peut à intervalles réguliers interroger chacun d'eux afin de déterminer s'il a besoin d'aide, par exemple afin de fournir ou bien d'obtenir des informations.
Ces interrogations répétées et souvent inutiles le distraient de sa mission qui consiste à exécuter les programmes de l'utilisateur. De surcroît la fraction des ressources du processeur principal constamment mobilisée par ces interrogations augmente avec le nombre et la puissance des ensembles spécialisés.
Divers moyens techniques épargnent au processeur ces interrogations périodiques en fournissant aux ensembles spécialisés un moyen d'attirer son attention à n'importe quel moment afin qu'il les assiste, donc en ne le distrayant de l'exécution des programmes de l'utilisateur qu'au besoin.
Pour cela certaines pattes (contacts physiques) du processeur se trouvent reliées à des pistes électriques le reliant aux ensembles spécialisés. Chacun de ces derniers peut s'y manifester en modifiant le niveau logique de la ligne afin de requérir de l'aide, donc d'inviter le processeur à prendre les dispositions nécessaires.
Pour répondre à une requête le processeur devra :
* préserver le contexte d'exécution du programme en cours afin de pouvoir, à terme, en reprendre l'exécution ;
* lire en mémoire l'emplacement du programme destiné à gérer l'événement particulier (appelé gestionnaire d'interruption ou routine de gestion d'interruption (interrupt handler en anglais)), préétabli lors de la prise en charge, par l'ordinateur, de l'ensemble spécialisé (souvent lors de l'amorçage) ;
* exécuter la routine, court programme grâce auquel le processeur interagira avec l'ensemble spécialisé qui le sollicite afin de satisfaire ses attentes ;
* restaurer le contexte d'exécution du programme interrompu ; et enfin
* continuer à exécuter ce dernier.
Notes :
* cette séquence d'événements peut survenir très fréquemment (plusieurs dizaines de milliers de fois par seconde) ;
* des composants auxiliaires (en particulier un circuit gestionnaire d'interruptions) assistent le processeur lors de ces traitements ;
* lorsque plusieurs interruptions surviennent simultanément, le processeur (voire le système d'exploitation, lorsqu'il fournit la routine de gestion) dispose de moyens de déterminer leurs priorités respectives donc l'ordre de prise en compte.
Les pistes électriques délivrant ces informations au CPU sont appelées lignes d'interruption ou lignes d'IRQ. Dans un lointain passé chacune se trouvait associée, à un moment donné, à un seul ensemble spécialisé mais des astuces permettent à présent de laisser plusieurs ensembles solliciter le CPU par le biais de la même ligne d'IRQ, même de façon simultanée.
Le sigle IRQ désigne tout à la fois le concept même d'interruption de l'exécution sur requête tierce ainsi que l'une de ces requêtes.

## Les IRQ sur les architectures compatibles PC

Les micro-ordinateurs compatibles avec l'IBM PC utilisent un microprocesseur compatible avec l'Intel 8088, lequel dispose d'un tableau de 256 interruptions programmables. Parmi celles-ci, 16 sont directement déclenchées par des événements d'entrée-sortie externes. Celles-ci sont nommées IRQ$_n$, n allant de 0 à 15. Les interruptions restantes sont des interruptions logicielles.
Les périphériques (clavier, souris, imprimante) doivent pouvoir fonctionner en même temps, or le microprocesseur n'est capable d'exécuter qu'une interruption à un moment donné. Le contrôleur d'interruption ou contrôleur d'IRQ a donc pour tâche de sérialiser les appels d'interruption vers le microprocesseur. Certains périphériques étant plus critiques que d'autres, la sérialisation des appels d'interruption est influencée par le numéro d'IRQ qui fixe une priorité. Ainsi l'IRQ$_n$ est prioritaire sur l'IRQ$_{n+1}$.
Dans le cas des premiers micro-ordinateurs compatibles PC, les circuits intégrés 8259A et 8259B gèrent ces requêtes.

### IRQ et bus ISA historique

À chaque IRQ est associée un périphérique fixé par la conception de l'architecture, quatre d'entre elles restant disponibles pour des périphériques supplémentaires. La mise en place d'un périphérique (par exemple, d'une carte d'extension) non prévue par ce schéma nécessite deux étapes : configurer le matériel (souvent en positionnant des cavaliers sur la carte), afin de lui indiquer quelle ligne utiliser, et configurer le logiciel afin de lui indiquer quelle ligne est utilisée par la carte. Une inadéquation entre la configuration du logiciel et du matériel, ou un conflit matériel entre deux périphériques configurés tous deux pour utiliser la même ligne, est souvent cause de dysfonctionnement.
Les IRQs sur les premiers IBM PC/XT étaient définies comme suit (par ordre de priorité décroissante) :
* IRQ 0 : Horloge système
* IRQ 1 : Clavier
* IRQ 2 : N/A
* IRQ 3 : Port série (COM2/COM4)
* IRQ 4 : Port série (COM1/COM3)
* IRQ 5 : Disque dur (ESDI)
* IRQ 6 : Lecteur de disquettes
* IRQ 7 : Port parallèle (LPT1)
On remarque que les COM1 et COM3 ainsi que les ports COM2 et COM4 utilisent les mêmes interruptions. Cela semble illogique. Il est en fait possible d'utiliser le port COM1 et le port COM3 (idem pour COM2 et COM4) à condition qu'ils ne soient pas actifs simultanément.
Lors du passage du PC/XT au PC/AT, un second contrôleur d'interruption fut ajouté en cascade du premier. Les IRQ sur les premiers IBM PC/AT étaient donc définies comme suit (la priorité 0 étant la plus forte) :
* IRQ 0 : Horloge Système
* IRQ 1 : Clavier
* IRQ 2 : Cascade du second contrôleur vers les IRQ 8 à 15, rerouté vers l'IRQ 9
* IRQ 3 : Port série (COM2/COM4)
* IRQ 4 : Port série (COM1/COM3)
* IRQ 5 : LPT2 (carte son)
* IRQ 6 : Lecteur de disquettes
* IRQ 7 : Port parallèle (LPT1)
* IRQ 8 : Horloge temps réel
* IRQ 9 : N/A (remplace l'IRQ 2)
* IRQ 10 : N/A
* IRQ 11 : N/A
* IRQ 12 : Contrôleur PS/2
* IRQ 13 : Coprocesseur mathématique
* IRQ 14 : Disque dur primaire (IDE)
* IRQ 15 : Disque dur secondaire (IDE)
Les IRQ 9, 10, 11 ne sont pas utilisées en ISA et sont disponibles pour des périphériques supplémentaires (par exemple pour des périphériques PCI).

### IRQ et bus ISA Plug'n'Play

La spécification ISA Plug and Play, fruit d'une collaboration entre Intel et Microsoft, vise à automatiser l'attribution d'IRQ pour les périphériques utilisant le bus ISA.

### IRQ et bus PCI

Le PCI utilise son propre système d'IRQ. Quatre niveaux d'interruptions existent et peuvent être partagés simultanément: INTA# (en standard et commune à tous les périphériques PCI) et INTB# / INTC# / INTD# (pour les périphériques PCI multifonctions nécessitant plusieurs interruptions).
Au-delà du bus PCI, les interruptions PCI sont converties en IRQ ISA classiques (non partageables), par exemple vers les IRQ 9/10/11. Pour éviter les conflits d'IRQ lors de cette conversion (IRQ PCI partageables vers IRQ ISA non-partageables), une fonction supplémentaire a été conçue après l'apparition du PCI: l'IRQ Steering. Ainsi une IRQ ISA pourra si nécessaire être utilisées pour plusieurs périphériques PCI (via une table d'indirection).

### APIC

Pour aller au-delà des 16 premières IRQ, des IRQ virtuelles (utilisables uniquement avec le bus PCI et ses successeurs) sont ajoutées par le biais de l'utilisation de l'APIC (Advanced Programmable Interrupt Controller). Dans ce contexte, Windows XP peut gérer 26 IRQ, alors que Windows Vista et Windows 7 en gèrent 256.