CONCEPTION D'UN OS - Segmentation & Interruptions

Interruptions - Contrôleur d'interruptions

Controleur d'interruption

Les interruptions matérielles sont générées par les différents composants matériels du PC et parviennent au processeur par l'intermédiaire du contrôleur d'interruption 8259, appelé aussi "Programmable interrupt controler" (PIC).

Ces interruptions sont les sonnettes que tirent les périphériques pour dire au processeur que quelque chose se passe. Mais si chaque péripherique pouvait envoyer directement un signal au processeur, il faudrait sur celui-ci autant de broches (jouant le role 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, 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).

On peut brancher jusqu'à huit périphériques (sources d'interruptions) sur le contrôleur d'interruption d'un PC, par le moyen des lignes appelées IRQ0 à IRQ7.
Le périphérique relié par IRQ0 possède la plus haute priorité, celui qui est relié par IRQ7 la plus faible. Dans la table ci-contre, les interruptions vont de la plus prioritaire à la moins prioritaire.
Si deux interruptions parviennent simultanément aux lignes IRQ3 et IRQ5, c'est d'abord IRQ3 qui sera pris en compte.

Les ordinateurs de la classe AT sont équipés de 2 contrôleurs 8259, branchés en cascacde, ce qui leurs permet de gérer 16 sources d'interruption. Le contrôleur escalve est relié au contrôleur maître par l'IRQ2 du maître. Lorsqu'une demande d'interruption est issue de l'une des huit sources rattachées au deuxième contrôleur, ce dernier simule un IRQ2 adressé au premier contrôleur. Les interruptions associées au deuxième contrôleur sont donc plus prioritaires que celles des lignes IRQ3 à IRQ7 du premier contrôleur.

Table des IRQ

table des IRQ

Quand un peripherique transmet au 8259 une requête pour une interruption, celle-ci subit un traitement complexe :

Un contrôleur peut ainsi réaliser des fonctions plus complexes que la simple transmission d'interruptions. Il est possible de masquer des interruptions, de définir des priorités, etc. Ce fonctionnement est librement paramétrable. La partie suivante explique comment il est possible de paramétrer un contrôleur.

Paramétrer le contrôleur d'interruptions

Envoyer des paramètres en utilisant les ports d'entree/sortie

Il est possible de paramétrer les deux PIC d'un PC en utilisant les ports d'entrée/sortie. On accède au controleur maître via les ports 0x20 et 0x21 et au contrôleur esclave via les ports 0xA0 et 0xA1. En écrivant sur l'un de ses ports, on envoie au contrôleur des données qui seront inscrites dans l'un de ses registres. Les valeurs placées dans les registres internes du contrôleur déterminent son fonctionnement.

Des registres pour stocker les paramètres du contrôleur

On paramètre un contrôleur en mettant des valeurs dans ses registres internes. Il y a deux types de registres, les ICW et les OCW. Les registres ICW (Initialization Command Word) réinitialisent le contrôleur quand ils sont fournis. Les registres OCW (Operation Control Word) permettent de paramétrer certaines fonctions du contrôleur une fois que celui-ci a été initialisé.

Initialiser le contrôleur en remplissant les registres ICW

Pour initialiser un contrôleur, il faut remplir ses registres d'initialisation ICW1, ICW2, ICW3 et ICW4 en respectant cet ordre. On remplit chaque registre en envoyant sur le port aproprié les bonnes données. Il faut savoir qu'après avoir transmis les données pour le registre ICW1, le contrôleur attend obligatoirement que lui soit fournis l'octet du registre ICW2. Si il n'y a qu'un seul contrôleur, il n'est pas la peine de renseigner les registres ICW3 et ICW4. Ces informations sont transmises en écrivant sur le port approprié (0x20 et 0x21 pour le maître, 0xA0 et 0xA1 pour l'esclave) Les registres OCW peuvent être rempli à n'importe quel moment apres l'initialisation des PIC.

Par défaut, les IRQ sont désactivées dans les PIC. Il faut donc les activer (mettre à 0 le bit correspondant dans le registre de masquage des IRQ du PIC).

Pour piloter ainsi les entrées sorties, les processeurs Intel disposent des instructions IN qui permettent d'envoyer des données en provenance d'un port.