Sunteți pe pagina 1din 14

COMPONENTA ROM-BIOS ŞI ÎNTRERUPERI. MS-DOS.

4.1. Prelucrarea întreruperilor

4.1.1. Conceptul de întrerupere


În cadrul procesului de execuţie al unui program CPU trebuie să asigure următoarele funcţii:
- evidenţierea stării în care se află şi asigurarea unui mecanism de schimbarea stării;
- asigurarea înlănţuirii automate a instrucţiunilor;
- asigurarea comenzilor necesare execuţiei unei instrucţiuni.
În ceea ce priveşte schimbarea stării CPU, aceasta se poate realiza prin:
- memorarea dinamică a informaţiei de stare, în cuvântul de stare al procesorului (MSW -
Machine Status Word);
- sistemul de întreruperi.
CPU se poate afla în una din următoarele stări:
- operaţională- atunci când poate executa operaţii de prelucrare a datelor;
- neoperaţională- care corespunde unei situaţii de defect.
Starea operaţională se caracterizează prin una din următoarele stări generate de procese:
- activă sau în aşteptare;
- întreruptibilă sau neîntreruptibilă, funcţie de luarea în considerare a întreruperii sau nu (se
spune că întreruperea este mascată);
- sistem sau utilizator, după cum este sub controlul sistemului de operare sau al programelor
de aplicaţie lansate de utilizatori.
Informaţia de stare este dinamică şi reflectă în orice moment funcţionarea CPU, fiind
memorată într-un registru de stare sub denumirea de cuvânt de stare program MSW (Machine Status
Word), conţinând în general, următoarele informaţii:
- dreptul de acces al programului la zona respectivă de memorie;
- o informaţie sintetică asupra modului cum s-a încheiat execuţia instrucţiunii precedente,
numită cod de condiţie (registrul Eflags la microprocesoarele Intel);
- măştile de întreruperi;
- starea CPU;
- nivelul de prioritate al programului;
- adresa următoarei instrucţiuni de executat (registrul EIP - Extended Instruction Pointer la
microprocesoarele Intel).
Posibilitatea comutării stării CPU se realizează prin procese de întrerupere care (de exemplu,
în cazul multiprogramării) este o condiţie indispensabilă în sensul asigurării trecerii controlului de
la un program la altul. Prelucrarea întreruperilor este realizată de o componentă hardware
specializată inclusă în CPU şi o componentă software (ce dispune de rutine incluse în sistemul de
operare pentru a trata fiecare întrerupere în parte).
Etapele tratării unei întreruperi (fig.4.1.):
Sisteme operaţionale

Fig. 4.1. Etapele tratării unei întreruperi

- în momentul apariţiei unei cereri de întreruperi, aceasta se va lua în considerare dacă este
cea mai prioritară din şirul de întreruperi;
- analiza tipului de întrerupere şi salvarea cuvântului de stare al programului la o anumită
adresă din memoria internă;
- încărcarea unui cuvânt de stare al programului specific întreruperii şi lansarea în execuţie
a rutinei ce prelucrează întreruperea;
- reîncărcarea vechiului cuvânt de stare al programului de la adresa unde a fost salvat în
memoria internă, după terminarea prelucrării întreruperii;
- redarea controlului programului întrerupt.
Întreruperile pot fi generate: de program, de operaţiile de intrare/ieşire, de defect al CPU sau
externe sistemului de calcul provenind de la alte echipamente cu care este cuplat.

4.1.2. Întreruperi la PC - uri


La microprocesoarele implementate pe PC -uri care permit multiprogramarea (I80286,
I80386, I80486, Pentium), controlul accesului între programele de aplicaţie şi sistemul de operare
este asigurat prin controlul spaţiului de adresă şi un mecanism de protecţie privilegiat astfel:
- controlul spaţiului de adresă separă programele de aplicaţii unele faţă de altele;
- mecanismul privilegiat de protecţie izolează software-ul de bază de software-ul aplicaţii.
Acesta garantează posibilitatea programelor de a avea acces la segmentul de cod, de date şi
Capitolul 4 – Componenta ROM-BIOS şi întreruperi MS-DOS
resursele de intrare/ieşire de bază, numai pentru nivelul privilegiat al segmentului respectiv.
Protecţia se bazează pe noţiunea de ierarhie de tutelă, existând patru niveluri privilegiate
aranjate în inel, începând cu cea mai mare tutelă 0 (fig.4.2.)

