|
Programm-Unterbrechungen
Häufig ist es notwendig, dem Computer zu einem beliebigen
Zeitpunkt von außen ein bestimmtes Verhalten aufzuzwingen, z. B. das Lesen eines Datenwertes nach dessen Eintippen am Terminal (besonders wichtig in der Prozess-Steuerung).Wenn das externe Ereignis relativ selten auftritt, wäre es sehr ineffektiv, den Rechner mit einem ständigen Terminal-Abfrageprogramm zu beschäftigen (Polling). Besser ist es, den Rechner in seiner Arbeit erst dann zu unterbrechen, wenn das externe Ereignis eintritt. Die Unterbrechung erfolgt durch ein an die CPU gesandtes Signal, die Unterbrechnungsanforderung (UA, interrupt request, IRQ), das die CPU veranlasst, das gerade laufende Programm zu unterbrechen und eine Befehlsfolge auszuführen, die auf die Unterbrechung reagiert (z.B. ein Datum von der Tastatur in den Speicher bringt) Programmunterbrechung (interrupt). Die bei der Unterbrechung zu startende Befehlsfolge ist das Unterbrechungs-Antwortprogramm (interrupt service routine, ISR). Nach dem Abarbeiten der ISR fährt der Rechner mit der Ausführung des unterbrochenen Programms fort. Auf gleiche Weise lassen sich Reaktionen des Computers auf andere seltene oder unvorhersehbare Ereignisse (z.B. Ausfall der Stromversorgung) behandeln. Als Reaktion auf eine Unterbrechungsanforderung geschehen zwei Dinge: - Retten des aktuellen Programmzustands: DerMaschinenstatus, d.h. der Inhalt der Register der CPU, muss festgehalten werden. Dies geschieht durch Wegspeichern der Registerinhalte des gerade unterbrochenen Programms ( Zustandsvektor).
- Laden der Register mit dem Zustandsvektor der ISR (z.B.
Startadresse der ISR): Der Zustandsvektor steht an einer
festgelegten Adresse im Speicher ( Interrupt-Vektor). Das
Programm wird nun ab der Startadresse der ISR fortgesetzt.
Die Unterbrechung darf nicht mitten in einer
Befehlsausführung erfolgen (undefinierter
Prozessorstatus!), sondern erst nachdem der gerade laufende
Befehl vollständig abgearbeitet ist, also am Ende des
Befehlszyklus (siehe Struktogramm). Nach Ende der ISR wird der
ursprüngliche Zustandsvektor wieder vom Stack geholt und
das Programm an der Unterbrechungsstelle fortgesetzt.
Während des Rettens des Programmzustands und des
anschließenden Ladens des Zustandsvektors der ISR darf
keine neue Unterbrechungsanforderung auftreten
(Zustandsinformation unvollständig!). Der Befehlssatz der
Prozessoren enthält daher spezielle Befehle zum Sperren und
Freigeben von Unterbrechungsanforderungen.
|
|
|