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.
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.
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...).