Nivel 3

Nivel 2

Nivel 1

Nivel 0

Fig.4.2. Protecţia prin ierarhia de tutelă

- nivelul 0 este rezervat în general, sistemului de operare;


- nivelul 3 este nivelul cea mai mică tutelă.

Nivelul privilegiat este un atribut de protecţie alocat la toate segmentele prin software-ul
sistemului, aceasta determinând care proceduri pot accesa segmentul, în timp ce drepturile de acces
sunt implementate hardware.
Codul sistemului de operare şi segmentele de date plasate la cel mai privilegiat nivel (nivel
0) nu pot fi accesate prin programe de alt nivel privilegiat, fiecare program putând accesa date la un
nivel identic sau mai mare.
Întreruperile şi excepţiile sunt cazuri speciale de transfer al controlului între programe.
O întrerupere este generată de un eveniment independent de programul în curs de execuţie,
în timp ce excepţiile sunt rezultate direct din programul în curs de execuţie, apărând atunci când o
instrucţiune nu poate fi executată complet în mod normal. Pentru localizarea întreruperii, CPU
asociază fiecărei surse de întrerupere un număr, numit vector de întrerupere cu rol de adresă în
IDT.
Tabela de descriere a întreruperilor (IDT) defineşte dirijarea acestora pentru fiecare tip de
întrerupere; această tabelă poate fi localizată oriunde în spaţiul adreselor fizice, ea fiind accesată în
memoria reală prin adrese ce sunt păstrate în registrul tabelei de descriere a întreruperilor (IDTR).
Fiecare intrare în tabela de descriere a întreruperilor conţine adresa planificatorului de întreruperi.
Erorile de execuţie care generează excepţiile referă o intrare în tabela de descriere a întreruperilor
ce se poate identifica prin bitul 1 în codul de eroare. Acest bit este setat pe 1 dacă întreruperea a fost
Sisteme operaţionale
cauzată de un eveniment extern programului (flagul TF=1).
Excepţiile au totodată şi rolul de a detecta faulturile sau erorile de programare produse de
utilizarea operanzilor sau a nivelurilor privilegiate; ele nu pot fi mascate, având fixaţi vectorii în
primele 32 de întreruperi. De exemplu, încercarea de a viola protecţia cauzează o excepţie care, ca
orice fault este dirijată de programul care a generat-o dacă aceasta este o întrerupere, respectiv de
un alt program, dacă este o intrare în tabela de descriere a întreruperilor.

4.2. Clase de întreruperi la PC - uri

Sistemul de întreruperi la PC este realizat cu ajutorul unui controlor de întreruperi


(standard 8259 A), existând mai multe niveluri de întreruperi situate fie pe magistrala
sistemului, fie pe placa de bază a CPU.
PC din gama IBM sau compatibile manevrează următoarele clase de întreruperi:

1) întreruperi ale microprocesorului grupate pe tipuri de întreruperi, fiecărui tip fiindu-i


atribuit un cod după care se identifică;

