Mikroprotsessori katkestus (interrupt) — riist- ja tarkvaralised sündmused
Avasta mikroprotsessori katkestus (interrupt): kuidas riist- ja tarkvaralised sündmused toimivad, põhjused, tüübid ja reaalajas käsitlemine — praktiline juhend arendajale.
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.
See diagramm näitab, mis juhtub, kui katkestust kutsutakse
Kuidas katkestused töötavad
Riistvara- või tarkvarakutsega katkestuse (tuntud kui katkestusnõue ehk IRQ) tegeleb protsessori "katkestuse käitleja" või "katkestuse teenindusrutiin" (ISR). See paneb selle, mida ta parajasti teeb, korstnasse ja seejärel järgib teatavaid käske, mis teevad süsteemi nimel teatud ülesannet, mis ei pea olema osa programmist, mida ta teeb. Kui ISR on juhiste järgimise lõpetanud, võtab ta selle, mis ta virna pani, tagasi ja jätkab seda, mida ta tegi enne katkestuse toimumist.
Paljud tänapäeva protsessorite katkestusjuhtimisseadmed kasutavad katkestusvektorit, et sorteerida katkestusi muu hulgas selle järgi, kust see tuli. Vektor sisaldab tavaliselt koodi, mis tuleb käivitada, kui katkestus toimub. ISR-id vastutavad tavaliselt katkestuse käsitlemise ehk "teenindamise" eest koos enda töökorras hoidmisega.
Katkestuste kasutamine
- Ülesannete käivitamine korrapäraste ajavahemike järel
- Välise seadme hooldamine, mis võib toimuda igal ajal
- Kaotada vajadus sünkroonse küsitluse järele
- Operatsioonisüsteemi (OS) käivitamine meetmete võtmiseks
Küsimused ja vastused
K: Mis on katkestus?
V: Katkestus on mikroprotsessori tegevus, mis ei ole osa täidetavast programmist, mis on tingitud välistest sündmustest.
K: Mille tõttu tekivad protsessoris kõige sagedamini katkestused?
V: Kõige sagedamini tekivad katkestused protsessoril riistvaralt saadavate signaalide tõttu.
K: Kas katkestusi võib põhjustada tarkvara?
V: Jah, katkestusi võib põhjustada ka tarkvara, mis töötab paralleelselt täidetava programmiga.
K: Loetlege mõned näited sündmustest, mis võivad katkestust põhjustada.
V: Näited sündmustest, mis võivad katkestust põhjustada, on klaviatuuri klahvide vajutamine, taimerite käivitumine ja andmeedastuse toimumine.
K: Kas katkestus sõltub sellest, kus programmi täidetakse?
V: Ei, katkestused võivad tekkida igal ajal programmi täitmise ajal, sõltumata sellest, kus programm on oma lähtekoodis.
K: Kas katkestus on mikroprotsessori jaoks soovitav sündmus?
V: Katkestused on tavaliselt mikroprotsessori jaoks ebasoovitavad sündmused, kuna need häirivad programmi täitmist ja nõuavad kohest tähelepanu.
K: Kuidas mikroprotsessor reageerib katkestusele?
V: Mikroprotsessor peatab ajutiselt käimasoleva programmi täitmise ja täidab katkestuse teenindusrutiini (ISR) katkestuse käsitlemiseks enne tagasipöördumist käimasoleva programmi juurde.
Otsige