2010-08-06 4 views
9

Bei der Eingabe eines intereupt-Handlers, "disable Interrupts" zuerst auf dieser CPU (mit etwas wie die CLI-Anweisung auf x86). Während der Zeit, in der Unterbrechungen deaktiviert sind, nehme man an, dass der Benutzer den Buchstaben "a" auf der Tastatur gedrückt hat, der normalerweise eine Unterbrechung verursachen würde. Aber da Interrupts deaktiviert ist, bedeutet das, dass:Was bedeutet das Deaktivieren von Interrupts?

  1. die Interrupt-Handler für ‚a‘ würde nie aufgerufen werden, da Interrupts deaktiviert im kritischen Abschnitt ist oder
  2. die Interrupt wird vom Betriebssystem behandelt werden, aber verzögert, bis die Interrupts wieder freigegeben sind. Muss der Benutzer "a" erneut drücken, wenn er "a" zum ersten Mal gedrückt hat, als Interrupts deaktiviert waren?

Antwort

5

Oft wird ein Interrupt von der Hardware "in die Warteschlange gestellt".

[Ein Interrupt ist oft nur ein logisches Gatter, das anbleibt; sobald es eingeschaltet ist, bleibt es für eine Weile eingeschaltet.]

Wenn der Benutzer einmal nur während des Intervalls, in dem Interrupts deaktiviert waren, 'a' schlug, wurde er als Interrupt registriert, wenn er wieder aktiviert wurde.

Wenn der Benutzer es irgendwie schaffte, zweimal 'a' während des Intervalls zu drücken, in dem Interrupts deaktiviert waren, würde man sich als Interrupt registrieren, wenn sie aktiviert waren. Ob es das erste oder das zweite war, hängt von der genauen Konfiguration des Logikgatters ab.

+1

das bedeutet, dass, wenn ich in der Lage wäre, zwei Tastaturbuchstaben schneller als die Zeit, die die CPU braucht, um den Interrupt zu behandeln, verloren gehen würde? Entschuldigung, dieses Thema wieder lebendig zu machen – Juan

+0

@Juan Das würde auf der Tastatur abhängen. Moderne Tastaturen haben einen kleinen Puffer, der Tastaturereignisse speichert, während Ihr Computer sie verarbeitet. Die meisten Tastaturen weisen Zeichen-Keypresses eine Position (X + Y) zu, um Bandbreite und Geld zu sparen, wobei einige Tastenkombinationen unter extremen Bedingungen, bei denen die CPU nicht mithalten kann, verhindert werden, einige Keyboards aber auch bestimmte Tasten senden individuell. Die meisten Keyboards senden zum Beispiel Modifier-Key-Events separat und manche Gaming-Keyboards machen das gleiche für die 'WASD'- und die Pfeiltasten. – YoYoYonnY

5

Die Antwort ist, dass es darauf ankommt, ob Sie bereits einen Tastatur-Interrupt bearbeitet haben.

Die meisten Interrupt-Service-Routinen (ISR) haben am Ende einen Code, der die Hardware darüber informiert, dass sie "gewartet" wurde. Im Fall des Tastatur-Controllers werden Befehle geschrieben, die die empfangenen Bytes bestätigen. Zum Zeitpunkt der Bestätigung unterbricht die Tastatursteuerungshardware die Verwendung von Elektrizität, um einen Unterbrechungszustand zu signalisieren.

Wenn Sie einen Nicht-Tastatur-Interrupt behandeln, sagen wir den Feueralarm-Interrupt, dann wird die Tastatur-Hardware, die den Interrupt elektrisch aktiviert, ausgelöst, wenn die Taste gedrückt wird. Das elektrische Signal wird ignoriert, bis die CPU die Interrupts wieder aktiviert hat. Am Ende der Wartung des Feueralarm-Interrupts bestätigt der Feueralarm-ISR alle Daten und aktiviert die Interrupts auf der CPU erneut. Sofort tritt die CPU in einen Interrupt ein, weil der Tastaturcontroller immer noch einen Interrupt-Zustand signalisiert.

Wenn Sie ein Tastatur-Interrupt sind Handling und die Benutzer schnell Typen einen Sekunden Tastendruckes während der Ausführung Ihrer Tastatur ISR, dann gibt es eine Chance, die Daten aus dem zweiten Tastendruck fehlt, oder es später zu empfangen, wenn überhaupt. Insbesondere, wenn der ISR den Tastaturcontroller durch eine Bestätigung zurücksetzt, aber der ISR tatsächlich nicht alle verfügbaren Bytes aus dem Tastaturcontroller empfangen hat, ist dies ein Problem.

Oft wird ein ISR zuerst den Interrupt behandeln, der seine Aktivierung ausgelöst hat, und dann nach Bestätigung des Interrupts das Gerät abfragen, um festzustellen, ob es seit dem ersten Interrupt mehr Daten empfangen hat. Wenn dies der Fall ist, generieren Sie einen Software-Interrupt, um den ISR erneut einzugeben und das Gerät zu warten.

0

Es wäre physikalisch unmöglich für einen Benutzer, zweimal "a" während der normalen Verarbeitung eines Interrupts zu drücken. Es wäre schrecklich unwahrscheinlich, selbst wenn er zwei Tasten gleichzeitig drückt, aber die Hardware sollte mindestens eine Taste halten, bis die CPU bereit ist, sie zu holen.

Auf PCs - das ist WEG zurück zu meinen PCXT Tage erreichen - das Tastatursubsystem kann im Bereich von 13 Tasten drücken für die CPU halten.

1

Die einfache Antwort ist, dass ein Interrupt automatisch weitere Interrupts deaktiviert. Interrupts sollten und sind nur für die kürzeste Zeit deaktiviert. Die erste Anweisung in der ursprünglichen AT BIOS-Tastatur ISR war STI, Interrupts zu aktivieren.

Die glückliche Antwort ist, dass die PIC die Interrupts Hardware priorisiert und auch mit Unterbrechungen nur die Timer-Interrupt IRQ0 aktiviert die Tastatur ISR unterbrechen. Natürlich kann ein NMI auf beide Arten auftreten, aber glücklicherweise geschieht dies nie auf einem aktuellen PC.

-2

Disable interupt haben unterschiedliche Beweise. 1. Hardwarefehler 2.Ausnahmen {zum Beispiel: Division durch Null} und ect.

  1. Wenn ein Hardwarefehler auftritt, muss das Betriebssystem eine Überblendung ausführen.
  2. Wenn die Ausnahmebedingung auftritt, muss os das System manipulieren und einen anderen Prozess für die Interruptbehandlung wechseln.

Oder zum Beispiel: für E/A-Gerät. Wenn der Interrupt nicht war, war der Computer nicht effizient!