Antworten:
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.
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 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 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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.