Interruptvektor
aus Wikipedia, der freien Enzyklopädie
Der Interruptvektor ist in einem Computersystem diejenige Programmadresse, an die beim Auftreten eines Interrupts gesprungen wird. Dort steht die Interrupt Service Routine ISR, die den Interrupt beantwortet. Jede Interruptquelle hat einen eigenen Interruptvektor, um mit einer jeweils unterschiedlichen ISR die spezifische Reaktion auf den Interrupt ausführen zu können. Eine spezieller Interruptvektor ist der Resetvektor
[Bearbeiten] Interruptvektortabelle
Der Ort, von dem die Interruptvektoren gelesen werden, ist bei jedem Prozessortyp unterschiedlich und genau festgelegt. Meistens sind die Vektoren in einer Tabelle im RAM-Speicher untergebracht, was eine größere Flexibilität bei der Manipulation der Sprungadressen erlaubt. Es gibt aber auch Prozessoren, bei denen die Interruptvektoren fest verdrahtet sind (z.B. bei PICmicro), oder Systeme wo während des Interrupt-Acknowledge-Zyklus der Vektor aus einem Peripheriebaustein geholt wird.
Die Interruptvektortabelle eines größeren Betriebssystems ist eine zentrale Struktur, die vor unerlaubtem Zugriff gut geschützt sein muss. Beim x86 Prozessor liegt die Interruptvektortabelle im Real Mode an der Adresse 0000:0000 und hat 256 Einträge zu je 32-bit (CS,IP). Im Protected Mode kann die Tabelle an eine beliebige Stelle im Adressbereich gelegt werden und enthält bis zu 256 Interrupt Descriptoren, die neben der Sprungadresse noch weitere Informationen und Prioritätsangaben enthalten. Die Interruptvektortabelle enthält auch die Exceptionvektoren, deren Sprungadresse bei unerlaubten Prozessorzuständen oder bei Rechenfehlern gelesen und angesprungen wird.
[Bearbeiten] Resetvektor
Der Hardware Reset ist ein spezieller nicht maskierbarer Interrupt, der ein laufendes Programm unterbricht und gleichzeitig die Register zurücksetzt. Auch für ihn gibt es einen Vektor, den Resetvektor. Es ist diejenige Programmadresse, an die nach dem Power On Reset bzw. Hardware Reset gesprungen wird. Da direkt nach dem Reset noch keine RAM Inhalte zur Verfügung stehen, ist der Resetvektor immer im Festwertspeicher ROM des Systems abgelegt. Beim x86 ist dies die Adresse F000:FFF0 (Real Mode CS=F000,IP=FFF0). Bei anderen Prozessoren ist es oft die Adresse 0 (0x0000).
[Bearbeiten] Verschiedenes
Für jeden nicht-maskierten Interrupt muss ein Interruptvektor und eine ISR existieren, sonst wird beim Auftreten des Interrupts eine ungültige Adresse angesprungen. Daher ist es eine der ersten Aktionen des Betriebsssystems nach Reset, die Interruptvektortabelle aufzubauen und die Service Routinen zu installieren, um anschließend die Interrupts zu erlauben.
Beim Fehlstart der ersten Ariane-V Rakete, die kurz nach dem Start außer Kontrolle geriet und gesprengt werden musste, war ein fehlender Interruptvektor für einen Arithmetiküberlauf und die dazu fehlende ISR in der Software für das Versagen der Steuerung verantwortlich.