Pertraukimas

Intel 4040 buvo pirmasis pertraukimus palaikantis mikroprocesorius

Pertraukimas (angl. interrupt) – programos ar įrenginio įvykdytas veiksmas, kurio metu nutraukiamas einamosios programos vykdymas ir valdymas perduodamas pertraukimo apdirbėjui (angl. interrupt handler). Atlikus tam tikrus veiksmus, vykdymas grąžinamas ankstesnei programai.[1] Senieji kompiuteriai tokių galimybių neturėjo. Pertraukimai buvo pasiūlyti maždaug apie 1958 m.[2]

Pertraukimo logika panaši į gyvenimiškus atvejus: žmogus daro pietus (pagrindinė programa). Suskamba telefonas (pertraukimas). Žmogus pakelia ragelį ir kalbasi, kol padeda ragelį (pertraukimo apdirbėjas). Galų gale, žmogus toliau gamina valgį (tęsiama pagrindinė programa).

Pertraukimai paprastai sukeliami išorinių prietaisų (aparatiniai pertraukimai). Kai kada pertraukimais vadinamos ir iš esmės paprogramės kvietimo komandos (programiniai pertraukimai). Abiem atvejais aparatiškai arba programiškai išsaugoma visa tuo metu vykdomo proceso informacija (įvairių procesoriaus registrų reikšmės), dažniausiai perkeliant jas į steką. Aptarnavus pertraukimą, šios reikšmės atkuriamos.

Pertraukimų taikymas

Pertraukimai neretai naudojami į išorinius įvykius reaguoti (pelės pajudėjimas, klavišo paspaudimas). Jie tinka foniniam informacijos perdavimui (šiuo atveju pertraukimas reiškia jog atvyko arba reikalingi pateikti nauji duomenys). Pertraukimai taip pat gali tiesiog vykti numatytu laiku (laikmačio pertraukimai). Tokių pertraukimų pagalba ir vieno procesoriaus kompiuteris gali vienu metu vykdyti kelias užduotis (nors kiekviena jų tuomet vykdoma lėčiau).

Maskuojami ir nemaskuojami pertraukimai

Jei vykdant kokią nors kritinę programos dalį pertraukimai nepageidaujami (tarkim, komandų seka turi būti įvykdyta labai greitai ir būtinai iki galo), pertraukimus galima laikinai uždrausti. Baigus vykdyti kritinę dalį, juos vėl būtina leisti, nes pertraukimai reikalingi normaliam sistemos darbui. Pertraukimas, kurio negalima uždrausti, vadinamas nemaskuojamu. Toks paprastai būna „pradinio nustatymo“ pertraukimas, kuris senesnio tipo kompiuteriuose būdavo aktyvuojamas specialiu mygtuku, paprastai pažymėtu anglišku žodžiu Reset. Kadangi toks pertraukimas sukelia daug sumaišties operacinės sistemos darbe, juo naudotis niekada nebuvo patartina (šiuo metu daugelis modelių jo ir nebeturi). Nemaskuojamas pertraukimas dažniausiai reikalingas dėl programavimo klaidų (ar net ir tyčinio kenkimo) „pakibusiai“, į kitus signalus nereaguojančiai sistemai iš naujo paleisti.

Pakartotinai įeinamas kodas

Jei aparatinis pertraukimas įvyko vykdant instrukcijas kokioje nors paprogramių bibliotekoje, biblioteka gali palaikyti arba nepalaikyti galimybę iš pertraukimą aptarnaujančio kodo ir vėl kviesti tą pačią ar kitą šios bibliotekos paprogramę. Nagrinėjamame pavyzdyje tai būtų galimybė pokalbio metu pagaminti kitą valgį pagal telefonu duodamus nurodymus (gali trukdyti tai, jog viryklės rakandai užimti laikinai paliktos ankstesnės užduoties).

Biblioteka, kurią galima kviesti aptarnaujant net ir jos kodą vykdant įvykusius pertraukimus, vadinama įeinama pakartotinai (angl. reenterable). MS-DOS, pavyzdžiui, pakartotinai įeinama nebuvo (non reenterable).

Šaltiniai

  1. Intellec 8/Mod 80 Microcomputer Development System Reference Manual, Intel, 1975. Nuoroda tikrinta 25 birželio 2015  Archyvuota kopija 2015-06-26 iš Wayback Machine projekto., apie pertraukimus žr. 32 psl.
  2. E. W. Dijkstra: My recollection of operating system design. (PDF) EWD 1303, 2000, S. 15