Wat is Interruptvectortabel?

Tabel met per type interrupt of exceptie het beginadres van de bijbehorende interrupt-handler. De CPU raadpleegt deze tabel met het nummer van de oorzaak om de startpositie van de verwerking te bepalen.

Japanse benaming: 割り込みベクタテーブル

“Interruptvectortabel” komt voor in 2 oefenvragen uit 1 onderwerpen, bijv. Besturingssysteem en hardware.

Vakgebied: Besturingssysteem en hardware

Hoe de CPU de tabel gebruikt

Wanneer een interrupt of exception wordt geaccepteerd, bepaalt de hardware een nummer, de vector, dat de oorzaak identificeert: een timer, een bepaald randapparaat, een page fault, een ongeldige instructie of een system call. De CPU slaat het adres van de volgende instructie en status zoals de bedrijfsmodus op, en gebruikt de vector dan als index in de interruptvectortabel, waarbij doorgaans de entry op basis + vector × entrygrootte wordt gelezen. Die entry bevat het startadres van de handler. De handler bewaart de registers die hij gebruikt, handelt de gebeurtenis af en voert een return-from-interrupt-instructie uit.

Waar de tabel staat

Architecturen verschillen in de details. Op Arm Cortex-M-microcontrollers staat de tabel aan het begin van het codegeheugen: het eerste woord is de initiële stackpointer, het tweede het adres van de reset handler, en latere woorden wijzen naar fault- en randapparaathandlers; op de meeste cores kan software haar verplaatsen via een vector table offset register (VTOR). In x86-real mode beslaat de tabel de eerste 1 KB van het geheugen met 256 entries van vier bytes, terwijl protected en long mode een interrupt descriptor table (IDT) gebruiken die via het IDTR-register wordt gevonden. RISC-V gebruikt het mtvec-register, dat alle traps naar één handler kan sturen of interrupts gevectoriseerd naar aparte adressen.

Instellen in embedded firmware

Op een microcontroller zonder besturingssysteem moet de vectortabel vanaf het moment van reset op het adres staan dat de hardware verwacht. De opstartcode definieert haar als een array van functiepointers in een eigen sectie, en het linkerscript plaatst die sectie op het vereiste flashadres. Typische opstartbestanden geven elke entry een weak default handler, vaak een oneindige lus, zodat de applicatie alleen de interrupts die ze gebruikt overschrijft door functies met overeenkomende namen te definiëren. Een verkeerd gespelde handlernaam compileert daardoor zonder fouten, maar stuurt de interrupt ongemerkt naar de standaardlus.

Vectortabel versus polling

Een gevectoriseerd schema stuurt elke oorzaak rechtstreeks naar de eigen handler, zodat de CPU geen statusregisters hoeft te lezen om te ontdekken wat er gebeurde, wat de interruptlatency verkort. Het alternatief is één ingangspunt waarvan de handler een oorzaakregister leest en in software doorverwijst, zoals de direct mode van RISC-V doet. Op een besturingssysteem voor algemeen gebruik vult de kernel de tabel bij het opstarten, zodat timerticks, device-interrupts, page faults en system calls elk de juiste kernelroutine bereiken.

Nu oefenen: vragen over Interruptvectortabel

Wat is de juiste rol van de interruptvectortabel?

  1. APer type bijhouden hoe vaak een interrupt is opgetreden
  2. BPer type interrupt of exception het adres vastleggen waar de verwerking begint
  3. CBijhouden in welke volgorde het volgende proces wordt uitgevoerd
Antwoord en toelichting tonen

Antwoord: B. Per type interrupt of exception het adres vastleggen waar de verwerking begint

Wanneer een interrupt of exception optreedt, krijgt de CPU het nummer (vectornummer) dat bij de oorzaak hoort, leest het beginadres van de handler uit de interruptvectortabel en draagt de verwerking daarheen over. De inhoud van de tabel wordt bij het opstarten door het besturingssysteem ingesteld zodat voor timer, apparaten, paginafouten en systeemaanroepen verschillende handlers kunnen worden aangeroepen. Het tellen van aantallen gebeurt met een ander mechanisme voor statistiek, en de volgorde van processen wordt door de scheduler van het besturingssysteem beheerd.

Veelgestelde vragen

Wat is een interruptvector?

Een interruptvector is het nummer dat aan een bron van interrupts of exceptions is toegekend en als index in de vectortabel wordt gebruikt. De term wordt ook losjes gebruikt voor de tabelentry zelf, die het adres van de handler bevat.

Waar staat de vectortabel op een ARM Cortex-M-microcontroller?

Standaard staat ze aan het begin van het bootgeheugen, meestal flash. De eerste entry is de initiële waarde van de stackpointer en de tweede de reset handler, en op de meeste cores kan het vector table offset register (VTOR) haar verplaatsen, bijvoorbeeld naar RAM.

Wat is het verschil tussen de IVT en de IDT op x86?

De interrupt vector table (IVT) is de real-mode-tabel van 256 segment:offset-adressen onderin het geheugen. De interrupt descriptor table (IDT) vervangt haar in protected en long mode, bevat descriptors met privilege-informatie en kan via het IDTR-register overal worden geplaatst.

“Interruptvectortabel” in de toelichting

Vragen met “Interruptvectortabel” (2)

  1. Wat is de juiste rol van de interruptvectortabel?
  2. Welk verloop van de verwerking is juist wanneer de CPU een interrupt accepteert?

Verwante termen

Interrupt Numerieke apertuur (NA) Apparaatstuurprogramma (device driver) ASID (address space identifier) Bevoorrechte modus (privileged mode) Contextwissel (context switch) Copy-on-write Demand paging Geneste paginering (nested paging) Hypervisor

Naar de woordenlijst