Uživatelský režim a režim jádra. Přerušení a výjimky. Přerušení a výjimky v Linuxu

§ 3.1. Systém zpracování přerušení

Díky možnosti přepínat z jednoho vlákna provádění do druhého,

Na to musí reagovat i jádro operačního systému přeruší (přeruší) a

výjimky(výjimky). Mluvíme o signálech, které v systému vznikají a způsobují

umožnit procesoru přerušit svou práci a přejít na zpracování vznikajícího výkonu

situace. Podívejme se na tyto dva mechanismy podrobněji.

Přerušuje zastupovat mechanismus , což vám umožní koordinovat paralelně

Bezpečné fungování jednotlivých zařízení výpočetní systém a reagovat-

řeší zvláštní podmínky, které vznikají při provozu procesoru. Tedy, přerušení

Přenos je vynucený přenos řízení z programu, na který se provádí

systém(a jeho prostřednictvím - do odpovídajícího programu pro zpracování přerušení), dojde

který nastane, když dojde k určité události.

Myšlenka přerušení byla navržena v polovině 50. let a bez nadsázky

touha říci, že nejvíce přispěla k rozvoji výpočetní techniky

přezdívky Hlavním účelem zavedení přerušení je implementace asynchronního provozního režimu a

paralelizace provozu jednotlivých zařízení výpočetního komplexu.

Mechanismus přerušení je implementován v hardwaru a softwaru. První

Podívejme se nejprve obecně na hardware systému přerušení. Signály

hardwarová přerušení, ke kterým dochází v zařízeních v počítači

nebo k němu připojené, vstupují do procesoru nikoli přímo, ale prostřednictvím dvou kon-

přerušovací troller, z nichž jeden se nazývá master a druhý slave

(obr. 3.1). U předchozích modelů strojů byly ovladače samostatné mikro-

roschems; v moderních počítačích jsou součástí multifunkčního mikro-

obvody periferních ovladačů.

Obr.3.1. Přerušení hardwaru systému.

Ke zvýšení slouží dva ovladače platné číslo vnější ústa

roje Faktem je, že každý řadič přerušení může obsluhovat signály

pouze z osmi zařízení. Pro servis více ovládacích zařízení

lers mohou být kombinovány do podoby vějířovité struktury. V moderním ma-

na sběrnicích jsou instalovány dva ovladače, čímž se zvyšuje možný počet vstupů

až 15 zařízení (7 pro hlavní a 8 pro podřízený ovladač).

Ke vstupním pinům IRQ1...IRQ7 a IRQ8...IRQ15 (IRQ je zkratka pro přerušení

Požadavek, požadavek na přerušení) připojte piny zařízení, na kterých je

přerušovat signály. Výstup hlavního ovladače je připojen ke vstupu INT mikroprocesoru

procesor a výstup podřízeného - na vstup IRQ2 nadřízeného. Hlavní funkcí ovladače je

příkop - přenos signálů požadavků na přerušení z externích zařízení do jednoho


vstup přerušení procesoru. V tomto případě regulátory kromě signálu INT vysílají do

procesor na datových linkách vektorové číslo, které je v řadiči tvořeno tím

sečtením základního čísla zaznamenaného v jednom z jeho registrů se vstupním číslem

linka, na které byla přijata žádost o přerušení. Zadávají se čísla základních vektorů

řadiče automaticky během procesu spouštění počítače. To je zřejmé

čísla vektorů hardwarových přerušení jsou jednoznačně spojena s čísly řádků, popř

úrovně IRQ a prostřednictvím nich - s konkrétní zařízení počítač. Na obr. 3.1 je

Jsou označena hlavní počítačová zařízení pracující v režimu přerušení.

Procesor poté, co přijal signál přerušení přes linku INT, provede sekvenční

soubor standardních akcí, které lze nazvat procedurou přerušení. Význam

Postup přerušení spočívá v uložení stavu aktuálního (přerušeného)

naprogramovat a přenést řízení na handler odpovídající události

mu přerušení.

Může dojít k přerušení systémových struktur (v závislosti na hardwarové architektuře).

být velmi odlišné, ale všechny mají jedno společný rys- přerušení nepřetržitého

To přímo znamená změnu v pořadí, ve kterém jsou instrukce vykonávány procesorem.

Mechanismus zpracování přerušení bez ohledu na výpočetní architekturu

Systém obsahuje následující prvky:

1. Zjištění faktu přerušení (příjem signálu k přerušení) a identifikace

funkce přerušení (v operačních systémech se někdy provádí opakovaně, na

2. Pamatování stavu přerušeného procesu. Je určen stav procesu

nejprve hodnota programového čítače (adresa další instrukce, která

což je například v i80x86 určeno registry CS a IP - ukazatel instrukce),

obsah registrů procesoru a může také zahrnovat re-

režim (například uživatelský nebo privilegovaný režim) a další

informace.

3. Řízení je přenášeno hardwarem do podprogramu pro obsluhu přerušení. v pro-

V nejjednodušším případě se do programového čítače zadá počáteční adresa podprogramu programu.

zpracování přerušení a v odpovídajících registrech - informace ze slova co-

stojící. Ve více pokročilé procesory, například ve stejném i80286 a

následující 32bitové mikroprocesory počínaje i80386 provádějí

poměrně komplikovaný postup pro určení počáteční adresy odpovídající

rutiny pro obsluhu přerušení a stejně složitý postup inicializace

procesorových pracovních registrů.

4. Uložení informací o přerušeném programu, do kterého nebylo možné uložit

krok 2 pomocí hardwarových akcí. Na některých počítačových systémech

umožňuje zapamatovat si poměrně velké množství informací o ko-

zatímco je proces přerušen.

5. Obsluha přerušení. Tuto práci může provádět stejný podprogram

můj, na který bylo řízení přeneseno v kroku 3, ale v OS nejčastěji reaguje

je lyzován následným voláním příslušného podprogramu.

6. Obnova informací souvisejících s přerušeným procesem (etapa, ob-

paralelně s krokem 4).

7. Vraťte se k přerušenému programu.

Kroky 1-3 jsou implementovány v hardwaru a kroky 4-7 v softwaru. Obrázek 3.2 ukazuje

že když dojde k požadavku na přerušení, přirozený tok výpočtů je narušen

a řízení je přeneseno do programu zpracování přerušení. Ve stejnou dobu

uloženy hardwarovými prostředky (obvykle pomocí mechanismů stohování parametrů)

paměti) adresa příkazu, se kterým se má pokračovat ve vykonávání přerušeného programu

gramů. Po provedení rutiny přerušení se řízení vrátí


dříve přerušený program zadáním uloženého příkazu do indexu příkazů

týmové adresy. Toto schéma se však používá pouze v nejjednodušších programech -

ny prostředí. Ve víceprogramových operačních systémech je zpracování přerušení pro-

pochází z více složitá schémata, o kterém bude podrobněji pojednáno níže.

Obr.3.2. Manipulace s přerušením

Tak, hlavní funkce přerušovacího mechanismu :

Rozpoznání nebo klasifikace přerušení;

Odpovídajícím způsobem předání řízení na obsluhu přerušení;

Správný návrat k přerušenému programu.

Musí být proveden přechod z přerušeného programu na psovoda a zpět

co nejrychleji. Jeden z rychlé metody je použít stůl,

obsahující seznam všech přerušení povolených pro počítač a příslušné adresy

vyjící psovody. Pro správný návrat k dříve přerušenému programu

přenesením řízení na obsluhu přerušení je obsah registrů procesoru

je uložen buď v paměti s přímým přístupem nebo v systémovém zásobníku.

Přerušení, ke kterým dochází během provozu výpočetního systému, lze rozdělit

do dvou hlavních tříd: externí (někdy nazývané asynchronní) a interní

(synchronní).

Externí přerušení jsou způsobeny asynchronními událostmi, ke kterým dochází

mimo proces, který je přerušen, například:

Časovač přerušení;

Přerušení z externích zařízení (přerušení vstupu/výstupu);

Přerušení kvůli výpadku napájení;

Přerušení z konzoly operátora počítačového systému;

Přerušení z jiného procesoru nebo jiného počítačového systému.

Vnitřní přerušení jsou způsobeny událostmi, které jsou spojeny s provozem pro-

procesor a jsou synchronní s jeho operacemi. Příklady jsou následující

požadavky na přerušení:


Pokud dojde k porušení adresování (v části adresy prováděného příkazu, zakázáno

ztracenou nebo neexistující adresu, přístup k chybějícímu segmentu, popř

stránku při organizování mechanismů virtuální paměti);

Pokud je v poli kódu operace nepoužitá binární kombinace;

Při dělení nulou;

Když objednávka přeteče nebo zmizí;

Pokud jsou zjištěny chyby parity nebo chyby v provozu různých hardwarových zařízení,

prohlídky pomocí ovládání.

Při přístupu k supervizoru OS mohou stále docházet k přerušením – v některých případech

Na některých počítačích může některé příkazy používat pouze operační systém, nikoli uživatelé. Co-

jsou zodpovědně poskytovány ve výbavě různé režimy práce a uživatele

