Array ( [0] => 15497463 [id] => 15497463 [1] => cswiki [site] => cswiki [2] => Přerušení [uri] => Přerušení [3] => [img] => [4] => [day_avg] => [5] => [day_diff] => [6] => [day_last] => [7] => [day_prev_last] => [8] => [oai] => [9] => [is_good] => [10] => [object_type] => [11] => 0 [has_content] => 0 [12] => [oai_cs_optimisticky] => ) Array ( [0] => '''Přerušení''' ({{Vjazyce2|en|'''interrupt'''}}) je v [[Informatika|informatice]] metoda pro [[asynchronní]] obsluhu událostí, kdy [[Mikroprocesor|procesor]] přeruší vykonávání sledu instrukcí, vykoná [[Obsluha přerušení|obsluhu přerušení]], a pak pokračuje v předchozí činnosti. Původně přerušení sloužilo k obsluze [[hardware|hardwarových]] zařízení, které tak signalizovaly potřebu obsloužit (tj. odebrat z [[Vyrovnávací paměť|vyrovnávací paměti]] vstupně-výstupního zařízení [[data]] nebo do ní další data nakopírovat, odtud označení ''vnější přerušení''). Později byla přidána ''vnitřní přerušení'', která vyvolává sám procesor, který tak oznamuje chyby vzniklé při provádění [[Strojová instrukce|strojových instrukcí]] a synchronní ''softwarová přerušení'' vyvolávaná speciální strojovou instrukcí, která se obvykle používají pro vyvolání služeb [[Operační systém|operačního systému]]. [1] => [2] => == Obsluha přerušení == [3] => Přijde-li do [[Mikroprocesor|procesoru]] signalizace přerušení, je v případě, že obsluha přerušení je povolena, nejprve dokončena právě rozpracovaná [[strojová instrukce]]. Pak je na [[Zásobník (datová struktura)|zásobník]] uložena adresa následující strojové instrukce, která by měla být zpracována, kdyby k přerušení nedošlo. Pak je podle tabulky přerušení vyvolána [[obsluha přerušení]], která obslouží událost, kterou přerušení vyvolalo. Obsluha přerušení je zodpovědná za to, aby na jeho konci byl uveden stav procesoru do stavu jako na jejím začátku, aby výpočet přerušené úlohy nebyl ovlivněn, což se z důvodu vyšší rychlosti obvykle dělá softwarově (některé procesory umožňují uložit svůj stav pomocí speciální strojové instrukce). Na konci obsluhy přerušení je umístěna instrukce návratu (RET, někdy speciální IRET), která vyzvedne ze zásobníku návratovou adresu a tak způsobí, že z této adresy bude vyzvednuta následující strojová instrukce. Přerušená úloha tak až na zpoždění nepozná, že proběhla obsluha přerušení. [4] => [5] => Tabulka přerušení umožňuje, aby procesor mohl rozlišit více různých přerušení (rozlišených čísly), ke každému vyvolat odpovídající obsluhu přerušení (podprogram) a aby šlo jednotlivé obsluhy umístit na libovolná místa v paměti. Obsluha přerušení je obvykle uložena v [[Ovladač zařízení|ovladači]], který spolu s novým hardwarovým zařízením do operačního systému instalujeme. [6] => [7] => {{Viz též|Obsluha přerušení}} [8] => [9] => == Typy přerušení == [10] => [11] => === Vnější přerušení === [12] => Vnější přerušení (též hardwarové přerušení) je označováno podle toho, že přichází ze [[Vstup/výstup|vstupně-výstupních]] zařízení (tj. z pohledu procesoru přicházejí z ''vnějšku''). Vstupně-výstupní zařízení tak má možnost si [[Asynchronní|asynchronně]] vyžádat pozornost [[Mikroprocesor|procesoru]] a zajistit tak svoji obsluhu ve chvíli, kdy to právě potřebuje bez ohledu na právě zpracovávanou úlohu. [13] => [14] => Vnější přerušení jsou do procesoru doručována prostřednictvím [[Řadič přerušení|řadiče přerušení]], což je specializovaný obvod, který umožňuje stanovit prioritu jednotlivým přerušením, rozdělovat je mezi různé procesory a další související akce. [15] => [16] => {{Viz též|Řadič přerušení}} [17] => [18] => === Vnitřní přerušení === [19] => Vnitřní přerušení neboli [[výjimka (programování)|výjimky]] vyvolává sám procesor, pokud dojde k problému při zpracování strojových instrukcí, čímž umožňuje operačnímu systému na tyto situace reagovat. Jedná se například o pokus o dělení nulou, pokus o provedení neexistující instrukce, [[porušení ochrany paměti]], nepřítomnost matematického koprocesoru, výpadek stránky a podobně. [20] => [21] => === Softwarové přerušení === [22] => Softwarové přerušení je speciální strojová instrukce (obvykle je jich v procesoru k dispozici několik, procesory Intel mapují všechna přerušení na softwarová přerušení). Tento typ přerušení je na rozdíl od druhých dvou typů synchronní, je tedy vyvoláno zcela záměrně umístěním příslušné strojové instrukce přímo do prováděného programu. Jedná se o podobný způsob, jako vyvolání klasickému podprogramu (podprogramem je zde ISR uvnitř operačního systému), avšak procesor se může zachovat jinak. Instrukce softwarového přerušení se proto využívá pro vyvolání služeb operačního systému z běžícího procesu (tzv. [[systémové volání]]). Uživatelská úloha tak sice nemůže skočit do prostoru [[Jádro operačního systému|jádra operačního systému]], ale může k tomu využít softwarové přerušení (kterých je omezené množství a vstupní body lze snadno kontrolovat). Při využití [[Privilegovaný režim|privilegovaného režimu]] může softwarové přerušení aktivovat privilegovaný stav. [23] => [24] => == Popis implementace == [25] => === Průběh hardwarového přerušení === [26] => Na počítačích PC-kompatibilních s procesory [[x86]] probíhá zpracování vnějšího přerušení takto: [27] => [28] => # [[Vstup/výstup|Vstupně-výstupní zařízení]] požadující přerušení aktivuje jednu ze vstupních linek IRQ ({{Cizojazyčně|en|''Interrupt request''}}) [[Řadič přerušení|řadiče přerušení]]. [29] => # Pokud se jedná o kaskádovaný řadič přerušení (na obrázku chybně popsaný jako I/O rozhraní) předá signál z výstupu INTR na vstup [[IRQ]] primárního řadiče přerušení. [30] => # [[Řadič přerušení]] vygeneruje signál INTR ({{Cizojazyčně|en|''Interrupt request''}}) – „někdo“ žádá o přerušení, a vyšle ho k procesoru. [31] => # Procesor dokončí právě prováděnou instrukci (nebo jednu iteraci iterované instrukce) a pokud není přerušení maskováno, vyšle signál INTA ({{Cizojazyčně|en|''Interrupt acknowledge''}}). [32] => # Podle toho, ze které IRQ linky přerušení přišlo, řadič přerušení sestaví instrukci přerušení, kterou [[Mikroprocesor|procesor]] načte z řadiče a začne vykonávat. [33] => # Procesor uloží stavové informace o právě zpracovávaném programu na [[zásobník (datová struktura)|zásobník]]. [34] => # Podle čísla přerušení nalezne ve [[vektor přerušení|vektoru přerušení]] ve [[Vnitřní paměť|vnitřní paměti]] adresu příslušného obslužné rutiny přerušení a předá jí řízení. [35] => # Přerušovací rutina uloží stav procesoru na zásobník, identifikuje detailně, jaké zařízení vyvolalo přerušení a provede vlastní obsluhu zařízení. [36] => # Na konci obslužné rutiny je nutné obnovit stav procesoru ze zásobníku a instrukcí IRET se načtou stavové informace přerušeného programu ze [[Zásobník (datová struktura)|zásobníku]] a vrátí řízení na přerušený [[Počítačový program|program]]. [37] => # Pokračuje provádění přerušeného programu. [38] => [[Soubor:Obsluha_preruseni.gif|náhled|střed|550px|Schéma obsluhy hardwarového přerušení]] [39] => [40] => === Průběh softwarového přerušení === [41] => # Při příchodu přerušení se uloží stavové informace o právě zpracovávaném [[Počítačový program|programu]] do [[Zásobník (datová struktura)|zásobníku]]. [42] => # Zakáže se další přerušení. [43] => # Procesor zjistí [[vektor přerušení]] (podle operandu). [44] => # Nalezne obslužný [[podprogram]] a vykoná ho. [45] => # Po návratu z podprogramu obnoví uložené stavové informace o přerušeném [[Počítačový program|programu]]. [46] => [47] => === Softwarové přerušení v architektuře x86 === [48] => Architektura [[x86]] má dvě instrukce pro softwarové přerušení: dvoubajtovou int n, která má jednobajtový [[operand]] udávající číslo přerušení, a jednobajtovou instrukci int03 určenou jako [[breakpoint]] pro [[debugger]]y. [49] => [50] => Prvních 32 přerušení je vyhrazeno pro [[výjimka (programování)|výjimky]], přerušení generovaná přímo procesorem. Ne všechny z nich se využívají, na 8086 jich existovalo jen prvních sedm, později (počínaje procesorem [[Intel 80386|i386]]) přibyly další: [51] => # dělení nulou [52] => # krokovací přerušení – na [[IA-32|i386]] rozšířeno na víceúčelové ladicí přerušení [53] => # [[NMI]] – externí nemaskovatelné přerušení [54] => # breakpoint – vyvolaný již zmíněnou instrukcí int03 [55] => # [[přetečení]] – je vyvolané instrukcí into, pokud je v příznacích zaznamenáno přetečení [56] => # překročení mezí – volané instrukcí bound, pokud byly překročeny meze pole (přidáno v [[80186]]) [57] => # chybná instrukce [58] => # nedostupnost [[koprocesor]]u – nepřítomnost nebo nepřepnutá úloha – dříve bylo hlášeno externím nemaskovatelným přerušením [59] => # dvojitá chyba – vyvoláno, pokud dojde k výjimce při vyvolávání výjimky [60] => # překročení limitu [[segmentace paměti|segmentu]] koprocesorem [61] => # chybný TSS – chyba při pokusu o změnu úlohy [62] => # nepřístupný segment [63] => # překročení limitu zásobníku [64] => # obecná chyba ochrany – většina chyb související se [[segmentace paměti|segmentací]] kromě těch obsloužených ostatními výjimkami [65] => # výpadek stránky – pokus o přístup ke [[stránkování paměti|stránce]], která je namapována, avšak není v [[Operační paměť|operační paměti]] přítomna [66] => # (nepoužito) [67] => # chyba koprocesoru [68] => # chyba zarovnání – pokus o přístup k adrese nedělitelné odpovídající mocninou dvou, pokud je zapnuta kontrola zarovnání [69] => [70] => == Přerušení u PC AT == [71] => U počítačů PC AT jsou standardně použita čísla vnějších přerušení takto: [72] => [73] => {| class="wikitable" [74] => |IRQ 0 [75] => |Řadič systémového času [76] => |- [77] => |IRQ 1 [78] => |Řadič klávesnice [79] => |- [80] => |IRQ 2 [81] => |Připojení řadičů přerušení z I/O rozhraní (kaskáda)- zde jsou sjednoceny IRQ 8 až IRQ 15 [82] => |- [83] => |IRQ 3 [84] => |Sériový port 2 [85] => |- [86] => |IRQ 4 [87] => |Sériový port 1 [88] => |- [89] => |IRQ 5 [90] => |Paralelní port 2 [91] => |- [92] => |IRQ 6 [93] => |Řadič disket [94] => |- [95] => |IRQ 8 [96] => |Hodiny reálného času [97] => |- [98] => |IRQ 9 [99] => |Volný, podle připojeného zařízení [100] => |- [101] => |IRQ 10 [102] => |Volný, podle připojeného zařízení [103] => |- [104] => |IRQ 11 [105] => |Volný, podle připojeného zařízení [106] => |- [107] => |IRQ 12 [108] => |Volný, podle připojeného zařízení [109] => |- [110] => |IRQ 13 [111] => |Numerický koprocesor [112] => |- [113] => |IRQ 14 [114] => |Řadič pevného disku [115] => |- [116] => |IRQ 15 [117] => |Volný, podle připojeného zařízení [118] => |- [119] => |} [120] => [121] => {{Pahýl}} [122] => {{Autoritní data}} [123] => [124] => [[Kategorie:Počítače]] [125] => [[Kategorie:Procesory]] [] => )
good wiki

Přerušení

Přerušení je v informatice metoda pro asynchronní obsluhu událostí, kdy procesor přeruší vykonávání sledu instrukcí, vykoná obsluhu přerušení, a pak pokračuje v předchozí činnosti. Původně přerušení sloužilo k obsluze hardwarových zařízení, které tak signalizovaly potřebu obsloužit (tj.

More about us

About

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.

You might be interested in

,'Mikroprocesor','Počítačový program','Zásobník (datová struktura)','Řadič přerušení','výjimka (programování)','segmentace paměti','Vstup/výstup','x86','vektor přerušení','přetečení','breakpoint','Jádro operačního systému'