Pasti in prekinitve

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  CPU

Next instruction
Program counter  = 0


Hide or show comments


Display instruction as:
mnemonic, decimal, binary

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

Izvajani program bo prekinjen.
Izvedla  se bo prekinitvena rutina.
Po izvedbi rutine se bo program nadaljeval.

Stop  start  CPE

naslednji ukaz
Programski števec  = 0



Omogoči ali prepreči prekinitve

Skrij ali prikaži komentarje

Ukaz prikaži kot:
mnemonik, desetiško, dvojiško

 

 
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.