Werden Interrupts verwendet, um anzuzeigen, dass die Ausgabe bereit ist oder die Eingabe abgeschlossen ist?

671
Tim

Betriebssystemkonzepte sagt:

Während der E / A lösen die verschiedenen Gerätesteuerungen Interrupts aus, wenn sie betriebsbereit sind. Diese Unterbrechungen bedeuten

  • diese Ausgabe ist abgeschlossen oder
  • dass Eingabedaten verfügbar sind oder
  • dass ein Fehler erkannt wurde.

Werden Interrupts verwendet, um anzuzeigen, dass die Ausgabe bereit ist oder die Eingabe abgeschlossen ist?

Wenn nicht, müssen sie auf andere Weise bezeichnet werden?

Vielen Dank.

-2
Was soll die Eingabe überhaupt bedeuten? Interrupts sind Signale von jedem Gerät * an die CPU, * sie sagen also: "Ich habe Ihren Puffer an Speicherposition x auf Festplatte / Netzwerk / Papier geschrieben, Sie können ihn wieder für andere Zwecke verwenden". Auf der anderen Seite wäre "Ausgabe ist bereit" die CPU, die einem Gerät mitteilt "Bitte nehmen Sie die Daten an Position x und senden Sie sie auf Diskette / Netzwerk / Papier, und informieren Sie mich, sobald ich diesen Speicher wiederverwenden kann"; Diese Art der Signalisierung erfolgt nicht durch Interrupt, sondern durch IO-Ports Hagen von Eitzen vor 5 Jahren 1

2 Antworten auf die Frage

1
Jamie Hanrahan

Geräte können Interrupts verwenden, um alle Arten von Ereignissen zu signalisieren. Tatsächlich könnte jede Zustandsänderung des Geräts oder der Gerätesteuerung über einen Interrupt an die Host-CPU gemeldet werden. Es liegt an den Entwicklern der Gerätehardware und -firmware.

(Und, so könnte man hoffen, werden sie zumindest die Meinung des armen Kerls einholen, der den Treiber schreiben muss. Viel zu viele Geräte wurden ohne solche Eingaben entwickelt, was unpraktische, ineffiziente Treiberentwürfe erforderlich macht. In der Tat gab es solche In Fällen, in denen einige Funktionen eines Geräts nicht vollständig genutzt werden konnten, weil die Host-Schnittstelle des Geräts - zu der die Interrupt-Struktur gehört, aber nicht darauf beschränkt ist - ohne Kenntnis dessen, was im Treiber möglich ist und was nicht möglich ist, entwickelt wurde . Aber ich schweife ab.)

Das von Ihnen zitierte Material ist soweit richtig, aber es scheint mir eine sehr vereinfachende Ansicht zu sein.

Ich bin nicht sicher, wie "Ausgabe ist fertig" anders ist als "Ausgabe ist abgeschlossen". (Bereit, vom Druckerausgabefach abgeholt zu werden?) In ähnlicher Weise hören sich "Eingabedaten verfügbar" und "Eingabe abgeschlossen" für mich ziemlich nahe an der gleichen Sache. Sie implizieren jedoch wahrscheinlich eine andere erforderliche Arbeit des Fahrers. Für mich bedeutet "Eingabe abgeschlossen", dass sich die eingehenden Daten im Hostspeicher befinden und die E / A-Operation eines lokalen Threads abgeschlossen werden kann, während "Eingabedaten verfügbar" wahrscheinlich bedeuten würde, dass der Treiber sie immer noch vom Gerät entfernen muss Schnittstelle zu einem In-Memory-Puffer.

Das ist aber nur Semantik. Als Treiber für das Schreiben von Treibern müssen Sie die Spezifikationen der Gerätehostschnittstelle sorgfältig lesen, um herauszufinden, was mit einem bestimmten Interrupt wirklich gemeint ist und was Sie dagegen tun sollen. Manchmal müssen Sie sogar den Firmware-Code lesen oder das Logikdiagramm studieren. (Ist das ein kanten- oder pegelgesteuerter Flip-Flop? Die Geräteingenieure haben manchmal die seltsamsten Vorstellungen! Aber ich schweife noch mal ab ...)

Für ein etwas komplexeres Beispiel betrachten Sie eine Kommunikationsschnittstelle mit einem FIFO. Im Allgemeinen möchten wir übermäßige Interrupts für den Host vermeiden. Zum Beispiel ist ein Interrupt pro Paket wahrscheinlich zu viel. Unser Gerät könnte es uns also ermöglichen, eine Reihe von Puffern mitzuteilen, die über eine "FIFO" (First-In, First-Out) -Schnittstelle übertragen werden sollen, und das Gerät sorgt dafür, dass alle auf dem Draht herausgefahren werden.

