Was ist der Unterschied zwischen Trap und Interrupt?


Antworten:


203

Eine Falle ist eine Ausnahme in einem Benutzerprozess. Es wird durch Division durch Null oder ungültigen Speicherzugriff verursacht. Dies ist auch die übliche Methode zum Aufrufen einer Kernel-Routine (eines Systemaufrufs) da diese mit einer höheren Priorität als Benutzercode ausgeführt werden. Die Behandlung ist synchron (daher wird der Benutzercode angehalten und danach fortgesetzt). In gewisser Weise sind sie "aktiv" - meistens erwartet der Code, dass die Falle passiert, und stützt sich auf diese Tatsache.

Ein Interrupt wird von der Hardware generiert (Geräte wie Festplatte, Grafikkarte, E / A-Anschlüsse usw.). Diese sind asynchron (dh sie treten nicht an vorhersehbaren Stellen im Benutzercode auf) oder "passiv", da der Interrupt-Handler warten muss, bis sie schließlich eintreten.

Sie können einen Trap auch als eine Art CPU-internen Interrupt betrachten, da der Handler für den Trap-Handler wie ein Interrupt-Handler aussieht (Register und Stapelzeiger werden gespeichert, es gibt einen Kontextwechsel, die Ausführung kann in einigen Fällen fortgesetzt werden, in denen er aufgehört hat). .


5
Es ist interessant, dass lxr.free-electrons.com/source/arch/x86/kernel/… durch Null dividiert als Hardware-Interrupt initialisiert wird. Warum ist das so?
Alex Kreimer

8
Weil es wirklich ein Interrupt ist, den die CPU sendet, wenn die ALU dieses Problem findet. Genau wie ein Segmentierungsfehler. Nicht alle mathematischen Fehler verursachen jedoch Interrupts (Überlauf nicht).
Aaron Digulla

4
Das macht Sinn. Etwas verwirrend ist jedoch, dass es in früheren Linux-Kerneln als Software-Trap initialisiert wurde: set_trap_gate (0, & divid_error);
Alex Kreimer

11
Was meinst du mit " etwas verwirrend"? Es ist sehr verwirrend :-) Das Problem hier ist, dass das Teilen durch Null ein Hardware-Interrupt (IRQ / Vektor 0) ist, aber die Kernel-Entwickler haben mehrere Möglichkeiten, damit umzugehen. Von einem Benutzerprozess aus ist es eine Falle, aber von der CPU-Seite ist es ein Interrupt. Wer hat Recht? Keiner? Beide?
Aaron Digulla

3
Dies gilt natürlich nur für x86-CPUs. Andere CPUs arbeiten anders.
Aaron Digulla

110

Fallen und Interrupts sind eng miteinander verbunden. Traps sind eine Art Ausnahme , und Ausnahmen ähneln Interrupts.

Intel x86 definiert zwei überlappende Kategorien: Vektorereignisse ( Interrupts vs. Ausnahmen ) und Ausnahmeklassen ( Fehler vs. Traps vs. Abbrüche ).

Alle Zitate in diesem Beitrag stammen aus der April 2016-Version des Intel Software Developer Manual . Für die (endgültige und komplexe) x86-Perspektive empfehle ich, das Kapitel des SDM zur Interrupt- und Ausnahmebehandlung zu lesen.

Vektorisierte Ereignisse

Vektorereignisse ( Interrupts und Ausnahmen ) führen dazu, dass der Prozessor in einen Interrupt-Handler springt, nachdem er einen Großteil des Prozessorstatus (genug, damit die Ausführung ab diesem Zeitpunkt später fortgesetzt werden kann).

Ausnahmen und Interrupts haben eine ID, die als Vektor bezeichnet wird und bestimmt, zu welchem ​​Interrupt-Handler der Prozessor springt. Interrupt-Handler werden in der Interrupt-Deskriptor-Tabelle beschrieben.

Unterbricht

Unterbricht treten zu zufälligen Zeiten während der Ausführung eines Programms als Reaktion auf Signale von der Hardware auf. Die Systemhardware verwendet Interrupts, um Ereignisse außerhalb des Prozessors zu verarbeiten, z. B. Anforderungen zur Wartung von Peripheriegeräten. Software kann auch Interrupts erzeugen, indem sie den Befehl INT n ausführt.

Ausnahmen

Ausnahmen treten auf, wenn der Prozessor während der Ausführung eines Befehls einen Fehlerzustand erkennt, z. B. Division durch Null. Der Prozessor erkennt eine Vielzahl von Fehlerzuständen, einschließlich Schutzverletzungen, Seitenfehlern und internen Maschinenfehlern.

