Prerušovací
podsystém
Prerušenie (Interrupt - INT) je udalosť vyvolaná
vonkajším impulzom alebo zodpovedajúcou programovou inštrukciou, na základe
ktorej procesor preruší práve vykonávaný program a zavolá rutinu určenú
príslušným vektorom prerušenia.
Signál prerušenia z externého zdroja sa môže k
procesoru dostať cez jeden z dvoch vývodov na púzdre procesora : INTR a
NMI.
-
NMI - (Non Mascable Interrupt) nemaskovateľné
prerušenie sa používa na signalizovanie “katastrofických “ udalostí
ako je napríklad náhly pokles napájacieho napätia alebo chyba parity operačnej
pamäti či zbernice. Tento vývod procesora je teda určený pre prerušenia,
ktoré nie je možné zakázať.
-
INTR - (Mascable Interrupt) maskovateľné
prerušenie, resp. vývod INTR tohto zakázateľného prerušenie je
väčšinou budený ďalšim obvodom - programovateľným kontrolérom prerušenia
- (PIC - Priority Interrupt Controller) typu 8259A. Obsluhu tohto prerušenia
možno programovo zakázať vynulovaním bitu IF (Interrupt Flag) v príznakovom
registri procesora. Pokiaľ je IF = 0 procesor prerušenie ignoruje. Povinosťou
kontroléra PIC je udržať informáciu o aktívnej požiadavke na prerušenie
do doby keď sa uvoľní bit IF = 1 a procesor môže vo vhodnom okamihu akceptovať
požiadavku na prerušenie tak, že vyšle 2 zbernicové cykly v doprovode so
signálom INTA (Interrrupt Asknowledge ). Počas druhého z cyklov INTA uloží
PIC na dátovú zbernicu číslo vektora prerušenia, na základe ktorého sa
vykoná príslušná rutina z adresy podľa tabuľky vektorov prerušení. Po začatí
obsluhy prerušenia je automaticky zakázaný príjem ďalšieho prerušenia.
V prípade ak sa požaduje príjem ďalších vnorených prerušení možno ich prístup
odblokovať programovo pomocou príznakového bitu IF.
Podľa toho, čím je prerušenie generované, rozlišujú
sa na prerušenia:
-
Interné INT, tiež nazývané softwarové SW_INT,
ktoré sú generované programovo, synchrónne s okamihom výskytu inštrukcie
SW_INT v postupnosti inštrukcii vykonávaného programu. Sú to vlastne špecializované
obslužné rutiny, ktorých začiatočná adresa je prístupná pomocou tabuľky
vektorov prerušení. Vyznačujú sa tým, že zo všetkých volacích inštrukcii
sú najrýchlejšie. Tabuľka vektorových prerušení len zjednodušuje volanie
príslušných obslužných procedúr a tiež umožňuje rôznym výrobcom konštruovať
vzájomne kompatibilné počítače. Preto sú nepoužité preušenia pre obsluhu
hardware využívané ako rozhranie pre volanie služieb DOS a BIOS. K interným
INT patrí podľa definície firmy Intel aj prvých 32 typov (INT 0 až INT
31 ), ktoré sú určené pre potrebu samotného procesora v neštandardnej situácii,
napríklad INT 0 pri delení nulou, INT 1 pri krokovaní, INT 2 ako NMI, INT3
ako jednobajtová inštrukcia pre breakpoint a INT 4 pri pretečení.
-
Externé INT, tiež nazývané hardwardové HW_INT,
ktoré sú generované vonkajšími udalosťami (na základe žiadosti o prerušenie
IRQ), asynnchronne voči bežiacemu programu
Procesor 80x86 rozlišuje 256 možných prerušení. Každému
prerušeniu prislúcha 32-bitová logická adresa (segment:offset). Táto adresa
sa nazýva vektor prerušenia a ukazuje na miesto v pamäti,
kde sa začína podprogram, ktorý sa vykoná pri vyvolaní daného prerušenia.
Pre každý typ prerušenia je v operačnej pamäti od fyzickej adresy 0 uložená
úplná logická adresa obslužného programu pre príslušné prerušenie (v poradí
najprv offset pre IP potom segment pre CS), teda celkove je vyhradená oblasť
256 * 4 byte = 1000D = 400H. Táto oblasť pamäti sa označuje ako tzv. tabuľka
vektorov prerušení.
Dôležité služby BIOS:
INT 00H - delenie nulou
INT 01H - krokovanie programu
INT 02H - NMI
INT 03H - zastavenie programu - Break point
INT 04H - aritmetické pretečenie
INT 05H - kláves PrintScreen
INT 08H - časovač
INT 09H - klávesnica
INT 08H - časovač
INT 10H - VideoBIOS
INT 13H - Diskové operácie
INT 14H - Sériové rozhranie
INT 15H - Rozšírenie AT BIOSu
INT 16H - Obsluha buffera klávesnice
INT 17H - Obsluha tlačiarne
INT 1AH - Systémové hodiny
INT 1BH - Kláves Ctrl - Break
INT 1CH - Užívateľský časovač
INT 1DH - Tabuľka videoparametrov
Prehľad HW zdrojov žiadostí IRQ
o prerušenie INT
Typ IRQ |
Adresa INT vektora |
Typ INT |
Význam v PC AT |
IRQ0 |
20H |
INT_8 |
HW časovač (18,2 Hz) |
IRQ1 |
24H |
INT_9 |
Klávesnica |
IRQ2 |
28H |
INT_10 (0AH) |
kaskádne zapojenie 2 PIC |
IRQ3 |
2CH |
INT_11 (0BH) |
COM2 |
IRQ4 |
30H |
INT_12 (0CH) |
COM1 |
IRQ5 |
34H |
INT_13 (0DH) |
LPT2 |
IRQ6 |
38H |
INT_14 (0EH) |
disketa |
IRQ7 |
3CH |
INT_15 ()FH) |
LPT1 |
IRQ8 |
1C0H |
INT_112 (70H) |
kalendár |
IRQ9 |
1C4H |
INT_113 (71H) |
|
IRQ10 |
1C8H |
INT_114 (72H) |
|
IRQ11 |
1CCH |
INT_115 (73H) |
|
IRQ12 |
1D0H |
INT_116 (74H) |
|
IRQ13 |
1D4H |
INT_117 (75H) |
kooprocesor |
IRQ14 |
1D8H |
INT_118 (76H) |
pevný disk |
IRQ15 |
1DCH |
INT_119 (77H) |
|
Príklad výpisu obsahu začiatku
pamäte, v oblasti tabuľky vektorových prerušení: (získaná
pomocou príkazu debuggera d 0:0). Pre iný PC sa môže výpis odlišovať.
Adresa |
Obsah pamäte |
0000:0000 |
8A 10 16 01 F4 06 70 00-16
00 A0 05 F4 06 70 00 |
0000:0010 |
F4 06 70 00 54 FF 00 F0-4C
E1 00 F0 6F EF 00 F0 |
0000:0020 |
5F 02 07 0C DE 01 5F D3-6F
EF 00 F0 6F EF 00 F0 |
0000:0030 |
6F EF 00 F0 6F EF 00 F0-B7
00 A0 05 F4 06 70 00 |
0000:0040 |
78 16 85 CC 4D F8 00 F0-41
F8 00 F0 8A 16 85 CC |
0000:0050 |
39 E7 00 F0 65 17 85 CC-2E
E8 00 F0 FD 01 07 0C |
0000:0060 |
CC E3 00 F0 55 17 85 CC-6E
FE 00 F0 EE 06 70 00 |
0000:0070 |
53 FF 00 F0 A4 F0 00 F0-22
05 00 00 CA 53 00 C0 |
Z tabuľky vidno, že prerušeniu INT 8H , zodpovedá
obsah pamäte 20H - 24H (32D -36D), ktorý tvoria bajty 5F02070C => adresa
: 0C07:025F (najprv offset LSB, MSB potom segment LSB, MSB adresy obslužného
programu).
Poprípade tiež vidno, že prerušenia INT 0BH a
INT 0CH (pre obsluhu sériových portov) začínajú na spoločnej adrese F000:EF6F
H.
Kontrolér
prerušenia
Programovateľný obvod PIC (Priority
Interrupt Controller) tzv. kontrolér prerušenia, obyčajne realizovaný obvodom
8259A, umožňuje (v PC XT ) spracovať až 8 žiadostí IRQi o prerušenie, prideľovať
a meniť im prioritu, zakazovať a povoľovať jednotlivé prerušenia. Výstup
z PIC ako už bolo spomenuté je pripojený k vývodu pre maskovateľné prerušenie
procesora INTR. Pre programátora predstavuje ďalšiu vrstvu prerušovacieho
systému, ktorá mu umožňuje selektívne zakázať niektoré externé prerušenia,
pokiaľ by nepostačovali inštrukcie STI a CLI procesora. V PC XT sa používa
jeden obvod 8259A, v PC AT sú zapojené dva v kaskáde, takže umožňuje až
15 rôznych žiadostí o prerušenie.
Pripojenie obvodu PIC na zbernicu počítača je
podobné (obr. 80) ako pripojenie podobných programovateľných obvodov typu
PPI-8255, PIT-8253 a pod. S obvodom prvého Master PIC možno komunikovať
cez porty 20H, 21H a s obvodom druhého Slave PIC cez porty A0H, A1H.
Žiadosti o prerušenie IRQi (obr. 81) nevyvolávajú
priamo prerušenie na vývode INTR procesora, ale môžu byť v PIC-8259A rôznym
spôsobom blokované (maskované) a vyhodnocované podľa naprogramovanej priority.
V PC sa používa spôsob priradenia, keď IRQ_0H ( HW časovač 18,2Hz) má najvyššiu
prioritu a volá vektorovú adresu INT_8H, klávesnicový IRQ_1H vyvoláva prerušenie
INT_9H, asynchrónna komunikácia cez COM2 (resp.COM1) sa uskutočňuje s pomocou
IRQ_3 (resp.IRQ_4) a vyvoláva INT_0BH ( resp. INT_0CH ) a pod. Niektoré
požiadavky IRQ sú voľné a poskytujú tak možnosť pre obsluhu ďalších vonkajších
zariadení. Požiadavka IRQ_02H slúži na kaskádové pripojenie druhého obvodu
PIC.
Činnosť obvodu PIC sa ovplyvňuje programovaním
jeho registra masiek prerušení IMR, registra požiadaviek na prerušenie
IRR a stavového registra obsluhy prerušení ISR.
-
IMR - register masiek požiadaviek IRQ (Interrupt
mask register) sa používa na maskovanie, t.j. povolenie alebo zákaz jednotlivých
požiadaviek na prerušenie IRQi. Hodnota 1 na príslušnej pozícii slova OCW1
blokuje príslušný vstup IRQi a hodnota 0 ho povoľuje.
-
IRR - register požiadaviek IRQ(
Interrupt request register ). Požiadavky na prerušenie IRQi
sa privádzajú cez vstupy IR0 až IR7 do registra IRR ( IR0 má najvyššiu
prioritu, IR7 najnižšiu). Až po vhodnom odmaskovani a pri vhodnej priorite
požiadavky može sa stať táto požiadavka podnetom na vyvolanie prerušenia
- INT.
-
Priority coder (resolver) - logika vyhodnocovania
priorít porovnáva obsah registrov IMR a IRR a vyberá žiadosť IRQi
s najvyššou prioritou a zavedie ju do stavového registra požiadaviek na
obsluhu prerušení ISR.
-
ISR - stavový register požiadaviekna
obsluhu prerušení (In service register). Až obsah tohto registra vyhodnocuje
mikroprocesor ako žiadosť o INT. Jeho príslušný bit indikuje, či je zodpovedajúce
prerušenie obsluhované alebo nie. (Hodnota 0 oznamuje, že nie je práve
obsluhované ).
Inicializácia registrov IRR, IMR a ISR obvodu 8259A
po zapnutí počítača sa vykonáva zápisom inicializačných slov ICW. V PC
je štandardná inicializácia záležitosťou BIOSu.
 |
