Přerušení: Porovnání verzí

Smazaný obsah Přidaný obsah
Bez shrnutí editace
Bez shrnutí editace
Řádek 2:
 
== Hardwarové (vnější) přerušení ==
Původně se tak označovalo [[IRQ]], tedy hardwarové přerušení, které nastává jako reakce na signál od zařízení, které jím upozorňuje procesor (obvykle [[operační systém]], přesněji svůj [[ovladač zařízení|ovladač]] v tomto systému), že potřebuje obsloužit. Procesor při příchodu přerušení přestane provádět současný výpočet, uloží část svého stavu a začne vykonávat [[obsluha přerušení|obsluhu přerušení]]. Takovýto typ přerušení (vyvolaný HW) je tzv. asynchronní, tedy může přijít v libovolném bodu výpočtu (nikoliv ovšem doslova libovolném: například nemůže přijít uprostřed instrukce, a to ani u moderních [[superskalární]]ch procesorů, ve kterých se instrukce rozkládá na více interních instrukcí). Přerušení přichází bez ohledu na to, kolik je momentálně vykonávaných [[Počítačový program|programů]]ů. Přerušení lze také v některých případech zakázat maskováním – k obsluze přerušení dojde až po opětovném povolení přerušení.
 
== Softwarové přerušení ==
Řádek 12:
=== ISR – Interrupt Service Routine ===
 
ISR je obslužný [[podprogram]] pro vykonání obsluhy daného přerušení a je obvykle součástí [[ovladač]]e zařízení, které přerušení vyvolalo. ISR musí nejprve uložit stavové informace [[procesor|CPU]] na [[Zásobník (datová struktura)|zásobník]] (FR a PC). Poté provede obsluhu přerušení a nakonec obnoví ze zásobníku stav [[procesor|CPU]] a přerušená činnost pokračuje v místě kde byla při příchodu přerušení vykonávaná [[instrukce]] pozastavena. Přerušený [[Počítačový program|program]] v podstatě nic nepozná – až na malé zpoždění.
 
=== Průběh hardwarového přerušení ===
Řádek 19:
# Řadič přerušení vygeneruje signál INTR – „někdo“ žádá o přerušení a vyšle ho k procesoru.
# Procesor se na základě maskování rozhodne obsloužit přerušení a signálem INTA se zeptá, jaké zařízení žádá o přerušení.
# Řadič přerušení identifikuje zařízení, které žádá o přerušení a odešle číslo typu přerušení k [[procesor|Procesoruprocesoru]]
# Procesor uloží stavové informace o právě zpracovávaném programu do [[Zásobník (datová struktura)|zásobníku]].
# Podle čísla typu příchozího přerušení nalezne ve vektoru přerušení adresu příslušného obslužného [[podprogram]]u.
# Vyhledá obslužný [[podprogram]] obsluhy přerušení v [[Elektronická paměť|paměti]] a vykoná ho.
# Po provedení obslužného programu opět obnoví uložené stavové informace ze [[Zásobník (datová struktura)|zásobníku]] a přerušený [[Počítačový program|program]] pokračuje dál.
[[Soubor:Obsluha_preruseni.gif]]
 
=== Průběh softwarového přerušení ===
# Při příchodu přerušení se uloží stavové informace o právě zpracovávaném [[Počítačový program|programu]]u do [[Zásobník (datová struktura)|zásobníku]].
# Zakáže se další přerušení.
# Procesor zjistí [[vektor přerušení]] (podle operandu)
# Nalezne obslužný [[podprogram]] a vykoná ho.
# Po návratu z podprogramu obnoví uložené stavové informace o přerušeném [[Počítačový program|programu]]u.
 
=== Softwarové přerušení v architektuře x86 ===