2) întreruperi iniţiate hardware sunt cauzate de evenimente externe activate pe două linii
: INTR (INTerrupt Request) şi NMI (Non Maskable Interrupt -pini de întrerupere ai
microprocesorului):
- dacă linia INTR este activă, CPU execută anumite activităţi în funcţie de indicatorul de validare al
întreruperii (IF):
* dacă IF = 0, atunci întreruperile semnalate vor fi mascate (inactive), iar CPU ignoră
întreruperea şi execută instrucţiunea următoare a programului activ;
* dacă IF = 1, atunci CPU recunoaşte cererea de întrerupere, opreşte execuţia normală a
programului activ şi predă controlul rutinei de tratare a întreruperii;
- dacă linia NMI este activă, întreruperea anunţă producerea unor evenimente critice, iar CPU le va
da imediat controlul; evenimentele ce utilizează intrarea NMI sunt nemascabile, în timp ce
evenimentele care utilizează intrarea INTR sunt calificate ca întreruperi posibil de inhibat
(mascabile).
Mascarea întreruperilor se poate realiza prin setarea bitului IF din cuvântul de stare al
procesorului (de remarcat că IF nu inhibă excepţiile, întreruperile cauzate de instrucţiunile INT sau
de erorile de extensie ale procesorului). Întreruperile nemascabile au o prioritate mai mare decât
întreruperile mascabile.
3) întreruperi iniţiate software sunt produse explicit de instrucţiuni de întrerupere sau sunt
rezultatul unor condiţii de excepţie ce previn programul asupra continuării execuţiei; sunt întreruperi
nemascabile.
Instrucţiunile de întrerupere sunt de forma:
INT n
unde prin n se va specifica numărul vectorului de întrerupere.
O instrucţiune INT (INTerrupt) generează o întrerupere imediat după execuţia sa. Tipul de
întrerupere este codificat în instrucţiune anunţând CPU care rutină de tratare a întreruperii să o
execute. Deoarece poate fi specificat orice tip de întrerupere software, se pot utiliza şi pentru a testa
rutinele de tratare a întreruperilor generate de dispozitivele externe.
Dacă este setat bitul TF, CPU generează o întrerupere după execuţia fiecărei instrucţiuni;
aceasta se numeşte execuţie pas cu pas (step by step) constituindu-se într-un instrument deosebit de
Capitolul 4 – Componenta ROM-BIOS şi întreruperi MS-DOS
util pentru testarea şi depanarea programelor
Întreruperile software sunt fixate la orice PC din gama IBM sau compatibil, ele făcând parte
din programele BIOS-ului.

4) întreruperile DOS sunt disponibile numai sistemului de operare MS-DOS; rutinele de


tratare a acestor întreruperi gestionează operaţii de bază, lucrul cu fişierele, gestionarea memoriei,
ş.a.

5) întreruperile Basic sunt folosite numai dacă în memoria ROM, interpretorul Basic este
activ.

6) întreruperile de adresă se găsesc sub forma vectorilor de întreruperi, în tabela vectorilor


de întrerupere şi conţin adresele diferitelor tabele din memorie, nefiind asociate cu rutinele de tratare
a întreruperilor; trei tabele sunt mai semnificative:
- tabela de iniţializare video;
- tabela de bază a discului;
- tabela de caractere grafice.

7) întreruperile folosite de programe utilizator care de regulă, au un interval rezervat.

4.3. Atribuirea întreruperilor şi priorităţii. Serializarea întreruperilor

Iniţial, microprocesoarele familiei Intel X86 aveau opt întreruperi incluse pe controlerul
standard Intel 8259 A numerotate de la 0 la 7, cu priorităţi în ordine descrescătoare numerelor
atribuite (NMI, IRQ0, IRQ1,..., IRQ7); existau doar două linii de semnal dintre care una era folosită
de întreruperea nemascabilă NMI (eroare de paritate a memoriei sau provenită de la coprocesorul
matematic), iar cealaltă era folosită de întreruperile IRQ în funcţie de prioritatea asociată.
Ulterior, la modelele AT numărul liniilor de semnal s-a dublat prin introducerea unui nou
controler Intel 8259 A legat în cascadă cu primul controler (fig. 4.3.), la întreruperea IRQ 2 care a
fost redistribuită liniei IRQ 9, modificându-se şi priorităţile aşa cum se observă din tabelul 4.1.
Magistralele PCI nu folosesc controlerul de întreruperi AT, având integrat propriul controler
care include patru linii de întrerupere (patru linii a câte opt biţi), neimpunând limite în modul de
folosire al semnalelor de întrerupere datorită în principal software-ului.
Majoritatea PC - urilor actuale bazate pe microprocesoare Pentium, pentru a păstra
compatibilitatea cu microprocesoarele Intel precedente, includ plăci ISA/PCI; în acest caz, legătura
cu microprocesorul se realizează pe magistrala PCI printr-un cip de legătură PCI-magistrala locală
a microprocesorului, în timp ce legătura cu magistrala ISA se realizează printr-un cip de legătură
ISA/PCI care include un standard de serializare a întreruperilor IRQ pentru magistrala PCI.
Standardul de serializare IRQ se bazează pe un semnal special IRQ SER ce codifică
întreruperile IRQ; printr-un ciclu IRQ SER se trimit informaţii despre starea tuturor întreruperilor
din sistem (durata unui ciclu este de 4 - 8 cicluri de ceas), acesta fiind divizat în cadre ce includ câte
trei cicluri de ceas. Un cadru codifică starea unei întreruperi (tabelul 4.2.)
Sisteme operaţionale