Čínské programy se spouštějí v režimu, ve kterém tyto privilegované příkazy nejsou

se naplňují. Pokud se pokusíte použít příkaz, který je v tomto režimu zakázán,

pochází z vnitřní přerušení a řízení je přeneseno na supervizora OS. K výsadě

Součástí upravených povelů jsou i povely pro přepínání režimu práce centrály

procesor.

Konečně, skutečně existují softwarová přerušení . Tato přerušení

nastat podle odpovídající příkaz přeruší, tedy podle tohoto příkazu proces

Blokátor provádí téměř stejné akce jako u běžných vnitřních přerušení.

niyah. Tento mechanismus byl speciálně zaveden tak, že přechod na systém

temné programové moduly nevznikly jednoduše jako přechod do podprogramu, ale

přesně stejným způsobem jako normální přerušení. Tím je zajištěna automatika

přepnutí procesoru do privilegovaného režimu s možností spouštění

jakékoli příkazy.

Signály způsobující přerušení jsou generovány mimo procesor nebo uvnitř samotného procesoru.

procesor; mohou nastat současně. Výběr jednoho z nich ke zpracování

se provádí na základě priorit přiřazených každému typu přerušení. au-

Je vidět, že přerušení od řídicích obvodů procesoru by měly mít nejvyšší

priorita (pokud zařízení nefunguje správně, nemá smysl pokračovat ve vývoji

informační láhev). Obrázek 3.3 ukazuje obvyklé pořadí (priority) zpracování

přerušení v závislosti na typu přerušení.

Obr.3.3. Rozdělení přerušení podle úrovní priority

Prioritní zohlednění může být zabudováno technické prostředky a také být stanovena

operační systém, tedy kromě hardwarově implementovaných priorit přerušení,

žádná většina počítače a komplexy umožňují software-


hardwarové ovládání pořadí, ve kterém jsou zpracovávány signály přerušení. Druhá metoda, dříve

Vyplněním prvního umožňuje použití různých disciplíny přerušení práce -

Přítomnost signálu přerušení nemusí nutně způsobit přerušení provádění.

rozvojový program. Procesor může mít ochranu proti přerušení:

deaktivace systému přerušení, maskování (inhibice) jednotlivých signálů přerušení

nia. Softwarové ovládání těchto nástrojů (existují speciální příkazy pro

řídit provoz systému přerušení) umožňuje operačnímu systému regulovat

zpracovávat signály přerušení, což nutí procesor, aby je zpracoval okamžitě

po příjezdu jejich vyřízení na chvíli odložit nebo je úplně ignorovat.

Operace přerušení se obvykle provádí až po dokončení aktuálního provádění.

týmu. Protože k signálům přerušení dochází v libovolnou dobu,

menu, pak v době přerušení může být několik signálů přerušení,

které lze zpracovat pouze sekvenčně. Ke zpracování signálů

přerušení jsou upřednostňována v rozumném pořadí. Signál s vyšší

Tato priorita je zpracována jako první;

trhání se odkládá.

Softwarové ovládání speciálních registrů masek (maskování signálu)

lapač přerušení) umožňuje implementovat různé servisní disciplíny:

S relativní priority , to znamená, že služba není ani přerušena

pokud existují požadavky s vyšší prioritou. Po dokončení služby

Během životnosti daného požadavku je obsluhován požadavek s nejvyšší prioritou. Pro

k tomu je v programu údržby nezbytná organizace takové disciplíny

požadavek na použití masek na všechny ostatní signály přerušení nebo jednoduše

povolit systém přerušení;

S absolutní priority , tedy přerušení s

nejvyšší prioritou. K implementaci tohoto režimu je potřeba chvíli

zpracování přerušení pro maskování všech požadavků s nižší prioritou.

V tomto případě je možné víceúrovňové přerušení, tedy přerušení programu

zpracování přerušení. Počet úrovní přerušení v tomto režimu se liší a

závisí na prioritě požadavku;

Podle princip zásobníku , nebo, jak se někdy říká, subdisciplína LCFS (poslední, první

sloužil - poslední přišel - první sloužil), tedy žádosti s nižším

priorita může přerušit přerušení zpracování s vyšší prioritou

objem. K tomu nesmíte použít masky na žádný signál přerušení.

a nevypínejte systém přerušení.

Zvláště je třeba poznamenat, že pro správné provedení posledních dvou disciplín

Při provádění skriptu je nutné zajistit kompletní maskování systému přerušení.

vláda 1-4 a 6-7. To je nezbytné, aby nedošlo ke ztrátě požadavku a jeho správnému zpracování.

sloužit. Víceúrovňové přerušení musí nastat v samotné fázi

přerušení zpracování, a nikoli ve fázi přechodu z jednoho procesu do druhého.

Řízení průběhu úkolů na straně OS spočívá v organizování

reakce na přerušení při organizování výměny informací (dat a programů),

poskytování potřebných zdrojů, v dynamice úkolu a v organizaci

servis. Příčiny přerušení jsou určeny OS (modul nazývaný dohled

rum přerušení), dále provádí úkony potřebné pro dané přerušení a

v této situaci. Proto každý OS v reálném čase primárně zahrnuje

programy pro správu systému přerušení, sledování stavů úloh a událostí,

synchronizace úkolů, alokace paměti a nástroje pro správu a teprve potom

prostředky pro organizaci dat (pomocí souborových systémů atd.). Mělo by však

všimněte si, že moderní operační systém v reálném čase musí zavádět hardwarové


softwarový balík víc než jen poskytnout rychlou odpověď

přerušení.

Jak již víme, když se objeví požadavek na přerušení, systém přerušení

identifikuje signál a pokud jsou povolena přerušení, řízení se přenese na odpovídající

odpovídající rutina zpracování. Z obr. 3.2 je zřejmé, že v podprogramu zpracování

existují přerušení dvě servisní sekce . Toto je první část, ve které

uloží kontext přerušené úlohy, kterou nebylo možné uložit

2. krok, a poslední, závěrečná sekce, ve které se naopak

obnovení kontextu. Chcete-li zabránit tomu, aby systém přerušení znovu reagoval,

ale po signálu požadavku na přerušení se obvykle automaticky „zavře“ (vypne)

ne) přerušení, takže je to nutné později v podprogramu zpracování přerušení

znovu povolit systém přerušení. Nastavení uvažovaných režimů zpracování

přerušení (s relativní a absolutní prioritou a podle pravidla LCFS)

provedené na konci první části podprogramu zpracování. Tedy na

doba provádění centrální sekce (v případě provozu v režimech s absolutní

priority a podle disciplíny LCFS) jsou povolena přerušení. Po dobu práce uzavřít

V hlavní části podprogramu zpracování musí být systém přerušení deaktivován

a po obnovení kontextu se znovu zapne. Protože tyto akce jsou nezbytné

provádět téměř v každé rutině zpracování přerušení, v mnoha operacích

Na racionálních systémech jsou první sekce rutin přerušení alokovány v

speciální systém softwarový modul, volal dozorce přerušení .

Vedoucí přerušení nejprve uloží do aktuálního deskriptoru úlohy

pracovní registry procesoru, které definují kontext přerušeného výpočtu

související s obsluhou současného (aktuálního) požadavku na přerušení. Konečně,

Před předáním řízení tomuto podprogramu supervizor přerušení

nastaví požadovaný režim zpracování přerušení. Po provedení podprogramu

vyřídíme přerušení, řízení je opět přeneseno na supervizora, tentokrát již zapnuto

modul, který se zabývá odesíláním úkolů. A již správce úloh, v jeho

fronty v souladu s přijatým režimem distribuce času procesoru

(mezi běžícími procesy) obnoví kontext úlohy, která bude

Bylo rozhodnuto o přidělení procesoru. Uvažovaný obvod je znázorněn na obr. 3.4.

Jak je patrné z obr. 3.4, nedochází k přímému návratu k dříve přerušenému

program přímo ze samotné rutiny přerušení. Pro přímé

Pro okamžité vrácení stačí uložit zpáteční adresu do zásobníku, což uděláte -

žádný hardware procesoru. Současně zásobník snadno poskytuje možnost návratu

případ vnořených přerušení, protože vždy implementuje disciplínu LCFS (poslední

přijďte - první mele).

Pokud by však kontext procesu byl jednoduše uložen na zásobníku, jak je tomu obvykle

implementovány spíše hardwarem než v deskriptorech úloh, neexistuje způsob, jak flexibilně

přistupovat k výběru úkolu, který je potřeba po dokončení přenést na procesor

operace podprogramu pro obsluhu přerušení.

Podívejme se, jak se ve Windows řeší přerušení. V tomto

Operační systém přiřadí každému přerušení určitou prioritu,

volal úroveň požadavku na přerušení (úroveň požadavku na přerušení, IRQL). IRQL je přiděleno

zdroj přerušení. Například myš má IRQL, které je přiřazeno k příspěvku

signály z něj vycházející. Systémový časovač také generuje svá vlastní přerušení.

ne, kterým je přiřazeno jiné IRQL.


Obr.3.4. Vyřizování přerušení za účasti supervizorů OS

Centrální procesor má také své vlastní IRQL, které se mění podle toho

