Avbrott är en signal som sänds ut av maskinvara eller programvara när en process eller händelse behöver omedelbar uppmärksamhet. Den varnar processorn för en högprioriterad process som kräver att den pågående arbetsprocessen avbryts. I I/O-enheter är en av bussens styrlinjer dedikerad för detta ändamål och kallas Interrupt Service Routine (ISR).
När en enhet utlöser ett avbrott vid låt oss säga process i, avslutar processorn först utförandet av instruktion i. Därefter laddar den programräknaren (PC) med adressen till den första instruktionen i ISR. Innan programräknaren laddas med adressen flyttas adressen till den avbrutna instruktionen till en tillfällig plats. Efter att ha hanterat avbrottet kan processorn därför fortsätta med process i+1.
Medans processorn hanterar avbrotten måste den informera enheten om att dess begäran har erkänts så att den slutar att skicka signalen för avbrottsbegäran. Dessutom ökar fördröjningen mellan den tidpunkt då ett avbrott tas emot och början av utförandet av ISR:n genom att registrena sparas så att den avbrutna processen kan återställas i framtiden. Detta kallas Interrupt Lattency.
Hårdvaruavbrott:
I ett hårdvaruavbrott är alla enheter anslutna till Interrupt Request Line. En enda förfrågningslinje används för alla n enheter. För att begära ett avbrott stänger en enhet sin tillhörande strömbrytare. När en enhet begär ett avbrott är värdet på INTR det logiska OR av begäran från enskilda enheter.
Händelseföljd vid hantering av en IRQ:
- Enheterna väcker en IRQ.
- Processorn avbryter det program som för tillfället körs.
- Enheten informeras om att dess begäran har uppmärksammats och enheten inaktiverar begäranssignalen.
- Den begärda åtgärden utförs.
- Avbrottet aktiveras och det avbrutna programmet återupptas.
Hantering av flera enheter:
När mer än en enhet ger upphov till en signal för avbrottsbegäran behövs ytterligare information för att avgöra vilken enhet som ska beaktas först. Följande metoder används för att avgöra vilken enhet som ska väljas: Polling, Vectored Interrupts och Interrupt Nesting. Dessa förklaras enligt följande nedan.
- Polling:
I polling är den första enheten som påträffas med med IRQ-biten inställd den enhet som skall betjänas först. Lämplig ISR anropas för att utföra servicen. Det är lätt att genomföra, men mycket tid går förlorad genom att förhöra IRQ-biten för alla enheter. - Vectored Interrupts:
I vectored interrupts identifierar en enhet som begär ett avbrott sig själv direkt genom att skicka en särskild kod till processorn via bussen. Detta gör det möjligt för processorn att identifiera den enhet som genererade avbrottet. Den speciella koden kan vara ISR:s startadress eller var ISR:n befinner sig i minnet, och kallas avbrottsvektor. - Interrupt Nesting:
Med denna metod organiseras I/O-enheten i en prioritetsstruktur. Därför erkänns avbrottsbegäran från en enhet med högre prioritet, medan begäran från en enhet med lägre prioritet inte erkänns. För att implementera detta kan varje process/enhet (även processorn). Processorn accepterar endast avbrott från enheter/processer som har högre prioritet än den.
Processorns prioritet kodas i några bitar i PS (Process Status Register). Den kan ändras genom programinstruktioner som skriver i PS. Processorn är i övervakat läge endast när den utför OS-rutiner. Den växlar till användarläge innan den exekverar tillämpningsprogram.
Attentionsläsare! Sluta inte att lära dig nu. Få grepp om alla viktiga CS Theory-koncept för SDE-intervjuer med CS Theory-kursen till ett studentvänligt pris och bli redo för industrin.