XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
82
Správa požadavků na přerušení v MS Windows NT/2000/XP využívající obvody PIC-8259A FOJTÍK, David, Ing.,
Katedra ATŘ-352, VŠB-TU Ostrava, 17. listopadu, Ostrava - Poruba, 708 33
[email protected], http://fs1.vsb.cz/~foj74
Abstrakt: Tento příspěvek se zabývá mechanizmem interní správy přerušení operačních systémů MS Windows NT/2000/XP na úrovni spolupráce s hardwarem využívající obvody přerušení PIC (8259A). Hlavním cílem je poodhalení softwarového řešení, které operační systémy používají k tomu, aby zajistily publikované prioritní uspořádání požadavků, jenž nelze obvody 8259A dosáhnout. V příspěvku jsou tak popsány postupy a prostředky použité k analýze operačních systémů spolu se získanými poznatky. Současně příspěvek hodnotí zjištěný mechanizmus především z pohledu nároků systémů reálného času. Prezentovaných výsledků bylo dosaženo při řešení výzkumného záměru MSM 272300012. Klíčová slova: PIC, 8259A, MS Windows NT/XP/2000, IRQ, IRQL
1 Hardwarová správa požadavků pomocí obvodů PIC Procesory kompatibilní s platformou x86 mají dva na sobě nezávislé signály přerušení. Prvním je nemaskovatelný signál NMI, jenž je vyhrazen především k signalizaci katastrofických stavů (výpadek napájení, chyba parity apod.). Druhým je již maskovatelný vstup INTR společně sloužící všem periferním zařízením ke vznášení požadavků na obsluhu. Signál má nižší prioritu nežli NMI a je možné jej během zpracování kritických operací zablokovat (maskovat). Existence pouze jednoho signálu přerušení vyhrazeného pro veškeré periférie vede na problém jak rozpoznat, které zařízení o obsluhu žádá, jak ošetřit možné kolize v případě žádosti několika zařízení najednou, či jak určitá zařízení přednostně obsloužit apod. Tento problém se na platformě x86 buď řeší pomocí přídavného obvodu 8259A (často označovaný zkratkou PIC – Programable Interrupt Controler), který jako prostředník mezi procesorem a periferními zařízeními ošetřuje zmíněné problémy nebo nověji použitím architektury APIC (Advanced Programable Interrupt Controler), která byla navržena především s ohledem na víceprocesorové systémy. Příspěvek se zabývá výhradně jednoprocesorovými systémy používající dvojic obvodů 8259A, které jsou ve všech jednoprocesorových systémech platformy x86 stále k dispozici. Obvod 8259A je navržen tak, aby plně vykonával správu požadavků na přerušení. Poskytuje tzv. Mód úplného vnoření [NĚMEC, D. 1988], ve kterém je všech osm vstupů uspořádáno od nejnižší po nejvyšší prioritu a není-li explicitně přeprogramován, je vybrán automaticky. V tomto módu jsou všechny příchozí požadavky nižší priority pozdrženy dokud není obsluha požadavku s vyšší nebo shodnou prioritou dokončena. Pouze požadavek s vyšší prioritou než aktuálně obsluhovaný je přijat a distribuován procesoru prostřednictvím vstupu INTR. Procesor tak informuje obvod pouze o přijetí nového požadavku a následně o ukončení příslušné obsluhy (EOF - End Of Intterupt). Ostatní je již starostí těchto přídavných obvodů. Z osmi dostupných kanálů má v obvodu 8259A implicitně IR0 nejvyšší a IR7 nejnižší prioritu, ale toto uspořádání je možné kdykoliv programovacími prostředky s určitým omezením pozměnit. Přesněji řečeno existují prostředky, kterými je možné nastavit nejnižší
83
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
prioritu zvolenému vstupu IR. Všechny ostatní se pak uspořádají tak, aby byl zachován mód úplného vnoření (viz obr. 1). To znamená, že není možné nezávisle na ostatních změnit prioritu jedinému zvolenému vstupu. Implicitně IR IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 Priorita 7 6 5 4 3 2 1 0 Nejvyšší
Nejnižší
Změna nejnižší priority na IR 6 IR IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 Priorita 0 7 6 5 4 3 2 1 Nejvyšší
Nejnižší
Změna nejnižší priority na IR 2 IR IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 Priorita 4 3 2 1 0 7 6 5 Nejvyšší
Nejnižší Obr. 1: Příklad možné změny priorit v módu úplného vnoření Obvod nabízí také jiné módy, kterými lze implicitní uspořádání narušit, avšak použití těchto módu znamená realizovat správu přerušení softwarovými prostředky. Především se jedná o mód Speciální masky [NĚMEC, D. 1988], kdy obvod považuje všechny kanály za sobě si rovné a mód Automatické EOI, při kterém je ihned po oznámení přijetí požadavku považován již za vyřízený (procesor již neoznamuje ukončení obsluhy). Obvod také nabízí libovolně, navzájem nezávisle zvolené kanály makovat. Makování a opětovné povolení vstupu je možné provést kdykoliv zápisem příslušného Byte na adresu registru IMR (Interrupt mak register). Ihned poté je makovaný kanál obvodem ignorován nebo zpětně zařazen do prioritní správy. Dnešní počítače PC/AT k zvýšení počtu kanálu přerušení používají současně dva řadiče 8259a [ASPINWALL, J. 1999, MUELLER, S. 2001], které jsou zapojeny do kaskády (viz obr. 2). Address Bus Data Bus
CPU
Control Bus INTR
D0 – D7
CS A0
INTA
RD WR
8259A SLAVE 7
6
5
4
3
2
IR15 IR14 IR13 IR12 IR11 IR10
INT
CS A0
D0 – D7
CAS 0
CAS 0
CAS 1
CAS 1
CAS 2
CAS 2
INTA
RD WR
INT
8259A MASTER
1
0
7
6
5
4
3
2
1
0
IR9
IR8
IR7
IR6
IR5
IR4
IR3
IR2
IR1
IR0
Obr. 2: Zapojení dvojice obvodů 8259 v počítači PC/AT
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
84
Důležitým faktem tohoto zapojení je, že podřízený obvod se k nadřízenému obvodu připojuje jako periferní zařízení využívající kanál IR2. To především znamená, že při standardním vnořeném módu mají kanály IR8-IR15 podřízeného obvodu vyšší prioritu než-li kanály IR3IR7 nadřízeného obvodu. Prioritní uspořádání pak odpovídá tabulce 1. Priorita
IRQ
Zařízení
Nejvyšší
0 1 8 2,9 10 11 12 13 14 15 3 4 5 6 7
Systémové hodiny Klávesnice Hodiny reálného času Původní IR2/Rezervováno Rezervováno Rezervováno PS/2 Myš Matematický koprocesoro Hard Disk Rezervováno Sériové rozhraní COM2/COM4 Sériové rozhraní COM1/COM3 Rezervováno/Zvuková karta Pružný disk Paralelní port
Nejnižší
Tab. 1: Kanály přerušení v počítačích PC/AT
2 Správa požadavků ve Windows NT/2000/XP V MS Windows NT (2000/XP) je každé činnosti přiřazena jistá úroveň IRQL (na platformě x86 v rozsahu 0-31) [SOLOMON, A. D. 1999]. Tyto úrovně mají různou prioritu (0-nejnižší, 31-nevyšší) a slouží tak k řízenému zpracování úloh podle priorit. Tento mechanizmus zajišťuje, že požadavky s vyšší prioritou IRQL budou vždy přednostně vyřízeny před požadavky s nižší prioritou IRQL. Konkrétně, během zpracování úlohy s jistou prioritou IRQL jsou maskovány všechny žádosti stejné a nižší priority, takže je možné danou činnost přerušit pouze požadavkem s vyšší úrovní IRQL. Taktéž samotné obsluhy přerušení jsou vykonávány na různých úrovních IRQL. Operační systém přiřazuje obsluhám přerušení úroveň IRQL již při zavádění ovladače [MICROSOFT 1998A., MICROSOFT 2000]. V systémech založených na obvodech 8259A je vztah přiřazené úrovně IRQL pro daný požadavek IRQ uveden v tabulce 2. Porovnáme-li tabulku úrovní priorit IRQL s prioritním uspořádáním v módu speciálního úplného vnoření obvodu 8259A (tabulka 1) zjistíme, že si neodpovídají. Připočteme-li k tomu jaké možnosti změny v prioritním uspořádání vstupů obvod 8259A nabízí zjistíme, že hardwarově nelze takovéto prioritní uspořádání dosáhnout. Vzniká tak otázka, jak operační systémy rodiny Windows NT na platformě x86 fyzicky zajišťují proklamovaný prioritní systém, a v jakém módu pak obvod 8259A pracuje. Bohužel konkrétní způsob spolupráce jádra operačního systému s obvodem přerušení není publikován, a patří k utajovaným firemním informacím. Také nelze vyloučit, že se vnitřní mechanizmus mění s jednotlivými verzemi systému a to i na úrovni opravných servisních balíčků. Vyjdeme-li však z detailní znalosti obvodu a provedeme-li několik experimentů, při kterých budeme přímým čtením obsahů registrů zjišťovat aktuální stav obvodu, je možné použitý mechanizmus identifikovat.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
IRQL
IRQ
31
-
Kritická chyba HW
30
-
Výpadek napájení
29
-
Přerušení pro víceprocesorovou synchronizaci
28
0
Přerušení časovače
27
-
Profily
26
1
Klávesnice
25
2
Výstup INT podřízeného řadiče.
24
3
Sériové rozhraní COM2/COM4
23
4
Sériové rozhraní COM1/COM3
22
5
Rezervováno/Zvuková karta
21
6
Disketová mechanika
20
7
Paralelní port
19
8
Hodiny reálného času
18
9,2
Původní IRQ2 nebo IRQ9
17
10
Rezervováno
16
11
Rezervováno
15
12
PS/2 Myš
14
13
Matematický koprocesor
13
14
Hard Disk
12 4-11
15 -
Rezervováno Nepoužité priority
3
-
SW přerušení pro ladící účely
2
-
SW přerušení pro DPC
1
-
SW přerušení pro APC
0
-
SW úroveň přerušení, na které běží veškeré aplikace Win32
85
Popis
Tab. 2: Vztah mezi úrovněmi IRQL a žádostmi IRQ Vyjdeme-li však z detailní znalosti obvodu a provedeme-li několik experimentů, při kterých budeme přímým čtením obsahů registrů zjišťovat aktuální stav obvodu, je možné použitý mechanizmus identifikovat. Za tímto účelem byly vyhotoveny dva speciální nízkoúrovňové ovladače paralelního portu, které v obslužné rutině čtou a předávají obsah registrů obvodu 8259A. Dva funkčně shodné ovladače byly vyhotoveny z důvodu interní odlišnosti správy ovladačů mezi Windows NT [MICROSOFT 1998A] a Windows 2000/XP [MICROSOFT 2000] kde přibyla podpora Plug and Play. Paralelní port byl zvolen díky snadnému generování přerušení IRQ, jenž se realizuje vnějším signálem TTL na pin ACK (acknowledge) konektoru paralelního portu [CRAIG PEACOCK’S 1998A]. Takto lze snadno prověřit chování systému na přerušení IRQ5 a IRQ7, které jsou pro paralelní port k dispozici. Za účelem analýzy obsluha přerušení vykonává tři operace: 1. vykonává čekací smyčku s nastavitelnou dobou prodlevy cca 0 – 10 sekund, 2. čte obsah registrů ISR obou obvodů přerušení 8259A, 3. čte obsah registrů IMR obou obvodů přerušení 8259A. Vlastní analýza spočívá ve zjištění obsahů registrů ISR (Interrupt Service Rutine), IRM (Interrupt Mask Register) během obsluhy dvou různě časově náročných přerušení. Doba trvání delší obsluhy byla volena tak, aby bylo možné zajistit generování nového požadavku o
86
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
shodné nebo nižší úrovni IRQL během zpracování rutiny. Konkrétně pro paralelní port byl zdrojem přerušení kanál IR5 a zdrojem přerušení s nižší úrovní IRQL byla zvolena síťová karta využívající kanál IR9. Generování přerušení je realizované pomocí dalšího počítače PC s instalovaným operačním systémem MS Windows 98 a speciálním programem, který prostřednictvím specificky propojených paralelních portů generuje přerušení na analyzovaném počítači (viz obr. 3). Obdobně z téhož počítače je generováno nižší přerušení příkazem ping na IP adresu analyzovaného počítače. Analyzovaný systém: PC
+ MS Windows NT/2000
Generovaní IR: PC
Software Win32 API
+ MS Windows 98
Software MS DOSu
Nastavení a čtení dat ovladače Programový zápis na paralelní port.
Speciální ovladač LPT Programově volitelná čekací smyčka IRQ
Příkaz ping
Čtení obsahu registrů ISR, IMR Hardware PC
Hardware PC
Obvody 8259A
Paralelní port
Paralelní port
Síťová karta
Síťová karta
Obr. 3 Schéma systému analyzujícího interní mechanizmus správy přerušení IRQ 2.1 Analýza MS Windows NT + SP6a Níže uvedené údaje se vztahují k operačnímu systému MS Windows NT SP6a a můžou se vůči jednotlivým verzím lišit. • V případě krátkodobé obsluhy, kdy není prováděná čekací smyčka, a při které není úmyslně generováno žádné přerušení o nižší a stejné úrovni IRQL: 1. V registru ISR není uveden žádný bit informující o právě probíhající obsluze, nebo o jakékoliv jiné obsluze. Respektive obsah registru ISR byl u obou obvodů nulový. 2. V obou registrech IMR nejsou žádná přerušení maskována, kromě těch, které nejsou využívány a tudíž jsou systémem maskovány nepřetržitě. IRQ 0 1 2 3 4 5 6 7
ISR 0 0 0 0 0 0 0 0
IMR 0 0 0 0 0 0 1 1 Nepoužito
IRQ 8 9 10 11 12 13 14 15
ISR 0 0 0 0 0 0 0 0
IMR 0 0 0 1 1 1 0 1
Obr. 4: Stav registrů ISR a IMR během zpracování obsluhy přerušení IRQ5
87
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
•
Prodloužením doby obsluhy a generováním přerušení s nižší nebo shodnou úrovní IRQL během její činnosti: 1. V registru ISR je inicializován bit, který identifikuje obsluhu s nižší úrovní IRQL. Přesněji řečeno bit identifikuje přijatou, ale nezapočatou obsluhu. 2. Obsah registru IMR pozměněn tak, aby všechna přerušení nižší a stejné priority IRQL byla maskována. Výjimku tvoří pouze přerušení hodin reálného času (IRQ8). IRQ 0 1 2 3 4 5 6 7
ISR 0 0 1 0 0 0 0 0
IMR 0 0 0 0 0 0 1 1
1
Nepoužito
IRQ 8 9 10 11 12 13 14 15
ISR 0 1 0 0 0 0 0 0
IMR 0 1 1 1 1 1 1 1
2
Obr. 5: Stav registrů ISR a IMR během zpracování obsluhy IRQ5 přerušené žádostí s IRQ9 3. Je-li obsluha přerušení prováděna na úrovni IRQL >= 28, je již přerušení hodin reálného času maskováno také. 4. Během zpracování druhé obsluhy s nižší nebo shodnou prioritou IRQL je obsah registrů IMR a ISR opět ve stavu jako v případě krátkodobé obsluhy. Z uvedeného popisu je možné odvodit vnitřní mechanizmy obsluhy přerušení, které zajišťují výše zmíněné prioritní uspořádaní. Je zřetelné, že MS Windows NT používá techniku, která narušuje úplný mód vnoření. Postupným vylučováním lze dojít k tomu že nejpravděpodobněji je zde použita kombinace standardního módu úplného vnoření s módem speciální masky. Systém u každé přijaté žádosti nejprve vyhodnotí přiřazenou úroveň IRQL. Má-li nový požadavek vyšší úroveň IRQL než aktuálně prováděná činnost, je ihned potvrzen příkazem EOI (obdoba automatického EOI). Následně poté je zahájena jeho obsluha, která takto může být kdykoliv přerušena jinou žádostí bez rozdílu priorit. Nastane-li takováto situace a obsluha bude přerušena žádostí s nižší nebo shodnou prioritou IRQL, systém žádost přijme avšak nepotvrdí. Namísto toho zamaskuje všechna přerušení shodné a nižší úrovně (vzhledem k původní obsluze) a zavede mód speciální masky. Ihned poté předá nazpět řízení původní obsluze, neboť má neustále nejvyšší úroveň IRQL. Od této chvíle již nemůže být činnost obsluhy přerušena žádostí s nižší úrovní IRQL. Jakmile je obsluha dokončena, systém zjistí (pravděpodobně podle obsahu registru ISR), že byla přijata žádost s jistou úrovní IRQL, avšak nikdy nebyla zahájena. Nejprve zruší mód speciální masky a navrátí registr masky IMR do původního stavu. Následuje potvrzení zjištěné žádosti a zahájení její činnosti. Od této chvíle je systém v obdobném stavu jako při přijetí obsluhy s vyšší úrovní IRQL. Když se však zamyslíme nad uvedeným popisem zjistíme, že není nezbytně nutné opětovně zavádět a rušit mód speciální masky při každé vzniklé kolizi. Je tedy dosti pravděpodobné, že systém používá mód speciální masky nepřetržitě, pouze mění stav registru IMR. Také lze předpokládat, že během všech systémových činností je blokován vstup procesoru INTR, takže popisované interní mechanizmy nemohou být nečekaně přerušeny. Tato úvaha je podepřena faktickým chováním hardware, neboť procesor sám automaticky během strojového cyklu potvrzení přijaté žádosti zamaskuje vstup INTR a opět automaticky jej odmaskuje během návratu z obsluhy přerušení (instrukce IRET). Přesto je během činnosti obslužné rutiny vstup povolen.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
88
Následující text spolu s obrázkem 6 popisuje činnost systému na možný vznik přerušení. K popisu je však třeba dodat, že vychází z výše uvedených informací, které byly zjištěny experimentálními pokusy na systému MS Windows NT 4.0 SP6a. Nelze tudíž vyloučit, že systém používá jiný důmyslnější mechanizmus, nebo se tento mechanizmus v různých verzích MS Windows NT liší. Bohužel konkrétně použitý mechanizmus nebyl nikdy publikován, stejně tak jako nebyly zveřejněny zdrojové texty systému.
Obr. 6: Zpracovávaní obsluh přerušení v MS Windows NT Pro zjednodušení předpokládejme, že je v systému zpracována úloha s prioritou IRQL0 (1), tudíž není prováděna žádná obsluha přerušení a obvody 8259A jsou v režimu speciální masky. Následně je procesor přerušen (2) žádostí o obsluhu pevného disku (IRQ14) s prioritou IRQL 13. Po převzetí požadavku je zahájena systémová část obsluhy (3), během které je vyhodnocena priorita IRQL a pro náš případ zvýšena na úroveň 13. Systém pokračuje příkazem EOI, povolením přerušení (odmaskováním vstupu INTR), a spuštěním obslužné rutiny ovladače (4). Dále předpokládejme výskyt nové žádosti o přerušení (5), tentokráte od klávesnice (IRQ1) s pevně přidělenou úrovní IRQL 26. Jelikož jsou všechna přerušení povolena, dojde opět k přerušení procesoru a k zahájení systémové části obsluhy (6). Shodně s předchozím případem
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
89
je zvýšena úroveň IRQL na hodnotu 26 a po potvrzení EOI je spuštěna obslužná rutina ovladače (7). Rozšiřme úvahu o předpoklad, že ještě před ukončením této obsluhy je generována nová žádost (8) o obsluhu sériové myši (COM1 - IRQ4). Přestože obsluha této žádosti má nižší IRQL, je procesor opět přerušen, neboť obvod 8259A pracuje v módu speciální masky a navíc již obdržel potvrzení o ukončení předchozí obsluhy EOI. Tentokráte však systémová část obsluhy (9) zjistí, že stávající úroveň IRQL je vyšší nežli nově vzniklý požadavek a tudíž následný algoritmus je již odlišný. Systém nejprve zamaskuje (10) všechna nižší a shodná přerušení nastavením speciální bitové masky přímo na obvodech 8259A (registr IMR). Konkrétně pro náš případ jsou maskována přerušení IRQ1 – IRQ15 mimo hodin reálného času (IRQ8). Po aktivaci masky předá nazpět řízení předešlé části kódu návratem z přerušení instrukcí IRET a to bez potvrzení o ukončení obsluhy EOI nově příchozího požadavku. Během následujícího běhu obslužné rutiny tak již nová přerušení se shodnou nebo nižší úrovní priorit IRQL nemohou přijít a procesor pokračuje v obsluze klávesnice. Za předpokladu, že již nenastane žádné nové přerušení, je po ukončení obsluhy klávesnice (IRQ3) systémem vyhodnocena nepotvrzená žádost o obsluhu portu COM (IRQ4) (11). Tato žádost je nejprve potvrzena příkazem EOI a následně jsou opět povolena všechna přerušení nastavením registrů IMR do původních stavů (12). Poté je zahájena činnost, u níž je vyhodnocena nejvyšší priorita IRQL (13). V našem konkrétním případě je zahájena činnost obsluhy sériového portu (COM1 - IRQ4). Opět po ukončení této obsluhy systém provede návrat z přerušení a vrátí se tak k přerušené obsluze pevného disku (14). Po ukončení obsluhy pevného disku se opět provede návrat zpět instrukcí IRET do programu vykonávaného před vznikem prvního přerušení (15). 2.2 Analýza MS Windows 2000/XP Pro analýzu MS Windows 2000/XP bylo nutné vytvořit nový ovladač paralelního portu nativně napsaného pro toto prostředí. Důvodem je především odlišná architektura a správa ovladačů oproti Windows NT podmíněna podporou Plug and Play. Windows 2000 sice podporuje činnost starších ovladačů, ale z důvodu technologie Plug and Play je znemožněno nasazení starších ovladačů pro standardní periférie. Předchozí řešení vyžadovalo odejmutí standardního ovladače paralelního portu a nasazení vlastního specializovaného ovladače. Ve Windows 2000/XP však vyjmutí standardního ovladače či jeho znepřístupnění způsobí fyzické odebrání periférie zásahem jádra operačního systému do BIOSu počítače. Odtud bylo nutné nalézt jiné řešení, a to buď vytvořit nový zcela kompatibilní ovladač paralelního portu plně nahrazující stávající, avšak rozšířen o požadované chování, nebo vytvořit specializovaný ovladač, který se standardním ovladačem poběží souběžně. Jako vhodnější se ukázalo druhé řešení, kdy se speciální ovladač v systému registruje na jinou neobsazenou bázovou adresu nevyužívající přerušení, tudíž nikterak nekoliduje se standardním ovladačem paralelního portu. Interně však k portu přistupuje a také využívá příslušné přerušení. Jelikož standardní nízkoúrovňový ovladač paralelního portu si příslušný kanál přerušení mapuje až v okamžiku, kdy je o to požádán vyšším ovladačem zařízení (např. ovladačem tiskárny), je možné si příslušný kanál mapovat pro své účely. Shodně s analýzou u Windows NT byly údaje získávány při dvou časově odlišných obsluh přerušení. Tentokráte však rozdíl mez krátkodobou obsluhou a obsluhou s čekací smyčkou se vůbec nelišily: 1. V registru ISR nebyl uveden žádný bit informující o právě probíhající obsluze, nebo o jakékoliv jiné obsluze. Respektive obsah registru ISR byl u obou obvodů nulový. 2. Obsah registru IMR byl pozměněn tak, aby všechna přerušení nižší a stejné priority IRQL byla maskována. Výjimku tvoří pouze přerušení hodin reálného času (IRQ8).
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
IRQ 0 1 2 3 4 5 6 7
ISR 0 0 0 0 0 0 0 0
IMR 0 0 0 0 0 1 1 1 Nepoužito
IRQ 8 9 10 11 12 13 14 15
ISR 0 0 0 0 0 0 0 0
90
IMR 0 1 1 1 1 1 1 1
Obr. 7: Stav registrů ISR a IMR během zpracování obsluhy IRQ7 ve Windows 2000 3.
Je-li obsluha přerušení prováděna na úrovni IRQL >= 28, je již přerušení hodin reálného času maskováno také. Jak vyplývá z popisu systém správy přerušení je odlišný od systému ve Windows NT. Opět je zřetelné, že MS Windows 2000/XP používá techniku, která narušuje úplný mód vnoření, oproti Windows NT je však jednoduchší. Nabízí se nám tak dva možné módy: 1. mód speciální masky, 2. mód automatického EOI. Konkrétně použitý mód z této analýzy není možné jednoznačně určit. Nejpravděpodobněji je však použit mód automatického EOI, neboť v případě módu speciální masky by systém musel vždy před spuštěním obslužné rutiny navíc zaslat EOI, v opačném případě by registr ISR nemohl být vždy vynulován. Systém u každé přijaté žádosti nejprve vyhodnotí přiřazenou úroveň IRQL. Na základě zjištěné úrovně IRQL určí potřebnou masku, kterou ihned zápisem do registru IMR obou obvodů aplikuje. Je-li identifikovaná úroveň IRQL >= 28, jsou maskována všechna přerušení. V opačném případě jsou maskována pouze přerušení se shodnou nebo nižší úrovní IRQL mimo IR8 – hodin reálného času. Po aplikaci masky je opět povolen vstup INTR, který byl automaticky hardwarem maskován v okamžiku přijetí žádosti a ihned poté zahájí asociovanou obsluhu přerušení. Běžící obsluha tak již může být přerušena pouze žádostí s vyšší úrovní IRQL. Po ukončení obsluhy jsou registry IMR obou obvodů uvedeny do předchozího stavu čimž jsou opět nové žádosti povoleny. Pro názornější ilustraci je opět níže uveden příklad chování systému na možný vznik několika přerušení. Pro zjednodušení předpokládejme, že je v systému zpracována úloha s prioritou IRQL 0, tudíž není prováděna žádná obsluha přerušení a obvody 8259A jsou v režimu automatického EOI (1). Následně je procesor přerušen žádostí o obsluhu pevného disku (IRQ14) s prioritou IRQL 13 (2). Procesor se dostane do strojového cyklu potvrzení přijetí přerušení během něhož je automaticky nezávisle zamaskován vstup INTR. Po převzetí požadavku je zahájena systémová část obsluhy, která vyhodnotí prioritu IRQL a pro náš případ zvýší na úroveň 13. Dle aktuální úrovně se vypočte potřebná maska, která se ihned aplikuje zápisem do registrů IMR (3). V našem případě jsou maskovány vstup IR 14 a 15. Systém pokračuje povolením přerušení (odmaskováním vstupu INTR), a spuštěním obslužné rutiny ovladače (4). Dále předpokládejme výskyt nové žádosti o přerušení, tentokráte od klávesnice (IRQ1) s pevně přidělenou úrovní IRQL 26 (5). Jelikož je toto přerušení povoleno, dojde opět k přerušení procesoru a k zahájení systémové části obsluhy (6). Shodně s předchozím případem je zvýšena úroveň IRQL na hodnotu 26 a společně sní je aplikována nová maska. I tentokrát jsou maskována všechna přerušení shodné nebo nižší úrovně IRQL, tedy přerušení IRQ1 –
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
91
IRQ15 mimo hodin reálného času (IRQ8). Následně se povolí vstup INTR a zahájí obslužná rutina (7).
Obr. 8: Zpracovávaní obsluh přerušení v MS Windows 2000/XP Rozšiřme úvahu o předpoklad, že ještě před ukončením této obsluhy je generována nová žádost o obsluhu sériové myši (COM1 - IRQ4) s úrovní IRQL 24. Jelikož je však kanál IR4 maskován je tato žádost obvody pozdržena (8). Za předpokladu, že již nenastane žádné nové přerušení, se obsluha klávesnice (IRQ3) řádně ukončí a činnost procesoru přejde zpět do systémové části obsluhy (9). Systém v prvním kroku zamaskuje vstup INTR, následně sníží úroveň IRQL na předchozí hodnotu (pro náš případ je to hodnota 13) a společně sní aplikuje příslušnou masku. Od této chvíle jsou opět povolena všechna přerušení mimo IRQ 14 a 15, tudíž obvody 8259A dříve identifikovanou žádost vstupu IR4 (COM1 - sériová myš) zvýšením úrovně na vodiči INTR předají procesoru. Ten má však vsup maskován, tudíž závěrečná část obsluhy, během které se provede návrat zpět z obsluhy (instrukce IRET) nebude touto skutečností ovlivněna. Instrukcí IRET procesor automaticky přejde do předchozí přerušené činnosti a povolí vstup INTR, co v našem případě způsobí přijetí nového přerušení (10).
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
92
Stejně jako v předchozím případě je spuštěna systémová část obsluhy nového přerušení (11), ve které je zvýšena úroveň IRQL na hodnotu 24 a spolu sní je aplikována příslušná maska. Následně je zahájena příslušná rutina, opět zakončená systémovou částí navracející původní úroveň IRQL spolu s úpravou příslušné masky. Po návratu zpět je opět automaticky odmaskován vstupu INTR a procesor pokračuje v provádění dříve přerušené obsluhy pevného disku (12). Stejným způsobem je ukončena i tato obsluha, po které je opět systémem navrácena původní úroveň IRQL0 a odmaskována všechna přerušení. Návratem zpět se systém vrátí do stavu před prvním přerušením (13). Pro úplnost je třeba dodat, že toto chování je naprosto identické mezi operačními systémy MS Windows 2000 a MS Windows XP.
3 Zhodnocení standardní obsluhy přerušení založené na obvodu 8259a z pohledu využití v systémech reálného času V předchozím textu byly rozebrány mechanizmy zpracování přerušení a spolupráce s obvodem 8259A v operačních systémech MS Windows NT a MS Windows 2000/XP. Přestože oba systémy spravují přerušení dle shodného rozvržení úrovní priorit IRQL, jejich konkrétní realizace se liší. Z pohledu požadavků na zpracování v reálném čase mají však obě řešení určité nedostatky: 1. Ani jeden systém nevyužívá standardní mód úplného vnoření. Lze předpokládat, že interní priority vstupů IR obvodu 8259 nejsou vůči standardu pozměněny. Tento předpoklad je umocněn také faktem, že tyto interní priority nelze nastavit tak, aby bylo dosaženo prioritního uspořádání, které MS Windows NT/2000/XP skutečně spravuje. Ve svém důsledku tak existují dva prioritní systémy a to logický systém (úrovně IRQL), spravovaný operačními systémy MS Windows NT/2000/XP a hardwarový, jenž je interně spravován obvodem 8259A. Problém tak vzniká v případě, když dva vstupy IR vznesou své požadavky ve stejný okamžik. V takovémto případě obvod 8259A předá vektor na obsluhu dle hardwarových priorit a ne podle logického uspořádání (IRQL) definovaném operačním systémem. Jsou-li tyto priority v rozporu systém způsobí že žádost o obsluhu vstupu IR s vyšší logickou prioritou je pozastavena žádostí nižší logické priority až do doby, než systém opět povolí přerušení (povolení vstupu INTR). Celý problém se navíc může zkomplikovat tím, že dříve nežli se opět povolí přerušení, může vznést požadavek o obsluhu jiný vstup s vyšší hardwarovou prioritou a takto čekající žádost opět pozdržet. 2. Jedním z největších nedostatků obou systémů je absence informací o dobách trvání jednotlivých částí obsluh a systémových volání. Takto není možné předem určit dobu, za kterou se obsluha vykoná či jak dlouho bude trvat, než systém rutinu začne vykonávat. Kromě těchto společných vlastností, které lze označit jako nevhodné má operační systém MS Windows NT navíc ještě jednu problematickou vlastnost: 3. Systém nevylučuje možnost přerušení obsluhy vyšší logické priority IRQL žádostí nižší priority. Z výše uvedeného popisu (platí pouze pro MS Windows NT) vyplývá, že standardně při běhu obslužné rutiny jsou všechna přerušení povolena. Systém sice hardwarově maskuje přerušení nižší a shodné priority, ale až poté co se takovéto nežádané přerušení vyskytne. I když je ihned po vyhodnocení priorit opětovně zahájeno zpracování obsluhy s vyšší prioritou a obsluha s nižší prioritou je takto pozastavena, nic se nemění na tom, že obsluha s vyšší úrovní IRQL je dočasně pozastavena přerušením s nižší úrovní IRQL.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003
93
4 Literatura ASPINWALL, J. 1999. IRQ, DMA a I/O Předcházení a řešení konfliktů v konfiguraci počítače. Praha: Computer Press, 2000, první vydání. ISBN 80-7226-264-5 CRAIG PEACOCK’S 1998A. Interfacing the Standard Parallel Port [online]. Craig Peacock February 1998. PDF format. Available from WWW:
. CRAIG PEACOCK’S 1998B. Using Interrupts [online]. Craig Peacock February 1998. PDF format. Available from WWW: . FOJTÍK, D. 2000 Ovladač karty PCA 1408 pro MS Windows NT realizující řízení v reálném čase. In Proceedings of XXIV. ASR '2000 Seminar "Instruments and Control" [online]. Ostrava : VŠB-TU Ostrava, 2000, vol. 6, 8 p. [cited 2000-05-04]. ISBN 80-7078-774-0. NĚMEC, D. 1988. Návody a vzory realizací s 8086. Praha: ČSVTS, 1988. INTEL CORPORATION 1988. 8259A Programmable interrupt controller [online]. Intel Corporation December 1988. PDF format. Available from WWW: . Order Number 231468-003 MUELLER, S. 2001 Osobní počítač. Praha: Computer Press, 2001. ISBN 80-7226-470-2 MICROSOFT 1998A. Microsoft Windows NT DDK. Redmond: Microsoft Corporation Redmond USA, 1998. MICROSOFT 1998B. MSDN Library April 1998. Redmond: Microsoft Corporation Redmond USA, 1998. MICROSOFT 2000. Microsoft Windows 2000 DDK. Redmond: Microsoft Corporation Redmond USA, June 28, 2000. SOLOMON, A. D. 1999. Windows NT pro administrátory a vývojáře. Praha: Computer Press, 1999. ISBN 80-7226-147-9