e-gradiva     Sistemi Motorola Omrežja      
  logotip  
SERŠ Maribor    

PREKINITVE

Prekinitev v računalništvu pomeni, da nek dogodek povzroči da CPE začasno preneha izvajati program, ki ga trenutno izvaja in začne izvajati drug program, ki mu pravimo prekinitveni servisni program. Ta program je običajno kratek in njegovo trajanje je omejeno, sicer bi motil ostale programe. Zahteva po prekinitvi lahko pride iz katere od vhodno-izhodnih naprav ali iz nekega drugega dela računalnika. Prekinitve so osnovni način, po katerem lahko pridejo tudi drugi deli računalnika do uslug CPE. Prekinitev včasih drugače imenujejo tudi zahteva za strežbo.

Prvi računalnik, ki je imel v CPE vgrajeno sposobnost prekinitve je bil UNIVAC 1103 iz leta 1954. Od tistega časa naprej imajo današnji računalniki večinoma vgrajen mehanizem, ki omogoča prekinitve. Gledano z uporabnikove perspektive nam prekinitve omogočajo vtis, da lahko računalnik z eno CPE počne več stvari hkrati.

Prekinitve se večkrat pojavljajo pri operacijskih sitemih in so nekaj vsakdanjega. Ločimo dve vrsti prekinitev :

Dogajanje ob katerikoli prekinitvi sledi enakim korakom: procesor prekine izvajanje trenutnega opravila, v sklad shrani naslov, kjer je izvajanje prekinil, ter nadaljuje na naslovu, ki je vezan na sproženo prekinitev. Ker je nabor prekinitev pri modernih procesorjih precej obsežen, je najpreprosteje, da je za vsako od prekinitev predviden pomnilniški kazalec, v katerega je vnaprej treba vpisati nadaljevalni naslov za izvajanje, ki sledi prekinitvi. Ti kazalci se imenujejo prekinitveni vektorji (angl. interrupt vector), rutine pa, ki stečejo po prekinitvah, so prekinitvene rutine (angl. interrupt-processing routine).

Prekinitve se praviloma pojavljajo čisto asinhrono (angl. asynchronous), torej neodvisno od trenutno delujočega programa. Razlikuje se po prioriteti, tako da tiste s prednostjo lahko prekinjajo obdelavo prekinitev z nižjo prioriteto. Vsako ugnezdenje prekinitev pomeni, da se mora ob novih prekinitvah stanje, predvsem vrnitvenih naslovov, shraniti v sklad. Ti podatki so potem uporabljeni ob izstopu iz izvedene prekinitvene rutine.

Nivo izvajane prekinitve se zabeleži v statusni besedi (angl. status word) procesorja ali programa. V procesorjevem statusu se da neposredno preprečiti izvajanje določenih nivojev prekinitev z maskiranjem - gre za postavitev nadzornih bitov, ki onemogočajo oziroma omogočijo (angl. disable, enable) izbrane prekinitve. Podobne relacijske mehanizme premorejo na strojnem nivoju tudi krmilniki naprav (postavljanje mask). Pri večji razvejanosti prekinitvene strukture je nujno, da nad aparaturnimi prekinitvami prevzame nadzor posebna enota, imenovana prekinitveni krmilnik (priority interrupt controller). Tak krmilnik omogoča programsko nastavitev prioritet za posamezne prekinitve. V IBM PC kampatibilnežih je vgrajeno vezje, ki dovoljuje do 16 strojnih prekinitvah z različnimi prioritetami. Poleg tega je možno celo, da na isto prekinitveno linijo (ena sama indikacija prekinitve torej) pripeljemo hkrati prekinitvene signale iz več enot.

Pogoste prekinitve na istem nivoju lahko pripeljejo do situacije, ko prva prekinitev še ni bila obdelana, pojavila pa se je že naslednja in za njo še ena. Ko gre za isto prekinitveno linijo, je na njej nemogoče električno vzdrževati informacijo o dveh čakajočih prekinitvenih zahtevah. Rešitev je v vrsti (angl. queue), ki jo mora za posamezno prekinitev voditi procesor( preko funkcije za upravljanje prekinitev v operacijskem sistemu) ali pa dovolj inteligenten prekinitveni krmilnik. To pomeni, da mora vsaka prekinitev zares prekiniti delovanje procesorja, le-ta se mora odzvati in postavit prekinitveno zahtevo v ustrezno vrsto (če ni prispela prekinitev, višja po prioriteti od trenutno izvajane rutine), nato pa nadaljevati z obdelavo prekinjenega programa.

