Interrupt er et signal, der udsendes af hardware eller software, når en proces eller en hændelse kræver øjeblikkelig opmærksomhed. Det advarer processoren om en proces med høj prioritet, der kræver en afbrydelse af den aktuelle arbejdsproces. I I/O-enheder er en af buskontrollinjerne dedikeret til dette formål og kaldes Interrupt Service Routine (ISR).
Når en enhed udløser en afbrydelse ved lad os sige proces i, afslutter processoren først udførelsen af instruktion i. Derefter indlæser den programtælleren (PC) med adressen på den første instruktion i ISR’en. Før programtælleren indlæses med adressen, flyttes adressen på den afbrudte instruktion til en midlertidig placering. Derfor kan processoren efter håndtering af afbrydelsen fortsætte med proces i+1.
Mens processoren håndterer afbrydelserne, skal den informere enheden om, at dens anmodning er blevet anerkendt, så den holder op med at sende signalet for afbrydelsesanmodning. Desuden øges forsinkelsen mellem det tidspunkt, hvor en afbrydelse modtages, og starten på udførelsen af ISR’en, ved at gemme registrene, således at den afbrudte proces kan genoptages i fremtiden. Dette kaldes Interrupt Lattency.
Hardware Interrupts:
I en hardwareinterrupt er alle enhederne forbundet til Interrupt Request Line. Der bruges en enkelt request line til alle n enheder. For at anmode om en afbrydelse lukker en enhed sin tilknyttede switch. Når en enhed anmoder om en interrupt, er værdien af INTR den logiske OR af anmodningerne fra de enkelte enheder.
Hændelsessekvens ved håndtering af en IRQ:
- Enhederne rejser en IRQ.
- Processoren afbryder det program, der er under udførelse.
- Enheden får besked om, at dens anmodning er blevet anerkendt, og enheden deaktiverer anmodningssignalet.
- Den ønskede handling udføres.
- Interrupt er aktiveret, og det afbrudte program genoptages.
Håndtering af flere enheder:
Når mere end én enhed afgiver et interruptanmodningssignal, er der behov for yderligere oplysninger for at afgøre, hvilken enhed der skal tages i betragtning først. Følgende metoder anvendes til at afgøre, hvilken enhed der skal vælges: Polling, Vectored Interrupts og Interrupt Nesting. Disse forklares som følger nedenfor.
- Polling:
I polling er den første enhed, der er mødt med med IRQ-bit sat, den enhed, der skal betjenes først. Den relevante ISR kaldes for at servicere den samme. Det er let at implementere, men der går meget tid tabt ved at spørge om IRQ-bitten for alle enheder. - Vectored Interrupts:
I vectored interrupts identificerer en enhed, der anmoder om en afbrydelse, sig selv direkte ved at sende en særlig kode til processoren over bussen. Dette gør det muligt for processoren at identificere den enhed, der genererede afbrydelsen. Den særlige kode kan være ISR’ens startadresse eller det sted, hvor ISR’en er placeret i hukommelsen, og kaldes interruptvektoren. - Interrupt Nesting:
I denne metode er I/O-enheden organiseret i en prioritetsstruktur. Derfor genkendes interruptforespørgsel fra en enhed med højere prioritet, hvorimod anmodning fra en enhed med lavere prioritet ikke genkendes. For at implementere dette skal hver proces/enhed (selv processoren). Processoren accepterer kun afbrydelser fra enheder/processer, der har en højere prioritet end den.
Processorens prioritet er kodet i et par bits i PS (Process Status Register). Den kan ændres ved hjælp af programinstruktioner, der skriver i PS. Processoren er kun i overvåget tilstand, mens den udfører OS-rutiner. Den skifter til brugertilstand, før den udfører applikationsprogrammer.
Opmærksom læser! Du må ikke stoppe med at lære nu. Få fat i alle de vigtige CS Theory begreber til SDE interviews med CS Theory Course til en elevvenlig pris og bliv klar til industrien.