systémové roboty. Změna IRQL CPU umožňuje systému blokovat

vydávat přerušení s nižší prioritou. Priorita procesoru se může změnit

pouze systémové služby běžící na úrovni jádra, jako je interceptor. streamy,

ti, kteří pracují na uživatelské úrovni, taková oprávnění nemají. Blokováno-

přerušení není věnována žádná pozornost, dokud se neobjeví nějaké vlákno.

žádným způsobem nesníží úroveň přerušení CPU. Pokud procesor

běží na nejnižší hodnotě IRQL, dojde k normálnímu spuštění vlákna

a všechna přerušení jsou povolena. Když zavolá interceptor postup pro

přerušení provozu(rutina služby přerušení, ISR), nejprve přiřadí ústřednu

do stejného procesoru stejné IRQL, který má zachycený signál. Prozatím

Přerušení ISR je více než nízká úroveň, například signály ze vstupních zařízení

data jsou blokována, aby neodváděla pozornost systému od provádění kritických operací

postupy, jako jsou postupy obnovy po výpadku napájení. Při snižování

Blokovaná přerušení IRQL procesoru se odblokují a začnou se střídat

zpracovány běžným způsobem. Čas od času se přepne centrální procesor

běží na nejnižší IRQL, aby se obnovilo provádění přerušených vláken.

Než přistoupíte ke zpracování přerušení, musí interceptor najít v systému

odpovídající podprogram pro dané téma. Vyhledává takové rutiny tabulkový procesor

definice přerušení(tabulka odbavení přerušení, IDT). Uvedená tabulka obsahuje 32

záznamy, jeden pro každou úroveň požadavku na přerušení. Každý z těchto záznamů označuje

volání servisní rutiny přerušení nebo jejich sekvenčního řetězce

podprogramy - v případě, že několik zařízení používá stejné IRQL.

Při načítání do systému nový řidič zařízení zapisuje do vlastního IDT

psovod. Ovladače to dělají vytvořením a připojením objekt přerušení ,

těch. struktura obsahující všechny informace, které jádro potřebuje k dokončení IDT.

Pomocí objektu přerušení se mohou ovladače zaregistrovat

jejich obsluhy přerušení, aniž by o čemkoli věděli hardwarové zařízení ani o struktuře

kolo tabulky rozdělení přerušení.


§ 3.2 Obecné zásady zpracování výjimek

Jak program běží, z různých důvodů funguje normálně

může být porušeno. Zejména to může být způsobeno tím, že centrální proces

koliduje s neplatnou adresou paměti, uživatel přeruší provádění

programy s kombinací horkých kláves, debugger jakýmkoliv způsobem

zastaví program a znovu jej spustí; chyba může souviset i se vstupem

nesprávná hodnota při provádění operace s pohyblivou řádovou čárkou. Tyto a další

Výjimečné situace mohou nastat jak na uživatelské úrovni, tak i na úrovni uživatele

na úrovni jádra operačního systému, a to jak v procesorech RISC, tak v procesorech

Intel. Výskyt takových situací může být signalizován hardwarově i softwarově.

software. Každý programovací jazyk musí obsahovat nástroje

zpracování výjimek ke sjednocení zpracování prováděného v různých

situace. Windows obsahuje vestavěné nízkoúrovňové strukturované mechanismy

manipulace bez výjimky.

Výjimky jsou v podstatě stejné jako přerušení. Především

tím, že oba signály nutí centrální procesor přenést řízení na speciální

žádná část operačního systému. Výjimky a přerušení však nejsou totéž

stejný. K přerušení dochází asynchronně, často v důsledku určitého hardwaru

události, jako jsou stisky kláves nebo data přijatá přes sériový port

přístav. Program nad takovými přerušeními nemá žádnou kontrolu a mohou

nastat každou chvíli. Na druhou stranu se výjimky vyskytují synchronně, např

výsledek provádění určitých příkazů programu. Výjimky často slouží

signál indikující přítomnost chybných podmínek. Obvykle se rozmnožují

jsou nalezeny opětovným spuštěním programu se stejným kontextem.

Výjimky jsou často vyvolány, když je některá část programu poškozena.

detekuje chybu, ale nedokáže ji sám zvládnout. Systém tedy generuje

Vyvolá výjimku v reakci na chyby přístupu do paměti a chyby dělení nulou. Od-

Ne všechny výjimky jsou však generovány chybovými situacemi. Windows generuje

speciální výjimka pro volání konkrétní systémové služby. Během zpracování

tato výjimka přenáší jádro řízení na tu část operačního systému, která

poskytuje požadovanou službu.

Jakákoli vyvolaná výjimka musí být zpracována, pokud ne samotným programem.

můj, pak musí reagovat operační systém, respektive určitý podprogram

gram, který výjimku zpracuje a odstraní. Zpracování je tedy vyloučeno

Řešením je vytvoření speciálních bloků programový kód, který

spustit, když nastanou výjimečné situace. Každá aplikace musí

gramů ze všech druhů výjimek.

V procesu hledání odpovídajícího bloku zamýšleného programového kódu

u konkrétní výjimečné situace se systém nejprve podívá na aktuální

postup, pak se vrátí zpět do zásobníku volání a podívá se na další aktivní

odložené procedury stejného procesu a nakonec přejde k systémovému zpracování

výjimky pro kuřata. Pokud je proces, který vygeneroval výjimku, chráněn před

handler, druhý dostane také šanci výjimku zvládnout.

Nástroje pro zpracování chyb v různých podsystémech a programovacích jazycích

se od sebe poněkud liší. Například subsystém WOW (Windows na Win32 -

chráněný subsystém běžící uvnitř procesu virtuálního stroje DOS)

musí zpracovávat všechny výjimky přímo, protože klienti Winl6 to nedělají

mají schopnost to udělat sami. Kromě toho v různých jazycích pro-


programování, syntaxe příkazů pro zpracování výjimek se může značně lišit.

Období strukturované zpracování výjimek znamená, že jazyk obsahuje

specifická řídicí struktura spojená s výjimkami.

Programátoři, kteří se poprvé setkali s problémem strukturovaného zpracování

ki výjimky se často mylně domnívá, že již není potřeba kontrolovat

výstupní kód pro každý příkaz. Ve skutečnosti chyba zdaleka není totéž jako

jaká výjimka. Funkce může skončit bez vyvolání výjimky. Uvažujme v

Jako příklad jsou uvedeny následující řádky programového kódu implementované na rozhraní API

funkce pro OS Windows:

hBrush = CreateSolidBrush(RGB(255, 0, 0)) ;

hOldBrush = SelectObject(hDC, hBrush);

Obdélník(hDC, 0, 0, 100, 100);

Pokud je první příkaz proveden nesprávně a vrátí se pro vygenerovanou kyselinu

Vy Hodnota NULL, pak nelze provést ani funkci SelectObject(). Třetí

příkaz stále nakreslí obdélník, ale vybarví jej špatnou barvou

potřebná. Negenerují se žádné výjimky. Jediný způsob, jak se proti takovým chránit

Nejčastější chybou je kontrola návratové hodnoty. Zde je další příklad:

hPaměť =GlobalAlloc(GHND, 1000);

pData = (char *)GlobalLock(hMemory);

Pokud dojde k chybě alokace paměti, proměnná

hMemory je NULL, funkce GlobalLock() se neprovede a proměnná

Tato pData má také hodnotu NULL. Žádná z těchto chyb však negeneruje

výjimky. Ale následující řádek programového kódu při pokusu o záznam

na špatné adrese vyvolá výjimku:



// vyvolá výjimku, pokud pData = NULL


Výjimkou je typ chyby, který nemůže být

zpracovává samotný tým. Pokud funkce GlobalAlloc nezjistí dostatek

Aby mohl být proveden, jednoduše vrátí NULL. Ale pokud operátor

přiřazení ru nemá kam předat hodnotu, neprovádí žádné akce a dokonce

nevrací chybový kód. To vyvolá výjimku, a pokud proces nemůže

pro jeho zpracování musí operační systém tento proces ukončit.

Často je obtížné stanovit hranici mezi chybami a výjimkami. Rozdíl

mezi nimi někdy závisí na konkrétní implementaci. Aby bylo možné rozpoznat

mandy, které umí vyvolat výjimky, musíte mít nějaké zkušenosti. Vy

musí znát všechny různé typy výjimek a umět určit, které

operace k nim mohou vést. Výsledkem je například chyba v operátoru přiřazení

výjimka typu narušení přístupu . Seznam možných výjimek je obvykle

se liší v závislosti na konkrétní počítač existuje však řada výjimek,

které se určují na úrovni jádra Windows :

Nesouosost datového typu;

Bod přerušení ladicího programu;

Ladění krok za krokem(debugger jednokrokový);

Dělení nulou v operacích s pohyblivou řádovou čárkou (dělení s pohyblivou řádovou čárkou nulou);

narušení přístupu do paměti;

Chyba čtení stránky;

Překročena kvóta stránkovacího souboru;

Privilegovaná výuka.

Typ výjimky, ke které došlo, lze určit pomocí funkce DWORD Ge

