Documente Academic
Documente Profesional
Documente Cultură
- î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.
Nivel 3
Nivel 2
Nivel 1
Nivel 0
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.
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.
5) întreruperile Basic sunt folosite numai dacă în memoria ROM, interpretorul Basic este
activ.
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
de la sloturi de 16 biţi
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
Memoria convenţională
Vector întreruperi
Buffere
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
- 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.
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
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 ?
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 ?