Quelle est la différence entre Trap et Interrupt?


Réponses:


203

Un trap est une exception dans un processus utilisateur. Cela est dû à une division par zéro ou à un accès mémoire invalide. C'est aussi la manière habituelle d'appeler une routine du noyau (un appel système ) car celles-ci s'exécutent avec une priorité plus élevée que le code utilisateur. La gestion est synchrone (le code utilisateur est donc suspendu et se poursuit par la suite). Dans un sens, ils sont «actifs» - la plupart du temps, le code s'attend à ce que le piège se produise et s'appuie sur ce fait.

Une interruption est quelque chose généré par le matériel (périphériques comme le disque dur, la carte graphique, les ports d'E / S, etc.). Celles-ci sont asynchrones (c'est-à-dire qu'elles ne se produisent pas à des endroits prévisibles dans le code utilisateur) ou "passives" puisque le gestionnaire d'interruption doit attendre qu'elles se produisent finalement.

Vous pouvez également voir un trap comme une sorte d'interruption interne au processeur puisque le gestionnaire du gestionnaire d'interruption ressemble à un gestionnaire d'interruption (les registres et les pointeurs de pile sont enregistrés, il y a un changement de contexte, l'exécution peut reprendre dans certains cas là où elle s'était arrêtée) .


5
Il est intéressant de noter que la division par zéro de lxr.free-electrons.com/source/arch/x86/kernel/… est initialisée comme une interruption matérielle, pourquoi?
Alex Kreimer

8
Parce que c'est vraiment une interruption que le CPU envoie lorsque l'ALU trouve ce problème. Tout comme un défaut de segmentation. Cependant, toutes les erreurs mathématiques ne provoquent pas d'interruptions (le débordement ne le fait pas).
Aaron Digulla

4
Ça a du sens. Mais alors, ce qui est un peu déroutant, c'est pourquoi dans les noyaux Linux précédents, il a été initialisé comme un piège logiciel: set_trap_gate (0, & divide_error);
Alex Kreimer

11
Que voulez-vous dire par «un peu déroutant»? C'est très déroutant :-) Le problème ici est que la division par zéro est une interruption matérielle (IRQ / vecteur 0) mais les développeurs du noyau ont plusieurs choix pour la gérer. Donc à partir d'un processus utilisateur, c'est un piège mais du côté CPU, c'est une interruption. Qui a raison? Aucun? Tous les deux?
Aaron Digulla

3
Bien sûr, cela n'est vrai que pour les processeurs x86. Les autres processeurs fonctionnent différemment.
Aaron Digulla

110

Les pièges et les interruptions sont étroitement liés. Les interruptions sont un type d' exception et les exceptions sont similaires aux interruptions.

Intel x86 définit deux catégories qui se chevauchent, les événements vectorisés ( interruptions vs exceptions ) et les classes d'exceptions ( erreurs vs interruptions vs abandons ).

Toutes les citations de cet article proviennent de la version d'avril 2016 du manuel du développeur de logiciels Intel . Pour la perspective x86 (définitive et complexe), je recommande de lire le chapitre du SDM sur la gestion des interruptions et des exceptions.

Événements vectorisés

Les événements vectorisés ( interruptions et exceptions ) font sauter le processeur dans un gestionnaire d'interruption après avoir enregistré une grande partie de l'état du processeur (suffisamment pour que l'exécution puisse continuer à partir de ce point plus tard).

Les exceptions et les interruptions ont un ID, appelé vecteur, qui détermine à quel gestionnaire d'interruption le processeur passe. Les gestionnaires d'interruption sont décrits dans le tableau des descripteurs d'interruption.

Les interruptions

Les interruptions se produisent à des moments aléatoires pendant l'exécution d'un programme, en réponse à des signaux provenant du matériel. Le matériel système utilise des interruptions pour gérer les événements externes au processeur, tels que les demandes de maintenance des périphériques. Le logiciel peut également générer des interruptions en exécutant l'instruction INT n.

Des exceptions

Des exceptions se produisent lorsque le processeur détecte une condition d'erreur lors de l'exécution d'une instruction, telle qu'une division par zéro. Le processeur détecte diverses conditions d'erreur, y compris les violations de protection, les défauts de page et les défauts internes de la machine.

Classifications d'exception

Les exceptions sont classées en tant qu'erreurs , interruptions ou abandons selon la manière dont elles sont signalées et selon que l'instruction qui a provoqué l'exception peut être redémarrée sans perte de continuité de programme ou de tâche.

Résumé: les interruptions incrémentent le pointeur d'instruction, les erreurs ne le font pas et abandonnent «explosent».

Prendre au piège

Une interruption est une exception signalée immédiatement après l'exécution de l'instruction d'interception. Les pièges permettent de poursuivre l'exécution d'un programme ou d'une tâche sans perte de continuité du programme. L'adresse de retour du gestionnaire d'interruption pointe vers l'instruction à exécuter après l'instruction d'interruption.

Faute

Un défaut est une exception qui peut généralement être corrigée et qui, une fois corrigée, permet de redémarrer le programme sans perte de continuité. Lorsqu'un défaut est signalé, le processeur rétablit l'état de la machine à l'état antérieur au début de l'exécution de l'instruction défaillante. L'adresse de retour (contenu sauvegardé des registres CS et EIP) pour le gestionnaire de défauts pointe vers l'instruction défaillante, plutôt que vers l'instruction suivant l'instruction défaillante.

Exemple: une erreur de page est souvent récupérable. Une partie de l'espace d'adressage d'une application peut avoir été permutée sur le disque à partir de la RAM. L'application déclenche une erreur de page lorsqu'elle tente d'accéder à la mémoire qui a été permutée. Le noyau peut extraire cette mémoire du disque vers la mémoire vive et remettre le contrôle à l'application. L'application continuera là où elle s'était arrêtée (à l'instruction défaillante qui accédait à la mémoire échangée), mais cette fois, l'accès à la mémoire devrait réussir sans faute.

Avorter

Un abandon est une exception qui ne signale pas toujours l'emplacement précis de l'instruction à l'origine de l'exception et ne permet pas de redémarrer le programme ou la tâche qui a provoqué l'exception. Les abandons sont utilisés pour signaler des erreurs graves, telles que des erreurs matérielles et des valeurs incohérentes ou illégales dans les tables système.

Cas de bord

Les interruptions invoquées par le logiciel (déclenchées par l'instruction INT) se comportent comme des interruptions. L'instruction se termine avant que le processeur n'enregistre son état et passe au gestionnaire d'interruption.


6
C'est une si bonne réponse que j'étais convaincu que la file d'attente de révision "Réponse tardive d'un nouvel utilisateur" me faisait passer un test pour m'assurer que je faisais attention.
Noumenon

1
Merci! Cela signifie beaucoup pour moi :)
ruthafjord

C'est une excellente réponse pour x86. La question à l'origine était assez générale et ne mentionnait pas x86. J'ai fait une modification pour essayer de trouver un équilibre. Peut-être pourriez-vous ajouter un autre paragraphe en haut de cette réponse pour aborder la question de la terminologie en dehors du monde x86? Et / ou laissez une autre modification sur la question si vous pensez que j'ai aggravé les choses: PI ne connaît vraiment que x86 moi-même, mais j'espère que c'est vrai que d'autres systèmes utilisent une terminologie très similaire, et vous pouvez simplement le dire :)
Peter Cordes

1
J'ai parcouru le livre sur l'architecture du PPC , et il semble que leurs définitions se chevauchent largement. Ils ont de nouveaux noms pour les cas extrêmes et traitent les exceptions comme un sous-type d'interruptions, plutôt que comme faisant partie d'une catégorie distincte.
ruthafjord

1
Je pense que cette réponse le décrit le mieux. Il traite de la ligne floue qui peut exister entre les deux. Et mentionne que les erreurs de page entraînent une nouvelle tentative par le processeur d'une instruction qu'un piège ignore l'instruction et continue.
in70x

9

D'une manière générale, des termes comme des exceptions, des défauts, Abandonne, pièges et Interruptions tout cela veut dire la même chose et sont appelés « Interruptions ».

Venir à la différence entre Trap et Interrupt:

Trap: est un transfert de contrôle initié et attendu par un programmeur vers une routine de gestion spéciale. (Par exemple: l' instruction 80x86 INT est un bon exemple)

Tandis que

Interruption (matériel): Il s'agit d'une interruption de contrôle de programme basée sur un événement matériel externe externe au CPU (par exemple: en appuyant sur une touche du clavier ou un délai sur une puce de minuterie)


Bonnes définitions. La source?
alexlomba87 le

6

Un piège est un type spécial d' interruption qui est communément appelé interruption logicielle . Une interruption est un terme plus général qui couvre à la fois les interruptions matérielles (interruptions des périphériques matériels) et les interruptions logicielles (les interruptions de logiciels, telles que les interruptions ).


4
Cela rend les choses encore plus confuses que certains auteurs (Tanenbaum) parlent de «pièges matériels». Si nous pouvons avoir des pièges matériels et des interruptions logicielles, il est clair que les définitions sont assez floues et peuvent aller dans les deux sens, nécessitant toujours le mot matériel ou logiciel.
The111

3

Un trap est appelé par le code comme des programmes et utilisé par exemple pour appeler des routines OS (c'est-à-dire normalement synchrones). Une interruption est appelée par des événements (souvent du matériel, comme la carte réseau ayant reçu des données, ou le minuteur du processeur), et - comme son nom l'indique - interrompt le flux de contrôle normal, car le processeur doit passer à la routine du pilote pour gérer l'événement.


2

Une interruption est un changement de flux généré par le matériel dans le système. Un gestionnaire d'interruption est appelé pour traiter la cause de l'interruption; le contrôle est ensuite renvoyé au contexte et à l'instruction interrompus. Un piège est une interruption générée par le logiciel. Une interruption peut être utilisée pour signaler l'achèvement d'une E / S afin d'éviter la nécessité d'interroger le périphérique. Un trap peut être utilisé pour appeler les routines du système d'exploitation ou pour détecter les erreurs arithmétiques.


2

Je pense que les pièges sont causés par l'exécution de l'instruction actuelle et sont donc appelés événements synchrones. où les interruptions sont causées par une instruction indépendante qui s'exécute dans le processeur et qui sont liées à des événements externes et sont donc appelées asynchrones.


2

Les interruptions sont des interruptions matérielles, tandis que les interruptions sont des interruptions appelées par logiciel. Les occurrences d'interruptions matérielles désactivent généralement les autres interruptions matérielles, mais ce n'est pas le cas pour les interruptions. Si vous devez interdire les interruptions matérielles jusqu'à ce qu'une interruption soit servie, vous devez effacer explicitement l'indicateur d'interruption. Et généralement, l'indicateur d'interruption sur l'ordinateur affecte les interruptions (matérielles) par opposition aux interruptions. Cela signifie que la suppression de cet indicateur n'empêchera pas les interruptions. Contrairement aux interruptions, les interruptions doivent conserver l'état précédent du processeur.


1

Un trap est une interruption logicielle.Si vous écrivez un programme dans lequel vous déclarez une variable ayant une valeur de division par zéro, il est alors traité comme un trap.Lorsque vous exécutez ce programme, il lancera la même erreur en même temps.L'appel système est un version spéciale de trap dans laquelle un programme demande à os son service requis. En cas d'interruption (un mot général pour les interruptions matérielles) comme une erreur d'E / S, le processeur est interrompu à un moment aléatoire et bien sûr ce n'est pas la faute de nos programmeurs, c'est le matériel qui les fait apparaître.


1
Pouvez-vous expliquer en quoi l'appel système est un piège?
Radha Gogia
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.