Was ist der Unterschied zwischen Trap und Interrupt?
Wenn die Terminologie für verschiedene Systeme unterschiedlich ist, was bedeuten sie dann auf x86?
Was ist der Unterschied zwischen Trap und Interrupt?
Wenn die Terminologie für verschiedene Systeme unterschiedlich ist, was bedeuten sie dann auf x86?
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). .
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
Ausnahmen
Ausnahmeklassifikationen
Zusammenfassung: Traps erhöhen den Anweisungszeiger, Fehler nicht und brechen ab 'explodieren' ab.
Falle
Fehler
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
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.
quelle
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:
Wohingegen
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle