Next: Conclusion Up: Séquencement et exécution Previous: Gestion des dépendances

Exceptions et interruptions

Les interruptions et les exceptions sont deux types de rupture de séquence <<exceptionnelles>>. Il ne faut pas confondre les interruptions et les exceptions.

Les interruptions surviennent de façon asynchrones. Elles sont commandées par le matériel (interruption externe) ou par le système (interruption système). Les interruptions n'ont aucune relation avec les instructions en cours d'exécution.

Les exceptions sont déclenchées par des <<accidents>> dans l'exécution du programme : débordement arithmétique, erreur de bus, tentative d'utilisation d'instructions réservées, erreur d'adressage, défaut de cache, défaut de page...). Les exceptions provoquent un traitement spécifique : appel à une routine spécialisée. On parle de gestion précise des exceptions si l'état de la machine qui résulterait de l'exécution séquentielle de toutes les instructions antérieures à l'instruction provoquant l'exception peut être reconstruit dans tous les cas. Il est alors possible après le traitement de l'exception de reprendre l'exécution à l'instruction même ayant provoqué l'exception. Dans le cas contraire, les exceptions sont gérées de façon imprécise.

Exceptions sur le MIPS R10000

Contrairement au MIPS R8000 qui implémentait une gestion précise des exceptions pour les opérations entières et une gestion imprécise des exceptions pour les opérations flottantes, le MIPS R10000 implémente une gestion précise de toutes les exceptions.

Cette gestion précise est rendue possible par la présence de l'Active List : une instruction n'est réellement achevée et ses opérandes détruits que lorsque l'instruction disparait de l'Active List.

Le MIPS R10000 met en oeuvre cinq interruptions matérielles accessibles par un agent extérieur, ainsi que deux interruptions logicielles. Il existe aussi une interruption pour le timer. Le MIPS R10000 n'utilise pas de broches pour les interruptions venant de l'extérieur. Ces interruptions sont prises en compte grâce au bus de données et d'adresse ainsi que le registre d'interruptions.

Exceptions sur l'UltraSPARC

L'UltraSPARC implémente une gestion précise des exceptions pour toutes les instructions, même les instructions flottantes. Ceci est possible grâce à la structure de son pipeline où les écritures en registre sont effectuées à un cycle précis. Toutes les erreurs et les interruptions, incluant celles générées par la division flottante et la racine carrée, sont marquées au début de l'étage N3 et générées à la fin de l'étage. Le mécanisme d'exception intègre une pile de cinq étages qui permet de gérer jusqu'à cinq exceptions emboîtées. L'UltraSPARC supporte cinq niveaux de priorité d'exceptions (voir tableau ).

L'UltraSPARC implémente un niveau d'exception spécial appelé RED_state (Reset, Error, and Debug state) utilisé pour les erreurs catastrophiques et durant les remises à zéro de processus.

Pour gérer rapidement les exceptions, l'UltraSPARC utilise trois jeux de 8 registres globaux de 64 bits qui sont utilisés comme des registres tampons (8 registres pour les procédures d'interruptions, 8 registres pour certaines exceptions sur l'unité de gestion mémoire et 8 registres pour toutes les autres exceptions). Ils sont automatiquement sélectionnés quand une exception est détectée ou quand une interruption intervient. Ainsi, les délais dûs aux exceptions sont considérablement réduits sur l'UltraSPARC.

Exceptions sur le PentiumPro

Le PentiumPro peut traiter deux types d'interruptions : les interruptions masquables qui sont reçues sur la broche INTR, et les interruptions non-masquables qui sont reçues sur l'entrée NMI (Non-Maskable Interrupt).

Le PentiumPro implémente une gestion précise des exceptions. Les exceptions sont traitées par logiciel par le même mécanisme que celui des interruptions. Il existe deux types d'exceptions :



Next: Conclusion Up: Séquencement et exécution Previous: Gestion des dépendances


flloansi@IRISA.irisa.fr
Tue Jun 4 09:57:56 MET DST 1996