Wanneer een processor een interrupt in behandeling heeft, betekent dit dat een interruptverzoeksignaal is ontvangen maar nog niet is afgehandeld. Dit is wat de processor doorgaans doet:
1. Bevestiging onderbreken (indien van toepassing): De processor kan een bevestigingssignaal terugsturen naar de onderbrekende inrichting, waarmee wordt bevestigd dat deze het verzoek heeft ontvangen. Dit hangt af van de specifieke interruptarchitectuur (bijvoorbeeld vectorinterrupts vs. polling).
2. Procedure voor het onderbreken van de afhandeling: De processor voert een specifieke procedure uit om de interrupt af te handelen. Dit omvat doorgaans de volgende stappen:
* Context opslaan: De processor slaat de huidige status van het actieve programma op. Dit omvat zaken als de waarden van registers, de programmateller (die de volgende uit te voeren instructie aangeeft) en mogelijk andere statusvlaggen. Dit zorgt ervoor dat wanneer de interruptafhandeling is voltooid, het oorspronkelijke programma de uitvoering naadloos kan hervatten vanaf het punt waar het was gebleven.
* Vectoring onderbreken (vaak): De processor bepaalt welke interrupthandlerroutine moet worden uitgevoerd. Dit wordt vaak gedaan met behulp van een interruptvectortabel. Elke vermelding in deze tabel verwijst naar het geheugenadres van de code die een bepaald type interrupt afhandelt. De interruptvector wordt bepaald op basis van de bron of het type van de interrupt.
* Interrupt Handler uitvoeren: De processor springt naar het adres dat is opgegeven door de interruptvector en voert de juiste interruptserviceroutine (ISR) of interrupthandler uit. Deze code voert de noodzakelijke actie uit om op de interrupt te reageren (bijvoorbeeld gegevens van een apparaat lezen, een timer bijwerken, een toetsenbordaanslag afhandelen).
* Context herstellen: Nadat de ISR is voltooid, herstelt de processor de opgeslagen context uit stap 2. Dit omvat het opnieuw laden van de registers, programmateller en statusvlaggen.
* Terug na onderbreking: Een speciale instructie (bijvoorbeeld `IRET` in x86) wordt uitgevoerd om de controle terug te geven aan het onderbroken programma. De processor hervat de uitvoering vanaf de instructie onmiddellijk volgend op het punt waarop de interrupt plaatsvond.
3. Interruptieprioriteit (indien van toepassing): Als er meerdere interrupts in behandeling zijn, kan de processor deze prioriteren op basis van de toegewezen prioriteitsniveaus. Interrupts met een hogere prioriteit kunnen voorrang krijgen op interrupts met een lagere prioriteit. Het exacte mechanisme voor het afhandelen van meerdere interrupts varieert afhankelijk van de processorarchitectuur.
4. Masker onderbreken (optioneel): De processor kan mogelijk specifieke interrupts maskeren (uitschakelen). Dit voorkomt dat bepaalde interrupts de uitvoering van het huidige programma of een andere interrupthandler onderbreken. Dit is vaak handig om conflicten te voorkomen of ervoor te zorgen dat kritieke taken niet worden onderbroken.
In wezen zorgt een lopende interrupt ervoor dat de processor zijn huidige taak tijdelijk opschort, de interrupt afhandelt en vervolgens de oorspronkelijke taak hervat. Hierdoor kan het systeem tijdig en efficiënt reageren op externe gebeurtenissen. |