Katkestus on see, kui mikroprotsessor teeb midagi, mida ta ei tohi teha, sest juhtub asju, mis on väljaspool seda, mida programm peaks tegema. Katkestused toimuvad kõige sagedamini seetõttu, et protsessor saab signaali riistvaralt, kuid need võivad tulla ka koos programmiga töötavast tarkvarast. Paljud asjad, mis võivad katkestusi põhjustada, on näiteks klaviatuuril klahvide vajutamine, sisseehitatud taimer, andmeedastuse toimumine või mõni muu sündmus, mis vajab protsessorilt kohe tegevust. Katkestused võivad toimuda igal ajal, kui protsessor töötab programmi, olenemata sellest, kus programmi lähtekoodis see asub.
Mis täpselt toimub, kui tekib katkestus?
Üldiselt käib katkestuse töötlemine läbi järgmiste sammude:
- Sündmuse tuvastamine: katkestuse algataja (riist- või tarkvara) saadab signaali.
- Praeguse töö peatamine: protsessor lõpetab käimasoleva instruktsiooni (või katkestab selle ettenähtud kohas) ja salvestab praeguse oleku (programmi loendur, olulised registrid).
- Vektor ja handler: protsessor vaatab katkestusvektori tabelist välja katkestuse teenindusrutiini (ISR — Interrupt Service Routine) aadressi ja hüppab sinna.
- Teenindamine: ISR tuvastab ja vajadusel tühistab või kinnitab katkestuse algseadme ning teostab kiire töö (näiteks andmete lugemine puhvrist).
- Taastamine: kontixt taastatakse (registrid, programmitloendur) ja käimasolev programm jätkatakse.
Tüübid ja klassifikatsioon
- Riistvarakatkestused: pärinevad välisseadmetest (nt klaviatuur, võrgukaart, UART, DMA, taimer). Need edastab sageli eraldi katkestusjuht (PIC, APIC).
- Tarkvarakatkestused: tekitavad programmid ise — näiteks süsteemi kutsed (syscall), tarkvarased katkestused või vigade tekitajad (trap, fault).
- Maskitavad vs maskimatud: maskitavad katkestused saab ajutiselt blokeerida (disable), maskimatud (NMI — Non-Maskable Interrupt) on kriitilised ja neid ei saa ignoreerida.
- Vektoreeritud vs polled: vektoriga katkestuse korral on ISR aadress määratud; polled-lahenduses küsitakse katkestuse allikat handleris eraldi.
Miks kasutada katkestusi?
Efektiivsus: katkestuspõhine I/O vabastab protsessori püsivast päringust (polling), võimaldades teha muud tööd kuni sündmuseni. Reageerimisvõime: katkestused võimaldavad kiiret vastamist reaalajas nõudvatele sündmustele (nt taimer, turvaseadmed).
Praktilised näited
- Klaviatuur: vajutus tekitab riistvarakatkestuse, mis loeb vajutatud tähe ja asetab selle sisendpuhvrisse.
- Taimer: perioodiline taimerkatkestus võimaldab aja jagamist, ajaülesannete planeerimist või perioodiliste ülesannete käivitamist.
- UART/seriaal: sissetulevate andmete saabumisel tekitatakse katkestus, et neid kiirelt töödelda enne puhvri täitumist.
- DMA lõpetamine: seade teavitab, et andmeliigutus mälu ja seadme vahel on FINISh.
Kujundus- ja programmeerimisnõuanded ISR-ide kirjutamiseks
- Hoidke ISR lühike ja kiire — deferige raskem töö taustatöödele või ülesannetele.
- Salvestage ja taastage kõik kasutatud registrid — eelkõige need, mida ISR muudab.
- Ärge blokeerige pikki operatsioone ega kasutage ootel olevaid süsteemiutsendeid ISR-is (nt pikk I/O).
- Tuvastage ja tühistage katkestuse algallikas (acknowledge), vastasel juhul võib samale katkestusele järgnevalt tekkida lõputu kordus.
- Kaitske jagatud ressursse sünkroonimisvõtmetega (spinlockid, atomaartegevused) ning pange tähele võimalikke konkurentsitingimusi.
Tähelepanekud reaalajas ja latentsuse osas
Katkestuste latentsus (kui kiiresti süsteem ISR-i alustab) ja jitter (latentsuse varieeruvus) on reaalajas rakendustes olulised näitajad. Faktorid, mis neid mõjutavad:
- Protsessori ja katkestusjuhi arhitektuur (PIC vs APIC).
- Praegused prioriteedid ja kas katkestused on lubatud või peidetud.
- ISR-ide pikkus ja see, kas lubatakse pesastamist (nested interrupts).
Tavalised probleemid ja vead
- Unustatud katkestuse tühistamine -> katkestus tekib pidevalt uuesti.
- ISR-is kasutatud liiga palju ressursse -> suur latentsus teistele katkestustele.
- Vale registrite taastamine -> juhitavuse kaotus või juhuslikud vead.
Kokkuvõte
Katkestused on mikroprotsessori ja süsteemi toimimise oluline mehhanism, mis lubab kiiret ja tõhusat reageerimist välistele ja sisemistele sündmustele. Õige arhitektuuri, katkestuste juhtimise ja hästi kirjutatud ISR-ide abil saab saavutada kiireid ning usaldusväärseid lahendusi, eriti kui käsitletakse reaalajas nõudeid või intensiivset I/O-d.