Ausnahmeklassifikationen

Ausnahmen werden als Fehler , Traps oder Abbrüche klassifiziert , je nachdem, wie sie gemeldet werden und ob die Anweisung, die die Ausnahme verursacht hat, ohne Verlust der Programm- oder Taskkontinuität neu gestartet werden kann.

Zusammenfassung: Traps erhöhen den Anweisungszeiger, Fehler nicht und brechen ab 'explodieren' ab.

Falle

Ein Trap ist eine Ausnahme, die unmittelbar nach der Ausführung des Trapping-Befehls gemeldet wird. Traps ermöglichen die Fortsetzung der Ausführung eines Programms oder einer Aufgabe ohne Verlust der Programmkontinuität. Die Rücksprungadresse für den Trap-Handler zeigt auf den Befehl, der nach dem Trapping-Befehl ausgeführt werden soll.

Fehler

Ein Fehler ist eine Ausnahme, die im Allgemeinen behoben werden kann und die nach der Korrektur einen Neustart des Programms ohne Verlust der Kontinuität ermöglicht. Wenn ein Fehler gemeldet wird, stellt der Prozessor den Maschinenzustand vor Beginn der Ausführung der Fehleranweisung wieder her. Die Rücksprungadresse (gespeicherter Inhalt der CS- und EIP-Register) für den Fehlerbehandler zeigt auf den Fehlerbefehl und nicht auf den Befehl, der dem Fehlerbefehl folgt.

Beispiel: Ein Seitenfehler kann häufig behoben werden. Möglicherweise wurde ein Teil des Adressraums einer Anwendung vom RAM auf die Festplatte ausgelagert. Die Anwendung löst einen Seitenfehler aus, wenn sie versucht, auf den ausgelagerten Speicher zuzugreifen. Der Kernel kann diesen Speicher von der Festplatte auf den RAM ziehen und die Steuerung an die Anwendung zurückgeben. Die Anwendung wird dort fortgesetzt, wo sie aufgehört hat (bei der Fehleranweisung, die auf den ausgelagerten Speicher zugegriffen hat), aber diesmal sollte der Speicherzugriff ohne Fehler erfolgreich sein.

Abbrechen

Ein Abbruch ist eine Ausnahme, die nicht immer den genauen Ort der Anweisung angibt, die die Ausnahme verursacht, und keinen Neustart des Programms oder der Aufgabe zulässt, die die Ausnahme verursacht hat. Abbrüche werden verwendet, um schwerwiegende Fehler wie Hardwarefehler und inkonsistente oder unzulässige Werte in Systemtabellen zu melden.

Randfälle

Von der Software aufgerufene Interrupts (ausgelöst durch den INT-Befehl) verhalten sich wie eine Falle. Der Befehl wird abgeschlossen, bevor der Prozessor seinen Status speichert und zum Interrupt-Handler springt.


6
Dies ist eine so gute Antwort. Ich war mir sicher, dass die Überprüfungswarteschlange "Späte Antwort von einem neuen Benutzer" mir einen Test gab, um sicherzustellen, dass ich aufmerksam war.
Noumenon

1
Vielen Dank! Das bedeutet mir sehr viel :)
Ruthafjord

Dies ist eine großartige Antwort für x86. Die Frage war ursprünglich ziemlich allgemein und erwähnte x86 nicht. Ich habe eine Bearbeitung vorgenommen, um ein Gleichgewicht herzustellen. Vielleicht könnten Sie oben in dieser Antwort einen weiteren Absatz hinzufügen, um die Frage der Terminologie außerhalb der x86-Welt zu beantworten? Und / oder lassen Sie die Frage noch einmal bearbeiten, wenn Sie glauben, ich hätte es noch schlimmer gemacht: PI kennt x86 nur wirklich selbst, aber hoffentlich stimmt es, dass andere Systeme eine sehr ähnliche Terminologie verwenden, und das können Sie einfach sagen :)
Peter Cordes

1
Das PPC- Architekturbuch wurde überflogen, und es sieht so aus, als ob sich ihre Definitionen weitgehend überschneiden. Sie haben neue Namen für Randfälle und behandeln Ausnahmen wie einen Subtyp von Interrupts und nicht als Teil einer bestimmten Kategorie.
Ruthafjord

1
Ich denke, diese Antwort beschreibt es am besten. Es wird die verschwommene Linie besprochen, die zwischen den beiden bestehen kann. Und erwähnt, dass Seitenfehler dazu führen, dass die CPU einen Befehl erneut versucht, einen Trap überspringt den Befehl und fährt fort.
In70x

9