Număr Funcţia realizată Prioritate


întrerupere generală
IRQ 0 Ieşire - ceas 0
IRQ 1 Tastatură - buffer plin
IRQ 2 Cascadă din IRQ 2
IRQ 3 Port serial 2, 4 7
Comunicaţie SLDC, BSC
Adaptor reţea, cluster
IRQ 4 Port serial 1, 3 8
Comunicaţie SLDC, BSC
Adaptor comunicaţie vocală
IRQ 5 Port paralel 2 9
Audio
IRQ 6 Controler floppy-disk 10
IRQ 7 Port paralel 1 11
Adaptor cluster
IRQ 8 Ceas de timp real 11
IRQ 9 Redirectare soft la INT OA 1
Video
Reţea
IRQ 10-12 Rezervat 2-4
(12 - mouse)
IRQ 13 Coprocesor matematic 5
IRQ 14 Controler de hard-disk IDE primar 5
IRQ 15 Controler de hard-disk IDE secundar 6

Tabelul 4.1. Atribuirea întreruperilor şi priorităţile asociate la sistemele AT (magistrale ISA pe 16


biţi)
8259 - 1
IRQ 0 ← circuite ceas
IRQ 1 ← tastatură
IRQ 2
IRQ 3 ←
CPU INT IRQ 4 ←
IRQ 5 ←
8259 - 2
IRQ 6 ← IRQ 8 ← RTC/CMO
IRQ 7 ← IRQ 9
IRQ 10 ←
INT IRQ 11 ←
de la sloturi de 8 biţi IRQ 12 ←
IRQ 13 ← FPU
IRQ 14 ←
IRQ 15 ←

de la sloturi de 16 biţi

de la sloturi de 8 biţi pentru IRQ 2

Fig. 4.3. Controler de întreruperi pe 16 biţi


Capitolul 4 – Componenta ROM-BIOS şi întreruperi MS-DOS
4.4. Componenta ROM-BIOS şi MS-DOS
4.4.1. Elemente componente BIOS
Sistemul driverelor de intrare/ieşire de bază - BIOS (Basic Input Output System) rezident
în memoria ROM, conţine următoarele elemente:
- programe de test pentru resursele sistemului din configuraţia standard;
- program de încărcare a înregistrării ce conţine încărcarea sistemului de operare pe disc;
- proceduri pentru tratarea cererilor de întrerupere externe.
Întreruperea codificată Poziţia cadrului Observaţii
IRQ 0 1
IRQ 1 2
SMI # 3 System Management Interrupt
IRQ 3 4
IRQ 4 5
IRQ 5 6
IRQ 6 7
IRQ 7 8
IRQ 8 9
IRQ 9 10
IRQ 10 11
IRQ 11 12
IRQ12 13
IRQ13 14
IRQ 14 15
IRQ 15 16
IOCHCK # 17 I/O Check
INT A 18
INT B 19
INT C 20
INT D 21
Neatribuite 22-32 Disponibile

Tabelul 4.2. Codificarea cadrelor de serializare a întreruperilor la magistrala PCI


