Přerušení - Interrupt

zdroje přerušení a manipulace s procesorem

V digitálních počítačích je přerušení reakcí procesoru na událost, která vyžaduje pozornost softwaru. Podmínka přerušení upozorní procesor a slouží jako požadavek procesoru na přerušení aktuálně provádějícího kódu, pokud je to povoleno, aby událost mohla být zpracována včas. Pokud je požadavek přijat, procesor odpoví pozastavením jeho aktuálních aktivit, uložením jeho stavu a spuštěním funkce zvané obsluha přerušení (nebo rutina služby přerušení, ISR), aby se s událostí vypořádal. Toto přerušení je dočasné a pokud přerušení neindikuje závažnou chybu, procesor po dokončení obsluhy přerušení pokračuje v normálních činnostech.

Přerušení běžně používají hardwarová zařízení k označení elektronických nebo fyzických změn stavu, které vyžadují pozornost. Přerušení se také běžně používají k implementaci víceúlohového zpracování počítačů , zejména při práci v reálném čase . O systémech, které používají přerušení těmito způsoby, se říká, že jsou řízeny přerušením.

Typy

2 typy přerušení v operačním systému.jpg

Signály přerušení mohou být vydávány v reakci na události hardwaru nebo softwaru . Jsou klasifikována jako přerušení hardwaru nebo přerušení softwaru . U každého konkrétního procesoru je počet typů přerušení omezen architekturou.

Přerušení hardwaru

Přerušení hardwaru je stav související se stavem hardwaru, který může být signalizován externím hardwarovým zařízením, např. Linkou požadavku na přerušení (IRQ) na PC, nebo detekován zařízeními integrovanými v logice procesoru (např. Časovač CPU v systému IBM System/370), aby sdělil, že zařízení potřebuje pozornost od operačního systému (OS) nebo, pokud žádný operační systém neexistuje, od programu „bare-metal“ běžícího na CPU. Taková externí zařízení mohou být součástí počítače (např. Diskový řadič ) nebo to mohou být externí periferie . Například stisknutí klávesy na klávesnici nebo přesunutí myši zapojené do portu PS/2 spustí hardwarová přerušení, která způsobí, že procesor přečte stisknutí klávesy nebo polohu myši.

Přerušení hardwaru může dojít asynchronně s ohledem na hodiny procesoru a kdykoli během provádění instrukce. V důsledku toho jsou všechny signály přerušení hardwaru podmíněny jejich synchronizací s hodinami procesoru a působí pouze na hranicích provádění instrukcí.

V mnoha systémech je každé zařízení spojeno s konkrétním signálem IRQ. To umožňuje rychle určit, které hardwarové zařízení požaduje servis, a urychlit servis tohoto zařízení.

Na některých starších systémech šlo všechna přerušení na stejné místo a OS použil specializovanou instrukci k určení nevyřízeného přerušení s nejvyšší prioritou. Na současných systémech existuje obecně odlišná rutina přerušení pro každý typ přerušení nebo pro každý zdroj přerušení, často implementovaná jako jedna nebo více tabulek vektorů přerušení .

Maskování

Procesory mají obvykle interní registr masky přerušení, který umožňuje selektivní povolení a zakázání hardwarových přerušení. Každému signálu přerušení je přiřazen bit v registru masky; u některých systémů je přerušení povoleno, když je bit nastaven, a deaktivováno, když je bit jasný, zatímco u jiných nastavený bit přerušení deaktivuje. Když je přerušení zakázáno, procesor bude příslušný signál přerušení ignorovat. Signály, které jsou ovlivněny maskou, se nazývají maskovatelná přerušení .

Některé signály přerušení nejsou ovlivněny maskou přerušení, a proto je nelze deaktivovat; tyto se nazývají nemaskovatelná přerušení (NMI). NMI indikují události s vysokou prioritou, které nelze za žádných okolností ignorovat, například signál časového limitu z hlídacího časovače .

Na maskování přerušení je zakázat, zatímco k odmaskování přerušení je povolit.

Falešná přerušení

Podvržené přerušení je hardwarové přerušení, pro které může být žádný zdroj nalezen. K popisu tohoto jevu lze také použít termín „fantomové přerušení“ nebo „přerušení ducha“. Falešná přerušení bývají problémem s drátovým obvodem přerušení připojeným ke vstupu procesoru citlivého na úroveň. Taková přerušení může být obtížné identifikovat, když se systém chová špatně.

