Prekinitve in izjeme


Kaj so prekinitve?
Windows 2000 poznajo dve vrsti dogodkov, ki spremenijo potek izvajanja
ukazov.
Prekinitve(interrupts) in izjeme(exception).
Prekinitve so asinhroni dogodki, ki niso povezani s tem, kar procesor
trenutno izvaja. Prekinitve najpogosteje sprožijo vhodno/izhodne enote,
ura..... Lahko so omogočene ali pa onemogočene.
Izjeme pa so sinhroni dogodki, ki so povezani s trenutnim programom.
Primeri izjem: deljenje z nič, kršenje pomnilniškega prostora....
Obe vrsti prekinitev lahko sproži tako strojna oprema kot programska
oprema. "Bus error exception" je primer izjeme, ki jo je sprožila strojna
oprema. Deljenje z nič pa je primer izjeme, ki jo je sprožil program. Prav
tako lahko vzhodno/izhodna naprava sproži prekinitev ali pa samo jedro
(kernel) sproži prekinitev (APC ali DPC).
Pod pastjo razumemo mehanizem, s
katerim procesor ob pojavi prekinitve ali izjeme ujame tekočo nit in preskoči
iz uporabniškega v sistemski režim ter skoči na izvajanje kode na neki
vnaprej definirani lokaciji.
Delovanje prekinitev in izjem?
Ko se zgodi dogodek, ki povzroči prekinitev izjemo ali pa klic sistemskega
servisa, prevzame nadzor rokovalnik pasti(trap handler). Le ta začasno
prepove nove prekinitve. Tvori okvir pasti (trap frame), v katerega shrani
stanje prekinjene niti in omogoči prekinitve. Glede na vrsto zahteve, ki
je povzročila klic rokovalnika pokliče ustrezen modul. Če je bila vzrok
prekinitev potem pokliče prekinitveni distributor. V primeru sistemskega
klica prepusti nadzor sistemskemu distributorju. V primeru ostalih pasti
pa prepusti izvajanje distributorju izjem.
Aparaturne prekinitve
Distributor prekinitev, ki je del rokovalnika
pasti se torej odziva na prekinitve. Distibutor najprej ugotovi izvor prekinitve
in potem prenese nadzor v zunanjo rutino ki potem servisira prekinitev
ali pa v notranjo kernel rutino. Zunanjo rutino morajo zagotavljati gonilniki
naprave, notranje rutine pa zagotavlja kernel sam.
Različni procesorji prepoznajo različno veliko in raazlične tipe prekinitev.
Kernel definira tabelo IRQL (interrupt request
level). V tej tabeli so urejene prekinitve po prioriteti. Višja
prekinitev ima višjo prioriteto. Procesor ima svoj kazalec IRQL, ki kaže
v to tabelo in se spreminja glede na prekinitve. Prekinitve, ki ležijo
pod tem kazalcem so onemogočene, dokler se kazalec IRQL ne pomakne navzdol.
Podobno vlogo, kot jo ima pri nekaterih drugih operacijskih sistemih
prekinitveni
vektor, igra pri Win 2000 distribucijska tabela prekinitev
IDT
(Interrupt Dispatch Table). IRQL procesorja služi kot kazalec tudi v to
tabelo. IDT je struktura, na katero kaže processor control region(PCR).
Pri večprocesorskih sistemih imamo ločeno tabelo IDT.
Prekinitve za klice zamaknjenih procedur DPC (deferred procedure call)
 |
Periferne naprave povzročajo aparaturne prekinitve. Jedro
pa tvori programske prekinitve. Posebnost Win 2000 so prekinitve za klice
zamaknjenih procedur (DPC,
Deferred Procedure Call). DPC so sistemske funkcije, katerih izvedba ima
nižjo prednost kot obravnava aparaturnih prekinitev in lahko malo
počaka. Tipična uporaba DPC je v gonilnikih aparaturnih naprav. Pri teh
po vsaki aparaturni prekinitvi sistem v servisni rutini (ISR) samo shrani
stanje naprave, vse ostalo pa opravi ustrezna DPC (tudi ta v sistemskem
(kernel) načinu), ko bo računalnik za to našel čas. |
Sistem DPC je predstavljen z DPC objektom, kateri vsebuje naslov sistemske
funkcije, ki jo bo klical kernel, ko bo izvajal DPC prekinitev. DPC objekti
shranjeni v vrsti in čakajo, da se bo zgodila DPC prekinitev. V vrsto najpogosteje
nalagajo goniliniki naprav, ki se izvajajo z višjim IRQL-om procedure,
ki se lahko izvedejo kasneje. Ko IRQL pade pod nivo DPC kernel sam sproži
DPC prekinitev in zamaknjene procedure se začnejo izvajati v sistemskem
načinu.
Prekinitve za klice asinhronih procedur APC (asynchronous procedure
call)
 |
Podoben mehanizem so klici asinhronih
procedur (APC, Asynchronous
Procedure Call), ki jih lahko izvajamo bodisi v sistemskem, bodisi v uporabniškem
režimu.
V razliko od DPC se APC izvajajo v naslovnem
prostoru določene uporabniške niti. Uporabljamo jih na primer za
zaključek neke vhodno-izhodne operacije, ki jo je zahtevala neka aplikacija.
Sama koda tako ISR, kot DPC in APC je običajno del nekega gonilnika
naprave (device driver), podatkovni del, ki je spravljen (vsaj za DPC in
APC) v obliki ustreznega (DPC oziroma APC) objekta. |
APC zagotavljajo izvedbo code v kontekstu posamezne uporabniške
niti. Prav tako so predstavljene z APC objektom in čakajo na izvršitev
v APC vrsti. Za razliko od DPC, ki ima eno vrsto za cel sistem, ima vsaka
nit svojo APC vrsto. Ko zaprosimo za uvrstitev APC procedure v vrsto, kernel
sam uvrsti vrsto v nit, v kateri se bo izvajala. APC procedure lahko izvajamo
v uporabniškem ali pa sistemskem načinu. Največkrat se uporabljajo,
da se zapiše I/O informacija v pravo nit.
Programske prekinitve
 |
Če je do programske prekinitve prišlo v sistemskem režimu
(kernel mode), razvrščevalnik izjem (exception dispacher) enostavno pokliče
ustrezno rutino.
Če pa pride do izjeme v uporabniškem režimu, kliče ta razvrščevalnik
ustrezna vrata (debugger port ali exception port). Tako so na primer realizirane
prekinitvene točke (breakpoints) razhroščevalnikov. |

