Wat is Interrupt handler?

Verwerking die de CPU uitvoert wanneer een interrupt of exception optreedt. Slaat de toestand van de onderbroken verwerking op, handelt af wat bij de oorzaak hoort en keert terug naar de oorspronkelijke verwerking. Het uitgangspunt is de verwerking zo kort mogelijk te houden.

Japanse benaming: 割り込みハンドラ

Vakgebied: Besturingssysteem en hardware

Wat er gebeurt als een interrupt wordt geaccepteerd

Wanneer een device een interrupt geeft, maakt de CPU de huidige instructie af, slaat het adres op dat hij als volgende zou hebben uitgevoerd, samen met toestand zoals de bedrijfsmodus en de vlaggen, en springt naar de interrupt handler, ook interrupt service routine (ISR) genoemd, die meestal via een interruptvectortabel wordt gevonden. De handler bewaart de registers die hij gebruikt, handelt de oorzaak af, wist de interruptvlag van het device, herstelt de toestand en voert een return-from-interrupt-instructie uit. Het onderbroken programma gaat dan precies verder waar het stopte; het wordt niet weggegooid of opnieuw gestart.

Waarom handlers kort moeten zijn

Terwijl een handler draait, worden andere interrupts met dezelfde of een lagere prioriteit doorgaans tegengehouden en staat de hoofdcode stil, dus een lange handler verhoogt de latency voor al het andere. Trage aanroepen zoals printf zijn extra riskant, omdat ze tijd kosten en zelf van interrupts afhankelijk kunnen zijn. Een goede handler doet het minimum, zoals ontvangen data naar een buffer verplaatsen of een vlag zetten, en laat zware verwerking over aan de hoofdlus of een taak. Kernels van besturingssystemen formaliseren dit door het werk op te splitsen in een direct deel en een uitgesteld deel.

Data delen met de hoofdcode

Variabelen die een handler en het hoofdprogramma delen, veroorzaken klassieke bugs. Als de hoofdcode wacht op een vlag die alleen de handler zet, kan een optimaliserende compiler die één keer in een register laden en de wijziging nooit zien; door haar volatile te declareren gaat elke toegang naar het geheugen. Een read-modify-write zoals reg |= mask kan tussen het lezen en het schrijven worden onderbroken, waardoor een wijziging die de handler in een andere bit maakte verloren gaat. Kort interrupts uitschakelen of hardwarematige set- en clear-registers gebruiken voorkomt dit, en variabelen van meerdere bytes moeten worden beschermd tegen gedeeltelijk bijgewerkte (torn) reads.

Interrupts bij scheduling en watchdogs

Een periodieke timerinterrupt is wat een besturingssysteem in staat stelt de CPU terug te nemen van een programma dat nooit vrijwillig opgeeft, en maakt preëmptieve scheduling en contextwisselingen mogelijk. Interrupts zijn asynchrone gebeurtenissen van hardware, terwijl exceptions zoals page faults of delen door nul synchroon voortkomen uit de instructie die wordt uitgevoerd, al komen beide via vergelijkbare handlers de kernel binnen. Een veelgemaakte fout is een watchdogtimer onvoorwaardelijk resetten (kicken) binnen een timerinterrupt: de interrupt blijft komen, ook als de hoofdlus is vastgelopen, zodat de watchdog de fout nooit detecteert.

Veelgestelde vragen

Wat is het verschil tussen een interrupt handler en een ISR?

Er is geen echt verschil: interrupt service routine (ISR) is een andere naam voor de interrupt handler, de code die de CPU uitvoert als reactie op een interrupt.

Waarom moet een variabele die met een interrupt handler wordt gedeeld volatile zijn?

Zonder volatile kan de compiler aannemen dat de variabele binnen een lus niet verandert en haar in een register houden, zodat de hoofdcode de wijziging van de handler nooit ziet. Volatile dwingt af dat elke toegang het geheugen leest of schrijft.

Wat is het verschil tussen een interrupt en een exception?

Een interrupt is een asynchroon signaal van hardware, zoals een timer of randapparaat, dat los staat van de huidige instructie. Een exception wordt synchroon veroorzaakt door de instructie die wordt uitgevoerd, bijvoorbeeld een page fault of een ongeldige bewerking.

Vergelijkingen met deze term

Verwante termen

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

Naar de woordenlijst