V kabelovém obvodu OR způsobí parazitické kapacitní nabíjení/vybíjení prostřednictvím předpěťového odporu přerušovací linky malé zpoždění, než procesor rozpozná, že zdroj přerušení byl vymazán. Pokud je přerušovací zařízení vymazáno příliš pozdě v rutině služby přerušení (ISR), nebude dostatek času na to, aby se přerušovací obvod vrátil do klidového stavu, než aktuální instance ISR skončí. Výsledkem je, že si procesor bude myslet, že čeká na další přerušení, protože napětí na vstupu jeho požadavku na přerušení nebude dostatečně vysoké ani nízké, aby bylo možné stanovit jednoznačnou vnitřní logiku 1 nebo logiku 0. Zdánlivé přerušení nebude mít žádný identifikovatelný zdroj, proto „ falešná přezdívka.

Falešné přerušení může být také důsledkem elektrických anomálií způsobených vadným designem obvodu, vysokými hladinami hluku , přeslechy , problémy s časováním nebo vzácněji chybami zařízení .

Falešné přerušení může mít za následek zablokování systému nebo jinou nedefinovanou operaci, pokud ISR nezohledňuje možnost takového přerušení. Protože falešná přerušení jsou většinou problémem drátových NEBO obvodů přerušení, osvědčenou programovací praxí v takových systémech je, aby ISR zkontroloval aktivitu všech zdrojů přerušení a neprovedl žádnou akci (kromě případného protokolování události), pokud žádný ze zdrojů nepřerušuje .

Softwarová přerušení

Přerušení softwaru je požadováno samotným procesorem při provádění konkrétních pokynů nebo při splnění určitých podmínek. Každý signál přerušení softwaru je spojen s konkrétním obslužným programem přerušení.

Softwarové přerušení může být záměrně způsobeno provedením speciální instrukce, která podle návrhu vyvolá při spuštění přerušení. Tyto instrukce fungují podobně jako volání podprogramů a používají se k různým účelům, například k požadavku na služby operačního systému a interakci s ovladači zařízení (např. Pro čtení nebo zápis na paměťová média).

Přerušení softwaru může být také neočekávaně spuštěno chybami při provádění programu. Tato přerušení se obvykle nazývají pasti nebo výjimky . Například výjimka dělení nulou bude „vyvolána“ (je požadováno softwarové přerušení), pokud procesor provede instrukci dělení s děličem rovným nule. Operační systém obvykle tuto výjimku zachytí a zvládne.

Metody spouštění

Každý vstup signálu přerušení je navržen tak, aby byl spuštěn buď logickou úrovní signálu, nebo konkrétní hranou signálu (přechod úrovně). Vstupy citlivé na úroveň nepřetržitě vyžadují službu procesoru, pokud je na vstup aplikována konkrétní (vysoká nebo nízká) logická úroveň. Vstupy citlivé na hrany reagují na hrany signálu: konkrétní (stoupající nebo klesající) hrana způsobí zablokování požadavku na službu; procesor resetuje západku, když se spustí obsluha přerušení.

Spuštěno na úrovni

Přerušení úrovně spustí se požaduje drží přerušení signálu na jeho konkrétní (vysoká nebo nízká) aktivní logické úrovně . Zařízení vyvolá přerušení vyvolané úrovní tak, že přivede signál na a podrží ho na aktivní úrovni. Když to procesor nařídí, neguje signál, obvykle po servisu zařízení.

Procesor vzorkuje vstupní signál přerušení během každého instrukčního cyklu. Procesor rozpozná požadavek na přerušení, pokud je signál uplatněn při vzorkování.

Vstupy spouštěné úrovní umožňují více zařízením sdílet společný signál přerušení prostřednictvím kabelových připojení NEBO. Procesor zjišťuje, která zařízení požadují službu. Po provedení servisu zařízení může procesor před ukončením ISR znovu provést dotazování a v případě potřeby provést servis ostatních zařízení.

Edge-triggered