tExceptionCode(void). Funkce vrátí kód výjimky. Tabulka 3.1 ukazuje

názvy hlavních kódů.

Tabulka 3.1


EXCEPTION_ACCESS_VIOLATION

EXCEPTION_FLT_DIVIDE_BY_ZERO

EXCEPTION_INT_DIVIDE_BY_ZERO

EXCEPTION_INT_OVERFLOW

EXCEPTION_PRIV_INSTRUCTION


Pokus o přístup k paměťové buňce,

přístup ke kterému je zakázán (např.

není přidělena žádná paměť)

Dělení nulou s pohyblivou řádovou čárkou

Dělení pevného bodu nulou

Přetečení celého čísla

Pokus o provedení privilegovaného


§ 3.3 Nástroje pro zpracování výjimek ve Visual C++

Blok programového kódu v C++ musí vždy začínat klíčovými slovy

snažíš se chytit. Blok try označuje fragment programu, který může generovat použití

výjimku a blok catch obsahuje program, který se spustí, když dojde k výjimce.

Z pohledu programátora věci jako syntaktické struktury vhodné pro oddělení

vývoj programového kódu určeného pro řešení výjimečných situací, od

kód, který provádí běžné úkoly. Visual C++ implementuje mechanismus zpracování

výjimky, který je založen na schématu navrženém Výborem pro normy ANSI

jazykem C++. Podle tohoto schématu před voláním funkce, která může

musí být spuštěna výjimka

obsluha výjimek. Pokud funkce vede k abnormálnímu systému

V situaci je vygenerována výjimka a řízení je přeneseno na handler.

V Visual C++ je zpracování výjimek podporováno prostřednictvím několika

mechanismy:

Funkce, které poskytují strukturované zpracování výjimek;

Třídy odpovědné za zpracování určitých typů výjimek;

Makra, která umožňují strukturování obslužných rutin výjimek

aplikace;

Funkce navržené pro generování výjimek různých typů.

Všechny tyto mechanismy umožňují generovat výjimky požadovaných typů i když

potřeba zastavit běh programu.

Jak bylo uvedeno výše, základem jakéhokoli mechanismu zpracování výjimek v

Prostředí Visual C++ se skládá z příkazů try and catch. Struktura try/catch odděluje podprogramy


©2015-2019 web
Všechna práva náleží jejich autorům. Tato stránka si nečiní nárok na autorství, ale poskytuje bezplatné použití.
Datum vytvoření stránky: 2016-04-02

Při provozu mikroprocesorového systému často nastávají situace, kdy je nutné přerušit provádění aktuálního programu a přejít na podprogram, který zajistí potřebnou reakci systému na vzniklé okolnosti. Takové situace se nazývají přerušení (nebo výjimky) v závislosti na důvodech, které je způsobují. V této kapitole se jako příklad podíváme na mechanismy pro generování a zpracování přerušení pomocí procesorů rodiny ix86, protože právě zde je implementováno mnoho z těchto mechanismů. Na konci kapitoly jsou zmíněny vlastnosti společné pro jiné typy procesorů.

0,1 $. Typy přerušení a výjimek, provádění jejich údržby

