Was passiert, wenn Sie Interrupts deaktivieren, und was machen Sie mit Interrupts, mit denen Sie nicht umgehen können?

StackOverflow https://stackoverflow.com//questions/10671048

Frage

Wenn Sie Interrupts deaktivieren (mit dem cli anleitung in x86), was genau passiert?

  • Wartet das Bild darauf, dass Sie Interrupts einschalten und den Interrupt auslösen, wenn dies geschieht?(Wenn ja, wie lange wartet es und was passiert, wenn die Zeit abläuft?)

  • Wird der Interrupt - aus Sicht des Geräts - ohne Antwort in ein "schwarzes Loch" geschickt?

  • Sagt das BILD dem Gerät irgendwie, dass "die CPU ausgelastet ist" oder so?

  • Oder passiert etwas anderes?

Wie gehen Sie auch mit einer Unterbrechung um, mit der Sie nicht umgehen können?
Gibt es eine Möglichkeit, dem BILD (oder dem Gerät, wenn Sie nicht wissen, was das Gerät ist) mitzuteilen: "Ja, ich habe Ihre Nachricht erhalten, aber ich weiß nicht, was ich damit anfangen soll"?

War es hilfreich?

Lösung

Der 8259a PIC wartet auf das INTA-Signal von der CPU.Die CPU sendet es, wenn sie mit der Behandlung des Interrupts beginnt, indem sie die Steuerung an den entsprechenden ISR überträgt.Welcher ISR?Der PIC gibt den Interrupt-Vektor an die CPU weiter, die im IVT / IDT nach der Adresse sucht und Sie kennen den Rest.Der PIC liefert den Interrupt-Vektor erst, wenn er INTA empfängt.

Der 8259a PIC hat nur eine Einwegkommunikation mit E / A-Geräten.Sie können ihm sagen, dass sie einen Interrupt haben, der gewartet werden muss.

Im BILD liegt also alles in der Luft, wenn die CPU nicht auf Interrupts reagiert.Geräte können jedoch nach Belieben Unterbrechungsanforderungssignale deaktivieren und dann erneut bestätigen.Ich weiß nicht, welche das tun.Ich weiß auch nicht, welche Zeitanforderungen für die Unterbrechungswartung bestehen.

Wenn Sie nicht an Interrupts aus einer bestimmten Quelle interessiert sind, können Sie sie einfach maskieren und erhalten keine.Wenn Sie einen Interrupt ausführen, aber nicht wissen, wie Sie ihn verarbeiten sollen, können Sie dem BILD einfach mitteilen, dass Sie damit umgegangen sind.Dies kann das unterbrochene Gerät in einem "eingefrorenen" Zustand belassen und auf unbestimmte Zeit auf die Wartung warten.Dies kann auch dazu führen, dass das Gerät sein Interrupt-Anforderungssignal hoch hält, was ein Problem darstellt, wenn Sie Interrupts im pegelgesteuerten Modus ausführen - Sie erhalten kontinuierlich Interrupts.

Andere Tipps

Die Interrupts werden immer noch ausgelöst, aber die CPU hört nicht zu.Wenn du wieder anfängst zuzuhören (sti), ist das Signal immer noch da und wird bei der ersten Gelegenheit wirksam.

Ein PC-PIC hat mehrere Ebenen von Interrupts, und ich glaube, es kann einen aktiven Interrupt für jede Prioritätsstufe enthalten.Es wird jeden von ihnen behalten, bis die CPU ihm mitteilt, dass die entsprechende Behandlung abgeschlossen ist.Wenn Interrupts für einen längeren Zeitraum deaktiviert sind, wird dies wahrscheinlich unterbrochen, also tun Sie das einfach nicht!

Das für einen Interrupt verantwortliche Gerät erhält während des Wartens keine Antwort - was sowieso eine Art Antwort ist.Wenn es nicht warten kann, kann es zu einem Fehlerzustand kommen, den die CPU sehen wird, wenn es irgendwann kommt.

Sie erhalten nur die Interrupts, die Sie explizit aktiviert haben, sodass es keine Überraschungen geben sollte.Der Gerätetreiber, der einen Interrupt einschaltet, weiß besser, wie er damit umgehen soll.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top