Potek prekinitve

Iz diagrama sledi, da lahko pri prekinitvah ločimo naslednja štiri stanja:

  1. Normalno izvrševanja ukaza tekočega programa.
  2. Shranjevanje stanja CPE.
  3. Izvrševanje ukaza prekinitvenega servisnega programa
  4. Obnovitev stanja CPE na stanje, kakršno je bilo ob točki 2.

Potek prekinitve

Potek prekinitve

Vzrok za prekinitev je izven CPE, ki torej ne more vedeti, kdaj bo prišlo do nje. Zato je absolutno nujno, da se pred začetkom izvrševanja ukazov prekinitvenega servisnega programa shrani stanje vseh tistih registrov v CPE, ki jih bo ta program spremenil. Po zadnjem ukazu prekinitvenega servisnega programa se mora stanje CPE obnoviti na stanje pred prekinitvijo. Prekinjeni program zato "ne ve", da je bil prekinjen (če izvzamemo pretečeni čas, v katerem se ni izvajal). Temu pravimo tudi, da morajo biti prekinitve transparentne ali nevidne, gledano s strani prekinjenega programa. Realizacija transparentnostije lahko v celoti aparaturna (CPE shrani vse registre) ali pa deloma programska (CPE shrani samo PC in morda še kak register, prekinitveni servisni program sam pa shrani in obnovi vse tiste registre, ki jih uporablja).

Transparentnost seveda ni nič drugega kot zahteva po pravilnem preklapljanju stanja. Za shranjevanje stanja CPE je zelo primeren sklad, še boljši pa so večkratni nabori registrov. Zadnji ukaz prekinitvenega servisnega programa mora vrniti v CPE tisto, kar se je shranilo na začetku.

Druga zelo pomembna lastnost prekinitev je, da CPE reagira na zahtevo za prekinitev šele potem, ko je dokončala izvrševanje tekočega ukaza. Razlog za to je v tem, da po prekinitvi CPE nadaljuje z normalnim prevzemom prvega ukaza prekinitvenega servisnega programa, prevzemni cikel pa se ne sme pričeti, preden je prejšnji ukaz končan. V principu bi bilo sicer možno zgraditi tako CPE, ki bi prekinjala nedokončane ukaze, vendar bi to zahtevalo, da se ob preklopu stanja CPE shranijo poleg programasko dostopnih registrov tudi vsi ostali. Teh pa je običajno veliko več in shranjevanje bi postalo zelo zamudna operacija.

Ker je ena od osnovnih zahtev pri prekinitvah hiter odziv na zunanjo zahtevo, se ta možnost praktično nikoli ne uporablja.

Večina današnjih računalnikov ima CPE realizirane tako, da imajo več vhodov, preko katerih dobivajo zahteve za prekinitve. Poleg tega imajo običajno tudi ukaze, s katerimi je mogoče onemogočiti (maskirati) ali omogočiti posamezen vhod. Z ukazom za onemogočitev programer v bistvu odklopi nekatere ali vse vhode in povzroči, da CPE preko teh vhodov prihajajoče zahteve ignorira. Brez take kontrole lahko pride do težav, če neka vhodno-izhodna naprava daje zahteve za prekinitev prehitro in moti druge naloge CPE. Poleg tega je po vklopu računalnika v večini sistemov potrebno vsako vhodno-izhodno napravo inicializirati – to je, s posebnim programom nastaviti parametre njenega delovanja. Dokler inicializacija ni opravljena, je delovanje naprave lahko nepredvidljivo. Večina računalnikov je zato narejenih tako, da so po vklopu vsi prekinitveni vhodi avtomatsko v onemogočenem stanju. Z ukazom za omogočitev se po zaključeni inicializaciji prekinitve omogočijo.

SERŠ Maribor, Strokovna gimnazija, leto: 2002, avtor: Leon Borko