Přerušení hrana spouštěné je přerušení signalizováno přechodem úrovně na přerušení vedení, a to buď sestupná hrana (sestupné) nebo náběžnou hranou (vzestupné). Zařízení, které chce signalizovat přerušení, přenese impuls na linku a poté linku uvolní do neaktivního stavu. Pokud je impuls příliš krátký na to, aby jej bylo možné detekovat pomocí polled I/O, může být k jeho detekci zapotřebí speciální hardware.

Reakce procesoru

Procesor vzorkuje signál spouštěcího přerušení během každého instrukčního cyklu a na spoušť bude reagovat pouze v případě, že je signál uplatněn při vzorkování. Bez ohledu na způsob spouštění začne procesor přerušovat zpracování na další hranici instrukcí po detekovaném spouště, čímž zajistí:

  • Program Counter (PC) je uložen ve známém místě.
  • Všechny instrukce před tím, na které poukázal počítač, byly plně provedeny.
  • Nebyla provedena žádná instrukce kromě instrukce, na kterou poukázal počítač, nebo jsou všechny takové instrukce vráceny před zpracováním přerušení.
  • Stav provedení instrukce, na kterou ukazuje PC, je znám.

Implementace systému

Přerušení mohou být implementována v hardwaru jako samostatná součást s řídicími linkami, nebo mohou být integrována do paměťového subsystému.

Je -li implementován v hardwaru jako odlišná součást, může být mezi přerušovací zařízení a přerušovací kolík procesoru zapojen obvod řadiče přerušení, jako je programovatelný řadič přerušení IBM PC (PIC), aby se multiplexovalo několik zdrojů přerušení na jeden nebo dva řádky CPU typicky k dispozici. Pokud je implementováno jako součást řadiče paměti , přerušení jsou mapována do adresního prostoru paměti systému .

Sdílené IRQ

Několik zařízení může sdílet linku přerušení spuštěnou hranou, pokud je k tomu určeno. Přerušovací vedení musí mít stahovací nebo tažný odpor, aby se při aktivním řízení usadilo do neaktivního stavu, což je výchozí stav. Zařízení signalizují přerušení krátkým uvedením linky do jejího výchozího stavu a nechají linku plavat (neřídí ji aktivně), když nesignalizuje přerušení. Tento typ připojení je také označován jako otevřený kolektor . Linka pak nese všechny impulsy generované všemi zařízeními. (To je analogické s tažným lankem u některých autobusů a trolejbusů, které může každý cestující vytáhnout, aby signalizoval řidiči, že žádá zastavení.) Přerušovací impulsy z různých zařízení se však mohou sloučit, pokud k nim dojde včas. Aby nedošlo ke ztrátě přerušení, musí se CPU spouštět na odtokové hraně impulsu (např. Náběžná hrana, pokud je linka vytažena nahoru a vedena nízko). Po detekci přerušení musí CPU zkontrolovat všechna zařízení, zda neobsahují servisní požadavky.

Přerušení vyvolaná hranami netrpí problémy, které mají přerušení spouštěná na úrovni se sdílením. Servis zařízení s nízkou prioritou lze libovolně odložit, zatímco přerušení ze zařízení s vysokou prioritou se nadále přijímají a opravují. Pokud existuje zařízení, které CPU neví, jak obsluhovat, což může způsobit falešná přerušení, nebude to rušit signalizaci přerušení jiných zařízení. Je však snadné vynechat přerušení spuštěné hranou - například když jsou přerušení maskována po určitou dobu - a pokud neexistuje nějaký typ hardwarové západky, která zaznamenává událost, nelze ji obnovit. Tento problém způsobil mnoho „zablokování“ v počátečním hardwaru počítače, protože procesor nevěděl, že se od něj něco očekává. Modernější hardware má často jeden nebo více stavových registrů přerušení, které zajišťují žádosti o přerušení; Dobře napsaný kód pro zpracování přerušení řízený hranou může tyto registry zkontrolovat a zajistit, aby nebyly zmeškány žádné události.

Starší sběrnice ISA ( Industry Standard Architecture ) používá přerušení spouštěná hranami, aniž by nařizovala, aby zařízení mohla sdílet linky IRQ, ale všechny běžné základní desky ISA obsahují na svých linkách IRQ vytahovací odpory, takže dobře vychovaná zařízení ISA sdílející linky IRQ by měl fungovat dobře. Paralelní port také používá okrajové spouštěné přerušení. Mnoho starších zařízení předpokládá, že používají výhradně linky IRQ, takže je elektricky nebezpečné je sdílet.

