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.
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.