Vyšlo v týdeníku Computerworld č. 15/93 v roce 1993
Vytištěno z adresy: http://www.earchiv.cz/a93/a315c120.php3

Interrupt

Když se v polovině čtyřicátých let zrodila tzv. von Neumannova architektura jako ucelená představa o tom, jak by počítače měly vypadat a jak by měly fungovat, jedním z jejích charakteristických rysů byla přísná sekvenčnost. Spočívala v tom, že jednotlivé činnosti se vykonávaly postupně, a nebylo pamatováno na to, že by se více činností mohlo vykonávat souběžně (paralelně), či se alespoň zčásti překrývat v čase.

Výhodou této přísné sekvenčnosti byla možnost, aby procesor počítače přímo zajišťoval či alespoň řídil veškeré činnosti - tedy například i vstupně-výstupní operace. Například když právě probíhající program potřeboval něco vytisknout na tiskárně, probíhala celá operace tisku tak, že procesor postupně sám předával tiskárně jednotlivé znaky k tisku a ta je svým tempem tiskla. Procesor počítače se celou svou kapacitou věnoval pouze obsluze tiskárny - v době, kdy tiskárna nebyla schopna převzít další znak k tisku, musel procesor neustále čekat v programové smyčce, ze které vždy vystoupil jen na to, aby tiskárně předal další znak, a zase se do čekací smyčky vrátil. Teď si ale uvědomme, jaký je poměr rychlostí tiskárny a procesoru: omezme se jen na velmi hrubý odhad a představme si běžnou jehličkovou tiskárnu, která tiskne rychlostí 100 znaků za sekundu - v průměru je tedy schopna převzít další znak k tisku každých 10 milisekund. Naproti tomu procesor zvládne za tutéž dobu (tj. 10 milisekund) vykonat řádov ě desetitisíce až statisíce strojových instrukcí (podle toho, o jaký procesor jde a na jaké pracuje taktovací frekvenci). To ale znamená, že procesor je efektivně využit (pro přenos dat) jen na zlomky procent a po celou dobu tisku se nachází v "neužitečné" programové smyčce.

V době těsně po vzniku von Neumannovy architektury sice nebyly procesory ještě tak rychlé jako dnes a disproporce mezi jejich rychlostmi a rychlostmi periferních zařízení nebyla ještě tak ohromná jako dnes, ale přesto byla i tehdy neúnosně velká. Proto se poměrně brzy (zhruba v roce 1956) ukázalo jako nezbytné zavést do von Neumannovy architektury alespoň určitou míru paralelismu, umožňující osvobodit procesor od přímého řízení a zajišťování vstupně-výstupních operací. Myšlenka byla taková, že vstupně-výstupní operace budou probíhat nezávisle na procesoru a ten se mezitím bude moci věnovat jiným úkolů (paralelně ke vstupně-výstupním operacím). Kromě toho budou tyto paralelní činnosti probíhat svými vlastními rychlostmi, a nebudou tedy vzájemně synchronizovány (proto se v této souvislosti hovoří o asynchronních vstupně-výstupních operacích).

Jakmile se ale připustila možnost takovýchto asynchronních vstupně-výstupních operací, vyvstala rázem potřeba vhodného mechanismu, který by umožnil vhodnou komunikaci mezi paralelně probíhajícími činnostmi. K čemu je takováto komunikace zapotřebí?

Když procesor přestal přímo řídit vstupně-výstupní operace, ztratil s tím zároveň i přehled o tom, jak dlouho tyto operace trvají. Mohl by se sice opakovaně dotazovat příslušného zařízení, zda již svou práci dokončilo, ale to se vlastně rovná výše popsané situaci bez asynchronních vstupně-výstupních operací. Mnohem efektivnější je takové řešení, kdy je na dokončení asynchronní vstupně-výstupní operace procesor explicitně upozorněn tím, kdo tuto operaci provádí - tedy příslušným zařízením. K tomu je ovšem zapotřebí vhodný mechanismus, kterým je tzv. přerušení (interrupt).

Mechanismus přerušení umožňuje, aby zařízení ve vhodný okamžik vyslalo procesoru signál, kterým jej žádá o pozornost. Procesor na tuto žádost zareaguje tím, že přeruší svou momentální činnost (tj. přeruší právě prováděný program, odsud pojmenování celého mechanismu) a spustí jiný program - tzv. obslužný program přerušení (interrupt service routine). Po dokončení tohoto obslužného programu se pak procesor vrací zpět k dříve přerušené činnosti.

Procesor je tedy upozorněn samotnou žádostí, kterou mu vyšle příslušné zařízení. Co je ale příčinou tohoto upozornění - zda jde o signalizaci úspěšného konce vstupně-výstupní operace, o signalizaci chybové situace při jejím provádění, nebo ještě o něco jiného, to obvykle zjišťuje až příslušný obslužný program, který je na základě žádosti o přerušení vyvolán. Ten také může zajistit provedení nejrůznějších akcí, které zařízení požaduje.

Vraťme se znovu k našemu příkladu s tiskárnou. Je-li k dispozici mechanismus přerušení, může jej tiskárna využívat takovým způsobem, že v okamžiku, kdy je připravena k převzetí dalšího znaku, vyšle procesoru žádost o přerušení. Tím si vlastně tiskárna "říká" o zaslání nového znaku. Procesor tuto žádost přijme, vyvolá příslušný obslužný program, ten zajistí předání dalšího znaku tiskárně a procesor se pak zase vrátí ke své původní činnosti (tj. k provádění přerušeného programu).

Zdůrazněme si znovu, v čem se tato situace liší od předchozí, kdy procesor čekal na připravenost tiskárny v programové smyčce. Procesor nyní nepotřebuje sám zjišťovat, kdy je tiskárna připravena a kdy ne, protože ona se mu "ozve" sama. Procesor se tedy veškerou svou kapacitou může věnovat něčemu jinému - provádění jiného programu.

Mechanismus přerušení lze využít i k mnoha dalším účelům, než jaké jsme si zde již naznačili. Obecně jde o způsob, jakým je možné procesor přinutit, aby zareagoval na určitý vnější podnět, jehož příčina nemusí bezprostředně souviset s právě prováděným programem. Nejčastěji jde o význačné stavy různých zařízení (signalizující nejen úspěšné dokončení operace či připravenost k převzetí dalších dat), ale také např. o jejich poruchu apod. Další možností jsou signály od časovačů (obvodů, které měří čas), zásahy operátora (zmáčknutí tlačítka reset apod.), signalizace problémů s napájením od jednotky UPS (zdroje nepřerušitelného napětí apod.). Mechanismus přerušení je ovšem tak šikovným mechanismem, že se používá i pro ošetření nestandardních situací, které přímo souvisí s právě prováděným programem. Přerušení může dokonce být vyvoláno právě probíhajícím programem zcela záměrně a úmyslně. Ale o tom až příště.