Přerušení(přerušení) jsou normální situace, které nastávají, když jsou přijaty odpovídající instrukce (softwarová přerušení) nebo externí signály (hardwarová přerušení). Výjimky(výjimka) jsou abnormální situace (chyby), ke kterým dochází při provozu procesoru. Když jsou takové chyby detekovány, odpovídající bloky, které řídí činnost procesoru, generují interní požadavkové signály, které vyvolávají nezbytnou rutinu údržby. Procesor je schopen obsloužit 256 různých typů výjimek a přerušení. Odpovídající zpracování informací při takových situacích se provádí pomocí speciálních obslužných rutin (obslužných rutin) (obslužných rutin (interrupthandlers) ukazatelů na obslužné rutiny (vektorů přerušení) jsou uloženy v tabulce umístěné v systémové paměti.

Podle typu výskytu se přerušení dělí na softwarová, hardwarová a přerušení z interních procesorových jednotek.

Software Přerušení jsou jedinečným způsobem volání procedur, obvykle systémových. Provádí se podle návodu INTn , DO , INT 3, VÁZANÝ .

Žádosti o doplnění železářské zboží přerušení přicházejí z externích zařízení na vstupy LINT0/ INTR,LINT1/ NMI procesor. Na víceprocesorovém systému, když je povolen interní místní řadič přerušení APIC (viz část $.4), signály LINT1-0 na těchto vstupech se zjišťuje číslo požadavku přicházejícího z jiných zařízení (procesorů) systému. V jednoprocesorovém systému, když je řadič APIC deaktivován, se tyto vstupy používají k napájení maskovatelných INTR a odmaskovaný NMI požadavky na přerušení z různých externích zařízení.

Maskovatelné přerušení jsou způsobena aktivací vstupu INTR(Požadavek na přerušení). Jejich službu lze zakázat (zamaskovat) nastavením hodnoty příznaku IF=1 ve stavovém registru EFLAGS. Takový požadavek obvykle přichází z externího zařízení prostřednictvím speciálního řadiče přerušení, který shromažďuje požadavky z různých externích zařízení a předává je procesoru ke zpracování, přičemž pro ně také uvádí číslo. n definování typu přerušení (INTRn). U vchodu NMI je přijat požadavek na nemaskovatelné přerušení, jehož servisní procedura má pevné číslo n=2 (viz tabulka $.1). Hodnota příznaku IF v registru EFLAGS nemá vliv na obsluhu požadavku na nemaskovatelné přerušení NMI procesorem. Když procesor pracuje ve víceprocesorovém systému, když pracuje místní řadič přerušení APIC, jsou požadavky na hardwarové přerušení (maskovatelné a nemaskovatelné) přijímány prostřednictvím speciální sběrnice APIC (viz oddíl $.4).

Prvních 32 vektorů v tabulce přerušení je vyhrazeno pro výjimky. Každý typ výjimky má mnemotechnický symbol. Výjimky se dělí na chyby (Poruchy), pasti (Pasti) A selhání (Potraty). V tabulce $.1 je uvádí pro chráněný režim. V reálném režimu mají některá přerušení (například #TS nebo #PF) trochu jiný význam, ale o těchto případech zde není řeč. Vysvětlení sloupce "třída" bude uvedeno při popisu chyby #DF v části $.2.

Chyby jsou identifikovány a obsluhovány před provedením instrukce, která je způsobí. Příkladem chyby je situace, která nastane, když další instrukce přistoupí na stránku nebo segment, který není přítomen v adresovatelné paměti RAM (přístup k segmentu nebo stránce, pro kterou je bit přítomnosti P = 0, viz část 7.3). V případě chyby se adresa instrukce, jejíž provedení způsobilo výjimku, uloží jako návratová adresa k přerušenému programu.

Aby bylo možné zpracovat požadavky z externích zařízení, hlásit chyby nebo výjimečné okolnosti, je nutné přerušit provádění aktuálního programu a provést v této situaci některé nezbytné akce. Jaký je rozdíl mezi přerušeními a výjimkami. Rozdíly mezi přerušeními a výjimkami jsou v tom, že přerušení jsou navržena tak, aby zpracovávala požadavky z externích zařízení, a výjimky jsou navrženy tak, aby zpracovávaly chyby, ke kterým dochází při provádění příkazů. Výjimkou jsou také softwarová přerušení. Pomocí příkazu INT n (kde n je číslo přerušení) můžete provést přerušení s libovolným číslem v rozsahu od 0 do 255. Čísla 0...31 jsou vyhrazena společností Intel pro výjimky. Přerušení vytvářená zařízením se provádějí po provedení aktuálního příkazu a vyskytují se jako výsledek některých externích asynchronních (nesouvisejících s aktuálním procesem) událostí, například stisknutí klávesy. Poté, co obslužná rutina přerušení dokončí obsluhu přerušení, pokračuje provádění přerušeného programu instrukcí, která bezprostředně následuje po instrukci, po které k přerušení došlo. Výjimky jsou klasifikovány jako chyby, pasti nebo přerušení (předčasné ukončení provádění programu).

Výjimky pocházejí ze tří typů událostí:

výjimky generované programem, umožňující programu sledovat určité podmínky v určených bodech programu (INT0 - kontrola přetečení, INT3 - kontrolní bod, BOUND - kontrola hranic pole);

výjimky řízení stroje, které vznikají při řízení operací uvnitř čipu a transakcí na sběrnici procesoru (platí pro procesor Pentium 4);

chyby zjištěné procesorem v programu (dělení nulou, porušení bezpečnostních pravidel, chybějící stránka atd.)

Chyby jsou výjimky, které jsou zachyceny a provedeny před provedením příkazu obsahujícího chybu. Například dojde k chybě v systému virtuální paměti, když procesor odkazuje na stránku nebo segment, který není přítomen v paměti RAM. Operační systém vybere stránku nebo segment z disku a umístí je do paměti RAM, poté procesor provede příkaz. Depeše jsou výjimky, které jsou hlášeny ihned po provedení příkazu, který výjimku způsobil (provedenou akci nelze opravit). Ukončení jsou výjimky, které znemožňují přesně určit, který příkaz způsobil výjimku. Ukončení se používají k hlášení závažných chyb, jako je chyba hardwaru, nesprávné hodnoty v systémových tabulkách. V ostatních případech bude návratová adresa aktuálního programu z programu zpracovávajícího výjimku vždy ukazovat na příkaz, který výjimku způsobil. Všechna možná přerušení jsou shrnuta ve speciální tabulce (až 256 různých přerušení a výjimek). V tabulce je každé přerušení nebo výjimka spojeno s vektorem přerušení - to je ukazatel na odpovídající servisní program (vektor umožňuje najít adresu programu, který přerušení zpracovává).

Softwarová přerušení

Instrukce INT n ve spouštěcím programu způsobí, že procesor provede servisní program, na který ukazuje vektor n v tabulce přerušení. Moderní programy pracovat s převedenými adresami paměti a programy přerušení obvykle slouží jako jediný prostředek k ukončení programu do operačního systému. Softwarová přerušení lze použít pro přístup ke službám operačního systému (například INT $ 21 - služby DOS, INT $ 80 - služby Linux), funkcím ovladače zařízení (například INT $ 33 - ovladač myši), popř. speciální služby(INT $ 10 - BIOS video služba, INT $ 31 - Služba DPMI), INT 67 $ - služba EMS). Zvláštní případČíslo softwarového přerušení INT je INT 3 nebo přerušení stop. Zadáním tohoto příkazu do programu má uživatel možnost nastavit body přerušení jako nástroj pro ladění programu. Dalším typem softwarového přerušení používaného při ladění je jednokrokové přerušení.

Maskovatelná přerušení

Maskovatelných přerušení je nejvíce obecná metoda odezva na asynchronní externí signály ze zařízení. Takové přerušení lze povolit nebo zakázat. Hardwarové přerušení je povoleno, když je povolen bit příznaku přerušení (nastaven na 1). Procesor obsluhuje povolené maskovatelné přerušení až po dokončení aktuální instrukce. Přečte vektor přerušení instalovaný v hardwaru na datové sběrnici a určí adresu obslužné rutiny přerušení. Bit příznaku přerušení v registru příznaků (stavový registr) lze vymazat, když je přerušení obsluhováno. Tím se zabrání dalšímu přerušení při obsluze prvního přerušení. Pokud je nastaven příznak přerušení, je možné přerušit aktuální program obsluhy přerušení a zpracovat další přerušení, tzn. Zpracování vnořených přerušení je povoleno.

Priorita přerušení

Protože přerušení jsou rozpoznána až po provedení aktuální instrukce, může přerušení vyžadovat více než jeden zdroj přerušení. V tomto případě budou přerušení obsluhována podle priority (úrovně). Řekněme například, že daný příkaz způsobí přerušení ladění systému a výjimku „chybějící segment“. Procesor nejprve zareaguje na výjimku "chybějící segment" (11) a bude aktivována obsluha výjimky 11. Potom bude obsluha 11 výjimky přerušena obslužnou rutinou přerušení ladění, po ladění bude řízení opět přeneseno na obsluhu 11 výjimky. použití priorit přerušení umožňuje systémovému inženýrovi ladit jeho vlastní obslužné programy výjimek.

Non-Maskable Interrupt (NMI)

Nemaskovatelná přerušení velmi poskytují obsluhu přerušení vysoká úroveň. Jedním z běžných příkladů nemaskovatelného přerušení (NMI) je přerušení při výpadku napájení. Během obslužné rutiny nemaskovatelného přerušení nebude procesor obsluhovat žádná další přerušení (požadavek NMI nebo INT), dokud nebude vydána instrukce návratu přerušení (IRET). Příznak deaktivace přerušení je nastaven na začátku nemaskovatelného přerušení. Pokud dojde k dalšímu nemaskovatelnému přerušení (NMI), zatímco je obsluhováno nemaskovatelné přerušení, požadavek bude uložen pro zpracování po první návratové instrukci z aktuální rutiny nemaskovatelného přerušení.

Manipulace s přerušením

Když dojde k přerušení, další kroky. Nejprve se aktuální adresa instrukce a registr příznaků uloží do zásobníku, což umožňuje pokračování přerušeného programu. Potom se pomocí vektoru, který definuje odpovídající prvek v tabulce přerušení, určí počáteční adresa programu pro zpracování přerušení. Program zpracování běží. Nakonec se po příkazu návratu z rutiny přerušení (IRET) obnoví předchozí stav procesoru a provádění programu se obnoví na návratové adrese (na adrese uložené v zásobníku).

Odeslání vaší dobré práce do znalostní báze je snadné. Použijte níže uvedený formulář

Studenti, postgraduální studenti, mladí vědci, kteří využívají znalostní základnu ve svém studiu a práci, vám budou velmi vděční.

Zveřejněno na http://www.allbest.ru

Ministerstvo školství Běloruské republiky

VZDĚLÁVACÍ INSTITUCE "STÁTNÍ UNIVERZITA GRODNO JMENOVANÁ PO YANKA KUPALA"

Ústav teoretické fyziky.

Abstrakt na téma:

"Přerušení a výjimky"

Student 5. ročníku Fyzikálně-technologické fakulty

Petsevič Andrej Ivanovič

Grodno 2014

  • 1. Přerušuje
    • 1.1 Obsluha přerušení
    • 1. Externí
    • 2. Vnitřní
    • 3. Software
    • 1.2 Vektory přerušení
    • 1.4 Typy přerušení
  • 2. Výjimky
    • 2.3 Obsluha výjimek

1. Přerušuje

1.1 Obsluha přerušení

Přerušení je signál, který signalizuje výskyt nějaké události v počítači. V tomto případě musí OS na toto přerušení reagovat určitým způsobem. V závislosti na zdroji jsou všechna přerušení rozdělena do tří tříd:

1. Externí;

2. Vnitřní;

3. Software.

Každé přerušení má přiřazeno číslo, které se nazývá číslo typu přerušení nebo jednoduše číslo přerušení. Systém dokáže rozpoznat, které přerušení, s jakým číslem k němu došlo, a spustí program zpracování přerušení odpovídající tomuto číslu. Když je tedy přijat signál přerušení, je nuceno řízení přenést z vykonávajícího programu do systému a jeho prostřednictvím na obsluhu přerušení.

Například přerušení číslo 9 je přerušení klávesnice, které se generuje při stisknutí a uvolnění klávesy. Slouží ke čtení dat z klávesnice. V OS je označeno jako IRQ1, kde IRQ je označení přerušení a 1 je priorita přerušení.

Obsluha přerušení je program pro obsluhu přerušení, který je součástí operačního systému a je navržen tak, aby reagoval na stav, který přerušení způsobil.

Předpokládejme, že když z nějakého zdroje přijde signál přerušení, program A je v řešení. V důsledku toho je řízení automaticky přeneseno na obsluhu přerušení. Po dokončení zpracování lze řízení znovu přenést do bodu v programu A, kde bylo jeho provádění přerušeno:

1.2 Vektory přerušení

Adresy programů odpovídajících různým přerušením jsou shromážděny v tabulce nazývané tabulka vektorů přerušení.

Tabulka vektorů přerušení zabírá první kilobajt RAM - adresy od 0000:0000 do 0000:03FF. Tabulka se skládá z 256 prvků - FAR adres obsluhy přerušení. Tyto prvky se nazývají vektory přerušení. První slovo prvku tabulky obsahuje offset a druhé slovo obsahuje adresu segmentu obsluhy přerušení. Vektory jsou prostě úplné adresy programová paměť (v segmentované formě), která musí být aktivována, když dojde k přerušení.

Číslo přerušení 0 odpovídá adrese 0000:0000, číslo přerušení 1 odpovídá adrese 0000:0004 atd. Tato adresa se skládá z dvojice 2bajtových slov, takže každý vektor zabírá čtyři bajty.

Pokud používáte program DEBUG, můžete si tabulku vektorů přerušení zobrazit na svém počítači. Příkazem D vytiskněte obsah začátku paměti: D 0:0. Program DEBUG vám ukáže prvních 128 bajtů nebo 32 vektorů, které mohou vypadat nějak takto:

1.3 Mechanismus zpracování přerušení

Při zpracování každého přerušení je třeba provést následující posloupnost akcí:

· Vnímání požadavku na přerušení: příjem signálu a identifikace přerušení.

· Pamatování stavu přerušeného procesu: určeno hodnotou programového čítače (adresa další instrukce) a obsahem registrů procesoru.

· Předání řízení přerušujícímu programu (počáteční adresa podprogramu zpracování přerušení je zapsána do programového čítače a informace ze stavového slova procesoru jsou vloženy do odpovídajících registrů).

· Manipulace s přerušením.

· Obnovení přerušeného procesu a návrat k přerušenému programu.

Hlavní funkce přerušovacího mechanismu:

1. rozpoznání nebo klasifikace přerušení.

2. odpovídajícím způsobem předat řízení obsluze přerušení.

3. správný návrat k přerušenému programu (před přenesením řízení na obsluhu přerušení je obsah registrů procesoru uložen buď v paměti s přímým přístupem nebo na systémovém zásobníku).

1.4 Typy přerušení

Přerušení, ke kterým dochází během provozu počítačového systému, lze rozdělit do 4 skupin:

Hardwarová přerušení jsou způsobena fyzickými zařízeními a vyskytují se asynchronně ve vztahu k programu, tzn. PROTI obecný případ nelze předvídat, kdy a z jakého důvodu bude program přerušen.

Hardwarová přerušení nejsou koordinována s provozem softwaru. Když je zavoláno přerušení, procesor zastaví, co dělá, provede přerušení a pak se vrátí tam, kde byl.

Externí přerušení vznikají ze signálu z externího zařízení, například:

· Přerušení, které informuje systém, že požadovaný sektor disku již byl načten a jeho obsah je programu k dispozici.

· Přerušení, které informuje systém, že tiskárna dokončila tisk znaku a potřebuje vydat další znak.

· Přerušení kvůli výpadku napájení.

· Normální dokončení některých I/O operací (stisknutím klávesy na klávesnici).

· Přerušení časovačem.

Přerušení časovače je způsobeno intervalovým časovačem. Tento časovač obsahuje registr, kterému lze přiřadit konkrétní počáteční hodnotu pomocí speciální privilegované instrukce. Hodnota tohoto registru se automaticky snižuje o 1 po každé milisekundě času. Když se tato hodnota stane nulovou, dojde k přerušení časovače. Intervalový časovač, jako je tento, používá operační systém k určení, jak dlouho může uživatelský program zůstat pod kontrolou stroje.

Maskovatelná a nemaskovatelná vnější přerušení

Jsou dvě speciální externí signál mezi vstupními signály procesoru, pomocí kterých můžete přerušit provádění aktuálního programu a tím přepnout chod centrálního procesoru. Jsou to signály NMI (Non Massable Interrupt, nemaskovatelné přerušení) INTR (žádost o přerušení, žádost o přerušení).

Podle toho se externí přerušení dělí na dva typy: nemaskovatelné a maskovatelné.

Aby bylo zajištěno úplné provedení určité sekvence instrukcí, je často při provádění kritických částí programů nutné zakázat přerušení (tj. učinit systém necitlivým vůči všem nebo jednotlivým přerušením). To lze provést pomocí příkazu CLI. Musí být umístěn na začátku kritické sekvence instrukcí a na konci musí být instrukce STI, která umožňuje procesoru přijímat přerušení. Příkaz CLI zakáže pouze maskovatelná přerušení, která jsou vždy zpracovávána procesorem.

Přítomnost signálu přerušení tedy nemusí nutně způsobit přerušení běžícího programu. Procesor může mít prostředky ochrany proti přerušení: deaktivaci systému přerušení, maskování (inhibici) jednotlivých signálů přerušení. Přerušení, která nelze maskovat, jsou nemaskovatelná přerušení.

Vnitřní přerušení jsou způsobena událostmi, které jsou spojeny s provozem procesoru a jsou synchronní s jeho operacemi, konkrétně k přerušení dojde, když:

· v případě porušení adresování (adresová část prováděného příkazu obsahuje zakázanou nebo neexistující adresu, přístup k chybějícímu segmentu nebo stránce při organizování mechanismů virtuální paměti);

· pokud je v poli kódu nepoužitá binární kombinace.

· při dělení nulou.

· když objednávka přeteče nebo zmizí.

· když jsou monitorovacími prostředky zjištěny chyby parity a chyby v provozu různých hardwarových zařízení.

Softwarová přerušení.

Programy mohou samy způsobit přerušení s dané číslo. K tomu používají příkaz INT. S tímto příkazem procesor provádí téměř stejné akce jako s běžnými přerušeními, ale to se děje pouze v předvídatelném bodě programu - tam, kde programátor umístil tento příkaz. Softwarová přerušení tedy nejsou asynchronní (program „ví“, kdy přerušení volá).

Softwarová přerušení nejsou přerušeními v doslovném smyslu, protože se jedná pouze o specifický způsob volání procedur – nikoli podle adresy, ale podle čísla v tabulce.

2. Výjimky

Zpracování výjimek je mechanismus v programovacích jazycích určený k popisu odezvy programu na runtime chyby a další možné problémy (výjimky), které mohou nastat během provádění programu a vést k nemožnosti (nesmyslnosti) dalšího zpracování programem jeho základního algoritmu. . V ruštině se také používá kratší forma termínu: „vyřizování výjimek“.

chyba programu výjimka přerušení

2.1 Obecný pojem výjimečné situace

Při provádění programu mohou nastat situace, kdy se stav dat, I/O zařízení, popř počítačový systém obecně činí další výpočty podle základního algoritmu nemožné nebo nesmyslné. Klasické příklady takových situací jsou uvedeny níže: Hodnota jmenovatele je nula při provádění operace dělení celým číslem. Operace nemůže mít výsledek, takže ani další výpočty, ani pokus o použití výsledku dělení nepovede k vyřešení problému. Chyba při pokusu o čtení dat z externího zařízení. Pokud data nelze zadat, postrádají další plánované operace s nimi smysl. Dostupná paměť je vyčerpána. Pokud v kterémkoli okamžiku není systém schopen přidělit dostatek paměti RAM pro aplikační program, program nebude moci běžet normálně. Objevení se signálu pro nouzové vypnutí napájení systému. Aplikační problém zřejmě v nejlepším případě vyřešit nelze (pokud je nějaká rezerva výkonu), o uložení dat na vstupu se může postarat aplikační program komunikační kanál data, která vyžadují okamžité čtení. Ať už program v tuto chvíli dělá cokoli, musí přistoupit ke čtení dat, aby přijaté informace neztratil.

2.2 Typy výjimek

Výjimečné situace, které vznikají při provozu programu, lze rozdělit do dvou hlavních typů: synchronní a asynchronní, jejichž principy odezvy se výrazně liší. Synchronní výjimky mohou nastat pouze v určitých, dříve známých bodech programu. Chyba při čtení souboru nebo komunikačního kanálu nebo nedostatek paměti jsou typické synchronní výjimky, protože k nim dochází pouze při operaci čtení ze souboru nebo z kanálu nebo při operaci přidělování paměti. Asynchronní výjimky mohou nastat kdykoli a nezávisí na tom, jakou konkrétní programovou instrukci systém provádí. Mezi typické příklady takových výjimek patří výpadek napájení nebo příchod nových dat. Některé typy chyb lze klasifikovat jako synchronní nebo asynchronní. Například instrukce dělení nulou na mnoha hardwarových platformách vede k synchronní výjimce, ale na některých platformách může být kvůli hlubokému zřetězení výjimka asynchronní.

2.3 Obsluha výjimek

Při absenci vlastního mechanismu zpracování výjimek pro aplikační programy Nejběžnější reakcí na jakoukoli výjimku je okamžité zastavení provádění a poskytnutí uživateli zprávu označující povahu výjimky. Dá se říci, že v podobné případy Operační systém se stává jediným a univerzálním obslužným programem výjimek. Například nástroj Dr. je zabudován do operačního systému Windows. Watson, který shromažďuje informace o neošetřené výjimce a odesílá je na speciální server Microsoft. Výjimku je možné ignorovat a pokračovat v práci, ale tato taktika je nebezpečná, protože později vede k chybným výsledkům programu nebo chybám. Například ignorováním chyby při čtení datového bloku ze souboru program obdrží k dispozici nikoli data, která měl načíst, ale některá další data. Výsledky jejich použití nelze předvídat. Zpracování výjimečných situací samotným programem znamená, že když nastane výjimečná situace, řízení se přenese na nějaký předem určený handler - blok kódu, procedura, funkce, která provádí nezbytné akce. Pro fungování obslužných rutin výjimek existují dva zásadně odlišné mechanismy.

Návratové zpracování znamená, že obsluha výjimky odstraňuje vzniklý problém a uvádí program do stavu, kdy může pokračovat v práci podle hlavního algoritmu. V tomto případě se po provedení kódu handler přenese řízení zpět do bodu v programu, kde došlo k výjimce (buď na instrukci, která výjimku způsobila, nebo na tu následující, jako v některých starších dialektech jazyka BASIC ) a provádění programu pokračuje. Zatímco zpracování vracení je typické pro asynchronní obslužné programy výjimek (k nimž obvykle dochází z důvodů, které přímo nesouvisí se spouštěným kódem), pro synchronní zpracování výjimek je málo použitelné.

Zpracování bez návratu znamená, že po provedení kódu obsluhy výjimek je řízení přeneseno na nějaké předem určené místo v programu a provádění pokračuje odtud. Existují dvě možnosti připojení obslužné rutiny výjimek k programu: strukturální a nestrukturální zpracování výjimek.

Nestrukturální zpracování výjimek. Nestrukturální zpracování výjimek je implementováno jako mechanismus pro registraci funkcí nebo příkazů obsluhy pro každý možný typ výjimky. Programovací jazyk popř systémové knihovny poskytnout programátorovi alespoň dva standardní postupy: registraci handleru a zrušení registrace handleru. Volání prvního z nich „váže“ handler ke konkrétní výjimce, volání druhého toto „vázání“ zruší. Pokud dojde k výjimce, provádění hlavního programového kódu je okamžitě přerušeno a začíná provádění handleru. Po dokončení psovoda se řízení přenese buď na některého vpřed daný bod programu nebo zpět do bodu, kde došlo k výjimce (v závislosti na zadané metodě zpracování - s návratem nebo bez něj). Bez ohledu na to, ve které části programu momentálně se provede, na určitou výjimku vždy zareaguje poslední pro něj registrovaný handler. V některých jazycích zůstává registrovaný handler platný pouze v rámci aktuálního bloku kódu (procedura, funkce), poté není procedura odregistrování vyžadována.

Nestrukturální zpracování je prakticky jedinou možností pro zpracování asynchronních výjimek, ale pro synchronní výjimky je nepohodlné: musíte často volat příkazy pro instalaci/odebírání handlerů a vždy existuje nebezpečí narušení logiky programu přeskočením registrace. nebo zrušení registrace psovoda.

Zpracování strukturovaných výjimek. Zpracování strukturálních výjimek vyžaduje povinnou podporu programovacího jazyka – přítomnost speciálních syntaktických konstrukcí. Tento návrh obsahuje blok řízeného kódu a obsluhu výjimek. Zásadní rozdíl mezi blokem s garantovaným dokončením a zpracováním je v tom, že nezpracovává výjimku, ale pouze garantuje dokončení určité sady operací před zapnutím mechanismu zpracování. Stojí za zmínku, že blok se zaručeným dokončením lze snadno implementovat pomocí příkazů „throw výjimka“ a „strukturální obslužný program výjimek“.

Publikováno na Allbest.ru

Podobné dokumenty

    Prevence nebo identifikace chybových situací během provádění programu. Standardní zpracování výjimek, softwarové nástroje. Účel programových bloků pokus, chyť, konec. Hlavní vlastnosti konfigurace výjimek pomocí příznaků.

    přednáška, přidáno 12.9.2013

    Principy a algoritmy zpracování přerušení. Sada akcí pro implementaci fází zpracování přerušení mikroprocesorem. Vývoj struktury a algoritmu rezidentního programu. Implementace programu v jazyce assembler, metody jeho ladění a testování.

    práce v kurzu, přidáno 22.12.2014

    Studium konceptu, vektorů a mechanismů obsluhy přerušení; jejich klasifikace v závislosti na zdroji původu. Vlastnosti reakce hardwarové a softwarové části operačního systému na signály o výskytu nějaké události v počítači.

    abstrakt, přidáno 22.06.2011

    Interrupce a její povaha. Ovladač přerušení. Obsluha přerušení v reálném režimu. Charakteristika skutečný režim provoz mikroprocesoru. Obvod manipulace s přerušením v reálném režimu. Psaní vlastního přerušení. Vývoj v obecném případě.

    zpráva, přidáno 22.09.2008

    Návrh mechanismu zpracování přerušení. Řadič přerušení Intel 82C59A. Přerušit I/O. Řadič programovatelného rozhraní Intel 82C55A. Role procesoru při zpracování I/O přerušení. Přehled algoritmu zpracování přerušení.

    test, přidáno 19.05.2010

    Virtuální funkce, statické a abstraktní třídy, šablony: prvky a členové třídy, jejich role v objektově orientovaném programování; mechanismus pro uskutečnění virtuálního volání během provádění programu; Zpracování výjimek v C++.

    abstrakt, přidáno 12.6.2010

    Fáze "zbavování" programu chyb. Úkolem zpracování chyb v kódu programu. Chyby s nemožností automatické obnovení, operátor vypnutí. Ukončení provádění programu. Vrací se neplatná hodnota. Direktivy PHP pro kontrolu chyb.

    tutoriál, přidáno 27.04.2009

    Psaní algoritmu pro příjem 10 paketů po 12 bytech sériový port a jejich uložení do paměti PRAM. Vytvoření řídicího bloku PTSCB pro režim blokového přenosu dat. Zpracování hardwarového přerušení v analogově-digitálním skenovacím režimu.

    praktické práce, přidáno 25.04.2012

    Kódy, které zpracovávají výjimky, informace o důvodu jejich výskytu. Metody zpracování výjimek. Mechanismy zpracování výjimek. Inicializace odkazu na objekt. Standardní konstruktory výjimek. Automatické a programové generování výjimek.

    prezentace, přidáno 21.06.2014

    Principy organizace a vlastnosti zpracování přerušení na bázi řadiče 8259A. Obecná charakteristika hardwaru systému přerušení PIC (Programmable Interrupt Controller). Historie vývoje a postup práce s technologií Plag and Play.

  • Experimenty s jádrem
  • Je čas pokračovat v sérii příspěvků o experimentech s vývojem Operační systém. Mám bootloadery, mám sestavovací systém pro sestavení jádra. Existují přednastavené funkce obrazovky. Bootloader načte jádro do paměti na adrese 0x10000, uvede procesor do chráněného režimu a předá řízení jádru. Jádro aktuálně pouze tiskne několik ladicích zpráv ve smyčce. Jakýsi kulovitý kůň ve vzduchoprázdnu. Tento „kůň“ nepracuje dlouho. Faktem je, že počítač má standardně nakonfigurovanou řadu přerušení. Zejména časovač. Toto přerušení se volá poměrně často. Při startu počítač pracuje v reálném režimu. A přerušení jsou řešena obslužnými nástroji přerušení v reálném režimu. Tabulka přerušení reálného režimu se nachází na adresách 0 - 0x400.

    V chráněném režimu se s přerušeními zachází jinak. Ještě nemám kód pro obsluhu přerušení, takže první přerušení způsobí restart mého testovacího systému.

    Existuje článek Jamese Molloye o zpracování přerušení: http://www.jamesmolloy.co.uk/tutorial_html/4.-The%20GDT%20and%20IDT.html. Existují další materiály, ale plánuji se nejprve obrátit na primární zdroje. Přejděte na dokumentaci Intel.

    Přerušení a výjimky jsou události, které to naznačují někde v systému
    (hardware) nebo v rámci aktuálně spuštěného programu popř
    úkolu, nastal stav, který vyžaduje okamžitou pozornost
    procesor. Obvykle přerušení a výjimky vedou k vynucení
    přenos řízení z aktuálně prováděného programu nebo úlohy na
    speciální softwarová procedura nebo úloha tzv
    obsluhu přerušení nebo obsluhu výjimky. Akce,
    provedené procesorem v reakci na přerušení nebo výjimku
    se nazývá servis nebo manipulace
    přerušení nebo výjimka).

    K přerušení dochází v náhodné okamžiky v tuto chvíli
    provádění programu v reakci na signály z hardwaru. Systém
    desky používají přerušení k signalizaci výskytu událostí
    externí vůči zpracovateli, jako je zpracování požadavků od
    periferní zařízení. Programy mohou také generovat přerušení
    provedením instrukce procesoru INT n.

    K výjimkám dochází, když procesor zjistí, že došlo k chybě.
    (detekuje chybový stav) během provádění instrukce. Například -
    dělení nulou. Procesor detekuje různé chybové stavy
    včetně porušení ochrany, chyb stránky
    závady), vnitřní závady stroje. architektura procesoru Pentium 4, Intel Xeon,
    Rodina P6 a Pentium umožňují generování výjimky kontroly stroje, když
    výskyt vnitřních hardwarových chyb popř
    chyby autobusu.

    Když je přijato přerušení nebo je detekována výjimka, proud
    procedura nebo úloha je pozastavena během provádění procesoru
    kód obsluhy přerušení nebo výjimky. Při provedení
    handler je ukončen, procesor obnoví provádění
    přerušený postup nebo úkol. Obnovení provádění přerušeného
    postupy nebo úkoly probíhají bez narušení stavu programu,
    pokud je obnova z výjimky možná a skákání nikoli
    způsobil nucené ukončení aktuálně spuštěný program.

    Chcete-li zjednodušit zpracování výjimek a přerušení, každého z nich
    jednotlivá výjimka a každá podmínka přerušení,
    vyžadující speciální zpracování procesorem je přiřazeno jedinečné
    identifikátor nazývaný vektorové číslo. CPU
    používá číslo vektoru přiřazené výjimce resp
    přerušení jako index v tabulce deskriptorů přerušení (přerušení
    tabulka deskriptorů IDT). Tabulka obsahuje adresy (vstupní body) handlerů
    výjimky nebo přerušení.

    Povolený rozsah pro vektorová čísla je od 0 do 255. Čísla jsou od 0 do 31
    vyhrazeno v architekturách Intel 64 a IA-32 pro definovanou architekturu
    přerušení a výjimky. Ne všechna vektorová čísla jsou v tomto rozsahu
    mít určenou funkci. Nepřiřazená vektorová čísla v tomto
    rozsah je vyhrazen. Nepoužívejte tyto vyhrazené
    čísla.

    Čísla vektorů v rozsahu od 32 do 255 jsou vyhrazena pro uživatelem definovaná
    přerušení a nejsou vyhrazeny architekturami Intel 64 a IA-32. Tyto
    přerušení jsou určena především pro externí vstupní zařízení -
    výstup.

    Procesor přijímá přerušení ze 2 zdrojů:
    — Externí (hardwarově generovaná) přerušení.
    — Softwarově generovaná přerušení.

    Externí (hardwarová) přerušení

    Externí přerušení jsou přijímána přes piny procesoru nebo přes
    místní řadič přerušení APIC. Význam hlavních kontaktů
    stav přerušení na Pentiu 4, Intel Xeon, rodině P6 a procesorech
    Pentium - LINT piny připojené k místnímu APIC. Když místní
    APIC povoleno, LINT piny, lze naprogramovat pomocí
    Lokální vektorová tabulka APIC (LVT) pro spojení s jakýmkoli procesorem
    vektor výjimky nebo přerušení.

    Když je místní APIC globální/hardwarové přerušení
    deaktivovány, pak jsou tyto piny nakonfigurovány jako INTR a NMI piny,
    respektive. Signál na pinu INTR signalizuje procesoru, že
    došlo k vnějšímu přerušení. Procesor čte ze systémové sběrnice
    vektor přerušení poskytovaný externím řadičem přerušení,
    jako 8259A. Signál na pinu NMI to říká procesoru
    nemaskovatelné přerušení (NMI) přiřazené k vektoru přerušení 2.

    Vektor č. mnemotechnická pomůcka Popis Typ Kód chyby Zdroj
    0 #DE Chyba dělení Chyba Žádný Pokyny DIV a IDIV
    1 #DB REZERVOVÁNO Porucha/past Žádný Pouze pro použití Intel
    2 Přerušení NMI Přerušit Žádný Nemaskovatelný vnější
    přerušit
    3 #BP Bod zlomu Past Žádný INT 3 pokyny
    4 #Z Přetékat Past Žádný instrukce INT0
    5 #BR BOUND Rozsah překročen Chyba Žádný BOUND instrukce
    6 #UD Neplatný operační kód (Nedefinováno
    operační kód)
    Chyba Žádný instrukce UD2 nebo vyhrazena
    operační kód
    7 #NM Zařízení není k dispozici
    matematický koprocesor)
    Chyba Žádný Plovoucí desetinná čárka nebo WIT/FWAIT
    návod
    8 #DF Dvojitá chyba Potrat ano (nula) Jakýkoli pokyn, který může
    vygenerovat výjimku, NMI nebo INTR.
    9 Přetečení segmentu koprocesoru
    (Rezervováno)
    Chyba Žádný Instrukce s plovoucí desetinnou čárkou
    10 #TS Neplatné TSS Chyba Ano Přepínač úloh nebo přístup TSS.
    11 #NP Segment není přítomen Chyba Ano Načítání registrů segmentů popř
    přístup k segmentům systému.
    12 #SS Chyba segmentu zásobníku Chyba Ano Stack operace a SS
    registrovat zatížení
    13 #GP Obecná ochrana Chyba Ano Jakýkoli odkaz na paměť a
    další ochranné kontroly
    14 #PF Chyba stránky Chyba Ano Jakýkoli odkaz na paměť
    15 (Intel vyhrazeno. Nepoužívejte) Chyba Žádný
    16 #MF x87 FPU chyba s plovoucí desetinnou čárkou
    (matematická chyba)
    Chyba Žádný x87 FPU s plovoucí desetinnou čárkou nebo
    WAIT/FWAIT instrukce
    17 #AC Kontrola zarovnání Chyba Ano (nula) Jakýkoli odkaz na data v paměti
    18 #MC Kontrola stroje Potrat Žádný Chybové kódy (pokud existují) a
    zdroj závisí na modelu
    19 #XM Výjimka SIMD s plovoucí desetinnou čárkou Chyba Žádný SSE/SSE2/SSE3 s plovoucí desetinnou čárkou
    instrukce
    20-31 Intel rezervoval. Nepoužívejte.
    32-255 Definováno uživatelem (Ne
    Rezervováno)
    Přerušení
    Přerušit Externí přerušení nebo INT n
    návod

    Obvykle je připojen interní řadič přerušení procesoru, localAPIC
    řadič přerušení systému I/O APIC. Externí přerušení
    přijaté přes piny řadiče přerušení I/O APIC systému
    lze nasměrovat na interní řadič přerušení místní APIC
    přes systémová sběrnice(Pentium 4, Intel Core Duo, Intel Core 2, Intel® Atom™,
    a procesory Intel Xeon) nebo přes sériovou sběrnici APIC (rodina P6 a Pentium
    procesory). Externí ovladač přerušení I/O APIC definuje vektor
    číslo přerušení a odešle toto číslo do interního řadiče
    procesor (místní APIC). Pokud systém obsahuje více procesorů,
    procesory si také mohou vzájemně posílat přerušení prostřednictvím
    systémová sběrnice (Pentium 4, Intel Core Duo, Intel Core 2, Intel Atom a
    procesory Intel Xeon) nebo přes sériovou sběrnici APIC (rodina P6 a
    procesory Pentium).

    Piny LINT nejsou k dispozici na procesorech Intel486 a dřívějších
    Procesory Pentium, které nemají vestavěné interní lokální APIC. Tyto
    procesory mají speciální pevně přiřazené piny NMI a INTR.
    Na systémech s takovými procesory se obvykle generují přerušení
    systémový řadič přerušení (8259A), s odesíláním přerušení
    prostřednictvím kontaktu INTR.

    Všimněte si, že to může způsobit několik dalších pinů na procesoru
    k výskytu přerušení procesoru. Tato přerušení však nejsou
    obsluhované mechanismem zpracování přerušení a výjimek
    popsané zde. Tyto piny zahrnují: RESET#, FLUSH#, STPCLK#,
    SMI#, R/S# a INIT#. Zda je má konkrétní procesor, záleží na
    implementace konkrétní model. Funkce kontaktů jsou popsány v technické dokumentaci
    popisy dodávané s konkrétními procesory. Kontaktujte SMI#
    je popsána v kapitole 26 „Správa systému“.

    Jakékoli externí přerušení doručené procesoru
    kontaktujte INTR nebo přes interní lokální APIC se nazývá maskovatelné
    hardwarové přerušení. Přes maskovatelná hardwarová přerušení
    INTR dodané prostřednictvím kontaktu může být cokoliv v rozsahu 0 - 255.
    Přerušení doručená prostřednictvím interního místního rozhraní API mohou být vektory
    v rozmezí 16-255.

    Příznak IF registru EFLAGS umožňuje maskovat celou skupinu maskovaných objektů.
    hardwarová přerušení. Při příjmu přerušení s vektory od 0 do
    15 přes interní místní APIC, APIC označuje příjem
    nesprávný vektor přerušení.

    Procesor přijímá výjimky ze tří zdrojů:
    — Procesor detekoval výjimky z chyb programu
    - Programově generované výjimky
    - Výjimky z kontroly stroje.

    Výjimky programových chyb

    Když procesor narazí, vyvolá jednu nebo více výjimek
    softwarové chyby při provádění aplikace, kód
    operační systém nebo výkonný. Architektury Intel64 a IA-32
    definovat číslo vektoru pro každou výjimku detekovatelnou procesorem.
    Výjimky se dělí na poruchy, pasti a přerušení.

    Výjimky generované softwarem

    Instrukce INTO, INT3 a BOUND umožňují generování softwaru
    výjimky. Tyto pokyny vám umožňují provádět testování stavu v
    místa, kde se provádí proud instrukcí. Například volání INT 3
    generování výjimky z bodu přerušení. Lze použít instrukci INT n
    pro emulaci výjimek v programech, ale existuje omezení. Pokud INT n
    vyvolá vektor pro jednu z architektonicky definovaných výjimek,
    procesor generuje přerušení pro správný vektor (pro přístup
    na obslužnou rutinu výjimky), ale nevloží chybový kód do zásobníku. Na rozdíl od toho
    z hardwarově generované výjimky, která se normálně šetří na zásobníku
    chybový kód. Obslužná rutina výjimky se pokusí převzít
    chybový kód ze zásobníku při zpracování výjimky. Ale protože kód chyby
    nebyl uložen do zásobníku, místo chybového kódu se ze zásobníku vyskočí
    EIP (místo chybějícího chybového kódu). To bude mít za následek návrat z
    manipulant na špatné adrese. (Nemůžete tedy použít INT n
    přístup k hardwarově generovaným obslužným rutinám výjimek).

    Výjimky pro kontrolu stroje

    Procesory rodiny P6 a Pentium poskytují interní a
    externí strojní kontrolní mechanismy pro kontrolu vnitřních operací
    hardwarový čip a transakční sběrnici. Tyto mechanismy jsou implementací
    závislý (nepřenosný). Když procesor detekuje machinecheck
    chyba, procesor signalizuje chybu pomocí machine-checku
    výjimku (vektor 18) a vrátí kód chyby.

    Klasifikace výjimek

    Výjimky se dělí na chyby, pasti A potraty v závislosti na
    způsoby jejich příjmu nebo v závislosti na možnosti restartu
    pokyny, které způsobily výjimku bez ztráty funkčnosti
    (kontinuita) programu nebo úkolu.



    
    Nahoru