- proceduri pentru comanda şi controlul execuţiei operaţiilor de intrare/ieşire la nivel fizic,
pentru dispozitivele periferice din configuraţia standard.
Programele de test pentru resursele din configuraţia standard se execută automat odată cu
pornirea sistemului realizând următoarele activităţi:
- testarea sumară a microprocesorului care include testarea registrelor accesibile utilizatorului
şi a căilor de date;
- testarea şi programarea canalului DMA (Direct Memory Acces) şi a contorului programabil
ce participă la realizarea operaţiei de reîmprospătare a memoriei interne;
- testarea şi programarea contorului programabil pe baza căruia se construieşte ceasul de
timp real;
- stabilirea configuraţiei sistemului prin determinarea poziţiei comutatorilor;
- testarea memoriei RAM;
- testarea sistemului de întreruperi şi iniţializarea tabelei ce conţine adresele rutinelor pentru
tratarea acestora;
- stabilirea legăturilor cu alte ROM din afara plăcii de bază incluse în interfeţele
dispozitivelor periferice, ce constă în:
* stabilirea adreselor de tratare a întreruperilor aferente;
Sisteme operaţionale
* iniţializarea dispozitivelor periferice şi a variabilelor asociate;
* testarea sumară a adaptoarelor pentru tastatură, monitor şi discuri.
4.4.2. Structurarea programelor şi segmentarea la MS-DOS
Programele executabile pot fi memorate pe suport extern în două forme:
- nume_fişier.EXE constituit dintr-o structură multisegment: stiva, datele, codul;
- nume_fişier.COM constituit dintr-un singur segment ce include atât datele cât şi codul
instrucţiunilor programului.
Într-un fişier cu extensia .EXE, programul este constituit într-un format relocabil incluzând
un antet cu privire la informaţiile necesare pentru realocare.
Fişierele cu extensia .COM ocupă un spaţiu mai redus pe suport magnetic, încărcându-se în
RAM mult mai repede.
Oricare ar fi formatul programului executabil, în momentul încărcării în RAM pentru
execuţie acesta este precedat de un prefix de segment al programului (PSP) a cărui adresă de început
este ds:0000 şi es:0000 având următoarea structură constituită din 256 bytes (100H):
- adresa 0: codul instrucţiunii INT 20H- 2 bytes;
- adresa 2: ultima adresă de memorie - 2 bytes;
- adresa 4: rezervat - 1 byte;
- adresa 5: apel procedură de intrare în DOS corespunzător funcţiilor DOS- 5 bytes;
- adresa AH: adresa de revenire în DOS la terminare execuţie (INT 22H şi INT 4CH) ce se află la
adresa de tratare a întreruperii INT 22H -4 bytes;
- adresa EH: adresa de tratare CTRL-BREAK care se găseşte la adresa de tratare a întreruperii INT
23H - 4 bytes;
- adresa 12H: adresă de tratare a cererilor critice ce se află la adresa de tratare a întreruperii INT 24H
- 4 bytes;
- adresa 16H: rezervaţi pentru DOS - 22 bytes;
- adresa 2CH: adreă de segment pentru un şir de caractere ASCIIZ ce conţin descrierea informaţiilor
de sistem (environment);
- adresa 2EH: rezervat pentru DOS - 46 bytes;
- adresa 5CH: blocul de control al fişierelor pentru primul parametru - 16 bytes;
- adresa 6CH: blocul de control al fişierelor pentru al doilea parametru - 20 bytes;
- adresa 80H: numărul de bytes în linia de apel a programului (nu include şi numele programului)
- 1 byte;
- adresa 81H: linia de apel a programului (fără numele programului şi directivele de redirectare) -
127 bytes.
Structura unui fişier .EXE conţine 3 segmente:
a. segmentul de stivă, segment ce poate apare în orice ordine relativă din alt segment; este
utilizat de programe pentru a memora orice date care trebuie salvate şi reapelate apoi de program;
b. segmentul de date este segmentul care conţine variabile referite de segmentul de cod,
motiv pentru care este important să fie plasat înaintea acestuia în vederea scăderii posibilităţii de a
se produce erori, a creşterii vitezei de execuţie şi a eficienţei asamblării;
c. segmentul de cod conţine instrucţiunile executabile începând cu o etichetă ce identifică
punctul de intrare în segment.
În momentul încărcării fişierului .EXE pentru execuţie, se va poziţiona în RAM mai întâi
PSP ce conectează programul cu MS-DOS după care MS-DOS poziţionează în RAM segmentul de
cod, segmentul de date şi cel de stivă al programului. În final, MS-DOS plasează elementele de
identificare ale segmentului de cod şi ale segmentului de stivă în registrele de segment:
Capitolul 4 – Componenta ROM-BIOS şi întreruperi MS-DOS
- registrele ES şi DS sunt iniţializate la adresa de segment corespunzătoare adresei de început a
segmentului de date;
- registrul CS este iniţializat la adresa de început segmentului ce conţine programul.
Dacă există un singur segment atunci conţinutul lui CS va fi cu 10H (64 în hexazecimal) mai
mare decât conţinutul registrelor DS şi ES. Pentru execuţia corectă a programului, registrele DS şi
ES trebuie încărcate explicit cu adresele segmentelor de date pe care le accesează:
- registrul de stivă (SS) şi indicator al adresei din stivă (SP) se vor iniţializa dacă nu a fost declarat
explicit un segment pentru stivă sau se doreşte utilizarea unui alt segment pentru stivă, decât cel de
cod. În cazul inexistenţei unei astfel de iniţializări, registrul SS este iniţializat cu aceeaşi valoare ca
şi registrul CS, iar SP va conţine valoarea 0 astfel încât prima informaţie din stivă va fi memorată
în segmentul de cod la adresa 0FFFEH.
La terminarea execuţiei programului, redarea controlului se realizează cu INT 21H precedată
de încărcarea în registrul AX a funcţiei 4C00H.
Structura fişierului .COM
Fişierul .COM are un singur segment "comun" ce conţine toate datele programului, PSP par
şi stiva. Dimensiunea maximă a unui program .COM poate fi de 64 K cât este dimensiunea unui
segment, şi toate referirile din program sunt relative la adresa de început a segmentului. MS-DOS
construieşte PSP şi îl include în segment pe primii 256 bytes (100H) ceea ce implică definirea
punctului de intrare în program la 100H după blocul de 256 bytes al PSP. După definirea punctului
de intrare în program, acesta trebuie comutat la instrucţiunea de început a execuţiei programului
(dacă este scrisă o dată între punctul de intrare şi instrucţiunea de pornire, asamblorul trebuie să sară
peste această dată - instrucţiunea JUMP- la prima instrucţiune executabilă). Datele programului pot
fi plasate oriunde în program, cu condiţia să nu se interfereze cu codul (de preferat plasarea datelor
înaintea codului deoarece asamblorul poate semnala erori la referirea unor date ce nu au fost
declarate în prealabil).
De remarcat că nu este necesară iniţializarea registrelor de segment (acestea fiind iniţializate
implicit cu aceeaşi valoare ca şi registrul CS), iar stiva este iniţializată automat la sfârşitul
segmentului ocupat de program (registrul SS conţine aceeaşi valoare ca şi registrul CS, iar registrul
SP conţine valoarea 0FFFE0H).
La terminarea programului, faţă de fişierele .EXE există următoarele deosebiri:
- redarea controlului MS-DOS se realizează cu instrucţiunea RET înaintea terminării procedurii
principale, care are ca efect un salt la primul byte din prefixul programului unde se găseşte
instrucţiunea INT 20H memorată la începutul prefixului de program;
- instrucţiunea END trebuie să identifice eticheta punctului de intrare la deplasarea 100H.
La execuţia editării de legături se va semnala o eroare ce se ignoră, cu privire la nedeclararea
segmentului de stivă SS.
4.4.3. Alocarea memoriei pentru programe şi execuţia lor
Având în vedere organizarea logică a memoriei interne la PC - uri (fig.4.4.), sistemul de
operare MS-DOS divide memoria de 640 K în două zone:
- prima zonă începe la adresa 0000:0000H şi conţine:
* vectorii de întrerupere;
* tabela vectorilor de întreruperi;
* zonele tampon;
* nucleul sistemului de operare (partea rezidentă);
- a doua zonă - zona de tranzienţe - conţine programele şi informaţii de context pentru aceste
programe (environment); fiecărui program i se atribuie la cerere, blocuri de memorie ce sunt
Sisteme operaţionale
precedate de un bloc de control de 16 bytes care conţine:
* identificatorul blocului - byte 0;
* adresa de segment pentru PSP-ul programului căruia i-a fost atribuit acest bloc (blocurile
eliberate conţin valoarea 0) byte 1 şi 2;
* dimensiunea blocului de memorie exprimată în multipli de 16 bytes, fără a lua în
considerare memoria ocupată de blocurile de control - byte 3-4;
* zona liberă - byte 5-15.
32M
16M/4