Im Allgemeinen Begriffe wie Ausnahmen, Fehler, Abbrüche, Traps und Interrupts bedeuten dasselbe und werden als "Interrupts" bezeichnet.

Kommen wir zum Unterschied zwischen Trap und Interrupt:

Trap: Ist eine vom Programmierer initiierte und erwartete Übertragung der Kontrolle an eine spezielle Handler-Routine. (Zum Beispiel: 80x86 INT- Anweisung ist ein gutes Beispiel)

Wohingegen

Interrupt (Hardware): Ist eine Programmsteuerungsunterbrechung, die auf einem externen Hardwareereignis außerhalb der CPU basiert (z. B. Drücken einer Taste auf der Tastatur oder einer Zeitüberschreitung auf einem Timer-Chip).


Gute Definitionen. Quelle?
Alexlomba87

6

Ein Trap ist eine spezielle Art von Interrupt, der üblicherweise als Software-Interrupt bezeichnet wird . Ein Interrupt ist ein allgemeinerer Begriff, der sowohl Hardware-Interrupts (Interrupts von Hardwaregeräten) als auch Software-Interrupts (Interrupts von Software wie Traps ) umfasst.


4
Es verwirrt die Sache noch mehr, dass einige Autoren (Tanenbaum) von "Hardware-Fallen" sprechen. Wenn wir Hardware-Traps und Software-Interrupts haben können, sind die Definitionen eindeutig ziemlich matschig und können in beide Richtungen gehen, wobei immer das Wort Hardware oder Software erforderlich ist.
The111

3

Ein Trap wird von codeähnlichen Programmen aufgerufen und z. B. zum Aufrufen von Betriebssystemroutinen (dh normalerweise synchron) verwendet. Ein Interrupt wird durch Ereignisse aufgerufen (häufig Hardware, wie die Netzwerkkarte, die Daten empfangen hat, oder der CPU-Timer) und unterbricht - wie der Name schon sagt - den normalen Steuerungsfluss, da die CPU zur Verarbeitung auf die Treiberroutine umschalten muss das Ereignis.


2

Ein Interrupt ist eine durch Hardware erzeugte Flussänderung innerhalb des Systems. Ein Interrupt-Handler wird gerufen, um die Ursache des Interrupts zu beheben. Die Steuerung wird dann auf den unterbrochenen Kontext und die Anweisung zurückgesetzt. Eine Falle ist ein durch Software generierter Interrupt. Ein Interrupt kann verwendet werden, um den Abschluss einer E / A zu signalisieren, um die Notwendigkeit einer Geräteabfrage zu vermeiden. Ein Trap kann verwendet werden, um Betriebssystemroutinen aufzurufen oder Rechenfehler abzufangen.


2

Ich denke, Traps werden durch die Ausführung der aktuellen Anweisung verursacht und daher als synchrone Ereignisse bezeichnet. Dabei werden Interrupts durch einen unabhängigen Befehl verursacht, der im Prozessor ausgeführt wird und sich auf externe Ereignisse bezieht und daher als asynchrone Ereignisse bezeichnet wird.


2

Interrupts sind Hardware-Interrupts, während Traps durch Software aufgerufene Interrupts sind. Das Auftreten von Hardware-Interrupts deaktiviert normalerweise andere Hardware-Interrupts, dies gilt jedoch nicht für Traps. Wenn Sie Hardware-Interrupts nicht zulassen müssen, bis ein Trap bereitgestellt wird, müssen Sie das Interrupt-Flag explizit löschen. Und normalerweise wirkt sich das Interrupt-Flag auf dem Computer auf (Hardware-) Interrupts im Gegensatz zu Traps aus. Dies bedeutet, dass das Löschen dieses Flags keine Fallen verhindert. Im Gegensatz zu Traps sollten Interrupts den vorherigen Status der CPU beibehalten.


1

Ein Trap ist ein Software-Interrupt. Wenn Sie ein Programm schreiben, in dem Sie eine Variable mit dem Wert dividiert durch Null deklarieren, wird sie als Trap behandelt. Wenn Sie dieses Programm ausführen, wird gleichzeitig derselbe Fehler ausgegeben. Der Systemaufruf ist a spezielle Version der Falle, in der ein Programm das Betriebssystem nach dem erforderlichen Dienst fragt. Im Falle eines Interrupts (ein allgemeines Wort für Hardware-Interrupts) wie eines E / A-Fehlers wird die CPU zu einem zufälligen Zeitpunkt unterbrochen, und natürlich ist dies nicht die Schuld unserer Programmierer. Es ist die Hardware, die sie aufruft.


1
Können Sie erklären, wie ein Systemaufruf eine Falle ist?
Radha Gogia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.