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ů]]
== 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|
# 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]]
# 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]]
=== Softwarové přerušení v architektuře x86 ===
|