Verständnisfrage Interrupts

OP #4968439
Hallo allerseits,
ich habe eine generelle Frage zum Thema Interrupt Handling. An einem 
Standard-PC wird ja bekanntlich nicht zu jedem Zeitpunkt der Status 
jeder einzelner Tastatur-Taste abgefragt, da dies ernorm viel Ressourcen 
erfordern würde.
Soweit ich weiss generiert eine Taste einen Interrupt falls sich ihr 
Status ändert (gedrückt ja/nein). Doch wie werden diese Ereignisse vom 
Rechner verarbeitet? Es muss doch trotzdem zyklisch überprüft werden, ob 
welche Interrupts vorliegen und welches davon Priorität hat, oder? Gibt 
es eine Bezeichnung für diese Frequenz, bzw. für diesen Code-Abschnitt 
in einem Programm?

Vielen Dank & einen angenehmen Samstagabend:)
Gast
Die Tastatur wird nicht vom PC gescannt.
Dafür ist ein eigener Controller in der Tastatur.
Daten kommen bei PS/2 über eine Serielle Schnittstelle und lösen einen 
Interrupt aus.
Die Daten sind Make oder Break-Code
mit folgendem Tastencode ob die Taste gedrückt oder losgelassen wird.

Bei USB läuft das ähnlich nur wird hier periodisch vom Hostcontroller 
gefragt ob was passiert ist.
Gast
bei USB gibt jedes Gerät an, mit welcher Frequenz/Intervall ein Gerät 
nach neuen Daten gefragt werden soll.

Der Vorgang nennt sich polling.

Es gibt bei USB aber auch echte CPU Interrupts - z.B. dann wenn der HOST 
Controller fertig mit der Datenübertagung ist. Das pollen kann ein USB 
HOST Controller auch automatisch machen und nur dann einen Interrupt 
auslösen, wenn wirklich Daten im Puffer sind oder wenn der Puffer voll 
ist - das kommt auf den HOST Controller an.
Lys A. schrieb:
> Hallo allerseits,
> ich habe eine generelle Frage zum Thema Interrupt Handling. An einem
> Standard-PC wird ja bekanntlich nicht zu jedem Zeitpunkt der Status
> jeder einzelner Tastatur-Taste abgefragt, da dies ernorm viel Ressourcen
> erfordern würde.
Richtig, aber mit der Tastatur beschäftigt sich der Tastaturcontroller, 
der hat Zeit dafür, nicht der Hauptprozessor.

> Soweit ich weiss generiert eine Taste einen Interrupt falls sich ihr
> Status ändert (gedrückt ja/nein). Doch wie werden diese Ereignisse vom
> Rechner verarbeitet? Es muss doch trotzdem zyklisch überprüft werden, ob
> welche Interrupts vorliegen und welches davon Priorität hat, oder? Gibt
> es eine Bezeichnung für diese Frequenz, bzw. für diesen Code-Abschnitt
> in einem Programm?
>
> Vielen Dank & einen angenehmen Samstagabend:)
Der Tastaturcontroller registriert den Tastendruck, speichert den in der 
Tastaturwarteschlange und löst einen Hardwareinterrupt aus, ob dieser 
unmittelbar verarbeitet wird hängt vom Anwendungsprogramm ab.

Schau die Kombination Strg.+Alt.+Entf. löst einen Interrupt aus der auf 
0xfffe in der Interrupttabelle zeigt, zu Zeiten von MS-Dos lag da 
einfach der Warmstartvektor, daher wurde unmittelbar ein Reboot 
ausgelöst. Windows lädt diese Stelle der Tabelle mit einem Vektor der 
den Taskmanager startet.
Lys A. schrieb:
> Es muss doch trotzdem zyklisch überprüft werden, ob
> welche Interrupts vorliegen und welches davon Priorität hat, oder?

Yep. Aber das passiert in Hardware. Bei einfachen Prozessoren wie AVR 
jeweils zwischen den Befehlen. Bei PCs ist es etwas komplizierter, aber 
ebenfalls spezialisierte Hardware im Prozessor.

Es gibt also keinen Programmabschnitt, der irgendwas abfragt. Wenn ein 
Signal "Interrupt" vorliegt, dann reagiert besagte Hardware und leitet 
den Befehlsstrom gezielt um.
Gast
Lys A. schrieb:

> Doch wie werden diese Ereignisse vom
> Rechner verarbeitet? Es muss doch trotzdem zyklisch überprüft werden, ob
> welche Interrupts vorliegen

Nein, genau das ist dein Denkfehler. Interrupts werden eben NICHT 
"zyklisch geprüft". Interrupts sind nicht notwendigerweise zyklisch und 
sie werden insbesondere auch nicht "geprüft".

Sie passieren einfach, und zwar zu jedem beliebigen Zeitpunkt, eben 
genau dann, wenn das Ereignis passiert, welches durch sie gemeldet 
werden soll.
Gast
Danke für die zahlreichen Beiträge. Jetzt bin ich noch mehr verwirrt :)
Es war mir einfach nicht klar, wie ein und derselber Prozessor ein 
Programm ausführen kann und währenddessen von Interrupts unterbrechen 
werden kann.

Ich lese mich gerade durch die Labview-Dokumentation durch; es gibt dort 
tatsächlich Event-Interrupt Strukturen, die von bestimmten externen 
Signalen ausgelöst werden, z.B. wenn ein Analogeingang einen 
vordefinierten Spannungsbereich verlässt.
Lys An schrieb:
> Ich lese mich gerade durch die Labview-Dokumentation durch; es gibt dort
> tatsächlich Event-Interrupt Strukturen, die von bestimmten externen
> Signalen ausgelöst werden, z.B. wenn ein Analogeingang einen
> vordefinierten Spannungsbereich verlässt.

Äpfel und Birnen. Labview ist kein Prozessor. Und das was Labview als 
"Interrupt" bezeichnet, hat nahezu nichts mit "richtigen" Interrupts auf 
der Hardware-Ebene zu tun.

Auf der Software-Ebene nennt man das üblicherweise "ereignisgesteuerte 
Programmierung". Siehe auch Wikipedia:

https://de.wikipedia.org/wiki/Ereignis_%28Programmierung%29
Gast
Lys An schrieb:
> es gibt dort
> tatsächlich Event-Interrupt Strukturen

Ja, die funktionieren aber tatsächlich so wie du dir das vorgestellt 
hast, indem z.B. eine Spannung überwacht, also ständig abgefragt wird. 
"Echte" Interrupts werden dagegen durch Hardware ausgelöst, z.B. wenn 
ein UART ein Zeichen empfangen hat, damit hat die CPU garnichts zu tun, 
erst wenn sie den Interrupt akzeptiert und die Interruptroutine 
ausführt.

Georg
Persönliche Seite
Lys An schrieb:
> Es war mir einfach nicht klar, wie ein und derselber Prozessor ein
> Programm ausführen kann und währenddessen von Interrupts unterbrechen
> werden kann.

Dafür gibt es den Stack ... Wenn ein Interrupt passiert, werden die 
Prozessor-Register, die der Interrupt verändert zusammen mit einer 
Rücksprungadresse (=wo die CPU vorher war, als der Interrupt passierte) 
auf dem Stack gespeichert. Der Interrupt wird ausgeführ und anschließend 
wird alles so restauriert, wie es vor dem Interrupt war und zur 
Programmstelle gesprungen, als der Interrupt passierte.

Bei x86ern mittlerweile wesentlich komplexer als das, aber das Prinzip 
an sich hat sich nicht verändert ...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.