Spoznali bomo pomemben mehanizem, ki omogoča pisanje in izvajanje sodobnih operacijskih sistemov, interakcijo med perifernimi napravami računalnika z njegovo centralno procesno enoto, pa tudi pomoč operacijskega sistema aplikativnim programom. Vse to se sicer dogaja na strojnem nivoju, navadnemu programerju pa je to dogajanje skrito, čeprav ga posredno uporablja.
Prekinitve in pasti pozna danes praktično vsak računalnik,
programerji pa se s tem, vsaj na višjem nivoju, neposredno ne srečajo. Sodobni
računalniki imajo danes navezane različne periferne naprave. Vemo tudi, da
lahko na enem računalniku hkrati teče po več programov. Kako je to možno, če pa
imamo pogosto en sam programski števec (kazalec na naslednji ukaz)?
Trik je deloma podoben delovanju podprogramov. Za podprograme smo rekli, da se
pri klicu podprograma (torej zaporedja ukazov, ki ga sestavljajo) naš program
za hip prekine. Po koncu podprograma pa se nadaljuje na mestu prekinitve, kot
da se ne bi nič zgodilo.
|
Stop
start
CPE |
Če ima računalnik več perifernih naprav, lahko vsaka od teh zahteva, da
ji računalnik prisluhne in torej izvede "njeno" zaporedje ukazov.
Temu , "njenemu" zaporedju ukazov pravimo "prekinitvena servisna
rutina". Pravkar izvajani program mora torej prekiniti in ga lahko
nadaljuje šele, ko je dano periferno napravo "servisiral".
Bistvena razlika s podprogrami je v tem, da program "ne ve", kdaj bo
prekinjen. Torej mora za to, da se bo lahko kasneje nadaljeval, kot da nič ni
bilo, poskrbeti tisti, ki ga prekine. To pa je CPE, ki dobi zahtevek po
prekinitvi od dane periferne naprave.
Tako pri podprogramih kot pri prekinitvah je postopek v računalniku podoben: na
sklad se začasno shrani trenutna vrednost programskega števca, pa tudi vsebine
delovnih registrov, ki jih uporablja podprogram oziroma prekinitvena rutina.
Demonstracija strojne prekinitve:
|
Poženi program. Kadarkoli med izvajanjem programa klikni
na simulirano tipkovnico. |
Zanimivo je, da zna računalnik periferijam tudi preprečiti, da ga "motijo" s svojimi zahtevki. Praktično vsi računalniki poznajo ukaz "Enable interrupt" (EI) oziroma "Disable unterrupt" (DI).
Kaj pa so takoimenovane "pasti"? Poleg aparaturnih
prekinitev (prekinitev, povzročenih s strani periferij in računalniške ure)
poznamo tudi "programske" prekinitve, ki jim pravimo tudi pasti
(traps, software interrupts). Kot že samo ime pove, so to prekinitve, ki jih
lahko povzročajo sami programi, obravnavajo pa se podobno, kot aparaturne
prekinitve. Zakaj pa to potrebujemo? Na primer, če hoče računalnik izvesti
kakšno nelegalno operacijo (kot je delitev z 0), bolj pogosto pa, če hočemo v
našem programu zaprositi operacijski sistem za kakšno "storitev" (na
primer vhodno-izhodno operacijo). Programske in aparaturne prekinitve so
bistvene za delovanje sodobnih operacijskih sistemov, ki omogočajo navidezno
sočasno izvajanje več programov.