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:)
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.
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.
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.
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
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
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 ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.