Memoria
extinsă
HMA
Memorie
IM FFFFF
expandată
Comp. ROM
BIOS de pe (Împărţită în
placa de bază pagini logice şi
E0000
896K relocate în
fereastra EMS)
Fereastra EMS

832K 64K
Mem. ROM de
pe placa
de bază
768K BFFFF

Memoria
RAM video

640K A0000

192K
Memoria
convenţională
……………

128K

64K

16K
DOS
Rutine BIOS
Tabelă vectori 128K
întreruperi 64K
0K 0 0K

Fig. 4.4. Organizarea logică a memoriei interne la PC-uri


Capitolul 4 – Componenta ROM-BIOS şi întreruperi MS-DOS
Nu există prevăzut un mecanism de compactare a spaţiului de memorie disponibil. Astfel,
dacă sunt eliberate anumite zone de memorie fără ultima zonă ocupată iniţial, atunci aceste zone se
utilizează numai dacă o nouă cerere de memorie solicită aceste zone, fenomen ce poate conduce şi
la fragmentarea memoriei.
Încărcarea şi execuţia unui program se realizează prin execuţia funcţiei EXEC prin care
programul încărcător va solicita sistemului de operare alocarea a două blocuri de memorie:
- un bloc de memorie pentru program;
- alt bloc de memorie, pentru contextul acestuia.
Un program care se execută poate să lanseze în execuţie un alt program pentru care trebuie
să-i pregătească argumentele (lansarea în execuţie se face cu funcţia DOS 4BH) într-un bloc de
parametri, în vederea construirii prefixului programului ce se execută (fig.4.5.):

