it-swarm.com.de

Was ist der Unterschied zwischen Trap und Interrupt?

Was ist der Unterschied zwischen Trap und Interrupt?

Wenn die Terminologie für verschiedene Systeme unterschiedlich ist, was bedeuten sie dann für x86?

135
David

Ein Trap ist eine Ausnahme in einem Benutzerprozess. Ursache ist eine Division durch Null oder ein ungültiger Speicherzugriff. Dies ist auch die übliche Methode, um eine Kernel-Routine aufzurufen (ein Systemaufruf ), da diese mit einer höheren Priorität als der Benutzercode ausgeführt werden. Die Bearbeitung erfolgt synchron (der Benutzercode wird ausgesetzt und anschließend fortgesetzt). In gewisser Weise sind sie "aktiv" - meistens erwartet der Code, dass die Falle passiert, und verlässt sich auf diese Tatsache.

Ein Interrupt wird von der Hardware generiert (Geräte wie Festplatte, Grafikkarte, E/A-Anschlüsse usw.). . Diese sind asynchron (d. H. Sie treten nicht an vorhersehbaren Stellen im Benutzercode auf) oder "passiv", da der Interrupt-Handler darauf warten muss, dass sie irgendwann 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 Stack-Zeiger werden gespeichert, es gibt eine Kontextumschaltung, die Ausführung kann in einigen Fällen fortgesetzt werden, wenn sie aufgehört hat). .

175
Aaron Digulla

Traps und Interrupts sind eng miteinander verwandt. Traps sind eine Art von Ausnahme, und Ausnahmen ähneln Interrupts.

Intel x86 definiert zwei überlappende Kategorien, vektorisierte Ereignisse ( Interrupts vs Ausnahmen) und Ausnahmeklassen ( Fehler vs Fallen 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 SDM-Kapitel zur Interrupt- und Ausnahmebehandlung zu lesen.

Vektorisierte Ereignisse

Vectored Events ( Interrupts und Ausnahmen) veranlassen den Prozessor, in einen Interrupt-Handler zu springen, nachdem ein Großteil des Prozessorstatus gespeichert wurde (genug, damit die Ausführung fortgesetzt werden kann Punkt später).

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.

Interrupts

Interrupts 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. Die Software kann auch Interrupts durch Ausführen des Befehls INT n erzeugen.

Ausnahmen

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

Ausnahmeklassifikationen

Ausnahmen werden je nach Art als Fehler, Fallen oder Abbrüche klassifiziert Sie werden gemeldet und geben an, ob der Befehl, der die Ausnahme verursacht hat, ohne Verlust der Programm- oder Taskkontinuität neu gestartet werden kann.

Zusammenfassung: Traps Inkrementieren Sie den Befehlszeiger, Fehler nicht, und Abbrüche 'explodieren'.

Falle

Ein trap ist eine Ausnahme, die unmittelbar nach der Ausführung der Überfüllungsanweisung gemeldet wird. Mit Traps kann die Ausführung eines Programms oder einer Aufgabe fortgesetzt werden, ohne dass die Programmkontinuität verloren geht. Die Rücksprungadresse für den Trap-Handler zeigt auf den Befehl, der nach dem Trap-Befehl ausgeführt werden soll.

Fault

Ein Fehler ist eine Ausnahme, die im Allgemeinen korrigiert werden kann und die nach einer Korrektur einen Neustart des Programms ohne Unterbrechung der Kontinuität ermöglicht. Wenn ein Fehler gemeldet wird, setzt der Prozessor den Maschinenzustand auf den Zustand vor Beginn der Ausführung des Fehlerbefehls zurück. Die Rücksprungadresse (gespeicherter Inhalt der CS- und EIP-Register) für den Fehlerbehandler zeigt auf die fehlerhafte Anweisung und nicht auf die Anweisung, die auf die fehlerhafte Anweisung 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 wieder an die Anwendung übergeben. Die Anwendung wird dort fortgesetzt, wo sie aufgehört hat (bei der fehlerhaften Anweisung, 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 die genaue Position der Anweisung angibt, die die Ausnahme verursacht hat, und die keinen Neustart des Programms oder der Task 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.

Edge Cases

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

84
ruthafjord

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

Auf den Unterschied zwischen Trap und Interrupt kommen:

Trap: Wird ein Programmierer initiiert und erwartet, dass die Steuerung an eine spezielle Handler-Routine übergeben wird? (Zum Beispiel: 80x86 INT Anweisung ist ein gutes Beispiel)

Wohingegen

Interrupt (Hardware): Handelt es sich um eine Programmsteuerungsunterbrechung aufgrund eines externen Hardwareereignisses außerhalb der CPU (Beispiel: Drücken einer Taste auf der Tastatur oder Zeitüberschreitung auf einem Timer-Chip).

8
Cheshar

Ein Trap ist eine spezielle Art von Interrupt, die ü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, z. B. - Fallen).

6
Paul R

Ein Trap wird von Code-ähnlichen Programmen aufgerufen und verwendet. E. G. OS-Routinen aufzurufen (d. h. normalerweise synchron). Ein Interrupt wird von Ereignissen (häufig Hardware wie die Netzwerkkarte, die Daten empfangen hat, oder der CPU-Zeitgeber) aufgerufen und unterbricht - wie der Name schon sagt - den normalen Steuerungsfluss, da die CPU zur Verarbeitung auf die Treiberroutine umschalten muss das Ereignis.

3
Frank

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 verbieten müssen, bis ein Trap bedient wird, müssen Sie das Interrupt-Flag explizit löschen. Und normalerweise wirkt sich das Interrupt-Flag auf dem Computer auf (Hardware-) Interrupts aus, nicht auf Traps. Das bedeutet, dass das Löschen dieses Flags keine Fallen verhindert. Im Gegensatz zu Traps sollten Interrupts den vorherigen Status der CPU beibehalten.

2
Anamik Sarvaiya

Ich denke, dass Traps durch die Ausführung von aktuellen Anweisungen verursacht werden und daher als synchrone Ereignisse bezeichnet werden. Wobei As-Interrupts durch einen unabhängigen Befehl verursacht werden, der im Prozessor ausgeführt wird und der mit externen Ereignissen zusammenhängt und daher als asynchrone Ereignisse bezeichnet wird.

2
chetan pawar

Ein Interrupt ist eine von der Hardware erzeugte Flussänderung innerhalb des Systems. Ein Interrupt-Handler wird aufgefordert, sich mit der Ursache des Interrupts zu befassen. Die Steuerung kehrt dann zu dem unterbrochenen Kontext und der unterbrochenen Anweisung zurück. Ein Trap ist ein durch Software erzeugter 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 zum Aufrufen von Betriebssystemroutinen oder zum Abfangen von Rechenfehlern verwendet werden.

2
Dinesh Reddy

Ein Trap ist ein Software-Interrupt. Wenn Sie ein Programm schreiben, in dem Sie eine Variable deklarieren, deren Wert durch Null dividiert ist, wird dies als Trap behandelt. Wenn Sie dieses Programm ausführen, wird derselbe Fehler zur selben Zeit ausgegeben. Ein Systemaufruf ist a spezielle version von trap, in der ein programm os nach dem erforderlichen service fragt. Im Falle eines Interrupts (ein allgemeines Wort für Hardware-Interrupts) wie einem E/A-Fehler wird die CPU zufällig unterbrochen und natürlich ist es nicht die Schuld unserer Programmierer. Es ist die Hardware, die sie aufruft.

1
Sanketssj5