Aber wir wollen nicht unbedingt nur dann einen Interrupt, wenn alle Puffer fertig sind! Es wäre besser, wenn wir benachrichtigt würden, wenn der Puffer auf nur 20% oder 10% gefüllt war. Wenn wir eine solche Unterbrechung erhalten, setzen wir mehr Puffer in das FIFO (stoppen, wenn es voll ist, natürlich). Wenn wir nur einen Interrupt erhalten, wenn der FIFO leer ist, würde es eine kurze Verzögerung geben, bevor wir den nächsten Puffer für die Übertragung bekommen könnten, wodurch der Durchsatz reduziert wird. Wenn Sie uns eine Unterbrechung geben, wenn der FIFO "fast leer ist", können wir diese Verzögerung beseitigen.

1
Attie

Auf ihrer einfachsten Ebene werden Interrupts verwendet, um eine sehr einfache " hey! Check on me " -Meldung von einer Sache zur anderen zu übermitteln ...

Sie können sowohl Hardware sein (z. B. eine Spannung zeigt den Zustand an) als auch Software (z. B.: ein Benutzer drückt Ctrl+ C).

Einige Interrupts sind sehr wichtig und müssen sofort gewartet werden, während andere weniger wichtig sind und möglicherweise einige Zeit nicht gewartet werden.

Es ist unmöglich, alle Verwendungsmöglichkeiten von Interrupts aufzulisten, zum Teil weil neue Technologien neue Funktionen und höchstwahrscheinlich neue Gründe für Interrupts mit sich bringen.


Innerhalb einer integrierten Schaltung können häufig Interrupts mit ganz bestimmten Bedeutungen verwendet werden, zum Beispiel:

  • UARTs (z. B. serielle Ports)
    • Der Frame wurde empfangen. Dies kann bedeuten, dass der Host nun die Nutzdaten dieses Frames aus dem Register des Peripheriegeräts nehmen und speichern muss, bevor ein anderer Frame eintrifft, wodurch der erste überschrieben wird.
    • Frame wurde gesendet - Dies kann bedeuten, dass der Host nun frei ist, neue Daten in das Register des Peripheriegeräts einzusenden, wodurch ein weiterer Frame gesendet werden kann
  • Timer
    • PWM
      • Der Zähler hat die Obergrenze überschritten oder wurde überschritten, um ein PWM-Signal zurückzusetzen
      • Der Zähler hat seinen Vergleichswert erreicht - zum Einstellen eines PWM-Signals
    • Zeitplanung - Wird verwendet, um eine laufende Aufgabe zu löschen und eine andere zu planen
  • Divide by Zero - Etwas hat versucht, das Universum zum Implodieren zu bringen und wurde gestoppt ... Dieser Interrupt ermöglicht einige Aufräumaktionen oder Abhilfemaßnahmen (z. B. Beendigung einer Anwendung).

Wenn diskrete (separate) Komponenten miteinander kommunizieren müssen, kann ein Interrupt zur Entschlüsselung einige Interaktionen erfordern - hauptsächlich aufgrund der Anzahl von Interconnects und E / A-Pins, die andernfalls erforderlich wären. Zum Beispiel:

  • Eine Echtzeit - Uhr - Beim Empfang des Interrupts wird der Host eine seiner Register abzufragen, und möglicherweise feststellen, dass „ Alarm 2 “ ausgelöst wurde. Das Ergebnis davon hängt vom System ab.
  • Eine Soundkarte
    • Die Soundkarte verfügt möglicherweise über einen Puffer, mit dem der Host Audioblöcke erzeugen kann, die von der Karte unbeaufsichtigt abgespielt werden. Wenn dieser Puffer zur Neige geht, muss der Host mehr Daten bereitstellen, andernfalls wird der Puffer unterlaufen (ausgehen) ...
    • Wenn die Unterbrechung nicht rechtzeitig bedient wird, dann könnten Sie einen mir wiederholenden Schnipsel von Audio hören, wie gezeigt, hier durch einen erzwungenen Systemabsturz

Interrupts können oft von Software ignoriert und stattdessen von einem Direct Memory Access- Modul verarbeitet werden. Mit DMA kann die Software die Low-Level-Behandlung von Hardware ignorieren, z. B. die Benachrichtigung, wenn ein ganzes Paket eingetroffen ist, anstatt jedes Symbols.