Memoria convenţională

Vector întreruperi

Tabele sistem de întreruperi

Buffere

Nucleul sistemului de operare


(rezident)

Tranziente
- programe şi informaţii de control
asociate
Solicitare
blocuri de
memorie

Adresa 0
a programului Bloc de Bloc de Bloc de
memorie control memorie
pentru 16 bytes pentru
context program

Lansare alt
program în
execuţie

pregătire parametri
într-un bloc de
parametri

Sfârşit Segment Deplasare al Segment Deplasare Segment Deplasare Adresă


context bloc Control doilea bloc bloc control primul bloc linie de pentru linia segment de
FCB-2 de control FCB-1 de control comandă de comandă context

Fig. 4.5. Alocarea memoriei pentru programe


Sisteme operaţionale

- adresa segmentului de context care dacă este 0, se consideră contextul programului curent, byte
0-1;
- deplasarea pentru linia de comandă (offset-ul), byte2-3;
- segmentul liniei de comandă ce conţine numărul de caractere, textul şi 0DH, byte 4-5;
- deplasarea pentru primul FCB (File Control Block), byte 6-7;
- segmentul blocului de control al fişierului (primul FCB), byte 8 şi 9;
- deplasarea pentru al doilea FCB, byte 10-11;
- segmentul celui de-al doilea FCB, byte 12-13;
Conţinutul blocurilor de control sunt copiate în zone corespunzătoare din PSP-ul
programului lansat în execuţie. Dacă programul apelat nu lucrează cu FCB sau şi le pregăteşte
singur, atunci în bytes de la 6 la 13(0DH) se va transmite valoarea 0.
Prin funcţia 4DH, programul care a apelat funcţia EXEC poate obţine informaţii despre
modul de terminare al programului executat:
mov ah,4dh
int 21h
iar codul de terminare se află în registrul în AH:
0 terminare normală;
1 terminare cu CTRL/C;
2 eroare acces memorie externă;
3 terminare cu rămânere program rezident.

