Prekinitveni način strežbe (servisiranja)



Pri tem načinu procesor izvaja le svoj (glavni) program. Njegovo izvajanje začasno odloži le ob nastopu prekinitve.

Prekinitev (an. interrupt) je dogodek, ko zunanja naprava ali program v določenih okoliščinah  zahteva od CPE določen izračun oziroma izvedbo določenega servisnega podprograma za določen dogodek. Takrat procesor začasno prekine izvajanje tekočega programa ter izvede pripravljeni servisni podprogram te naprave. Ko konča, nadaljuje z izvajanjem glavnega programa na tistem mestu, kjer je bil prej  prekinjen - glavni program naj "ne ve", da se je kaj zgodilo. Z mehanizmom prekinitev se torej ustrezni strežni program izvede le takrat, ko je to potrebno.



Iz življenja...
Slika: Koncept prekinitev je vzet iz vsakdanjega življenja. Animiran prikaz...

Prekinitveni način strežbe prispeva k boljšemu izkoristku procesorjevega časa, zahteva pa nekaj dodatne strojne podpore (dodatni, prekinitveni vhodi, prekinitveni krmilnik, dekodiranje prioritete).

Prekinitev je asinhron dogodek – nastopi lahko kadarkoli. Ne "ozira" se na to, kaj trenutno počne izvajani program. Prekinitvena zahteva lahko nastopi kadarkoli. CPE namreč ob koncu vsake ukazne periode testira prekinitveni vhod zaradi morebitne zahteve po prekinitvi.

Ko mikroprocesor zazna prekinitveni signal, mora najprej poskrbeti, da shrani trenutno stanje pomembnih registrov (programskega števca, splošnih registrov, zastavic),  da bo lahko po zaključku prekinitve nemoteno nadaljeval prekinjeni program. Stanje registrov se ob vsaki prekinitvi shrani v določen del delovnega pomnilnika, v sklad (an. stack).

Za sklad je značilen mehanizem LIFO (an. First In Last Out) -  podatki se »nalagajo« eden za drugim -  shranjujejo se v zaporedne lokacije - v istem vrstnem redu, kot prihajajo. Branje pa je obratno: najprej se prebere podatek, ki je bil shranjen nazadnje. Podatek, ki je bil vstavljen prvi, bo prebran nazadnje.
Ko je delovno okolje procesorja shranjeno v sklad, začne procesor izvajati prekinitveni podprogram, ki je namenjen za obdelavo nastale prekinitve.

Ko je prekinitveni podprogram končan, procesor iz sklada prebere podatke o svojem stanju pred prekinitvijo, ter nadaljuje prekinjeni program. Ker je med shranjenimi  podatki  tudi  vrednost programskega števca ob prekinitvi, se bo program zdaj nadaljeval prav tam - pri ukazu, pri katerem ukazu je bil procesor prekinjen.


Več…

Kje so shranjeni prekinitveni podprogrami? Kako procesor pride do njih?
Prekinitveni podprogrami so shranjeni nekje v pomnilniku, kamor so bili zapisani ob nastajanju (prevajanju) programa. Kako do njih? Na točno določenem mestu v pomnilniku, npr. na nekaj končnih lokacijah pomnilnika, se pri prevajanju zapišejo naslovi lokacij, kjer se začenjajo prekinitveni podprogrami za posamezno prekinitev.  Tako je na prvem takšnem naslovu zapisan naslov začetnega ukaza  prekinitvenega podprograma za prvo prekinitev, na drugem takšnem naslovu je zapisan naslov, kjer se začne podprogram za drugo prekinitev, na tretjem naslov začetka za tretjo prekinitev. Tem "rezerviranim" naslovom  pravimo prekinitveni vektorji.

Prekinitveni vektor je naslov pomnilniške lokacije oz. lokacija sama, v kateri je shranjen začetni naslov prekinitvenega strežnega programa.

Kolikor je virov prekinitev, toliko mora biti tudi prekinitvenih vektorjev.

Prekinitveni vektorji - pomnilnik  
Slika: Prekinitveni vektorji, podprogrami, pomnilnik


Slika prikazuje način podpore prekinitev v pomnilniku. Prekinitveni vektorji so shranjeni na končnih naslovih tega pomnilnika. Prekinitveni vektorji so 16-bitni, zato moramo prebrati po dve lokaciji.
Na naslovih $FFFC in $FFFD (skupaj tvorita prekinitveni vektor 2) je naslov začetka prekinitvenega podprograma 2.

Ob prekinitvi 2 (naprave z IRQ2)  procesor prebere prekinitveni vektor 2, torej vsebino na naslovih  $FFFC in $FFFD.
Vsebina je $7E56 in predstavlja naslov, na katerem je začetek podprograma za prekinitev 2.
Tam se začne izvajanje prekinitvenega podprograma.
Pred tem se seveda shrani delovno okolje prekinjenega programa (registri...).