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

Smazaný obsah Přidaný obsah
Bez shrnutí editace
Doplnědí článku + přidání odkazů.
Řádek 3:
== 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í).<br />
Přerušení přichází bez ohledu na to, kolik je momentálně vykonávaných [[program|programů]].<br />
Přerušení lze také v některých případech zakázat [[maskování|maskováním]] – k obsluze přerušení dojde až po opětovném povolení přerušení.
 
 
=== ISR – Interrupt Service Routine ===
 
ISR je obslužný [[podprogram]] pro vykonání obsluhy daného přerušení a je obvykle součástí [[ovladač|ovladače]] zařízení, které přerušení vyvolalo.<br />
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ý [[program]] v podstatě nic nepozná – až na malé zpoždění.
 
== Softwarová přerušení ==
 
Obecnějším termínem se to stalo při zavedení softwarových přerušení, tedy přerušení vyvolávaných přímo uvnitř [[procesor|procesoru]] a využívající stejnou nebo podobnou metodu předání řízení z probíhajícího výpočtu do obsluhy přerušení. Softwarové přerušení může být vyvoláno buď speciální [[instrukce|instrukcí]] (přerušení se používá jako způsob volání [[operační systém|operačního systému]] z [[aplikace]]), nebo výjimečným stavem výpočtu, neboli výjimkou (dělení nulou, přístup k neexistující adrese). Softwarová přerušení jsou vždy tzv. synchronní. Pokud příjde více přerušení, musí systém vyhodnotit, v jakém pořadí se budou provádět.
.
=== Sofwarová přerušení v architektuře x86 ===
Řádek 44:
 
=== Softwarové přerušení ===
: 1. Při příchodu přerušení se uloží stavové informace o právě zpracovávaném [[progeam|programu]] do [[Zásobník (datová struktura)|zásobníku]].
: 2. Zakáže se další přerušení.
: 3. Procesor zjistí [[vektor přerušení]] (podle operandu)
: 4. Nalezne obslužný [[podprogram]] a vykoná ho.
: 5. Po návratu z podprogramu obnoví uložené stavové informace o přerušeném [[program|programu]].
 
 
Řádek 55:
: 2. I/O rozhraní vyšle signál IRQ na řadič přerušení (na port IRQ 2)
: 3. Řadič přerušení vygeneruje signál INTR – „někdo“ žádá o přerušení a vyšle ho k procesoru.
: 4. 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í.
: 5. Řadič přerušení identifikuje zařízení, které žádá o přerušení a odešle číslo typu přerušení k [[procesor|Procesoru]]
: 6. Procesor uloží stavové informace o právě zpracovávaném programu do [[Zásobník (datová struktura)|zásobníku]].
: 7. Podle čísla typu příchozího přerušení nalezne ve vektoru přerušení adresu příslušného obslužného [[podprogram|podprogramu]].
: 8. Vyhledá obslužný [[podprogram]] obsluhy přerušení v [[Elektronická paměť|paměti]] a vykoná ho.
: 9. 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ý [[program]] pokračuje dál.