Obr. 80. Kontrolér prerušenia
PIC 8259A v systéme s PC. |
 |
Obr. 81. Vnútorná štruktúra
kontroléra prerušenia PIC 8237A. |
Obsluha prerušenia
Po vzniku prerušovacej udalosti prebehne určitá postupnosť
akcii, cieľom ktorých je poskytnúť prvú inštrukciu obslužného programu,
adekvátneho prerušovacej udalosti. Aby táto postupnosť mohla prebehnúť
je potrebné prerušovací podsystém naprogramovať.
q Inicializačná
časť a nainštalovanie rezidentného obslužného programu
Program k obsluhe prerušenia - ISR
(Interrupt service routine) od vonkajšieho zariadenia treba trvale t.j.
rezidentne
uložiť do pamäti tak, aby ho bolo možné vyvolať aj počas behu iných
programov. Užívateľské programy sú totiž tranzientné - zavedú sa
do operačnej pamäti, vykonajú sa a uvoľnia pamäť.
-
Program k obsluhe prerušenia ISR pozostáva z inštalačnej
a reinštalačnej časti a z vlastného tela rezidentne uloženého programu.
Základom inštalačnej časti je uloženie kódu obslužnej procedúry ISR (vlastného
tela rezidentne uloženého programu) so špecialnym zakončením tejto
procedúry - TSR (terminate and stay resident - ukončenie s rezidentným
zostatkom), vďaka ktorej zostane kód procedúry uložený v rezervovanej rezidentnej
pamäti a bude tak k dispozícii vždy v prípade potreby obsluhy tohto prerušenia.
-
Pred ukončením inštalačnej časti programu je potrebné
ešte uložiť do tabuľky vektorov INT adresu začiatku nového
obslužného programu, ktorý zostane rezidentne uložený v pamäti.
q Realizácia
tela programovej obsluhy preušenia.
Vlastný obslužný program okrem úschovy obsahov požívaných
registrov (PUSH - POP + uloženie starej adresy pôvodného obslužného programu
ISR - napríklad pre potreby deinštalácie), ukončenia procedúry obsluhy
pomocou IRET (IRET= RET + POPF) može byť:
-
Naviazaný na činnost určitej obslužnej rutiny, spravidla
BIOS alebo DOS (modifikuje sa pôvodný obslužný program a
nová obsluha je zaradená na začiatok alebo na koniec “reťazca“ pôvodných
obslužných rutin).
-
Tvorí samostatný obslužný program s orginálnym vektorom
prerušenia, napríklad pre určité vonkajšie zariadenie, ktoré má svoju individuálnu
požiadavku IRQ, realizovanú cez spoj k obvodu PIC-8259A , napríklad ako
tlačítko cez príslušný kolík na konektori zbernice, umožňujúce po stlačení
vyvolať žiadosť o prerušenie IRQi. Predpokladom úspešnej funkcie (okrem
povolenia prerušení od vonkajších zariadení - IF pomocou inštrukcie STI)
je tiež správne nainicializovanie kontroléra PIC 8259A ( inicializácia
cez BIOS, vhodná maska pomocou OCW1 do registra IMR). Po skončení obslužnej
procedúry , vyvolanej vonkajším prerušením treba oznámiť kontroléru PIC
8259A koniec aktivity obsluhy pomocou slova OCW2, buď ako nešpecifikovaný
koniec EOI (rovnaký pre všetky IRQ a zakončujúci naraz všetky žiadosti
IRQ) alebo ako koniec len vybranej žiadosti IRQ_i, napríklad v prípade
vnoreného prerušenia.
Postup činností
pri obsluhe prerušenia
Prvou udalosťou je vznik požiadavky IRQ (Interrupt
Request) periférneho zariadenia na určitú činnosť, ktorá sa má realizovať
pomocou prerušenia INT aktuálne bežiaceho programu.
-
Signál tejto požiadavky (zapamätaný v preklápacom
obvode adaptéra periférie) je pripojený na jeden zo vstupov IRQi
kontroléra prerušenia PIC. Ak je náhodou na vstupe PIC súčastný výskyt
požiadaviek na INT od viacerých periférii, tak PIC vyhodnotí, ktorá
z požiadaviek IRQI má najvyššiu prioritu a pre túto
vybranú požiadavku aktivuje do mikroprocesora signál INTR.
-
Ďalší postup záleží na tom, či je prerušenie mikroprocesora
programovo povolené. V kladnom prípade sa dokončí rozpracovaná inštrukcia
a mikroprocesor začne vysielať potvrdzovací signál INTA(Interrupt
Acknowledge). V zápornom prípade pokračuje mikroprocesor nerušene vo svojej
predtým zahájenej činnosti, ako keby signál INTR neprišiel. Situáciu môže
zmeniť len inštrukcia STI (povolenie prerušenia v registri flagov mikroprocesora).
-
Potvrdzovacie impulzy INTA vysiela mikroprocesor
vždy dva. Na základe prijatia prvého rozhodne kontrolér PIC o najdôležitejšej
požiadavke na prerušenie IRQ a po prijatí druhého mikroprocesor vyšle späť
k PIC po dátovej zbernici osmibitovú hodnotu tzv. typu prerušenia
(INT_vector). Teoreticky sú možné všetky kombinácie z intervalu
<0, 255>, ale v IBM PC sú BIOSom pre obslužné programy najbežnejších
periférii naprogramované typy prerušení INT 8 - INT 15 a INT 112 - INT119.
-
Typ prerušenia INT_vector prepočíta mikroprocesor
na ukazovateľ do tabuľky prerušení - 4*INT_Vector a po adresovej
zbernici vyšle adresu začiatku obslužného programu prerušenia ISR
(4 bajty - v poradí najprv offset pre IP potom segment pre CS).
-
Po uložení adresy nového ISR do registrov CS a
IP sa začne vykonávať postupnosť inštrukcii z programu ISR. ISR by
mal uschovať do zásobníka obsahy všetkých registrov, s ktorými bude pracovať,
aby nedošlo po návrate z ISR k stratám pôvodných hodnôt. Pred návratom
(inštrukcia IRET) ich procedúra ISR zase obnoví.
-
Na záver procedúry ISR by sa mala vynulovať pôvodná
žiadosť o prerušenie v technických prostriedkoch adaptéra periférie.
Procedúra ISR musí tiež oznámiť kontroléru PIC koniec aktivity - EOI
(End of Interrupt). Zaslanie príkazu EOI sa vykoná pomocou zaslania príkazu
OCW2 pre register ISR kontroléra PIC typ 8259A .
-
Prechodom na vykonávanie obslužnej procedúry ISR
sa automaticky zakázali ďalšie prerušenia. Zmeniť tento stav možno dvojako:
-
(pre prípad viacúrovňového prerušenia v priebehu
procedúry ISR) použitím inštrukcie STI v procedúre ISR;
-
automaticky po vykonaní návratovej inštrukcie IRET
sa tiež obnoví možnosť vyvolania prerušenia v následnom priebehu užívateľského
programu.
 |
