O prekinitvi govorimo takrat, ko mikroprocesor naredi nekaj, kar mu ni bilo naročeno, ker se je zgodilo nekaj, kar ni bilo predvideno za program. Prekinitve se najpogosteje zgodijo, ker procesor dobi signal iz strojne opreme, lahko pa tudi iz programske opreme, ki teče skupaj s programom. Med številnimi stvarmi, ki lahko povzročijo prekinitve, so pritiskanje tipk na tipkovnici, izklop vgrajenega časovnika, prenos podatkov ali kateri koli drug dogodek, ki zahteva takojšnje ukrepanje procesorja. Prekinitve se lahko zgodijo kadar koli, ko procesor izvaja program, ne glede na to, kje v izvorni kodi programa se nahajajo.

Kaj se zgodi, ko pride do prekinitve?

Ko pride signal za prekinitev, procesor običajno:

  • shrani svoj trenutni notranji stanje (registere, program counter) v pomnilnik ali na sklad,
  • poišče naslov posebne rutine (ISR - interrupt service routine), kjer je zapisana koda, ki obravnava to prekinitve,
  • izvede ISR, ki obdela dogodek (npr. prebere podatke iz vmesnika ali nastavi odgovor),
  • ob koncu ISR obnovi prej shranjeno stanje in nadaljuje izvajanje prekinjenega programa.

Ta zaporedja so zasnovana tako, da je prekinjeni program čim manj moten, vendar obdelava prekinitve zahteva nekaj časa in sredstev.

Vrste prekinitev

  • Strojne (hardware) prekinitve: jih sprožijo naprave izven procesorja — tipkovnica, miška, omrežna kartica, disk, časovnik ipd.
  • Programsko sprožene (software) prekinitve: jih sproži programska oprema, npr. sistemski klici, ukazi za generiranje prekinitve ali izjemne razmere v programu.
  • Izjeme in pasti (exceptions/traps): sinhrone prekinitve, ki nastanejo zaradi napak ali posebnih dogodkov pri izvajanju ukazov — npr. deljenje z nič, neveljaven ukaz, napaka pri pomnilniku (page fault).
  • Maskabilne in nemaskabilne prekinitve: maskabilne prekinitve je mogoče začasno onemogočiti (maskirati), medtem ko so nemaskabilne prekinitve (NMI) kritične in jih ni mogoče prezreti (npr. napaka strojne opreme).

Primeri in vsakdanja uporaba

  • Pritisk tipke na tipkovnici — naprava pošlje signal procesorju, ta pa prebere znak in ga da aplikaciji.
  • Časovnik sistemskega ure (timer tick) — operacijski sistem uporablja prekinitve časovnika za razporejanje nalog in merjenje časa.
  • Konec prenosa podatkov z diska ali omrežja — naprava obvesti CPU, da so podatki pripravljeni za branje.
  • Page fault — ko program dostopa do strani, ki ni v fizičnem pomnilniku, procesor sproži prekinitve, da OS uredi prenos strani iz diska.
  • Programsko generiran sistemski klic (npr. int v arhitekturah x86) za prehod v režim jedra in izvajanje privilegiranih operacij.

Lastnosti in upravljanje prekinitve

  • Prioriteta: v sistemih z več viri prekinitve imajo posamezne vrste prioritetne nivoje; višjo prioriteto imajo pomembnejši dogodki.
  • Gnezdenje (nesting): nekateri sistemi dovoljujejo, da se med izvajanjem enega ISR sproži drug (višje prioritete), kar zahteva dodatno upravljanje stanja.
  • Seznam vektorjev: mnoge arhitekture uporabljajo tabelo prekinitvenih vektorjev, kjer je za vsako prekinitve shranjen naslov ustrezne obravnave.
  • Latenca: čas od trenutka sprožitve prekinitve do začetka njene obravnave. Zmanjševanje latence je ključno pri realnočasovnih sistemih.

Interrupt-driven I/O vs. Polling in DMA

Obravnava vhodno-izhodnih naprav lahko poteka na več načinov:

  • Polling: CPU redno preverja stanje naprave in ugotavlja, ali je potrebno ukrepati. To je preprosto, a neučinkovito, ker troši procesorski čas.
  • Interrupt-driven I/O: naprava pošlje prekinitveni signal, ko je treba ukrepati; CPU se odzove samo ob dogodku, kar je učinkovitejše kot polling.
  • DMA (Direct Memory Access): pametnejše naprave lahko neposredno prenašajo podatke v pomnilnik brez stalne vključenosti CPU; ob koncu prenosa običajno pošljejo prekinitve za obvestilo.

Prednosti in slabosti uporabe prekinitev

  • Prednosti:
    • Učinkovitejša raba procesorskega časa (CPU dela, ko je potreben).
    • Boljša odzivnost na zunanje dogodke in boljša podpora za večsočasne dogodke.
  • Slabosti:
    • Vpelje kompleksnost v programsko in strojno opremo (upravljanje prioritet, zaščita stanja).
    • Prekinitev in obnavljanje stanja imata strošek; preveč prekinitev lahko zmanjša skupno zmogljivost.
    • Nepravilna obravnava v ISR lahko povzroči napake ali varnostne ranljivosti.

Praktični nasveti za razvijalce in uporabnike

  • ISR naj bo kratek in učinkovit — dolge operacije izvajajte v ozadinskih nalogah uporabniškega ali sistemskega nivoja.
  • Pri oblikovanju sistemov določite jasne prioritete prekinitvam in poskrbite za pravilno sinhronizacijo z deljenimi viri.
  • Uporabite DMA tam, kjer je mogoče, da zmanjšate število prekinitev pri velikih prenosih podatkov.
  • Pri odpravljanju napak uporabite logiranje in orodja, ki merijo latency in frekvenco prekinitev — to pomaga prepoznati ozka grla.

Na kratko: prekinitve so osnovni mehanizem za upravljanje asinhonih dogodkov v računalnikih. Procesorju omogočajo, da se ustrezno in hitro odzove na pomembne dogodke, obenem pa zahtevajo premišljeno oblikovanje strojne in programske opreme, da sistem ostane zanesljiv in učinkovit.