Existují 3 způsoby, jak lze aktivovat více zařízení „sdílejících stejný řádek“. První je výlučné vedení (přepínání) nebo výhradní připojení (na piny). Další je po sběrnici (všechny připojené ke stejné lince poslechu): karty v autobusu musí vědět, kdy mají mluvit a nemluvit (tj. Sběrnice ISA). Mluvení lze spustit dvěma způsoby: akumulační západkou nebo logickými hradly. Logické brány očekávají nepřetržitý tok dat, který je monitorován pro klíčové signály. Akumulátory se spouští pouze tehdy, když vzdálená strana budí bránu za prahovou hodnotu, takže není vyžadována žádná vyjednaná rychlost. Každý má své výhody oproti rychlosti. Spoušť je obecně metoda, při které je detekováno buzení: stoupající hrana, sestupná hrana, práh ( osciloskop může spouštět celou řadu tvarů a podmínek).

Spouštění přerušení softwaru musí být integrováno do softwaru (v operačním systému i v aplikaci). Aplikace 'C' má v záhlaví spouštěcí tabulku (tabulku funkcí), kterou aplikace i operační systém znají a používají je přiměřeně, což nesouvisí s hardwarem. Nezaměňujte to však s hardwarovými přerušeními, která signalizují CPU (CPU uzákoní software z tabulky funkcí, podobně jako softwarová přerušení).

Obtížné sdílení linek přerušení

Několik zařízení sdílejících linku přerušení (jakéhokoli spouštěcího stylu), všechny působí jako falešné zdroje přerušení vůči sobě navzájem. S mnoha zařízeními na jednom řádku roste pracovní zátěž při obsluze přerušení úměrně druhé mocnině počtu zařízení. Proto je výhodné rozložit zařízení rovnoměrně přes dostupné přerušovací linky. Nedostatek přerušovacích vedení je problém ve starších systémových návrzích, kde přerušovací vedení jsou zřetelné fyzické vodiče. Přerušení signalizovaná zprávou, kde je linka přerušení virtuální, jsou upřednostňována v nových systémových architekturách (například PCI Express ) a do značné míry tento problém zmírňují.

Některá zařízení se špatně navrženým programovacím rozhraním neposkytují žádný způsob, jak určit, zda požadovaly službu. Mohou se zablokovat nebo se jinak chovat nesprávně, pokud budou obsluhováni, když to nechtějí. Taková zařízení nemohou tolerovat falešná přerušení, a proto také nemohou tolerovat sdílení linky přerušení. Karty ISA jsou kvůli tomuto často levnému designu a konstrukci proslulé tímto problémem. Taková zařízení jsou čím dál vzácnější, protože hardwarová logika zlevňuje a nové systémové architektury nařizují přerušitelná sdílení.

Hybridní

Některé systémy používají hybridní signalizaci spouštěnou úrovní a hranou. Hardware nejen hledá hranu, ale také ověřuje, že signál přerušení zůstane aktivní po určitou dobu.

Běžné použití hybridního přerušení je pro vstup NMI (nemaskovatelné přerušení). Protože NMI obecně signalizují závažné - nebo dokonce katastrofické - systémové události, dobrá implementace tohoto signálu se snaží zajistit, aby přerušení bylo platné ověřením, že zůstane po určitou dobu aktivní. Tento dvoufázový přístup pomáhá eliminovat falešná přerušení ovlivňující systém.

Zpráva signalizována

Přerušení message-signalizovala nevyužívá fyzické přerušení linky. Místo toho zařízení signalizuje svůj požadavek na službu odesláním krátké zprávy přes nějaké komunikační médium, obvykle počítačovou sběrnici . Zpráva může být typu vyhrazeného pro přerušení nebo může být některého již existujícího typu, jako je zápis do paměti.

Přerušení signalizovaná zprávou se chovají velmi podobně jako přerušení spouštěná na hraně, v tom, že přerušení je spíše chvilkovým signálem než souvislou podmínkou. Software pro manipulaci s přerušením zachází s oběma stejným způsobem. Obvykle je povoleno sloučení více čekajících přerušení signalizovaných zprávou se stejnou zprávou (stejnou linkou virtuálního přerušení), stejně jako se mohou sloučit těsně rozmístěná přerušení vyvolaná hranami.

