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.