Avbrott

Från Wikipedia
(Omdirigerad från Interrupt)

Avbrott (engelska interrupt) är en vital del i en mikroprocessors funktionalitet. Avbrott delas upp i två kategorier, dels mjukvaruavbrott vilka används för olika typer av emuleringar, dels hårdvaruavbrott som genereras av datorsystemets periferienheter. Avbrott är funktionellt besläktade med undantag vilka uppstår när mikroprocessorn detekterar feltillstånd i programvaran eller i hårdvaran.

Funktion[redigera | redigera wikitext]

När ett avbrott sker brukar mikroprocessorn byta stack till en speciell avbrottsstack för att undvika att minnet tar slut för det program som just då kör. För att komma ihåg vad den höll på med lagras innehållet i vitala register på avbrottsstacken. De register som sparas undan brukar inkludera statusord, stackpekare och programräknare. Beroende på vilken typ av avbrott det är så körs olika avbrottsrutiner vilka automatiskt slås upp i en avbrottstabell av mikroprocessorn. Denna avbrottstabell modifieras exempelvis när man installerar drivrutiner i sitt operativsystem.

Om mikroprocessorn stödjer flera avbrottsnivåer brukar den modifiera statusordet för att slippa få nya avbrott som är lika viktiga eller oviktigare. På så sätt får den jobba klart med avbrottsrutinen eller tills ett nytt avbrott som är viktigare inträffar.

När avbrottsrutinen är klar avslutar mikroprocessorn det hela med att återställa de på stacken undanlagrade registren. Det är avbrottsrutinens ansvar att lagra undan alla andra register som den använder sig av. När mikroprocessorn återställt alla register så fortsätter programmet som körde att köra som om ingenting har hänt sedan avbrottet inträffade.

Mjukvaruavbrott[redigera | redigera wikitext]

Mjukvaruavbrott genereras av speciella instruktioner som placerats in i programmen. Detta används exempelvis för att emulera att det finns en flyttalsprocessor. I princip är detta samma sak som ett feltillstånd eftersom en flyttalsinstruktion kan betraktas som ett fel om det saknas flyttalsdel i mikroprocessorn. Avbrottstabellen pekar då på avbrottsrutiner som utför flyttalsberäkningen och returnerar svaret som om en flyttalsdel fanns tillgänglig. Flyttalsemulering ger portabel programkod mellan datorsystem med och utan flyttalsdelar men har den nackdelen att det tar mycket längre tid för resultatet att beräknas.

En annan användning av mjukvaruavbrott är att sätta brytpunkter vid felsökning av mjukvara. När programmet når brytpunkten avbryts detta och istället väcks en felsökare, även kallad avlusare, upp.

Hårdvaruavbrott[redigera | redigera wikitext]

Hårdvaruavbrott genereras av periferienheter och beter sig i princip på samma sätt som mjukvaruavbrott. Skillnaden är att nu vill en extern eller intern enhet i datorsystemet att man skall skicka eller ta emot data. Detta måste ske inom en viss tid för att vara optimalt. Om man inte läser ut inkommande data tillräckligt fort riskerar det att skrivas över av ännu nyare data. Om man skickar ut data till en periferienhet är det vanligt att man konfigurerar denna att generera ett avbrott när den har skickat klart så man kan mata in mer data. Utan avbrott måste man kontrollera, eller polla, enheterna med jämna mellanrum vilket brukar anses dåligt eftersom det slösar på prestanda i datorsystemet.

I typiska mikroprocessorarkitektur skiljer man mellan maskerbara avbrott och icke-maskerbara avbrott (NMI). Genom en flagga eller en processorinstruktion kan processorn fås att ignorera de förstnämnda, medan ett NMI alltid avbryter programkörningen.

Se även[redigera | redigera wikitext]