Vektory přerušení signalizované zprávou mohou být sdíleny do té míry, že lze sdílet základní komunikační médium. Není nutné žádné další úsilí.

Protože identita přerušení je indikována vzorem datových bitů, které nevyžadují samostatný fyzický vodič, lze efektivně zpracovat mnohem více odlišných přerušení. To snižuje potřebu sdílení. Zprávy o přerušení lze také předávat po sériové sběrnici, nevyžadují žádné další řádky.

PCI Express , sériová počítačová sběrnice, používá výhradně přerušení signalizovaná zprávou .

Domovní zvonek

V analogii tlačítka aplikovaného na počítačové systémy je termín zvonek nebo přerušení zvonku často používán k popisu mechanismu, pomocí kterého může softwarový systém signalizovat nebo upozornit zařízení hardwaru počítače , že je třeba vykonat nějakou práci. Softwarový systém obvykle umístí data na některá známá a vzájemně dohodnutá místa v paměti a „zazvoní u dveří“ zápisem na jiné místo v paměti. Toto odlišné umístění paměti se často nazývá oblast zvonku a v této oblasti může dokonce existovat více zvonků sloužících různým účelům. Právě tento akt zápisu do oblasti zvonku v paměti „zazvoní“ a upozorní hardwarové zařízení, že data jsou připravena a čekají. Hardwarové zařízení by nyní vědělo, že data jsou platná a lze s nimi jednat. Obvykle by data zapisovala na pevný disk nebo je odesílala po síti , šifrovala atd.

Termín přerušení zvonku je obvykle nesprávné pojmenování . Je to podobné přerušení, protože to způsobí, že zařízení provede nějakou práci; oblast zvonku je však někdy implementována jako oblast dotazování , někdy oblast zvonku zapisuje do registrů fyzického zařízení a někdy je oblast zvonku pevně připojena přímo k registrům fyzického zařízení. Při zápisu prostřednictvím nebo přímo do fyzických registrů zařízení to může způsobit skutečné přerušení v centrální procesorové jednotce ( CPU ) zařízení, pokud ji má.

Přerušení zvonku lze přirovnat k přerušení signalizovaným zprávou , protože mají určité podobnosti.

Multiprocesorový IPI

Ve víceprocesorových systémech může procesor odeslat požadavek na přerušení jinému procesoru prostřednictvím přerušení mezi procesory (IPI).

Výkon

Přerušení zajišťují nízkou režii a dobrou latenci při nízkém zatížení, ale výrazně degradují při vysoké rychlosti přerušení, pokud není věnována pozornost prevenci několika patologií. Fenomén, kde je celkový výkon systému výrazně omezen nadměrným množstvím času stráveného zpracováním přerušení, se nazývá bouře přerušení .

Existují různé formy živých zámků , kdy systém tráví veškerý svůj čas zpracováním přerušení s vyloučením dalších požadovaných úkolů. V extrémních podmínkách může velký počet přerušení (jako velmi vysoký síťový provoz) zcela zastavit systém. Aby se předešlo těmto problémům, musí operační systém naplánovat zpracování přerušení sítě stejně pečlivě, jako naplánuje spuštění procesu.

S vícejádrovými procesory lze dosáhnout dalších vylepšení výkonu při zpracování přerušení prostřednictvím škálování na straně příjmu (RSS) při použití víceřadých síťových karet . Takové NIC poskytují více přijímacích front spojených s jednotlivými přerušeními; směrováním každého z těchto přerušení do různých jader lze distribuovat zpracování požadavků na přerušení spouštěných síťovým provozem přijímaným jediným NIC mezi více jader. Distribuci přerušení mezi jádra může provádět automaticky operační systém, nebo lze směrování přerušení (obvykle označované jako afinita IRQ ) konfigurovat ručně.

Čistě softwarová implementace distribuce přijímacího provozu, známá jako řízení příjmu paketů (RPS), distribuuje přijatý provoz mezi jádry později v datové cestě, jako součást funkce obsluhy přerušení . Výhody RPS oproti RSS neobsahují žádné požadavky na konkrétní hardware, pokročilejší filtry distribuce provozu a sníženou rychlost přerušení vytvářeného síťovou kartou. Temnější stránkou je, že RPS zvyšuje rychlost přerušení mezi procesory (IPI). Řízení toku toku (RFS) posouvá softwarový přístup dále účtováním o lokalitě aplikace ; dalších vylepšení výkonu je dosaženo zpracováním požadavků na přerušení stejnými jádry, na kterých bude cílová aplikace spotřebovávat konkrétní síťové pakety.

