INT
Prerušenie programu
Prerušovací podsystém
Kontrolér prerušenia
Obsluha prerušenia
qPostup činností pri obsluhe prerušenia 
qRezidentné programy

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äť.
  1. 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.
  2. 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

  1. Ovládače zariadení

  2. 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.
     
  3. Pop-up programy

  4. 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ď.
     
  5. Bezpečnostné systémy

  6. 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ť.
     
  7. Prepínače úloh

  8. 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