Obr. 82.
Postupnosť činností pri obsluhe prerušenia. |
Rezidentné
programy
Vznik rezidentných programov bol ovplyvnený ťažkopádnosťou
operačného systému MS DOS. Rezidentný program v preklade znamená usadený,
bývajúci program. Totiž po ukončení takéhoto programu a po odovzdaní riadenia
operačnému systému zostane časť alebo celý takýto program v pamäti počítača.
Počítač môže pokračovať v svojej činnosti ďalej ak si pred svojim ukončením
zabezpečil nejakú "cestu" (pomocou funkcie MS DOS Terminate and stay resident),
odkiaľ opätovne dostane riadenie - procesor začne vykonávať jeho kód. V
pamäti teda tento program čaká bez toho, aby ovplyvňoval beh iných programov,
na svoju aktiváciu. To, že program musí čakať, než mu bude pridelené v
istom okamihu riadenie, je dôsledkom jednoúlohového operačného systému
MS DOS.
Typy rezidentných programov na obsluhu
prerušenia
-
Ovládače zariadení
Túto skupinu tvoria programy zabezpečujúce priame
ovládanie hardware periférnych zariadení (napríklad ovládač myši, tlačiarne),
ďalej programy, ktorých cieľom je zlepšiť a rozšíriť možnosti štandardných
zariadení (napríklad disková cache, národný ovládač klávesnice a pod.).
Sú to programy, ktoré sú počas behu operačného systému umiestnené v operačnej
pamäti nastálo (rezidentne). Ich úlohou je sprístupňovať operačnému systému
a používateľom vstupno-výstupné zariadenia počítača.
-
Pop-up programy
Tieto programy sú charakteristické tým, že sú
prístupné po stlačení dopredu nadefinovanej kombinácie klávesov. Do takejto
skupiny patria napríklad rôzne slovníky, kalkulačky, zápisníky atď.
-
Bezpečnostné systémy
Bezpečnostné systémy sú typickým príkladom potreby
rozšírenia možnosti systému, či ide o zabezpečenie PC proti zneužitiu (password),
alebo proti deštruktívnej činnosti (formát disku) a pod. Do tejto skupiny
možno zaradiť aj rôzne vírusy a rôzne antivírusové štíty, ktoré dokažu
identifikovať vírus, poprípade ho aj odstrániť.
-
Prepínače úloh
Prepínače úloh, tzv. taskswapery, sú rezidentné
programy, ktoré vznikli na základe potreby pracovať s viacerými programami
naraz. Ide väčšinou o programy, ktoré umožňujú prepínať procesy (úlohy),
ktoré sú v pamäti.
Štruktúra rezidentného programu
Rezidentný program sa zvyčajne skladá z dvoch častí.
Prvá
časť (tzv. rezidentná časť) zostane v pamäti aj po ukončení programu.
V pamäti je potom tak dlho, pokým sa neresetuje PC alebo pokým sa neodinštaluje
z pamäte. Veľkosť rezidentnej časti závisí od veľkosti zásobníka, veľkosti
dát a programového kódu. Druhá časť je tá, ktorá je pri ukončení
programu uvoľnená z pamäti počítača. Táto časť zbyčajne slúži na inštalovanie
samotnej rezidentnej časti a z toho dôvodu nie je potrebné, aby zaberala
pamäť.
Pri zavádzaní vykonateľného programu (.com, .exe)
do pamäte operačný systém vždy vytvorí na začiatku oblasti pamäte, kam
umiestni kód, tzv. predponu programového segmentu (Program Segment Prefix
- PSP). PSP nie je súčasťou programového súboru. Obsahuje aktuálne
údaje o stave operačného systému v okamihu zavádzania programu. Program
môže tieto informácie využívať pri svojej práci. PSP má vždy dĺžku 100H
(256 bajtov).
`
 |
Win 1250 |
Návrat
na stránku |
HTML 4.0 |
 |
Back |
|
|
|
Next |
|