Wat is Interrupt?

CPU-mechanisme waarbij de lopende verwerking tijdelijk wordt onderbroken om op verzoek van bijvoorbeeld externe apparatuur voorrang te geven aan de bijbehorende afhandeling. Daarna keert de CPU terug naar de oorspronkelijke verwerking.

Japanse benaming: 割り込み

“Interrupt” komt voor in 26 oefenvragen uit 6 onderwerpen, bijv. Embedded systemen en firmware, Besturingssysteem en hardware, CPU en architectuur.

Vakgebied: CPU en architectuur

Wat er gebeurt bij een interrupt

Wanneer een device, timer of andere bron een interrupt geeft en die is ingeschakeld, slaat de CPU het adres van de volgende instructie op, samen met toestand zoals de privilegemodus en de interrupt-enable-bit, in daarvoor bestemde registers. Hij verkrijgt een vectornummer voor de oorzaak, leest het startadres van de handler uit de interruptvectortabel die het besturingssysteem heeft ingericht, en springt daarheen. De handler bewaart de registers die hij gebruikt, bedient het device, wist de interruptbron, herstelt de toestand en keert terug met een speciale instructie zoals mret of sret bij RISC-V, die modus en terugkeeradres atomair herstelt.

Interrupts, exceptions en polling

Interrupts zijn asynchroon: een timertick of netwerkpakket komt binnen, ongeacht welke instructie er wordt uitgevoerd. Exceptions zoals page faults, deling door nul of een bewuste systeemaanroep (ecall bij RISC-V) zijn synchroon en worden door een specifieke instructie veroorzaakt. Polling, waarbij de CPU herhaaldelijk de status van een device uitleest, is het alternatief voor interrupts. Interrupts zijn beter als gebeurtenissen zeldzaam zijn of de CPU moet slapen, maar elke interrupt kost het opslaan van toestand en een sprong, dus bij zeer hoge gebeurtenisfrequenties, zoals bij snelle netwerken, kan gebundelde polling efficiënter zijn.

Prioriteiten, maskering en latentie

Een interruptcontroller arbitreert tussen gelijktijdige verzoeken, vaak met een prioriteitsencoder, en bij nesting kan een interrupt met hogere prioriteit een handler met lagere prioriteit onderbreken, zoals bij de NVIC van Arm Cortex-M. Software kan interrupts maskeren, maar een non-maskable interrupt (NMI) is gereserveerd voor ernstige gebeurtenissen zoals niet-corrigeerbare geheugenfouten of watchdog-time-outs. De worst-case interruptlatentie wordt grotendeels bepaald door de langste sectie die met uitgeschakelde interrupts draait, dus besturingssystemen splitsen de afhandeling op in een kort, urgent deel en uitgesteld werk dat later met ingeschakelde interrupts wordt gedaan. PCI Express-devices geven interrupts via geheugenschrijfacties (MSI) in plaats van via aparte draden.

Valkuilen in embedded code

Handlers moeten kort zijn: geen printf of wachtlussen, alleen data naar een buffer verplaatsen of een vlag zetten voor de hoofdlus. Variabelen die met een handler worden gedeeld, moeten als volatile worden gedeclareerd, anders leest de compiler ze mogelijk maar één keer. Read-modify-write-bewerkingen zoals reg |= mask kunnen een bit verliezen die tussendoor door een handler is gewijzigd, en een 8-bitmicrocontroller die een 32-bitteller leest, kan half bijgewerkte bytes zien; interrupts kort uitschakelen lost beide op. Een periodieke timerinterrupt, bijvoorbeeld 16 MHz gedeeld door 16 en tellend tot 1000 voor 1 ms, levert de systeemtick.

Nu oefenen: vragen over Interrupt

Welke uitleg van het verschil tussen een interrupt en een exception is gangbaar?

  1. AEen interrupt wordt alleen door software veroorzaakt en een exception alleen door hardwareschakelingen
  2. BEen interrupt ontstaat door een externe oorzaak zoals een apparaat, en een exception als gevolg van het uitvoeren van een instructie
  3. CNa een interrupt kan niet naar het oorspronkelijke proces worden teruggekeerd, na een exception altijd wel
Antwoord en toelichting tonen

Antwoord: B. Een interrupt ontstaat door een externe oorzaak zoals een apparaat, en een exception als gevolg van het uitvoeren van een instructie

Een interrupt is (asynchroon) en ontstaat op een niet vooraf bekend moment door een externe oorzaak die los staat van de uitgevoerde instructie, zoals een voltooiingsmelding van een I/O-apparaat of een timer. Een exception is (synchroon) en ontstaat als gevolg van het uitvoeren van een bepaalde instructie, zoals deling door nul, een ongeldige instructie, een paginafout of een systeemaanroepinstructie. Na verwerking door de handler kan in beide gevallen vaak worden teruggekeerd naar het oorspronkelijke proces, dus het onderscheid wordt niet gemaakt op terugkeerbaarheid.

