Probleme generale privind intreruperile
Intreruperea este un semnal transmis sistemului de calcul prin care
acesta este anuntat de aparitia unui eveniment neobisnuit. Atunci
cind evenimentul s-a produs, au loc, in ordine, urmatoare 646t1911g le trei
actiuni:
1. suspendarea programului in curs de desfasurare;
2. lansarea in executie a unei rutine specializate, numita
Rutina de Tratare a Intreruperii (RTI) sau Handler de intrerupere,
care deserveste intreruperea;
3. reluarea executiei programului suspendat.
Cauzele acestor evenimente pot fi de doua tipuri: externe si
interne. Iata citeva exemple de evenimente de natura externa:
apasarea unei anumite combinatii de taste (de exemplu CTRL/BREAK),
terminarea unei operatii de intrare/iesire, asteptarea unui raspuns
de la SC pentru continuarea activitatii unui proces tehnologic etc.
De cele mai multe ori, in urma tratarii intreruperii externe, se
reia activitatea programului suspendat.
Iata si citeva exemple de evenimente neobisnuite de natura interna:
impartire la zero, tentativa de adresare a unei zone de memorie
care nu exista, tentativa de executie a unei instructiuni avand un
cod inexistent, depasirea capacitatii de reprezentare a
rezultatului unui calcul etc.
De cele mai multe ori, in urma tratarii intreruperii interne,
controlul este transmis SO, fara a mai relua activitatea
programului suspendat.
Regula unanim acceptata de catre proiectantii sistemelor de
intreruperi este aceea ca orice intrerupere este luata in
considerare numai intre executiile a doua instructiuni masina
succesive. Daca apar simultan doua intreruperi, circuitele hard ale
SC decid care dintre ele va fi servita prima.
La aparitia unei intreruperi, SC trebuie, in ordine:
1) sa determine tipul evenimentului care a generat
intreruperea (intern, extern);
2) sa afle care este cauza intreruperii;
3) sa determine adresa RTI (rutinei de tratare a
intreruperii);
Pentru fiecare tip de eveniment si pentru fiecare cauza posibila a
unei intreruperi se construieste cite un RTI. Metoda cea mai
folosita pentru localizarea rapida a RTI este vectorizarea
intreruperilor. Aceasta consta in a asocia, pentru fiecare
intrerupere, o locatie de memorie cu adresa fixa. In aceasta
locatie fixa se trece adresa RTI corespunzator intreruperii. Deci
in momentul aparitiei unei interuperi, mai intii se scoate din
locatia de memorie asociata intreruperii adresa handlerului
corespunzator si apoi se da controlul acestuia. De regula, cele
doua actiuni sunt contopite intr-una singura, folosind adresarea
indirecta cu continutul locatiei fixe.
O parte dintre RTI sunt furnizate odata cu sistemul de calcul. O
alta parte dintre ele sunt scrise de catre proiectantii sistemului
de operare. In sfirsit, utilizatorii pot sa-si scrie propriile lor
RTI.
In proiectarea unui handler de intrerupere trebuie respectate, in
ordine, urmatoarele etape:
1. Salvarea contextului programului suspendat: registri, flaguri,
o parte a stivei etc. De exemplu, presupunem ca 8086 trebuie sa
execute instructiunile:
mov AX,a
add AX,b
Daca intre cele doua instructiuni apare o intrerupere, este normal
ca RTI sa salveze registrul AX!
2. Interzicerea tratarii intreruperilor care pot perturba evolutia
normala a handlerului respectiv. De exemplu handlerul care rezolva
impartirea la zero poate sa contina, eventual din greseala, o
impartire la zero. In acest caz ar trebui sa nu fie apelat din nou
acest handler.
3. Deservirea intreruperii, aceasta constituind partea esentiala a
handlerului.
4. Ridicarea restrictiilor impuse la etapa 2.
5. Refacerea contextului salvat la etapa 1.
6. Predarea controlul programului care a fost suspendat sau
sistemului de operare.
Sistemul de intreruperi 8086
Clasificarea intreruperilor
Microprocesorul 8086 dispune de 256 de intreruperi numerotate de la
00 la 0FFh. Dam in cele ce urmeaza o clasificare a lor pe trei
nivele. Natural, incercind o clasificare a intregului sistem de
intreruperi, suntem nevoiti sa folosim o serie de termeni
nedefiniti in aceasta lucrare. Pentru detalii se pot consulta
documentatiile DOS.
ž Intreruperi hard:
- ale microprocesorului;
- ale memoriei;
- de ceas;
- ale altor echipamente.
ž Intreruperi si servicii BIOS:
- intreruperi propriu-zise;
diverse servicii BIOS:
- servicii ecran;
- servicii tastatura;
- servicii disc;
- servicii imprimanta;
- alte servicii;
- adrese ale unor structuri de date BIOS.
ž Intreruperi si servicii DOS:
- intreruperi generale;
intreruperea (21h) care defineste functiile DOS:
- controlul memoriei;
- controlul proceselor;
- functii ale discului;
- directori si fisiere;
- I/O cu periferice de tip caracter;
- informatii despre sistem;
- diverse alte functii;
- adrese ale unor structuri de date DOS.
ž Intreruperi si servicii definite de utilizator.
Principalele intreruperi
Exemple de intreruperi hard
Intreruperi ale microprocesorului:
00h impartire la zero.
01h un pas; e apelata dupa fiecare instructiune daca TF = 1.
04h depasire aritmetica la reprezentarea unui numar.
Intrerupere relativa la memoria RAM:
02h eroare de paritate la accesul unei locatii din memoria
RAM. Aceasta intrerupere este nemascabila, adica nu i se poate
interzice declansarea, in sensul etapei 2 descrisa mai sus.
Intrerupere de ceas:
08h Controlul timpului. Este apelata automat de aproximativ
18.2 ori pe secunda.
Intreruperi ale altor echipamente:
09h Activarea tastaturii. Este apelata la fiecare apasare sau
eliberare a unei taste si furnizeaza un cod corespunzator.
05h Print Screen. Este apelata la tastarea <SHIFT/PRTSCR> in
scopul copierii continutului ecranului pe imprimanta.
Exemple de intreruperi si servicii BIOS
Intreruperi simple:
11h Lista echipamentelor.
12h Dimensiunea memoriei RAM.
15h Acces la legatura seriala RS-232.
18h Acces la interpretorul BASIC. Astazi mai putin folosita.
1bh Rezolvarea tastarii <CTRL/BREAK>.
Intreruperi complexe, care ofera pachete de servicii tipice BIOS:
10h Servicii de lucru cu ecranul, in mod text si in mod grafic.
13h Servicii de lucru cu hard discul si cu discheta.
19h Servicii de incarcare a sistemului de operare.
16h Bufferizarea manipularii tastaturii.
1ah Servicii legate de ceasul sistem.
17h Servicii imprimanta.
Adrese ale unor structuri de date BIOS:
1dh Adresa zonei de parametri video.
1eh Adresa zonei de parametri a unitatilor de discheta.
1fh Parametrii adaptorului grafic.
41h Parametrii hard discului.
50h Accesarea memoriei CMOS.
Principalele intreruperi DOS
Principala intrerupere DOS este 21h. Ea inmagazineaza practic
intreaga componenta BDOS a sistemului de operare DOS. Sectiunea
urmatoare va fi destinata exclusiv acestei intreruperi.
Alte intreruperi DOS:
20h Terminarea unui program.
25h Citire fizica de pe disc.
26h Scriere fizica pe disc.
27h Terminarea unui program de tip TSR.
28h Intrerupere DOS nedocumentata pentru partajarea timpului.
Asupra intreruperilor nedocumentate vom reveni ulterior cu
explicatii.
2eh (nedocumentata). Executa o comanda DOS ca si cind ar fi
data de la prompter.
Intreruperea 2fh are functii multiple. Ea se ocupa cu multiplexarea
resurselor sistemului, cu gestiunea memoriei extinse (XMS) daca
aceasta exista, cu controlul programelor TSR s.a.m.d.
Intreruperea 67h grupeaza toate serviciile necesare gestiunii
memoriei expandate daca SC este dotat cu o astfel de componenta
hard.
Intreruperea 33h grupeaza toate functiile necesare lucrului cu
mouse.
Urmatoarele intreruperi furnizeaza o serie de adrese ale unor
structuri DOS:
22h Adresa de terminare a programului.
23h Adresa handlerului care trateaza tastarea <CTRL/BREAK>.
24h Adresa handlerului care trateaza erorile critice aparute
in executie.
Principalele functii DOS
Asa cum am mai aratat, principala intrerupere DOS este 21h. Ea
inmagazineaza practic intreaga componenta BDOS a sistemului de
operare DOS. Mai mult, sarcinile unora dintre intreruperile mai sus
amintite au fost preluate si uneori extinse de catre unele dintre
functiile acestei intreruperi.
Functii de gestiune a memoriei:
48h Alocare de memorie.
49h Eliberare de memorie.
4ah Ajustarea spatiului de memorie alocat.
Functii de gestiune a proceselor:
4bh Executia unui proces fiu.
4ch Terminarea unui program.
31h Terminarea unui program dar raminerea lui rezidenta(TSR).
4dh Obtinerea codului de retur al fazei precedente.
26h Creare PSP.
62h Obtinerea adresei unui PSP.
50h Reactivarea unui proces suspendat de un TSR.
Functii specifice discului:
19h Intoarce numarul discului implicit.
33h Intoarce numarul discului folosit la incarcarea SO.
1ah Furnizeaza adresa de transfer disc (DTA).
1bh Furnizeaza informatii despre tabela de alocare a
fisierelor (FAT).
Functii specifice directorilor si fisierelor:
39h Crearea unui director.
3ah Stergerea unui director.
3bh Schimbarea directorului curent.
47h Furnizarea directorului implicit curent.
56h Schimbarea numelui unui fisier.
4eh Gasirea primului fisier specificat generic.
4fh Gasirea urmatorului fisier specificat generic.
41h Stergerea unui fisier.
3dh Deschiderea unui fisier.
3eh Inchiderea unui fisier.
3fh Citirea dintr-un fisier.
40h Scrierea intr-un fisier.
Intrari / iesiri cu periferice de tip caracter:
01h Citirea unui caracter.
02h Scrierea unui caracter.
09h Scrierea unui sir de caractere.
0ah Citirea unui sir de caractere.
Informatii despre sistem:
30h Furnizeaza versiunea curenta DOS.
38h Trateaza parametrii dependenti de tara.
2bh Furnizeaza sau modifica data curenta.
2dh Furnizeaza sau modifica ora curenta.
Diverse alte functii:
35h Obtine adresa unui handler de intrerupere.
25h Modifica adresa unui handler de intrerupere.
44h Ansamblu de functii destinat lucrului la nivel fizic cu
diverse tipuri de periferice caracter sau bloc.
34h Furnizeaza adresa flagului ce indica existenta unei
functii DOS in executie (nedocumentata).
52h Atribuie valori unor variabile DOS (nedocumentata).
|