web-dev-qa-db-fra.com

Quelle est la différence entre Trap et Interrupt?

Quelle est la différence entre Trap et Interrupt?

Si la terminologie est différente pour différents systèmes, que signifient-ils sur x86?

135
David

A 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 le moyen habituel d'appeler une routine du noyau (un appel système ) car ceux-ci ont une priorité supérieure à celle du code utilisateur. Le traitement est synchrone (le code utilisateur est donc suspendu et continue après). 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.

Un interruption est quelque chose généré par le matériel (périphériques tels que 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 du code utilisateur) ou "passives", car le gestionnaire d’interruptions doit attendre qu’elles se produisent éventuellement.

Vous pouvez également voir une interruption comme une sorte d’interruption interne à la CPU, car le gestionnaire de gestionnaire d’interruptions ressemble à un gestionnaire d’interruptions (les registres et les pointeurs de pile sont sauvegardés, il existe un commutateur de contexte, l’exécution peut reprendre dans certains cas où elle s’est arrêtée). .

175
Aaron Digulla

Traps et interruptions sont étroitement liés. Les interruptions sont un type de exception, et les exceptions sont similaires aux interruptions.

Intel x86 définit deux catégories qui se chevauchent, les événements vectoriels (interruptions vs exceptions) et les classes d'exceptions (faults vs traps vs avorte).

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

Événements vectorisés

Les événements vectoriels (interruptions et exceptions) amènent le processeur à basculer dans un gestionnaire d'interruptions après avoir sauvegardé une grande partie de son état (suffisamment pour que l'exécution puisse se poursuivre ultérieurement).

Les exceptions et les interruptions ont un ID, appelé vecteur, qui détermine le gestionnaire d'interruptions auquel le processeur saute. Les gestionnaires d'interruption sont décrits dans la table des descripteurs d'interruption.

Interruptions

Les interruptions se produisent à des moments aléatoires lors de 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.

Exceptions

Exceptions survient 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, notamment les violations de protection, les erreurs de page et les erreurs internes de la machine.

Classifications d'exception

Les exceptions sont classées comme erreurs, pièges ou avortements en fonction de la manière dont elles sont signalées et si l'instruction qui l’exception peut être redémarré sans perte de continuité du programme ou des tâches.

Résumé: traps incrémente le pointeur d'instruction, fautes pas, et annule 'explose'.

Piège

Un trap est une exception signalée immédiatement après l'exécution de l'instruction de recouvrement. 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 sur l'instruction à exécuter après l'instruction d'interception.

Fault

Un défaut ​​est une exception qui peut généralement être corrigée et qui, une fois corrigée, permet au programme d'être redémarré sans perte de continuité. Lorsqu'un défaut est signalé, le processeur rétablit l'état de la machine avant le début de l'exécution de l'instruction défaillante. L'adresse de retour (contenu enregistré des registres CS et EIP) du gestionnaire d'erreurs pointe vers l'instruction en défaut, plutôt que vers l'instruction qui suit l'instruction en défaut.

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 du ram. L'application déclenchera une erreur de page lorsqu'elle tentera d'accéder à la mémoire qui a été permutée. Le noyau peut extraire cette mémoire du disque vers le ram et redonner le contrôle à l'application. L’application continuera là où elle s’est arrêtée (au niveau de l’instruction défaillante qui accédait à la mémoire remplacée), mais cette fois-ci, l’accès à la mémoire devrait réussir sans erreur.

Avorter

Un abort ​​est une exception qui ne signale pas toujours l'emplacement précis de l'instruction à l'origine de l'exception et n'autorise pas un redémarrage du programme ou de la tâche à l'origine de 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 une interruption. L'instruction se termine avant que le processeur enregistre son état et passe au gestionnaire d'interruptions.

84
ruthafjord

De manière générale, les termes tels qu'exceptions, défauts, avortements, Traps, et Interruptions signifient tous la même chose et sont appelés "Interruptions".

Venir à la différence entre piège et interruption:

Piège: transfert de contrôle prévu et initié par un programmeur vers une routine de gestionnaire spéciale. (Par exemple: 80x86 l'instruction [~ # ~] int [~ # ~] en est un bon exemple)

Tandis que

Interruption (matériel): Interruption du contrôle de programme basée sur un événement matériel externe à la CPU (par exemple: appuyer sur une touche du clavier ou sur une temporisation sur une puce d'horloge)

8
Cheshar

Un trap est un type spécial de interruption, couramment appelé interruption logicielle. Un interruption est un terme plus général qui couvre à la fois interruptions matérielles (interruptions de périphériques matériels) et interruptions logicielles (interruptions de logiciels, tels que - pièges).

6
Paul R

Un piège est appelé par code comme des programmes et utilisé e. g. appeler des routines de système d’exploitation (c’est-à-dire normalement synchrones). Une interruption est appelée par des événements (souvent matériels, comme la carte réseau ayant reçu des données ou le temporisateur de la CPU), et - comme son nom l'indique - interrompt le flux de contrôle normal, car la CPU doit basculer vers la routine de pilote pour gérer l'événement.

3
Frank

Les interruptions sont des interruptions matérielles, alors que les interruptions sont des interruptions invoquées par le 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 générée, vous devez désactiver 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 ce drapeau n'empêchera pas les pièges. Contrairement aux interruptions, les interruptions doivent conserver l'état précédent de la CPU.

2
Anamik Sarvaiya

Je pense que les interruptions sont causées par l'exécution de l'instruction en cours et sont donc appelées événements synchrones. où les interruptions sont causées par une instruction indépendante exécutée dans le processeur, liée à des événements externes et donc appelée asynchrone.

2
chetan pawar

Une interruption est un changement de flux généré par le matériel dans le système. Un gestionnaire d'interruption est convoqué 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 un logiciel. Une interruption peut être utilisée pour signaler l'achèvement d'une E/S afin d'éviter le recours à la scrutation de périphérique. Une interruption peut être utilisée pour appeler des routines du système d'exploitation ou pour intercepter des erreurs arithmétiques.

2
Dinesh Reddy

Une interruption est une interruption logicielle.Si vous écrivez un programme dans lequel vous déclarez une variable divisée par zéro, elle est traitée comme une interruption. Chaque fois que vous exécutez ce programme, la même erreur est renvoyée en même temps.L'appel système est une version spéciale du piège dans laquelle un programme demande à l'OS le service requis. En cas d'interruption (un mot général pour les interruptions matérielles) comme une erreur d'entrée-sortie, le processeur est interrompu à un moment quelconque et bien sûr, ce n'est pas la faute de nos programmeurs. C'est le matériel qui les affiche.

1
Sanketssj5