Welk verloop van de verwerking is juist wanneer de CPU een interrupt accepteert?

  1. AHet lopende programma wordt weggegooid en opnieuw vanaf het begin uitgevoerd
  2. BNa uitvoering van de interrupthandler wordt niet naar het oorspronkelijke programma teruggekeerd, maar wordt het volgende programma gestart
  3. CDe huidige positie en toestand worden opgeslagen, de interrupthandler wordt uitgevoerd en daarna wordt naar de opgeslagen positie teruggekeerd
Antwoord en toelichting tonen

Antwoord: C. De huidige positie en toestand worden opgeslagen, de interrupthandler wordt uitgevoerd en daarna wordt naar de opgeslagen positie teruggekeerd

Na het accepteren van een interrupt slaat de CPU het adres van de volgende uit te voeren instructie en toestand zoals de werkingsmodus op en gaat naar de interrupthandler die bijvoorbeeld door de interruptvectortabel wordt aangewezen. De handler slaat de benodigde registers op, voert de verwerking uit, herstelt de toestand en hervat het onderbroken programma op de plaats van onderbreking. Het programma wordt niet weggegooid of opnieuw gestart. Na de handler kan wel naar een ander proces worden overgeschakeld, maar dat is een beslissing van het besturingssysteem.

Veelgestelde vragen

Wat is het verschil tussen een interrupt en een exception?

Een interrupt is asynchroon en komt van buiten de instructiestroom, zoals van een timer of I/O-device. Een exception is synchroon en wordt veroorzaakt door het uitvoeren van een bepaalde instructie, zoals bij een page fault, een ongeldige instructie of een systeemaanroep.

Wat is een interruptvectortabel?

Dat is een tabel, ingericht door het besturingssysteem of de firmware, die elk interrupt- of exceptionnummer koppelt aan het startadres van de bijbehorende handler. De CPU gebruikt die om voor elke oorzaak naar de juiste routine te springen.

Waarom moet een interrupthandler kort worden gehouden?

Terwijl een handler draait, worden interrupts met dezelfde of lagere prioriteit meestal tegengehouden en staat het hoofdprogramma stil, dus een lange handler verhoogt de latentie voor al het andere. Zwaar werk wordt uitgesteld naar een taak of hoofdlus die met ingeschakelde interrupts draait.

“Interrupt” in de toelichting

Vragen met “Interrupt” (26)

  1. Welke uitleg van het verschil tussen een interrupt en een exception is gangbaar?
  2. Welk verloop van de verwerking is juist wanneer de CPU een interrupt accepteert?
  3. Waarom wordt bij terugkeer naar het oorspronkelijke programma na afhandeling van een interrupt of exception een speciale terugkeerinstructie (zoals sret en mret van RISC-V) gebruikt in plaats van een gewone terugkeerinstructie van een functie?
  4. Welke factor is in een systeem waarin realtime gedrag vereist is het meest geschikt als oorzaak van een grotere interruptlatentie (de tijd van het optreden van een interrupt tot het begin van de handler)?
  5. Een klok van 16 MHz wordt door een prescaler door 16 gedeeld en daarmee telt een timer; de timer is zo ingesteld dat bij elke 1000 tellen een interrupt optreedt. Wat is het interval tussen de interrupts?
  6. Bij een microcontroller waarbij interrupts een prioriteit kunnen krijgen, treedt een interrupt met hoge prioriteit op tijdens de uitvoering van de handler van een interrupt met lage prioriteit. Wat gebeurt er gewoonlijk (uitgaande van een instelling die nesten van interrupts toestaat)?
  7. Wat is het juiste gebruik van de WFI-instructie (Wait For Interrupt) van Arm-processors?
  8. Welk CPU-mechanisme onderbreekt tijdelijk de lopende verwerking en geeft voorrang aan de afhandeling van een verzoek van een extern apparaat en dergelijke?
  9. Welk mechanisme brengt gegevens rechtstreeks over tussen randapparatuur en geheugen zonder tussenkomst van de CPU?
  10. Wat bevat de programmateller (program counter, PC) van de CPU?
  11. Welke van de volgende is asynchroon, los van de uitvoering van instructies en op een niet vooraf bekend moment?
  12. Wat is de juiste rol van de interruptvectortabel?
  13. Door welk mechanisme kan het besturingssysteem op vaste tijden de CPU terugnemen van een programma dat de CPU niet uit zichzelf afstaat, om naar een ander proces over te schakelen?
  14. In veel besturingssystemen wordt het kernelgebied toegewezen aan een deel (bijvoorbeeld het hoge bereik) van de adresruimte van elk proces, en wordt toegang vanuit de gebruikersmodus met de beveiligingsbit van de paginatabel verboden. Wat is het belangrijkste voordeel van deze indeling?
  15. Welke uitleg over NMI (non-maskable interrupt) is juist?

Vergelijkingen met deze term

Verwante termen

Numerieke apertuur (NA) Microcontroller (MCU) Via Interruptvectortabel RTOS (real-time besturingssysteem) DMA (direct memory access) Bevoorrechte modus (privileged mode) Prescaler Polling Copy-on-write

Naar de woordenlijst