Typické použití

Přerušení se běžně používají k obsluze hardwarových časovačů, přenosu dat do az úložiště (např. Diskové I/O) a komunikačních rozhraní (např. UART , Ethernet ), zpracování událostí klávesnice a myši a k ​​reakci na jakékoli jiné časově citlivé události podle požadavků aplikačního systému. Nemaskovatelná přerušení se obvykle používají k reakci na požadavky s vysokou prioritou, jako jsou časové limity hlídacího časovače, signály pro vypnutí a pasti .

Hardwarové časovače se často používají ke generování pravidelných přerušení. V některých aplikacích jsou taková přerušení počítána obsluhou přerušení, aby se sledoval absolutní nebo uplynulý čas, nebo je používá plánovač úloh operačního systému ke správě provádění spuštěných procesů nebo obojího. Periodická přerušení se také běžně používají k vyvolání vzorkování ze vstupních zařízení, jako jsou analogově-digitální převodníky , rozhraní přírůstkových kodérů , a vstupy GPIO , a k programování výstupních zařízení, jako jsou převodníky digitálně-analogových převodníků , regulátorů motoru a výstupů GPIO.

Přerušení disku signalizuje dokončení přenosu dat z nebo na periferii disku; to může způsobit spuštění procesu, který čeká na čtení nebo zápis. Přerušení napájení předpovídá bezprostřední ztrátu napájení, což umožní počítači provést řádné vypnutí, zatímco na to bude ještě dostatek energie. Přerušení klávesnice obvykle způsobí, že se stisky kláves ukládají do vyrovnávací paměti, aby bylo možné implementovat typeahead .

Přerušení se někdy používají k emulaci pokynů, které nejsou na některých počítačích v produktové řadě implementovány. Například instrukce s pohyblivou řádovou čárkou mohou být implementovány v hardwaru na některých systémech a emulovány na levnějších systémech. V druhém případě provedení neimplementované instrukce s pohyblivou řádovou čárkou způsobí přerušení výjimky "nelegální instrukce". Obsluha přerušení implementuje v softwaru funkci s plovoucí desetinnou čárkou a poté se vrátí do přerušeného programu, jako by byla provedena hardwarově implementovaná instrukce. To poskytuje přenositelnost aplikačního softwaru v celé řadě.

Přerušení jsou podobná signálům , rozdíl je v tom, že signály jsou používány pro meziprocesovou komunikaci (IPC), zprostředkovanou jádrem (možná prostřednictvím systémových volání) a zpracovávány procesy, zatímco přerušení jsou zprostředkovány procesorem a zpracovávány jádrem . Jádro může předat přerušení jako signál procesu, který jej způsobil (typickými příklady jsou SIGSEGV , SIGBUS , SIGILL a SIGFPE ).

Dějiny

Hardwarová přerušení byla zavedena jako optimalizace, která eliminuje neproduktivní čekací dobu ve volební smyčce a čeká na externí události. První systém, který používal tento přístup, byl DYSEAC , dokončený v roce 1954, ačkoli dřívější systémy poskytovaly funkce pastí chyb .

UNIVAC 1103 počítačový je obecně připočítán s nejčasnější použití přerušení v roce 1953. Dříve, na UNIVAC I (1951), „přetečení buď spustil Poprava dvou-instrukční fix-up rutina na adrese 0, nebo podle volby programátora , způsobil, že se počítač zastavil. “ IBM 650 (z roku 1954), začleněno první výskyt přerušení maskování. National Bureau of Standards DYSEAC (1954) byl první používat přerušení I / O. IBM 704 byl první používat přerušení pro ladění s „přenos past“, což by mohlo vyvolat zvláštní rutina, kdy byl pokyn větev setkal. Systém MIT Lincoln Laboratory TX-2 (1957) byl první, kdo poskytl více úrovní prioritních přerušení.

Viz také

Poznámky

Reference

externí odkazy