Prerušenie verzus výnimka
V ktoromkoľvek počítači sa počas normálneho vykonávania programu môžu vyskytnúť udalosti, ktoré môžu spôsobiť dočasné zastavenie procesora. Takéto udalosti sa nazývajú prerušenia. Prerušenia môžu byť spôsobené chybami softvéru alebo hardvéru. Hardvérové prerušenia sa nazývajú (jednoducho) prerušenia, zatiaľ čo softvérové prerušenia sa nazývajú výnimky. Po vyvolaní prerušenia (softvéru alebo hardvéru) sa riadenie prenesie do špeciálneho podprogramu nazývaného ISR (Interrupt Service Routine), ktorý dokáže zvládnuť podmienky vyvolané prerušením.
Čo je prerušenie?
Pojem prerušenie je zvyčajne vyhradený pre hardvérové prerušenia. Sú to prerušenia riadenia programu spôsobené externými hardvérovými udalosťami. Externý tu znamená externý voči CPU. Hardvérové prerušenia zvyčajne pochádzajú z mnohých rôznych zdrojov, ako sú čip časovača, periférne zariadenia (klávesnice, myš atď.), I/O porty (sériové, paralelné atď.), diskové jednotky, hodiny CMOS, rozširujúce karty (zvuková karta, video). karta atď.). To znamená, že hardvérové prerušenia sa takmer nikdy nevyskytujú v dôsledku nejakej udalosti súvisiacej s vykonávaným programom. Napríklad udalosť, ako je stlačenie klávesu na klávesnici používateľom, alebo časový limit interného hardvérového časovača môže vyvolať tento druh prerušenia a môže informovať CPU, že určité zariadenie potrebuje určitú pozornosť. V takejto situácii CPU zastaví, čo kedy robil (t.j. pozastaví aktuálny program), poskytne službu požadovanú zariadením a vráti sa späť k normálnemu programu. Keď dôjde k hardvérovým prerušeniam a CPU spustí ISR, ostatné hardvérové prerušenia sa deaktivujú (napr. na strojoch 80×86). Ak potrebujete, aby sa počas spustenia ISR vyskytli ďalšie hardvérové prerušenia, musíte to urobiť explicitne zrušením príznaku prerušenia (s inštrukciou sti). Na počítačoch s rozlíšením 80×86 ovplyvní vymazanie príznaku prerušenia iba hardvérové prerušenia.
Čo sú výnimky?
Výnimka je softvérové prerušenie, ktoré možno identifikovať ako špeciálnu rutinu obsluhy. Výnimka môže byť identifikovaná ako automaticky sa vyskytujúca pasca (pasca môže byť identifikovaná ako prenos kontroly, ktorý je iniciovaný programátorom). Vo všeobecnosti neexistujú žiadne špecifické inštrukcie spojené s výnimkami (pasce sú generované pomocou špecifickej inštrukcie). Takže výnimka nastane v dôsledku „výnimočnej“podmienky, ktorá nastane počas vykonávania programu. Napríklad delenie nulou, spustenie nelegálneho operačného kódu alebo chyba súvisiaca s pamäťou môže spôsobiť výnimky. Kedykoľvek je vyvolaná výnimka, CPU dočasne pozastaví program, ktorý vykonával, a spustí ISR. ISR bude obsahovať, čo robiť s výnimkou. Môže to opraviť problém, alebo ak to nie je možné, môže program ladne prerušiť vytlačením vhodného chybového hlásenia. Hoci konkrétny pokyn nespôsobuje výnimku, výnimku vždy spôsobí pokyn. Napríklad k deleniu nulovou chybou môže dôjsť iba počas vykonávania inštrukcie delenia.
Aký je rozdiel medzi prerušením a výnimkou?
Prerušenia sú hardvérové prerušenia, zatiaľ čo výnimky sú softvérové prerušenia. Výskyty hardvérových prerušení zvyčajne deaktivujú iné hardvérové prerušenia, ale to neplatí pre výnimky. Ak potrebujete zakázať hardvérové prerušenia, kým sa neobdrží výnimka, musíte explicitne vymazať príznak prerušenia. A zvyčajne príznak prerušenia na počítači ovplyvňuje (hardvérové) prerušenia na rozdiel od výnimiek. To znamená, že vymazanie tohto príznaku nezabráni výnimkám.