Sfârşitul contextului se face cu 2 bytes având valoarea zero, iar un nou context trebuie să
conţină cel puţin definirile pentru COMSPEC, PATH, PROMPT.
Înainte de apelul funcţiei EXEC, trebuie salvate toate registrele ce conţin informaţii utile şi
a conţinutului registrelor SP şi SS în memoria programului apelant. La revenirea din programul
apelat se refac registrele salvate.

4.4.4. Programe rezidente (TSR)


Programele rezidente (TSR Terminate and Stay Resident) sunt o manieră rudimentară de
exploatare multitasking la MS-DOS, ce constă în existenţa în RAM a mai multor programe care sunt
activate prin producerea unui eveniment extern, putându-se comuta rapid de la un program la altul
şi creând astfel iluzia de multitasking.

Un program rămâne în RAM la terminarea execuţiei prin apelul funcţiei DOS 31H.

Pentru activarea unui program TSR trebuie să aibă loc un eveniment extern (combinaţii de
taste), fiind astfel necesară utilizarea unei secvenţe ce tratează întreruperea de nivel 9, activare ce
nu trebuie să afecteze execuţia altor programe care se mai execută (chiar alte TSR). Din acest motiv
la activarea întreruperii 9 se execută:
- salvarea stării curente;
- salvarea codului de scanare curent;
- dacă are loc un eveniment extern atunci se execută TSR, altfel se tratează întreruperea de
nivel 9 şi se reface starea salvată.
Capitolul 4 – Componenta ROM-BIOS şi întreruperi MS-DOS
Deoarece un program TSR poate conţine funcţii DOS şi MS-DOS nu este reentrant, activarea
programelor TSR se va face numai dacă nu este în execuţie o funcţie DOS sau sistemul de operare
nu este în tratarea unei erori critice.
Dacă programul TSR realizează operaţii cu discuri, e necesară salvarea adresei PSP a
programului întrerupt şi a adresei zonei de transfer a discului (DTA Disk Transfer Area) urmând ca
la sfârşitul execuţiei programului TSR, să se realizeze operaţia inversă.
Un program TSR conţine trei secvenţe de program distincte:
- instalarea programului (iniţializarea), ce constă dintr-o secvenţă ce creează legăturile programului
cu sistemul de operare (INT 35H şi INT 25H):
INT 35H permite obţinerea şi salvarea ultimei adrese de tratare a întreruperii;
INT 25H pentru crearea noii legături.
- programul TSR ce conţine secvenţa de program propriu-zisă;
- dezafectarea legăturilor TSR- MS-DOS şi refacerea vechilor legături.
Sisteme operaţionale

EXERCIŢII

1. Să se explice de ce apar întreruperile şi care sunt etapele prelucrării lor.

2. Cum sunt protejate programele de aplicaţie între ele şi cum se evită interferenţa lor cu programele
sistemului de operare la PC -uri ?

3. Să se pună în evidenţă deosebirea dintre întreruperi şi excepţii.

4. În ce constă tabela vectorilor de întrerupere ? Să se identifice elementele la un PC.

5. Care sunt întreruperile BIOS şi ce semnificaţie le este atribuită fiecăreia ?

6. Să se identifice etapele de dezvoltare ale unui program de aplicaţie la MS-DOS, program scris în
diverse limbaje de programare, relevând rolul fiecărei componente a sistemului de operare.

7 Care este structura fişierelor executabile .EXE şi .COM ? Având acelaşi nume de fişier, un
executabil .COM se lansează în execuţie înaintea unui executabil .EXE; justificaţi afirmaţia.

8. Cum alocă MS-DOS memorie pentru programe ? Care este mecanismul de apel al unui alt
program ?

9. Ce reprezintă un program TSR ? Să se identifice la PC pe care se lucrează programele TSR.

10. Să se specifice avantajele şi dezavantajele oferite de încărcarea în memorie a programelor TSR.

S-ar putea să vă placă și