Pertraukimas — tai momentas, kai mikroprocesorius atkreipia dėmesį į įvykį ir atlieka veiksmus, kurių jam nebuvo nurodyta vykdant dabartinę programą. Dažniausiai pertraukimai įvyksta, kai procesorius gauna signalą iš aparatinės įrangos, tačiau juos gali inicijuoti ir programinė įranga (pvz., sistemos kvietimai arba specialūs programiniai pertraukimai). Tarp dažniausių priežasčių yra klaviatūros klavišų paspaudimas, integruoto laikmačio suveikimas, duomenų perdavimas per įvesties/išvesties įrenginį arba bet koks kitas įvykis, dėl kurio procesorius turi tuoj pat imtis veiksmų — pertraukimai gali įvykti bet kuriuo metu, kai vykdoma programa, nesvarbu, kurioje programos šaltinio kodo vietoje ji yra.
Pertraukimo tipai
- Aparatiniai (hardware) pertraukimai — siunčiami iš fizinių įrenginių (pvz., klaviatūros, tinklo plokštės, laikmačio).
- Programiniai (software) pertraukimai — inicijuojami programos (pvz., sistemos kvietimas arba speciali instrukcija).
- Išimtys (exceptions) — specialūs pertraukimai, sukelti procesoriaus klaidų ar būklių (pvz., dalybos iš nulio, puslapio klaida).
- NEIšvengiami (non-maskable) pertraukimai — kritiniai signalai, kurių negalima užmaskuoti; ir maskuojami pertraukimai, kuriuos galima laikinai išjungti.
Kaip mikroprocesorius apdoroja pertraukimus — pagrindiniai žingsniai
- Procesorius aptinka pertraukimo signalą (sinchroninį arba asinchroninį).
- Užbaigia šiuo metu vykdomą instrukciją arba, priklausomai nuo architektūros, operaciją gali nutraukti beveik iš karto.
- Išsaugo būseną (programos skaitiklį, statuso registrus ir svarbias registrų reikšmes) — tai vadinama konteksto išsaugojimu.
- Nustato tinkamą pertraukimo tvarkytojo (angl. interrupt service routine, ISR) adresą, dažnai naudojant pertraukimo vektorių lentelę.
- Perjungia į pertraukimo tvarkytoją ir įvykdo jį (dažniausiai trumpas, konkrečias užduotis atliekančias kodus).
- Po tvarkytojo darbo siunčiamas signalas, kad pertraukimą baigta (End of Interrupt, EOI), atkuriamas kontekstas ir procesorius tęsia anksčiau vykdytą programą.
Svarbūs aspektai ir terminai
- Prioritetai ir lizdavimas (nesting) — kai keli pertraukimai gali įvykti vienu metu, procesorius naudoja prioritetus; kai kuriomis sistemomis tvarkytojai gali būti "lizduojami" (gali būti pertraukiami aukštesnio prioriteto įvykių).
- Latencija — laikas nuo signalo iki pertraukimo tvarkytojo pradžios. Kritinėse realaus laiko sistemose reikia mažos latencijos.
- Pertraukimų vektorius — lentelė, kurioje saugomi pertraukimo tvarkytojų adresai; ji leidžia greitai nukreipti į atitinkamą tvarkytoją.
- ISR geros praktikos — tvarkytojai turi būti trumpi, neturi blokuoti ilgai veikiančių operacijų ir paprastai tik signalizuoja aukštesniam lygmeniui (pvz., operacinei sistemai) atlikti sunkesnes užduotis.
- Pertraukimai prieš tikrinimą (polling) — alternatyva pertraukimams yra periodinis įrenginių tikrinimas (polling). Pertraukimai paprastai efektyvesni ir reaguoja greičiau, kai įvykiai yra reti arba nereguliarūs.
Praktiniai pavyzdžiai
- Klaviatūros klavišo paspaudimas siunčia pertraukimo signalą, kad sistema galėtų nuskaityti klavišo kodą ir įvesti simbolį į programą.
- Laikmačio pertraukimai naudojami operacinėse sistemose planuoti užduotis (scheduling) arba skaičiuoti laiką.
- Pertraukimai praneša apie duomenų perdavimo pabaigą (pvz., UART, tinklo ar DMA) — tai leidžia efektyviai tvarkyti įvestį/išvestį be nuolatinio tikrinimo.
- Programiniai pertraukimai naudojami kaip sistemos kvietimai (syscalls) — programos iškviečia operacinės sistemos paslaugas specialiomis instrukcijomis.
Naudotojo ir programuotojo pastabos
- Programuotojams svarbu tinkamai valdyti pertraukimus: užtikrinti, kad ISR būtų trumpi, saugoti ir atkurti reikalingus registrus, vengti ilgai trunkančių operacijų ISR kontekste.
- Operacinės sistemos naudoja pertraukimus kaip pagrindą įvykių valdymui, įrenginių tvarkyklėms ir kontekstų keitimui tarp procesų.
- Sistemos inžinieriai turi atsižvelgti į prioritetus, galimą pertraukimų kiekį ir latenciją projektuodami realaus laiko ar energijos taupymo sistemas.
Apibendrinant, pertraukimai yra pagrindinis mechanizmas, leidžiantis mikroprocesoriui reaguoti į išorinius ir vidinius įvykius greitai ir efektyviai — tai būtina tiek kasdienėms periferijų sąveikoms, tiek sudėtingesniems operacinių sistemų sprendimams.
