Sunteți pe pagina 1din 119

Sisteme de operare

SISTEMUL DE OPERARE
Orice sistem de calcul electronic nu poate sa asigure prelucrarea automata
fara existenta unui sistem de operare. Sistemul de operare este partea de software
de baza care asigura gestiunea tuturor resurselor unui sistem de calcul. Evolutia
starilor unui sistem de calcul se face pe baza execuţiei unui program aflat în
memoria internă a calculatorului. Un program este o succesiune de instructiuni
care materializeaza un algoritm si care converg catre solutia problemei ce se cere
rezolvata. Lansarea în executia a oricarui program este făcută de catre sistemul de
operare. Dupa lansare, sistemul de operare preda controlul programului utilizator.
La sfârsitul executiei programul reda obligatoriu controlul sistemului de operare.
Sistemul de operare este si el o colectie de programe (rutine si subrutine) care
asigura functionarea eficienta a sistemului de calcul. O secvenţă de instrucţiuni
posedă controlul atâta timp cât microprocesorul execută instrucţiuni din secvenţa
respectivă.
Exista trei categorii importante de programe:
A. Programe de aplicatie care asigura rezolvarea unor probleme specifice
si care se numesc si programe utilizator; aceste programe asigura
efectuarea calculelor si prelucrarea datelor în concordanta cu algoritmii de
rezolvare a problemelor practice. Ele fac parte din software-ul aplicativ.
B. Programe de sistem care au rolul de a coordona întreaga activitate a
sistemului de calcul, asigurând comanda electronica a tuturor circuitelor
hardware care compun sistemul. Ele constituie software-ul de baza si sunt
elementele care “dau viata” unui sistem de calcul. Totalitatea acestor
programe alcatuiesc sistemul de operare al calculatorului. Fara sistem de
operare calculatorul nu este decât un “instrument mort”, inutilizabil.
Sistemul de operare este proiectat sa faciliteze utilizarea eficienta a
calculatorului si sa asigure dezvoltarea si executia programelor de
aplicatie.
C. Programe utilitare care au rolul de a asigura servicii rapide de
exploatare si gestiune a unor resurse fizice ale calculatorului. Ele se
situeaza undeva între programele de aplicatie si cele de sistem. Pe măsură
ce aceste programe se dovedesc a fi extrem de utile, ele pot fi introduse în
software-ul de bază.
Sistemul de operare este scris pentru un anumit tip de calculator, prin
urmare ele nu pot fi folosite pe orice sistem, ci numai pe platforma hardware pentru
care a fost proiectat.
3
Sisteme de operare

Orice sistem de operare este constituit dintr-o colectie integrata si unitara


de programe de sistem care ofera utilizatorului toate facilitatile de dezvoltare a
programelor de aplicatie, precum si facilitati de folosire eficienta a întregului
arsenal hardware a calculatorului. Sistemul de operare este interfata dintre
hardware-ul calculatorului si utilizatorul reprezentat de programele sale de
aplicatie.
Sistemele de operare sunt organizate pe doua niveluri:
a. Nivelul fizic care asigura comanda electronica, fizica, a tuturor
compunentelor sistemului de calcul electronic. Acest nivel este cel mai
apropiat de partea electronica si se realizeaza printr-un sistem de
întreruperi (o întrerupere este materializata de un semnal electronic) care
semnalizeaza aparitia anumitor evenimente în sistemul de calcul si care
da controlul automat unor rutine de tratare a întreruperilor situate pe
nivelul logic. Rutinele de tratare a întreruperilor proceseaza întreruperile
prin analiza, semnalarea si diagnosticarea lor. Utilizatorul are acces direct
la acest nivel doar prin intermediul limbajului de asamblare (la PC cu
ajutorul instrucţiunii int nh, unde n este numărul întreruperii exprimată în
hexazecimal), sau prin intermediul limbajelor care permit prelucrarea
secventelor de asamblare.

MEMORIA INTERNA

HARDWARE SISTEM DE PROGRAME UTILIZATOR


OPERARE APLICATIE
Comenzi
Macro- Program de
instructiuni aplicatie 1
Limbaje de
Intreruperi programare ............
............
Mesaje Program de
aplicatie n

Figura 1. Nivelurile la care lucrează Sistemul de operare


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică,
Bucureşti 1995, pag.18
b. Nivelul logic este cel mai apropiat de utilizatorul sistemului de calcul si
interfateaza cu acesta prin:

4
Sisteme de operare

- comenzi adresate sistemului de operare, comenzi care specifica


executia imperativa a anumitor functii sau subfunctii ale
sistemului de operare;
- macroinstructiuni care sub controlul sistemului de operare se
expandeaza în programe de aplicatie sau a unor macrodefinitii
care au functii speciale;
- limbaje de programare;
- mesaje destinate utilizatorului.
Utilizatorul reprezentat de programele de aplicaţie aflate în memoria
internă, poate introduce comenzi, da macroinstrucţiuni de executat, fie prin
intermediul unor limbaje de programare, primind eventuale mesaj de răspuns (sau
de eroare) de la sistemul de operare, care face ca partea de hardware a sistemului
de calcul să răspundă nevoilor proprii (aceste lucruri pot fi observate în sinteza
oferita de figura 1).

5
Sisteme de operare

1. Funcτ iile sistemului de operare


Un sistem de operare de foarte bună calitate trebuie sa asigure simultan
îndeplinirea urmatoarelor functii, pentru a-şi îndeplini rolul său de interfaţă între
hardware şi utilizatori:
1. Gestionarea resurselor calculatorului si alocarea resurselor necesare
executiei programelor de aplicatie si a programelor utilitare prin:
- identificarea programelor ce urmeaza a fi executate,
identificarea resurselor necesare executiei corecte a acestor
programe;
- alocarea statica sau dinamica a memoriei interne si a
dispozitivelor periferice necesare executiei;
- identificarea datelor si protectia colectiilor de date necesare
executiei programelor;
- compresia si decompresia automata a memoriei externe.
2. Asigurarea si acordarea unor facilitati de interes general cum sunt:
- conversii de suporturi de informatii;
- sortarea datelor;
- interclasarea datelor;
- catalogarea şi întreţinerea bibliotecilor;
- capturi de imagini şi sunet etc.
3. Planificarea executiei programelor dupa criterii de deservire care sa
duca la utilizarea eficienta a unitatii centrale de prelucrare a datelor,
asigurarea condiţiilor de securitate şi confidenţialitate a datelor.
4. Multitasking adica executia simultana a mai multor programe.
Gestiunea executiei mai multor programe se face prin urmarirea modului
de executie a instructiunilor care compun programele, acordând timpul
unitatii centrale în functie de politica de deservire proprie sistemului de
operare.
5. Depistarea, diagnosticarea si traterea erorilor prin utilizarea unor
rutine specializate specifice sistemului de operare respectiv.
6. Lansarea în executie, la nivel fizic, a operatiilor de intrare/iesire si
de-pistarea erorilor în lucrul cu periferia.
7. Asistarea executiei programelor de aplicatie prin asigurarea
comunicatiei calculator-utilizator atât la nivel hardware cât si software.
6
Sisteme de operare

8. Protectia informatiilor şi securitatea datelor pe toate tipurile de


suporti de informatii.
9. Adaptarea din mers a configuratiei hardware a sistemului de calcul
în functie de posibilitatile financiare de care dispune utilizatorul.
10. Asigurarea posibilitatilor de pregatire, lansare si executie a
programelor de aplicatie prin oferirea unui:
- editor de texte pentru introducerea si modificarea comenzilor
sau programelor sursa;
- limbaj de programare pentru obtinerea modulelor obiect;
- editor de legaturi pentru legarea modulelor obiect (provenite
din compilarea în diverse limbaje) si obtinerea formatului
executabil;
- încarcator care sa asigure încarcarea programului în
memoria interna si lansarea lui în executie;
- bibliotecar care sa permita retinerea în biblioteci specializate
de diferite formate a modulelor obiect sau executabile.
Aceasta ultima functie este prezentata în figura 2.

7
Sisteme de operare

ALTE DISPOZITIVE
PERIFERICE DE INTRARE

EDITOR
TEXTE PROGRAM
SURSA

COMPILATOR/
TRANSLATOR

CORECTII ERORI?

PROGRAM
OBIECT

BIBLIOTECI EDITOR DE
BIBLIOTECI
UTILIZATOR LEGATURI
SISTEM

PROGRAM
EXECUTABIL

INCARCATOR

LANSARE IN
EXECUTIE

Figura 2. Dezvoltarea programelor


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică,
Bucureşti 1995, pag.19

8
Sisteme de operare

2. Componentele unui Sistem de operare


Un sistem de operare este constituit din doua componente importante:
1. Nucleul sistemului de operare care îndeplineste principalele functii
curente .
2. Rutinele de comanda si control (RCC) care îndeplinesc celelalte
functii ale sistemului de operare.
La aceste componente unii autori mai adauga si programele utilitare pe
care le numesc programe de serviciu. O parte din componentele sistemului de
operare sunt pastrate în memoria interna pe toata durata sesiunii de lucru, iar o
altă parte sunt încarcate dupa necesitatile curente dictate de evolutia sistemului în
spatiul starilor. Componentele care se afla în permanenta în memoria interna
se numesc componente rezidente, iar restul sunt componente tranzitorii. Sistemele
de operare permit utilizatorului sa-si realizeze propriile programe care pot fi
rezidente, în rest toate programele utilizator sunt programe tranzitorii (vezi
figura3).
MEMORIA EXTERNA MEMORIA INTERNA

NUCLEUL
(Componenta rezidenta)

COMPONENTE
TRANZITORII ALE SO

Program de aplicatie
(Tranzitoriu)

Program de aplicatie
(Rezident) - TSR
Alte programe de
aplicatie

Figura 3. Încărcarea componentelor din memoria externă în memoria internă


Functiile care revin rutinelor de comanda si control RCC sunt:
a. Administrarea resurselor fizice hardware ale sistemului de calcul;
b. Planificarea, lansarea si urmarirea executiei lucrarilor;
c. Depistarea, diagnosticarea si tratarea evenimentelor deosebite
(întreruperi si semnale de eroare) care pot apare în timpul executiei
programelor.

9
Sisteme de operare

Toate aceste functii sunt supervizate si controlate de nucleul (rezident) al


sistemului de operare. Acesta este motivul pentru care nucleul mai este numit
supervizor sau monitor.

10
Sisteme de operare

3. Sisteme de operare pentru microcalculatoarele PC


Din punct de vedere al numărului de programe simultan aflate în execuţie,
pentru microcalculatoarele PC exista doua tipuri principale de sisteme de operare:
A. Monotasking – sisteme de operare care sunt capabile sa execute la un
anumit moment doar un singur task (sarcina sau program). Un astfel de
sistem de operare are ca principale functii:
- încarcarea, lansarea si executia programelor;
- oferirea de facilitati pentru lucrul cu dispozitivele periferice
ale sistemului;
- asigurarea posibilitatii de dialog cu utilizatorul prin
intermediul interpretorului de comenzi (subcomponenta a
nucleului).
B. Multitasking – sisteme de operare care asigura partajarea resurselor
între mai multe task-uri (programe) care se executa simultan. Un astfel de
sistem de operare are ca principale functii:
- încarcarea, lansarea si executia programelor;
- oferirea de facilitati pentru lucrul cu dispozitivele periferice
ale sistemului;
- asigurarea posibilitatii de dialog cu utilizatorul prin
intermediul interpretorului de comenzi (subcomponenta a
nucleului);
- gestiunea alocarii resurselor hardware si software ale
sistemului de calcul etc.
Cele mai cunoscute sisteme de operare pentru calculatoarele PC sunt:
M MS-DOS MicroSoft Disk Operating System este cel mai vechi si mai
raspândit sistem de operare pe platformele INTEL;
M DR-DOS Digital Research Disk Operating System utilizat pe
calculatoare având microprocesoare INTEL;
M OS/2 Operating System 2 fiind o colaborare a firmelor IBM si
MicroSoft (momentan intrat în con de umbra);
M Apple DOS utilizat pe calculatoare Apple, este mono user monotasking;
M MacIntosh DOS proiectat pentru PC-uri de tip Apple MacIntosh
implementate cu microprocesoare MOTOROLA din seria 68XXX, care
permit lucru în regim multitasking si memorie virtuala;
M UNIX creat initial pentru minicalculatoare, este portabil pe toata gama
de sisteme de calcul, permite lucrul cu memorie virtuala, multitasking si

11
Sisteme de operare

multiuser. Exista mai multe implementari pe PC dar nu dintre cele mai


facile pentru utilizatorii obisnuiti. Versiunile care lucreaza cu interfata
XWINDOWS sunt foarte utilizate;
M WINDOWS ‘9X (‘95, ‘97, ‘98 si 2000) sunt cele mai raspândite
sisteme de operare la ora actuala. Sunt sisteme multitasking si multiuser.
M WINDOWS NT este cel mai complet sistem de operare cu larga
utilizare, existent la dispozitia tuturor utilizatorilor, a cariu caracteristici
semnificative sunt:
- sistemul de operare WINDOWS NT precum si serverul
WINDOWS NT, la fel si aplicatiile existente pe piata proiectate
pentru el, îl ridica la rangul de cel mai deschis, cel mai puternic si
cel mai fiabil sistem client-server;
- lucreaza la fel de bine si pe platforme INTEL obisnuite (de
la 80386 pâna la Pentium III) si pe platforme RISC;
- poate lucra cu 650 de imprimante, 50 de dispozirive periferice
pe statie, mai multe adaptoare de retea, adaptoare video VGA,
SVGA, XVGA;
- lucreaza si cu mono procesor si cu multiprocesor.
Pentru alegerea unui sistem de operare adecvat, utilizatorul trebuie sa se
orienteze dupa îndeplinirea urmatoarelor criterii:
- existenta aplicatiilor software compatibile;
- facilitatile oferite utilizatorului si programatorului;
- viteza de operare;
- multitasking si multiuser;
- compatibilitati hardware;
- posibilitatea extensieu si acceptarii de echipamente specifice.

12
Sisteme de operare

4. Tehnici de exploatare a sistemelor de calcul electronic

Rolul principal al unui sistem de operare este de a utiliza eficient fiecare


resursa hardware oferita de sistemul de calcul electronic. Prin utilizarea eficienta a
unui sistem de calcul întelegem executarea unui volum cât mai mare de lucrari, cu
o configuratie hardware minima. Aprecierea eficientei se face prin analizarea
costului sistemului de calcul si a software-ului, în directa concordanta cu
obtinerea rapida a rezultatelor. Proiectantii sistemelor de operare se straduie sa le
realizeze astfel încât sa utilizeze cat mai eficient fiecare resursa a sistemului de
calcul: timpul unitatii centrale, spatiul de memorie interna, spatiul de memorie
externa, periferia de intrare si de iesire etc.
Indicatorii utilizati pentru aprecierea performantelor unui sistem de calcul
electronic sunt:
- raportul cost/performanta cât mai redus;
- fiabilitatea si stabilitatea sistemului cât mai mare;
- timpul de raspuns, socotit ca perioada de timp scursa între momentul
lansarii cererii si momentul obtinerii raspunsului, care trebuie sa fie cât
mai redus;
- volumul de lucrari si date intrate în sistem sa fie cât mai mare;
- accesibilitatea ridicata si interfata prietenoasa cu utilizatorul;
- conectivitate marita atât la nivel local cât si la distanta;
- protectie si securitate sporita a informatiilor.
Pentru optimizarea încarcarii la maximum a unitatii centrale si a
procesoarelor de intrare/iesire, fiecare sistem de operare foloseste o politica de
planificare riguroasa specifica lui. La alegerea strategiilor de planificare a
lucrarilor trebuie cunoscute foarte exact obiectivele de realizare simultana:
- reducerea timpilor de asteptare a unitatii centrale (“timpi morti”) prin
ececutia unor lucrari cu volum mare de calcule (care utilizeaza UC-ul) si
cu un numar mic de operatii de intrare/iesire (care pun în asteptare UC-
ul);
- executia unui numar mare de lucrari în unitatea de timp prin lansarea
în executie a lucrarilorcu timp redus de executie;
- încarcarea la capacitate maxima a dispozitivelor de intrare/iesire prin
rularea unor lucrari având volum mare de operatii de intrare/iesire si
calcule mai putine.
Între aceste limite este nevoit proiectantul sa-si stabileasca strategia de
proiectare, lucru extrem de greu de facut, ceea ce explica si plaja extrem de
variata de tipuri si versiuni de sisteme de operare. Pentru a complica si mai mult
13
Sisteme de operare

lucrurile factorul “concurenta” este extrem de important. Proiectantii care au stiut


sa tina seama cel mai bine de aspectele anterioare sunt astazi lideri mondiali în
materie de sisteme de operare.
Pentru timpilor de asteptare a unitatii centrale, sistemele de operare
folosesc: monoprogramare, multiprogramarea, spooling-ul, time-sharing-ul si
multiprelucrarea.
4.1. Monoprogramarea
Monoprogramarea este o tehnica folosita de unele sisteme de calcul care
presupune executia secventiala (seriala) a unor lucrari pe un anumit sistem de
calcul. Sistemul de operare are în evidenta la un moment dat un singur program,
caruia-i sunt alocate toate resursele hardware ale sistemului de calcul electronic.
Aceste resurse constau în: memoria disponibila pentru executia programelor
utilizator, toate echipamentele periferice din configuratia calculatorului, unitatea
centrala etc. Singurele procese care pot exista simultan înstrun sistem de operare
bazat pe monoprogramare sunt:procesul curent de calcul si unul sau mai multe
procese de intrare/iesire.
UC

t1 t2 t3 t4

Canal

t1 t2 t3 t4
Figura 4. Monoprogramare
Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică, Bucureşti 1995, pag.33

Într-un sistem de operare cu monoprogramare, un program solicita pe


parcursul executiei sale diferite operatii de intrare/iesire, supravegheate de catre
procesorul de comunicatii (controller), timp în care UC-ul asteapta finalizarea
operatiilor cu perifericele. La întâlnirea unei operatii de intrare/iesire UC-ul da
controlul procesorului specializat în astfel de intrari/iesiri care efectueaza
transferul în/din memoria interna. La terminarea operatiei de intrare/iesire,
procesorul specializat va transmite o întrerupere catre UC pentru a-l anunta de
terminarea operatiei si pentru ca UC-ul sa continue executia secventei de
instructiuni a programului aflat în executie curenta. Acest lucru se poate vedea în
figura 4, unde se poate vedea sincronizarea UC-ului cu canalul în cazul

14
Sisteme de operare

monoprogramarii. Daca notam cu t1 momentul în care UC-ul initiaza o operatie


de intrare/iesire, cu t2 momentul în care UC-ul are nevoie de datele solicitate
dispozitivului periferic (operatia efectiva de intrare/iesire nefiind înca terminata),
cu t3 momentul în care UC-ul va relua executia programului (având de data
aceasta datele necesare) si cu t4 momentul în care se încheie programul, putem
calcula randamentele de utilizare ale UC-ului, respectiv a canalului, cu formulele
(1).
t − ( t 3 − t 2)
η UC = 4 * 100
t4
(1)
t 4 − [ t1 + ( t 4 − t 3)]
η Canal = * 100
t4
Se constata o simultaneitate a activitatii UC-ului si a canalului, lucru care
ameloireaza partial productivitatea. Cu toate acestea monoprogramarea impune o
utilizare ineficienta a resurselor calculatorului si se apreciaza ca aproximativ 80%
din timpul total de prelucrare, unitatea centrala nu este utilizata. Sistemele de
operare din aceasta categorie (în care se încadreaza DOS-ul) sunt cele mai putin
eficiente.
Ineficienta monoprogramarii este mai accentuata în cazul programelor de
aplicatie care lucreaza cu date multe (memorate în memoria externa) dar cu
calcule foarte putine, asa cum este cazul aplicatiilor financiar-contabile. La astfel
de aplicatii timpul de utilizare al UC-ului este sub 5% sau chiar mai putin. În astfel
de cazuri UC-ul “someaza” nejustificat de mult, lucru agravat si de faptul ca UC-
ul este cea mai costisitoare componenta a unul calculator electronic.
4.2. Multiprogramarea
Sistemele de operare care lucreaza în multiprogramare se numesc si
sisteme multitasking. Acest tip de sisteme de operare gestioneaza un singur UC si
asigura executia întretesuta a doua sau mai multe programe (task-uri, procese).
Termenul de multiprogramare este utilizat, în mod uzual, pentru a desemna
prelucrarea într-un sistem de calcul electronic care dispune de un singur procesor
central (UC). Executia întretesuta trebuie înteleasa astfel: în fiecare moment al
prelucrarii în regim de multiprogramare, un singur program poate fi executat, dar
mai multe alte programe se afla în curs de executie, adica, o parte dintre
instructiunile lor au fost executate, iar în momentul respectiv asteapta sa fie
relansate în executie sau sunt în asteptarea producerii unor evenimente externe. În
acest fel task-urile folosesc partajat UC-ul, ele aflându-se într-o continua
competitie sau concurenta. În realitate, partajarea UC-ului se realizeaza pe

15
Sisteme de operare

intervale de timp distincte, numite cuante de timp. Conceptual,


multiprogramarea este o tehnica de exploatare a unui sistem de calcul electronic
care simuleaza existenta a n procesoare virtuale pe un singur procesor fizic.
Tehnica aceasta presupune existenta simultana în memorie a n programe.
Multiprogramarea este caracterizata de:
- existenta simultana a n programe încarcate în memoria interna;
- existenta unui mecanism trecere a controlului de la un program la
altul, pentru a se putea executa toate cele n programe;
- existenta unu imecanism de protectie între cele n programe care sa
permita executia unui program, fara perturbarea celorlalte n-1 programe
coexistente simultan în memoria interna;
- existenta unui mecanism de gestiune a resurselor, atât fizice cât si
logice, pe care le solicita programele aflate în executie.
Întreteserea executiei task-urilor creaza ilizia simultaneitatii.
Simultaneitatea executiei presupune, în cazul existentei unui singur procesor (UC),
distribuirea timpului-procesor mai multor task-uri asa cum se observa în figura 5.

Initierea operatiei I/O pentru Task1


UC Intrerupere terminare Terminarea executiei
Task1 I/O Task1 celor 3 task- uri
t

Initierea operatiei I/O pentru Task2


UC Intrerupere terminare I/O
Task2 Task2
t
Initierea operatiei I/O pentru Task3
Intrerupere terminare I/O Task 3
UC Inactivitate a
Task3 UC-ului
t

Inactivitate Inactivitate Inactivitate Inactivitate


canal canal canal canal
Canal Operatie I/O Operatie I/O Operatie I/O
pt. Task1 pt. Task2 pt. Task3 t
t1 t2 t3 t4 t5 t6 t7t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18

Figura 5. Sincronizarea UC-ului cu activitatea Canalului pentru 3 Task-uri


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică, Bucureşti 1995, pag.36

Notam cu: t1 - momentul în care se solicita initierea unei operatii de


intrare/iesire (canalului) de catre unitatea centrala în favoarea lui Task1, t2 -
momentul în care Task1 ar avea nevoie de datele solicitate Canalului (dar înca nu
le are disponibile, motiv pentru care controlul UC-ului se da lui Task2), t3 -
16
Sisteme de operare

momentul în care se termina operatia de intrare/iesire (datele ar putea fi folosite de


Task1, dar controlul se afla la Task2 din care se executa secvential instructiuni)
finalizarea operatiei se va manifesta printr-o întrerupere adresata UC-ului, t4 -
momentul în care se solicita initierea unei operatii de intrare/iesire canalului de
catre unitatea centrala în favoarea lui Task2 (Canalul fiind disponibil sa execute
operatia de intrare/iesire), t5 - momentul în care Task2 ar avea nevoie de datele
solicitate Canalului (dar înca nu le are disponibile, motiv pentru care controlul UC-
ului se da lui Task3), t6 - momentul în care se solicita initierea unei operatii de
intrare/iesire canalului de catre unitatea centrala în favoarea lui Task3 (canalul
fiind ocupat, operatia se trece în coada de asteptare), t7 - momentul în care se
termina operatia de intrare iesire initiata de Task2 (Canalul devine disponibil si
se poate lansa operatia de intrare/iesire initiata de Task3 si aflata în coada de
asteptare a Canalului) finalizarea operatiei se va manifesta printr-o întrerupere
adresata UC-ului, t8 - momentul în care se lanseaza operatia aflata în coada de
asteptere (în favoarea lui Task3), t9 - momentul în care UC se elibereaza de Task3
(care ar avea nevoie de datele operatiei de intrare/iesire care tocmai este în curs) -
în acest caz Task1 având deja datele solicitate înca de la momentul t3 - se va relua
executia instructiunilor din Task1, t10 - momentul în care se încheie executia lui
Task1 si controlul este predat lui Task 2 (care are dej datele solicitate Canalului),
t11 - momentul în care se încheie executia lui Task2 (UC-ul devine diaponibil dar
trebuie sa “someze” deoarece operatia de intrare/iesire initiata de Task3 nu este
finalizata), t12 - momentul în care se încheie operatia de intrare/iesire initiata de
Task3 (se reda controlul UC-ului lui Task3 continuându-se secventa de
instructiuni a acestuia) finalizarea operatiei se va manifesta printr-o întrerupere
adresata UC-ului si t13 - momentul terminarii executiei tuturor task-urilor si
predarea controlului UC în favoarea executiei rutinei din nucleul sistemului de
operare care este capabila sa lanseze alte tascuri în executie.  i în cazul
multiprogramarii se pot calcula randamentele pentru UC si Canal dupa expresiile
(2). Aceste randamente sunt exprimate în procente.
Procesul de planificare a predarii controlului UC-ului este facut de catre
nucleul sistemului de operare care dispune de doua funtii importante:
- asigurarea unei ordini de prioritati, dupa o politica de deservire
proprie sistemului de operare;
- alocarea resurselor hardware care utilizeaza respectiva prioritate.

17
Sisteme de operare

t − ( t12 − t11)
η UC = 13 * 100
t13
(2)
t − [ t + ( t 4 − t 3) + ( t13 − t12)]
η Canal = 13 1 * 100
t13
Algoritmii de planificare a task-urilor presupun ordonarea acestora pe
baza de prioritate, sub forma unor fire de asteptare (din acest punct de vedere
acestea sunt considerate procese de nastere si moarte). La ora actuala exista
sisteme multiprogramare care inplementeaza unul din algoritmii (politicile) de
deservire:
- SFT - Shortest processing Time First - se aplica politica de deservire,
pentru lansarea prioritara în executie, a lucrararii care necesita cel mai
scurt timp de prelucrare, urmarindu-se minimizarea timpului de trecere
prin sistemul ce calcul electronic;
- LTF - Longest processing Time First - se aplica politica de deservire,
pentru lansarea prioritara în executie, a lucrararii care necesita cel mai
lung timp de prelucrare, urmarindu-se minimizarea timpului total;
- SMF - Smallest Memory requirment First - se aplica politica de
deservire, pentru lansarea prioritara în executie, a lucrararii care necesita
cel mai mic spatiu de memorie;
- LMF - Largest Memory requirment First - se aplica politica de
deservire, pentru lansarea prioritara în executie, a lucrararii care necesita
cel mai mic spatiu de memorie;
- FCFS - First Come, First Served - se aplica politica primul sosit -
primul servit sau FIFO (First Input, First Output);
- FCLS - First Come, Last Served - se aplica politica primul sosit -
ultimul servit sau FILO (First Input, Last Output);
- LCFS - Last Come, First Served - se aplica politica ultimul sosit -
primul servit sau LIFO (Last Input, First Output);
- LCLS - Last Come, Last Served - se aplica politica ultimul sosit -
ultimul servit sau LILO (Last Input, Last Output);
- Round Robin - se aplica politica de deservire circulara acordându-se
câte o cuanta de timp fiecarui task aflat în executie.
Precizam înca o data ca în sistemele de operare multiprocesor este vorba
de executia mai multor task-uri si nu de executia lor simultana. O simultaneitate a
executiei lor presupune existenta mai multor procesoare care ar executa 1/1 (un
task executat pe un procesor) aceste lucrari. O astfel de abordare ar duce la

18
Sisteme de operare

existenta unul sistem de calcul complex, multiprocesor care presupune executia


paralela a task-urilor si care efectueaza calcul paralel (procesare paralela) si care
introduce în sfera calculatoarelor paralele. Procesarea paralela nefacând obiectul
actual al interesului nostru, sa ne concentram asupra conceptului de
multiprogramare vazut (asa cum am precizat) ca o dulce “iluzie”, în asteptarea
viitoarelor progrese tehnologice care, sa speram, vor fi pe masura buzunarului
nostru.
Multiprogramarea este usor de observat de catre utilizator îndeosebi la
prelucrarea textelor, când editorul de texte este ocupat cu asteptarea tastarii
continutului textului, din partea operatorului uman. Având în vedere timpii de
comutare între task-uri, de ordinul milisecundelor, orice om oricât de rapid (fie
chiar si celebrul personaj din Mask) va crea între doua tastari succesive niste
“mici vesnicii” care ar crea o risipa inutila a timpului de procesare. Din acaest
motiv se are grija ca unui task sa-i fie alocat un timp de procesor numai atunci
când task-ul nu asteapta producerea unui eveniment extern (de exemplu,
terminarea unei operatii de intrare/iesire, apasarea unei taste, miscarea mouse-ului
etc.). Acest lucru presupune neaparat cunoasterea de catre sistemul de operare a
demararii fiecarei operatii de itrare/iesire si carui proces îi este destinat, pentru a
se astepta la evenimente externe care sa consemneze terminarea operatiilor de
transfer.
De exemplu, la sistemul de operare WINDOWS, asteptarea producerii
evenimentelor externe este sesizata de rutina de tip SHELL. În cadrul acestui
sistem de operare, programele de aplicatie, constituite ca task-uri distincte, vor
interoga totdeauna sistemul de operare cu privire la producerea unui eveniment
extern. Fiecarui task îi este asociat câte un TCB (Task Control Block) care tine
evidenta evolutiei task-ului. Un TCB contine: un pointer de înlantuire la task-ul
urmator, numele task-ului, numarul de identificare al task-ului, prioritatea task-
ului, starea task-ului si un pointer la zona de date asociate task-ului respectiv.
Diagrama de tranzitie a task-urilor este data în figura 6.

19
Sisteme de operare

NUCLEUL
SISTEMULUI DE
OPERARE

TASK1 TASKi TASKn


Pointer TASK2 Pointer TASKi+1 NIL
Nume TASK1 Nume TASKi Nume TASKn
Nr.Idetific.TASK1 Nr.Idetific.TASKi Nr.Idetific.TASKn
Prioritate TASK1 Prioritate TASKi Prioritate TASKn
Stare TASK1 Stare TASKi Stare TASKn
Pointer DATE1 Pointer DATEi Pointer DATEn

TCB1 TCBi TCBn

Figura 6. Înlănţuirea TCB-urilor


Orice program (task) care se executa sub un sistem cu multiprogramare se
afla în una din starile:
- program în asteptare - este task-ul care se afla în starea de asteptare
a terminarii unui eveniment extern, care-i va influenta evolutia executiei
ulterioare;
- program în executie - este task-ul care tocmai are acces la resursa
oferita de UC, adica, task-ul a carui secventa de instructiuni se executa
în momentul curent (programul su tascul activ);
- program pregatit - este task-ul care “doreste” sa obtina resursa de
UC, dar care nu o poate obtina pentru ca este mai putin prioritar decât
task-ul activ.
Pentru realizarea comutarii task-urilor dintr-o starea în alta, orice SHELL
a sistemului de operare care lucreaza în regim de multiprogramare dispune de un
modul software specializat numit modul distribuitor sau modul dispecer, care
aplica politica de deservire a sistemului de operare. Asupra modulului distribuitor
revine sarcina ca, în cazul opririi executiei unui task, sa salveze în zona de
memorie a TCB-ului respectiv toate informatiile necesare reluarii în orice moment
a tascului în cauza. Aceasta operatie se numeste salvarea contextului de reluare.
Datele salvate individualizeaza (personalizeaza) task-ul deoarece printre
infirmatiile salvate se afla si continutul registrilor generali, a indicatorilor de
conditii (registrul stare program) precum si adresa viitoarei instructiuni ce
urmeaza a fi executata dupa reactivarea task-ului. În felul acesta se obtine o
20
Sisteme de operare

“fotografie” din momentul opririi task-ului. Dupa efectuarea salvarilor pentru


task-ul oprit, se va face restaurarea informatiilor din TCB-ul nominalizat de
modulul distribuitor pentru a fi activat, astfel încat executia instructiunilor sa se
faca exact din locul în care a fost oprit anterior. Prin restaurarea informatiilor din
TCB-ul curent se reface contextul de activare a task-ului curent. Schema cu starile
de existenta ale unui task sunt prezentate în figura 7.
Elibereaz Blocheaz
PROGRAM ÎN
ATEPTARE

Pred

Pornete Ordoneaz Termin


PROGRAM PROGRAM ÎN
PREG TIT EXECU IE

Figura 7. Stările unui task


Pentru tranzitia de la o satare la alta, nucleul (din care face parte si
distribuitorul) sistemului de operare realizeaza urmatoarele operatiuni:
- porneste - demareaza activitatile de creare a TCB-ului asociat task-ului, în
momentul lansarii în executie a unui program si includerea acestui TCB în firul
de executie gestionat de sistemul de operare;
- termina - scoate din firul de executie TCB-ul asociat tascului care
tocmai si-a finalizat executia;
- ordoneaza - aranjarea în ordinea prioritatilor de deservire, pentru
lansarea task-ului cel mai prioritar aflat în starea pregatit;
- preda - se preda controlul controlul unui program pregatit daca
politica de deservire este LIFO;
- blocheaza - se blocheaza programul aflat în executie si se trece în
asteptare daca se executa o operatie de intrare/iesire, sau daca a aparut
un program mai prioritar si care respecta politica de deservire a sistemului
de operare;
- elibereaza - cand se cere restartarea unui program aflat în depanare.
Momentul în care intervine dispecerul sistemului de operare este stabilit ca
urmare a deciziei unei functii apartinând sistemului de operare numita scheduler,
functie care este da fapt un planificator. Planificatorul decide care dintre task-urile
aflate în gestiunea lui urmeaza sa fie lansat în executie si câte câte coante de timp
sa-i fie alocate. Pentru asi asigura o viziune de ansamblu asupra tuturor task-urilor,
scheduler lucreaza de odicei cu liste ordonate ordinea unor prioritati. Daca la
un anumit moment este în executie task-ul i si a expirat cuanta de timp afectata
21
Sisteme de operare

lui, atunci scheduler-ul testeaza daca nu cumva task-ul i+1se afla în asteptare si
în caz afirmativ se trece la testarea starii task-ului i+2, s.a.m.d., pâna la gasirea
primului primului task aflat în starea pregatit. Este de la sine înteles ca aceste
testari sunt consumatoare de timp de UC, ceea ce divedeste ca aceasta solutie nu
este cea mai eficienta. Aceeasi pierdere de timp apare si când s-a produs un
eveniment extern, de pilda în defavoarea task-ului i-1 pe care-l aduce în starea
pregatit, dupa care se parcurge lista de TCB-uri executându-se task-ul cel mai
prioritar aflat în starea pregatit.
Daca în timpul executiei task-ului i se ajunge la exectia unei operatii de
intrare/iesire, atunci scheduler-ul blocheaza task-ul salvându-i contextul în
TCBi, pe care-l trece în stare de asteptare (pâna la terminarea evenimentului
extern) si preda controlul urmatorului task aflat în starea pregatit din lista de
prioritati. În acest fel se produce o baleere circulara a listei de task-uri. Acest
mecanism este cunoscut sub numele de “Round Robin”, iar nucleul acestui sistem
de operare poarta numele de “preemption” (dislocare sau înlocuire) si asigura de
fapt înlocuirea unui task, al carui timp atribuit s-a epuizat, cu un alt task caruia I se
va atribui o cuanta de timp. Acest mecanism se poate observa în figura 8.
Pentru evitarea pierderilor de timp datorate salvarilor/restaurarilor
separate ale contextului curent de executie, unele sisteme de operare gestioneaza
liste separate pentru task-urile “în asteptare”, “în pregatire” si “în
executie”. Lista task-urilor aflate “în executie” prezentând interes practic doar în
cazul calculatoarelor paralele (multiprocesor).
Un mecanism complementar celui “Round Robin” este mecanismul
“strategiei de urgenta”. În cadrul acestui mecanism, lista de task-uri este sortata
în ordinea prioritatilor de executie, adica task-ul activ este lasat sa se execute,
urmând ca urmatorul task prioritar sa fie executat doar în momentul în care task-ul
curent s-a terminat. Pentru acest tip de mecanism sunt specifice doua tipuri
preemption:
- înlocuire la aparitia unui task nou cu prioritate mai mare decât a
task-ului în curs de executie, atunci noul task va înlocui task-ul curent;
- sistem cu interogare periodica pentru depistarea task-urilor noi si
alcatiurea unei statistici care sa duca la redistribuirea dinamica a
prioritatilor, acest lucru fiind justificat prin faptul ca un task fiind mereu
“în asteptare” în mod natural nu se grabeste prea mult si deci poate sa-si
reduca prioritatea , urmând sa fie înlocuit de un alt task cu prioritate mai
mare.
Este usor de înteles ca sistemul de operare trebuie sa împiedice accesul
simultan a doua task-uri la o resursa unica. Nu este greu sa ne închipuim ce

22
Sisteme de operare

“splendida babilonie” ar rezulta daca doua task-uri ar tipari la aceeasi


imprimanta doua texte diferite (eventual în limbi deosebite), imprimand fiecarea
câte o lirera sau un grup de litere. Pentru rezolvarea acestei probleme , în general,
se folosesc doua strategii:
- strategia exluderii reciproce (mutual exclusion) caz în care sistemul
de operare asigura distribuirea drepturilor de acces la respectiva resursa;
- strategia accesului exclusiv (exclusive access) caz în care task-ul este
nevoit sa solicite, respectiv sa predea, dreprul de acces la resursa unica.
TASK2
TASK3
Pointer TASK3
Nume TASK2 Pointer TASK4
Nr.Idetific.TASK2 Nume TASK3
Prioritate TASK2 Nr.Idetific.TASK3
Stare TASK2 Prioritate TASK3
Pointer DATE2 Stare TASK3
Pointer DATE3
TCB2
TCB3

TASK1
Pointer TASK2 TASK4
Nume TASK1 Pointer TASK5
Nr.Idetific.TASK1 NUCLEUL Nume TASK4
Prioritate TASK1 SIS TEMULUI DE Nr.Idetific.TASK4
Stare TASK1 OPERARE Prioritate TASK4
Pointer DATE1
Stare TASK4
Pointer DATE4
TCB1
TCB4

TASKn
TASKi
Pointer TASK1
Pointer TASKi+1
Nume TASKn
Nr.Idetific.TASKn Nume TASKi
Nr.Idetific.TASKi
Prioritate TASKn
Stare TASKn Prioritate TASKi
Pointer DATEn Stare TASKi
Pointer DATEi
TCBn
TCBi

Figura 8. Mecanismul Round Robin


Aceste solicitari trebuie sa constituie una din componentele de baza ale
comunicarii inter-task-uri, care se face prin asa-numitele “mesaje”, motiv pentru
care anumite rutine si/sau subrutine trebuie vazute de catre programator ca task-
uri cooperante. Tot sistemul de operare asigura rolul de coordonator în
comunicarea mesajelor, rol extrem de complicat. De exemplu, pot aparea
scurtcircuite (deadlock) de forma: task-ul i asteapta un mesaj de la task-ul i+1, iar
23
Sisteme de operare

task-ul i+1 asteapta un mesaj de la task-ul i. Rezultatul este un blocaj “ilustru”, pe


care sistemul de operare trebuie sa-l rezolve prin criterii suplimantare de
comunicatie.
Din pacate sub WINDOWS problema deadlock-urilor trebuie rezolvata
de catre programator, lucru greu de rezolvat mai ales în cazul utilizarii functiei
Yield() (“cedeaza trecerea”), functie care opreste tascul curent si-l porneste pe
urmatorul aflat “în asteptare”. Trebuie însa retinut ca daca un task “cedeaza
trecerea” în timpul preluariii unui mesaj transmis de un alt task, se poate ajunge la
un blocaj, daca nu se achita mesajul prin intermediul functiei “Reply Message()”.
Lucrurile se pot simplifica daca utilizam functia “In Send Message()” care
semnaleaza existenta mesajelor neachitate, pe care apoi cu functia “Reply
Message()” le poate achita, evitându-se astfel blocajele. Multe din blocajele
“neexplicabile” ale WINDOWS-ului se datoreaza nerezolvarii corecte a deadlock-
urilor.
4.3. Sistemul Spooling
Activitatea acestui tip de sistem de operare este ilustrata în figura 9. Prin
intermediul acestui tip de sistem de operare se poat suprapune operatiile de intrare,
procesare a datelor si iesire prin intermediul tehnicii spooling (Simultaneus
Peripherial Operations On-Line).
Spooling-ul are principala sarcina eficientizarea sistemului de calcul
electronic prin îmbunatatirea substantiala a randamentului de rulare, largirea
benzii de facilitati oferite utilizatorilor si executia dinamica a programelor aflate
într-un sir de asteptare.
Sistemele de operare de tip spooling au urmatoarele caracteristici esentiale:
- sunt sisteme care dispun de memorie externa (auxiliara) de foarte
mare capacitate, pe discuri magnetice organizate în acces direct;
- au implementate tehnica multiprogramarii (multitasking) care permite
efectuerea independenta si gestiunea automata a operatiilor de
intrare/iesire si procesarea multitaskig a proceselor;
- gestioneaza la întreaga capacitate a dispozitivelor periferice de
intrare /iesire;
- sistemul de operare gestioneaza mai multe buffere (zone tampon)
pentru intrarile si pentru iesirile asociate task-urilor; în acest fel se
realizeaza dispozitive virtuale de intrare/iesire care perimit urmatoarele
facilitati:
- introducerea si încadrarea într-o coada de asteptare a
lucrarilor înainte ca ele sa fie efectiv executate;

24
Sisteme de operare

- gestionarea rezultatelor în fire de asteptare la imprimare, în


timpul executiei altor lucrari de procesat;
- gestiunea planificarii executiei lucrarilor, aflate în firul de
asteptare la executie, în ordinea politicii de deservire
implementate de sistemul de operare, fara a tine seama de
disciplina de sosire;
- schimbarea ordinii de executie a task-urilor în functie de
criteriul de optimizare a resurselor hardware.
Figura 9 prezinta situatia în care: lucrarile P1 si P2 tocmai se introduc de
la terminalele CON1 si CON2; P3 si P4 asteapta sa fie încarcate în memoria
interna a sistemului de calcul; P5 , P6 , P7, si P8 se afla în executie
concurentiala de tip multitasking în memoria interna a calculatorului ; rezultatele
programelor deja terminate P9 si P10 se afla în coada de listare; rezultatele
programelor P11 si P12 sunt în plina operatiune de listare.
MEMORIA EXTERN

CON1 Buffere pentru Buffere pentru


intrri ieiri
P1 .... P3 .... .... P9 P11
P2 .... P4 .... .... P10
P1 LPT1

CON2
Canal P12

P2 LPT2
MEMORIA INTERN
Canal Canal
P5 P7

P6 P8

Nucleul sistemului de operare

UC Unitatea Central

Figura 9. Organizarea unui sistem Spooling


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică, Bucureşti 1995, pag.37

25
Sisteme de operare

Un astfel de sistem presupune neaparat exiatenta mai multor terminale de


intrare si mai multe dispozitive periferice de iesire, legate la canale de mare
capacitate de transfer.
4.4. Sisteme Time-Sharing
Principiul Time-Sharing trebuie interpretat ca o partajare a timpului între
utilizatorii sistemului de calcul electronic. Tehnica consta în a împarti resursele
unui calculator , având mai multi utilizatori, în asa fel încât fiecare utilizator are
impresia ca este singurul utilizator al sistemului. Sistemul de operare Time-
Sharing se utilizeaza la cele mai mari calculatoare electronice de tip mainframe, la
care sute sau chiar mii de utilizatori pot folosi simultan sistemul, fara a-si da
seama ca si altii o fac în acelasi timp.

26
Sisteme de operare

Dispozitive periferice de intrare/ie


ire locale

CON1

Disc Canale de intrare/ieire Disc


utilizatori sistem

MEMORIA INTERN

P1
C1 P3
1
P2
P4

............

Nucleul sistemului
Procesor de operare
Cn de (monitor de time-sharing)
n comunicaie

Memoria extern

de instan

P5 P6

Figura 10. Sistem de operare Time-Sharing


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică, Bucureşti 1995, pag.40

Este lesne de înteles ca în momentele de vârf ale utilizarii, timpul de


raspuns are tendinta evidenta de crestere. Mai trebuie retinut ca aceste sisteme de
operare cu divizarea timpului ridica probleme deosebite privind alocarea resurselor
hardware ale sistemului, protectia informatiilor si ale utilizatorilor, motiv pentru
27
Sisteme de operare

care sunt utilizate doar în institute mari de cercetare sau în aplicatii speciale, fara
interconectare la alte retele.
Caracteristicile principale ale sistemelor time-sharing sunt urmatoarele:
- partajarea unitatii centrale se face pe baza de cerere, iar planificarea
executiei lucrarii se face urmarindu-se un raspuns în timp minim;
- lucrarile trebuie executate în mod dinamic, deoarece ele nu au o
prioritate prestabilita;
- programele de comanda si control sunt capabile sa trateze o
multitudine de întreruperi care apar în procesul de multiplexare a rerurselor
care trebuie alocate lucrarilor;
- utilizatorii sunt aleatori, lucrând programe diferite, intrând si iesind
din sistem în deplina independenta unii fata de altii.
Din punct de vedere al cerintelor de ordin tehnic care se impun asupra unui
sistem de operare de acest tip, precizam urmatoarele trasaturi esentiale:
- protectia memoriei este asigurata prin atribuirea unui spatiu de
memorie unic, pe durata executiei lucrarii, pentru fiecare utilizator în
parte;
- independenta utilizatorilor este sigurata prin alocarea unei cuante
de timp pentru fiecare utilizator, iar în cazul în care lucrarea nu s-a finalizat
se returneaza programul pe memoria externa si este plasat în sirul de
asteptare a programelor în executie, încarcându-se în memoria interna
(din memoria externa) un alt program care va fi lansat imediat în executie
s.a.m.d;
- alocarea resurselor programelor utilizatorului este efectuata de
catre nucleul sistemului de operare numit monitor Time-Sharing si care
este rezident permanent în memoria interna, tot monitorul este cel care
aloca spatiul de memorie interna, timpul de Unitate Centrala, tratarea
întreruperilor sosite de la terminale, aloca resursele de imprimare etc;
- memoriei este efectuata printr-un mecanism de swaping al paginilor
de memorie externa si interna si control acestor pagini.
Modul de lucru al unui sistem de operare de tip Time-Sharing este ilustrat
în figura 10.
Caracteristicile hardware ale unui sistem de calcul care sa lucreze cu un
sistem operare Time-Sharing sunt urmatoarele:
- memoria interna de foarte mare capacitate (de ordinul sutelor TO)
si UC-uri ultra-rapide pentru obtinerea unui timp de raspuns minim
posibil;

28
Sisteme de operare

- memoria externa cu acces direct, solutia ideala obtinându-se prin


cuplarea în parallel a memoriei externe la UC si perifericele de
intrare/iesire, lucru care implica transferul de informatii între memoria
externa si perifericele de intrare/iesire independent de UC-ul sistemului de
calcul electronic;
- sistem de comunicatie pentru transferul informatiilor între UC-ul
sistemului de calcul si perifericele de intrare/iesire, modemuri,
concentratoare de date, multiplexoare de date si linii de comunicatii de
mare viteza;
- ceas de timp real care genereaza întreruperi pentru comanda
comutarii UC-ului de la un program la altul;
- terminale si unitati centrale specializate.
Caracteristicile software ale unui sistem de operare de tip Time-Sharing
sunt urmatoarele:
- alocarea si comutarea UC-ului se face de catre planificatorul de
lucrari pe baza unui algoritm care trebuie sa asigure simultan:
- minimizarea timpului de comutare între procese;
- reducerea timpului de raspuns al sistemului pentru realizarea
lucrarilor în timp minim;
- încarcarea echilibrata a sistemului hardware;
- lansarea în executie a lucrarilor în functie de prioritatile
fiecarui proces aflat în firul de asteptare la executie;
- alocarea dinamica a spatiului de memorie cu precizarea zonei de
memorie si a adresei de lansare a programului;
- ordonarea fiecarei lucrari, în functie de prioritatea acordata, în firul
de asteptare;
- gestiunea bazelor de date individualizate prin parola de protectie
asociata fiecareia, locul de memorare si adresa pentru regasirea rapida în
acces direct a datelor necesare;
- asigurarea tratarii întreruperilor prin detectarea, diagnosticarea si
tratarea lor si stabilirea modului de continuare a lucrului.
Sistemele de operare de tip Time-Sharing au avantajul folosirii procesarii
de mare putere on-line, utilizarea concurenta a resurselor hardware de foarte multi
utilizatori aflati local sau la distanta.
4.5. Multiprelucrarea
De la început trebuie precizat ca exista o diferenta conceptuala între
multiprogramare si multiprelucrare (sau multiprocesare). În timp ce
29
Sisteme de operare

multiprogramarea este un concept software, multiprelucrarea este un concept


hardware. Multiprogramarea presupune existenta în memoria interna a n programe
si care partajeaza resursele unui singur UC, în schimb în multiprelucrare cele n
programe beneficiaza de aportul a m procesoare în parallel. Un sistem de calcul
electronic se considera ca lucreaza în multiprelucrare, daca dispune de cel putin
doua UC-uri care lucreaza în parallel. Trebuie remarcat faptul ca în sistemele
electronice care sunt exploatate în multiprelucrare, UC-urile pot executa
instructiuni în favoarea unui singur program sau pot executa simultan instructiuni
din cadrul unor programe diferite. Paralelismul executiei mai multor sarcini
definite la nivelul unui program poate fi controlat explicit, daca se utilizeaza un
limbaj de programare corespunzator multiprelucrarii, limbaj care permite
specificarea lucrarilor paralele, prin instructiuni speciale care se folosesc pentru: a
initia executia paralela a sarcinilor, a astepta terminarea executiei lor, a proteja
datele utilizate de o sarcina în raport cu alte sarcini aflate în curs de executie, a
testa starea unei sarcini etc.
A. Sisteme MASTER-SLAVE
Cel mai important obiectiv al multiprelucrarii este acela al eliberarii UC-
ului de sarcini precum: editari de texte, întretinerea fisierelor si întretinerea
bazelor de date. Acest lucru poate fi cel mai elegant rezolvat prin cuplarea la UC-ul
obisnuit, care va juca rol de UC-Slave, a uni nou UC numit UC-Master si care are
rolul de a gestiona absolut toate intrarile/iesirile în sistem. Rolul UC-ului Slave
este acela de a efectua calculele complexe impuse de algoritmul pe care îl
implementeaza programul. Vazut în ansamblul lui, un sistem Master-Slave
trebuie privit ca un ansamblu format din doua entitati de procesare în care Master-
ul are rol de interfata.

30
Sisteme de operare

UCP -MASTER

DATE,
COMUNICA II
CONTROL

UCP -SLAVE

Prelucr
ri
complexe
Memoria extern

Figura 11. Sistem Master-Slave (Front-end processor)


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică, Bucureşti 1995, pag.41

Din punt de vedere functional Master-ul poate fi privit ca:


- front-end-processor în care Master-ul se ocupa de operatiile de
intrare/iesire iar Slave-ul se ocupa de operatii complexe, în acest caz
Master-ul jucând rolul de interfata între didpozitivele de intrare/iesire si
Slave (vezi figura 11);
- back-end processor în care Master-ul are ca sarcina întretinerea
bazelor de date, existente în memoria externa, asigurând accesul Slave-
ului la aceste colectii voluminoase (vezi figura 12).
Fiecare UC poate fi dedicat unor task-uri cu destinatie speciala, specifica,
sau pot fi utilizate “în bascula”, alternativ, pentru a executa un singur task, cu
implementarea unui algoritm mai complex si care presupune utilizarea alternativa
celor doua procesoare.
31
Sisteme de operare

Memoria extern

UCP -SLAVE
MAINFRAME

UCP1 UCP2

UCP -MASTER

DATE,
COMUNICAII
CONTROL

Alte dispozitive periferice de intrare/ieire

Figura 12. Modul de funcţionare Back-end processor


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică, Bucureşti 1995, pag.41

B. Clase de sisteme cu multiprelucrare


Din punct de vedere al modului de planificare a task-urilor si a modului de
comunicatie exista doua clase mari de sisteme cu multiprelucrare:
- sisteme cu multiprelucrare care dispun de unitati centrale identice, la
care difera doar modul de partajare a memoriei interme si pentru care exista patru
tipuri distincte de sisteme Master-Slave:
- sisteme cu memorie unica si UC-uri identice, ca în figura 13;
- sisteme cu memorie proprie si UC-uri identice, ca în figura 14;
32
Sisteme de operare

- sisteme cu memorie unica si UC-uri Master-Slave, ca în figura 15;


- sisteme cu memorie proprie si UC-uri Master-Slave, ca în figura
16;
- sisteme cu multiprelucrare având unitati centrale diferite, care impun
existenta unui numar de UC-uri periferice care proceseaza în paralel si care pot
exista ca:

UC1
MEMORIE
INTERN
UNIC UC2

. .. . .. .

UCn

Figura 13. Sisteme cu memorie unica si UC-uri identice

UC1
MEMORIE
INTERN
UNIC UC2

. .. . .. .

UCn

33
Sisteme de operare

MEMORIE MEMORIE
INTERN UC
UCn UC
UCn INTERN

Figura 14. Sisteme cu memorie proprie si UC-uri identice

UC1
UC1SLAVE
MEMORIE
UCUC1
MASTER INTERN
INTERN
UNIC UC2
UC1SLAVE

. .. . .. .

UC1SLAVE
UCn

Figura 15. Sisteme cu memorie unica si UC-uri Master-Slave

MEMORIE MEMORIE
UCUC1
MASTER UC
UC1
SLAVE
INTERN INTERN

Figura 16. Ssisteme cu memorie proprie si UC-uri Master-Slave


- arie de procesoare care presupune împartirea unui program
în activitati absolut independente si care se pot executa în mod
simultan pe UC-urile existente într-o configuratie;
- pipe (tip conducta) care permite procesarea directa asupra
unui sir de vectori de mari dimensiuni;
- puternic conectate care sunt individualizate de un volum
crescut al lucrarilor executate de sistem, lucru realizat de controlul
direct efectuat de UC-urile componente;
34
Sisteme de operare

- slab conectate care sunt caracterizate de faptul ca partajeaza


între ele: programele de serviciu, sistemul de comunicatii,
memoria cu acces direct etc. prin controlul direct al unui alt
procesor.
Sintetizând, oportunitatea si necesitatea folosirii multiprelucrarii se
realizeaza prin:
- separarea diverselor functii ale sistemului prin alocarea câte unui
program pentru fiecare functie, separare care trebuie înteleasa inclusiv
geografic;
- încarcarea partajata a task-urilor spre ececutie de asa maniera
încât fiecare procesor sa aibe acces la firul unic de asteptare a lucrarilor în
executie;
- cresterea fiabilitatii sistemului prin:
- duplexarea sistemelor sau sisteme mirror, situatie în care
una sau mai multe componente hardware ale sistemului sunt
dublate din punct de vedere fizic, astfel încât o componenta este
activa iar dublura ei fiind activata doar în cazul ca prima este
defecta;
- sisteme duale, situatie în care doua UC-uri prelucreaza
simultan acelasi task si în mod periodic se verifica corectitudinea
rezultatelor.
Cea mai importanta activitate dintr-un sistem de operare cu
multiprelucrare este planificarea executiei task-urilor aflate în firul de executie. În
functie de tipurile de UC-uri folosite, planificarea lucrarilor în executie se
realizeaza în urmatoarele moduri:
- în cazul sistemelor cu UC-uri de tip diferit, planificarea executiei
lucrarilor se pot realiza:
- manual fara o planificare, existând doar comutarea de la un
UC la altul;
- încarcarea echilibrata a sistemului în sensul ca se acorda
câte un UC la fiecare task în cazul sistemelor slab conectate,
partajarea tuturor UC-urilor Slave în cazul sistemelor Master-
Slave.
- în cazul sistemelor cu UC-uri de acelasi tip, planificarea
executiei lucrarilor se face considerându-se toate procesoarele de
tip Slave si planificarea facându-se descentralizat. Se creaza o
lista interna care contine numele UC-urilor si starea lor, iar în
momentul întreruperii unui task aflat în executie UC-ul care-i este
35
Sisteme de operare

atribuit cauta în lista de UC-uri pentru a gasi un alt task pentru a fi


lansat în executie, în conformitate cu acelasi algoritm de
planificare.

36
Sisteme de operare

5. Gestiunea resurselor unui sistem de calcul electronic


Pentru fiecare componenta hardware a unui sistem de calcul electronic,
sistemul de operare trebuie sa dispuna de componente software care sa gestioneze
resursele hardware pe cale le ofera, sumultan cu asistarea permanenta a
utilizatorului pe toata durata pregatirii, lansarii si executiei programului sau. Prin
resurse hardware se întelege: memoria interna, memoria externa, unitatea
centrala, canalele de comunicatie si dispozitivele periferice de intrare/iesire.
Sistemul de operare are rolul de a facilita utilizarea eficienta a resurselor
hardware si de a solutiona eventualele conflicte care apar în “concurenta” pentru
obtinerea respectivei resurse de catre programe. Ca sa poata sa-si îndeplineasa
misiunea de “arbitru - coordonator - manager eficient”, sistemul de operare trebuie
sa realizeze simultan urmatoarele activitati:
- sa evidentieze fiecare resursa hardware disponibila în sistem;
- sa determine cui, cât si când sa aloce fiecare resursa hardware, în
conformitate cu politica de deservire a lucrarilor;
- la terminarea executiei sa dealoce resursele hardware alocate anterior.
Pentru asigurarea acestor activitati, sistemul de operare a unui calculator
trebuie sa îndeplineasca urmatoarele functii, grupate în patru categorii:
a. Functia de gestiune a memoriei interne care se manifesta prin:
- cât si de cine este folosita memoria interna?
- ce task, când si câta memorie trebuie sa-i alocam?
- aloca memoria interna asigurându-i metoda de acces si
protectia zonelor de memorie alocate;
- eliberarea memoriei interne la terminarea executiei
programului.
b. Functia de gestiune a UC-ului care se manifesta prin:
- evidenta UC-urilor si a starilor acestora numita si traffic
controller;
- asigura decizia pentru cine, când si pentru cât timp se
utilizeaza UC-ul prin processor scheduler;
- aloca resursa de timp a UC-ului la un proces prin încarcare
registrelor UC-ului;
- daca programul s-a terminat sau s-a depasit timpul de UC
alocat, se retrage alocarea resursei.
c. Functia de gestiune a dispozitivelor periferice se realizeaza prin
urmatoarele activitati:

37
Sisteme de operare

- evidenta dispozitivelor periferice, a adaptoarelor si a


canalelor prin I/O Traffic Controller;
- daca este necesara utilizarea simultana a acelorasi resurse
I/O, decide cine si cât timp foloseste resursa, prin intermediul lui
Schedulering I/O;
- aloca resursa periferica si initiaza operatia de I/O;
- la terminarea operatiei de intrare/iesire dezaloca resursa
periferica.
d. Functia de gestiune a informatiilor organizate în fisiere si/sau baze
de date se realizeaza prin urmatoarele activitati:
- evidenta resursei informatie, individualizarea si localizarea
ei, utilizarea si consemnarea starii acesteia prin File System;
- asigura protectia necesara si ofera rutine de acces, decide
cine are acces la resursele de informatii;
- asigura resursele informationale necesare deschiderii
structurii de date (fisier sau baza de date) prin utilizarea
componentei Open;
- dezaloca resursele informationale prin utilizarea lui Close
pentru a închide structurile de date anterior deschise.
5.1. Gestiunea proceselor σi procesoarelor
Atunci când se utilizeaza în mod partajat resursele unui sistem de calcul
electronic, se poate ajunge la insuficienta resurselor procesor, pentru doua sau mai
multe programe aflate în executie, caz în care trebuie sa existe o componenta
sistem care sa asigure timp de UC pentru procesele create. Pentru lamurirea
acestei probleme sa introducem, prin definitie, urmatoarele notiuni:
- task-ul (activitatea, lucrarea sau programul) ca fiind unitatea
interna de lucru creata de sistemul de operare în momentul în care accepta
spre executie un executabil;
- programul este secventa logica de instructiuni care implementeaza
un anumit algoritm de calcul, care se considera a fi compus din mai multe
procese;
- procesul este reprezentat de de un program în curs de executie si care
poate fi un program de serviciu, un program de aplicatie sau o rutina a
sistemului de operare;
- lucrarea este o colectie de activitati sau task-uri care se executa de
sistemul de calcul electronic;

38
Sisteme de operare

- procesorul este acea componenta electronica care este capabila sa


execute instrictiunile unui program, întelegem prin procesor UC-ul sau
controller-ul de canal.
A. Procesele concurente (paralele) si coordonarea proceselor
Procesele concurente se numesc si procese paralele. Ele presupun
existenta urmaririi de catre sistemul de operare a executiei mai multor programe
simultan. Programele existente în executie la un moment dat vor concura la
resursele hardware ale sistemului de calcul. Aceasta concurenta se face în doua
moduri:
- direct prin utilizarea simultana a acelorasi resurse hardware ale
sistemului de calcul;
- indirect prin concurarea la aceiasi resursa hardware a sistemului de
calcul.

Lansare Activare
INACTIV PREGATIT ACTIV
NELANSAT INTRERUPT
Dezactivare

BLOCAT IN
ASTEPTARE

Figura 17. Diagrama de tranziţie a unui proces


Sursa: R. Mârşanu – Sistemele de operare MS-DOS şi UNIX, Ed. Tehnică, Bucureşti 1995, pag.46

Gestiunea proceselor concurente este rezolvata de sistemul de operare prin


trecerea fiecarui proces, aflat în executie, printr-unul din urmatoarele stari de
existenta a unui proces:
- inactiv-nelansat în executie, este starea în care se afla un proces în
firul de lansare în executie, el fiind încarcat în memorie si luat în
considerare de sistemul de operare în vederea lansarii efective în executie
imediat ce conditiile o vor permite;
- activ este starea în care se gaseste un proces a carui instructiuni se
executa în momentul de fata;

39
Sisteme de operare

- pregatit-întrerupt este starea în care se afla un proces care


momentan întrerupt de catre un eveniment extern prioritar, dar care este
pregatit pentru lansare în executie în orice moment în care vor fi
îndeplinite conditiile de relansare;
- blocat în asteptare este starea în care procesul asteapta terminarea
unei operatii de intrare-iesire care se desfasoara în favoarea sa.
Între aceste patru stari exista un graf de tranzitie care este acelasi pentru orice
proces, tranzitie reprezentata în figura 17.
Gestiune proceselor concurente implica din partea sistemului de operare
urmatoarele doua activitati majore:
- determinarea proceselor care asigură independenta sistemului de
vitezele relative de executie a componentelor, care trebuie sa conduca la
un rezultat unic, altfel sistemul este nedeterminat si în acest caz trebuie
introduse resptictii de prioritate prin stabilirea unor grade de precedenta;
- interblocarea proceselor care apare atunci cand i procese asteapta
un timp nedefinit într-un fir de asteptare circular ca un proces sa renunte
la aspiratiile de a utiliza o resursa hardware; aceasta problema se rezolva
în urmatoarele modalitati:
- alocarea controlului în avans de executie;
- alocarea în avans a resurselor partajate;
- aranjarea cererilor de resurse într-o lista secventiala si
ierarhizarea resuselor concurentiale pe niveluri, în scopul
acordarii resursei doar la nivelele ierarhic superioare;
- excluderea mutuala a proceselor care solicita în acelasi timp
resurse critice, în sensul de a nu se executa simultan ci în decalaj
de timp.
B. Sincronizarea procesele
Exista situatii când un anumit proces trebuie sa fie continuat doar dupa ce
un alt proces a ajuns într-o anumita faza de executie sau pana ce s-au petrecut
anumite evenimente care se afla sub controlul altui proces. Sincronizare între
procese este impusa si de necesitatea comunicarii între aceste procese.
Pentru realizarea mecanismelor de sincronizare a proceselor exista
urmatoarele facilitati:
- biti de atentie, în care fiecarei resurse partajate de i procese îi este
atasat un bit numit lock-bit care poate avea valoarea 0 pentru resursa
partajata disponibila, sau 1 pentru resursa indisponibila (deoarece este

40
Sisteme de operare

utilizata de un alt proces si care la terminare va pune bitul pe 0), timpii de


testare a bitului sunt ineficienti;
- mecanisme de asteptare si semnalizare care presupune plasarea
procesului, solicitant al resursei partajabile, într-o lista de procese blocate
în asteptarea resursei;
- calculul semafoarelor prin operatii P si V în care primitivele P si V
modifica semafoarele S (semafor de setare care poate lua valorile 0 sau 1)
dupa urmatoare logica: P(S) - decrementeaza valoarea lui S cu 1 si daca
S#0 atunci asteapta; V(S) - incrementeaza valoarea lui S cu 1 si daca
S# 0 atunci emite semnal;
- comunicarea directa de tip SEND/RECEIVE în care sincronizarea
se realizeaza direct prin intermediul primitivelor SEND(Proces1, mesaj)
si RECEIVE(Proces2, mesaj);
- tehnica cutii postale în care se transmit mesaje prin intermediul unor
zone tampon dinamice numite cutii postale si în care fiecare proces creaza
câte o cutie postala care va contine informatii (mesaje) care pot fi
exploatate de celelalte procese;
C. Gestiunea procesoarelor
Prin gestiunea procesoarelor întelegem asigurarea procesoarelor la fiecare
din procesele create de sistemul de operare la încarcarea în memorie a acestora.
Gestiunea procesoarelor se desfasoara la: nivelul planificarii lucrarilor, cand
sistemul de operare decide care proces devine activ si la nivel de alocare efectiva
a procesorului la procesele create de sistemul de operare.
Gestiunea procesoarelor se realizeaza prin intermediul urmatoarelor
module: modulul de planificare a lucrarilor si modulul de alocare a procesorului.
- Modulul de planificare a lucrarilor executa urmatoarele activitati:
- evidentiaza starea lucrarilor si gestioneaza cererile de
servicii;
- alegerea politicii de deservire a lucrarilor dupa prioritati,
necesarul resurselor solicitate, încarcare echilibrata a
procesorului, durata estimata de executie;
- alocarea resurselor necesare procesului planificat, din punct
de vedere al: memoriei interne, memoriei externe, timp de unitate
centrala, dispozitive periferice;
- eliberarea resurselor prin dezalocarea resursei la
terminarea executiei procesului.
- Modulul de alocare a procesorului executa urmatoarele activitati:
41
Sisteme de operare

- traffic controller care evidentiaza starea proceselor la un


moment dat;
- processor scheduler stabileste care proces si pentru cât timp
dispune de procesor;
- aloca procesorul unui proces efectuând si actualizarea
continutului registrilor pentru executia procesului care a câstigat
competitia;
- dezaloca procesorul daca-i expira cuanta de timp acordata,
daca a aparut o întrerupere prioritara sau daca s-a terminat
executia procesului.
Exista si modele probabilistice pentru planificarea lucrarilor la
nivelul procesorului astfel încât exista urmatoarele doua tipiri de sisteme de
operare:
- sisteme nepreemptive sunt sistemele în care fiecare proces se executa
de la cap la coada, prin executia de catre procesor a cererii cele mai
prioritare pâna la terminarea executiei, chiar daca apar pe parcursul
executiei cereri mai prioritare;
- sisteme preemptive sunt sistemele în care cererile din diverse etape
de executie se adreseaza nucleului care va aloca resursa cererii cele mai
prioritare, iar executia procesului curent este întrerupta si trecuta în
asteptare.
5.2. Gestiunea memoriei
Prelucrarea informaţiilor în sistemele de calcul electronic, presupune
păstrarea (stocarea, memorarea) datelor şi programelor pe dispozitive de memorare.
Acestea sunt organizate pe două niveluri: memoria internă (RAM sau ROM) şi
memoria externă (discuri magnetice sau benzi magnetice, CD-uri, streamere etc).
Pentru memoria internă se foloseşte şi noţiunea de memorie principală, iar pentru
memoria externă cea de memorie auxiliară. Fiind o resursă importantă a sistemului
de calcul electronic, memoria (fie ea internă sau externă) trebuie gestionată corect şi
raţional de sistemul de operare.
Componenta sistemului de operare care face gestiunea memoriei se numeşte manager de
memorie şi are rolul de a asigura decizia organizării memoriei la cele două
niveluri (internă şi externă) şi de a stabili şi mijloci transferul corect între aceste
niveluri.
Tehnicile de exploatare cum sunt: multiprogramarea, time-sharing,
multiproprocesarea etc, impun existenţa unor implementări de gestiune a memoriei
(în sistemul de operare) ca: tehnica alocării dinamice a necesarului de memorie şi

42
Sisteme de operare

tehnica memoriei virtuale. Obiectivul primordial al activităţii de gestiune este acela de a


oferi o viteză de execuţie maxim posibilă (în contextul configuraţiei hardware existente)
pentru programele ce urmează a fi executate sub controlul sistemului de operare. Ca
regulă generală, de gestiune a memoriei interne, consemnăm menţinerea în memoria
internă RAM doar a unor părţi (sau funcţii modulare) cele mai des utilizate de către
unitatea centrală, restul modulelor fiind încărcate în memoria internă (din memoria
externă) după necesităţile algoritmilor implementaţi de programe.
În memoria internă coexistă atât date cât şi programe. Sarcina gestiunii
corecte a zonelor de memorie revine managementului de memorie asigurat de
sistemul de operare. În memoria externă, de asemenea, coexistă datele şi programele.
Programele sunt gestionate de sistemul de operare sub formă de fişiere executabile, iar
datele sub formă de fişiere de date, baze de date sau bănci de date. Gestiunea propriu-
zisă a programelor şi datelor din memoria externă este asigurată de sistemul de
operare prin componenta sa numită subsistemul de gestiune al fişierelor (tipic
fiecărui sistem de operare în parte).
Referitor la memoria internă unde pot exista simultan încărcate mai multe
programe, cu funcţionalitate mai mult sau mai puţin independentă, trebuie fiecare în
parte să se supună următoaerlor operaţii:
- încărcarea în memoria internă, când se evaluează necesarul de resurse (în
cazul nostru de memorie internă), se asigură recalcularea adreselor de
lansare în execuţie a programului, se stabilesc valorile cu care vor fi
încărcate registrele de control a execuţiei, se recalculează adresele relocabile
etc;
- protecţia programelor încărcate în memoria internă a calculatorului, astfel
încât accesul neautorizat ale unor programe în spaţiul unui anumit program
să fie blocat, la fel şi în ceea ce priveşte accesul la fişierele altor programe.
Întreaga alocare a spaţiului de memorie disponibil se face după politica de
deservire (statică sau dinamică) implementată în sistemul de operare. Pentru aceasta
sistemul de operare trebuie să cunoască în fiecare moment geografia alocării spaţiului
fizic de memorie. Trebuie reţinut că în faza de punere la punct şi de obţinere a
programului executabil, se lucrează cu adrese de memorie logice (adrese de memorie
simbolice, exprimate în general prin adrese relative la începutul segmentelor), dar la
încărcarea programlui în memorie (care poate fi oriunde în spaţiul de memorie)
trebuie să se precizeze adresa fizică (adresa reală) de încărcare şi lansare în execuţie.
în faza de încărcare în memoria internă (din memoria externă) a programului, se
face translatarea adreselor logice în adrese fizice, translatare care se numeşte relocarea
adreselor.
Orice activitate de gestiune a memoriei interne se bazează pe trei algoritmi de
bază:
43
Sisteme de operare

• algoritmul de transfer, care trebuie să determine (în avans) când trebuie


transferat (din memoria externă în cea internă) un bloc;
• algoritmul de plasare, care stabileşte care zonă momentan liberă va fi
locul în care se plasează blocul adus;
• algoritmul de reamplasare, care va determina care blocuri şi în ce
moment trebuie reamplasate în memoria internă; pentru a elibera anumite
zone care vor fi utilizate în alte scopuri.
Activitatea de gestiune a memoriei interne este ilustrată schematic în fig. 18.

A. Alocarea dinamică a memoriei

Alocare memoriei este operaţia prin care se atribuie unui program o anumită
zonă din memoria internă.
Alocarea memoriei interne se poate realiza în două moduri:
- alocare statică, în care programul este înărcat în prima zonă de me-
morie liberă, pe care o va ocupa până la terminarea execuţiei sale;
- alocare dinamică, în care adresele logice nu sunt relocate la
încărcarea programului în memorie, ci în momentul execuţiei
instrucţiunilor.
La alocarea dinamică adresele relative (logice) sunt păstrate pentru a se putea
realiza deplasarea programului dintr-o zonă a memoriei interne într-alta, în funcţie
de politica de alocare a sistemului de operare.

PROCESOR Adrese
UC MEMORIA
INTERNA

Canale de
transfer

Comenzi de deplasare MEMORIA


EXTERNA

Figura 18. Activitatea de gestiune a memoriei interne

B. Memoria virtuala
44
Sisteme de operare

Există sisteme de operare care privesc memoria internă şi cea externă ca una
unică, numită memorie virtuală. Conceptul de memorie virtuală oferă iluzia pentru
utilizator, că dispune de o memorie teoretic infinită. Acest lucru poate fi realizat prin
efectuarea unui transfer al informaţiei din memoria externă în cea internă, şi invers,
la nivel de multiplu de sector de disc (n*1024 bytes), un asemenea "calup" de
transfer se numeşte pagină.
În cadrul acestui concept, programatorul lucrează cu adrese de memorie
virtuale, iar adresa reală (numită adresă fizică) este calculată de o funcţie de
translatare a adreselor virtuale.

MEMORIE

PROCESOR ai Tabela functie bi


UC de translatare MEMORIA
INTERNA

Canale de
transfer

Comenzi de deplasare
MEMORIA
EXTERNA

Figura 19. Dispozitivul de translatare a memoriei


Pentru a înţelege mecanismul memoriei virtuale să facem următoarele
notaţii:
- ai, unde i= 0, 1, 2, ..., n, sunt adrese virtuale;
- bj, unde j= 0, 1, 2, .... m, sunt adrese reale;
- ft: A(ai)→B(bj) este funcţia de translaţie a adreselor virtuale în adrese
reale. Aceste notaţii corespund cu figurile 19, 20, 21, 22 şi 23.
Funcţia de transfer, se poate defini ca:
1. ft(ai)=0, dacă informaţia de la adresa virtuală nu se află în
momentul curent în memoria internă;

45
Sisteme de operare

2. ft(ai)=bj, dacă adresa virtuală ai este încărcată în memoria


internă.
În cazul în care ft(ai)=0 se emite un semnal electronic cu semnificaţia
nonrezidenţei adresei virtuale, se generează o întrerupere de plasare din memoria
externă în cea internă, a zonei referite prin ai. După terminarea tratării întreruperii,
care a executat algoritmi de transfer, plasare şi reamplasare, funcţia ft(ai) devine
nenulă, adică ft(ai)=bj, şi relându-se execuţia programului întrerupt care necesita zona
de memorie translatată. Mecanismul de translatare (numit şi dispozitiv de trans-
latare) a memoriei este reprezentat în figura 19.
Sistemele de operare existente până în prezent, au implementate, din punct de
vedere al modului de organizare, următoarele variante de memorie virtuală:
• memorie virtuală organizată la nivel de adresă;
• memorie virtuală organizată la nivel de pagină;
• memorie virtuală organizată la nivel de segment;
• memorie virtuală organizată la nivel de segment-pagină;
Pentru înţelegerea variantelor de memorie virtuală să luăm pe rând fiecare
dintre acestea şi să le comentăm.

B.l. Memoria virtuală organizată la nivel de adresă

Această memorie virtuală este prezentată schematic în figura 20.

RV Tabela FT
PROCESOR
UC ai RM MEMORIA
b bi INTERNA

Canale de
transfer
Rezident
Acces
DISPOZITIV DE MEMORIA
TRANSLATARE EXTERNA
Depasire

Figura 20. Organizarea la nivel de adresa


46
Sisteme de operare

În această figură sunt utilizată următoarele notaţii:


• RV - registrul de adresă virtuală, în care se introduc adresele
virtuale ai de care are nevoie procesorul (care execută secvenţa de
instrucţiuni a programului în lucru şi care are nevoia de zona de
memorie specificată prin ai);
• RM - rergistrul de adresă al memoriei interne, conţinând adresele
fizice (adresele reale) indicate prin bj, din a căror conţinut se
extrage informaţia solicitată de procesor;
• ACCES - registrul de acces, care dacă conţine valoarea 1 se
iniţiază procesul de translatare, iar dacă este pe 0 nu se face
translatare;
• REZIDENT - registrul de stare a rezidenţei, care conţine
valoarea 1 dacă blocul de memorie referit prin adresa virtuală ai, se
află în memoria internă, iar dacă va conţine valoarea 0 înseamnă că
blocul de memorie referit prin ai, nu este rezident în memoria internă;
• DEPĂŞIRE - registrul de semnalare (valoarea 1) a erorilor de
depăşire a spaţiului de memorie.
Să presupunem că procesorul execută instrucţiunile unui program oarecare.
Dacă acest program are nevoie de nişte date aflate într-o zonă de memorie virtuală
definită prin ai , procesorul va introduce adresa ai în registrul de adrese virtuale RV. Să
presupunem că zona de memorie referită prin ai nu se află în memoria internă. În
acest caz registrul REZIDENT conţine valoarea 0, registrul ACCES conţine valoarea
1 şi prin urmare procesul de translatare se poate iniţia şi desfăşura. După iniţierea
operaţiunii de translatare, pot apărea următoarele situaţii:
• dacă adresa virtuală ai se află în domeniul care este definit de
intrarea curentă în tabela FT, atunci conţinutul care se află în FT se introduce în
registrul memoriei interne RM şi se va extrage din memoria internă informaţia
conţinută la adresa reală bj şi solicitată de procesor;
• dacă adresa virtuală nu se găseşte într-o intrare a tabelei FT, atunci
RM va conţine valoarea 0, registrul REZIDENT se pune pe 1 şi se iniţiază
algoritmii de transfer, plasare şi reamplasare care vor aduce din memoria externă în
cea internă informaţia solicitată de procesor şi actualizează tabela de definire şi
descriere a funcţiei de translatare ft.
Dacă se notează prin b adresa de bază a blocului de memorie internă şi cu
d deplasarea în cadrul blocului, atunci adresa reală bj se determină prin formula:
bj = ft(b) + d
Consemnăm ca dezavantaj al acestui tip de organizare, faptul că tabela FT
ocupă un spaţiu de memorie destul de mare.

47
Sisteme de operare

B.2. Memorie virtuală organizată la nivel de pagină


Această memorie virtuală este prezentată în fig.21. Cu notaţiile folosite
anterior şi cu altele noi se poate prezenta şi acest mod de organizare. Astfel, avem:
• registrul de adrese virtuale devine mai complex prin
asocierea perechii de semiregiştrii C şi P, în care C va conţine
numărul cuvântului din P, iar P va conţine numărul de cuvinte
din pagină;
• registrul de adrese reale RM devine şi el mai complex prin
asocierea lui C şi Q, unde C are semnificaţia deja definită iar Q
conţine o dimensiune de bazare;
• MPT - dispozitivul (mecanismul) de translatare a paginilor.
Acest tip de memorie virtuală are avantajul că reduce memoria conţinută în
tabela ft, pentru că spaţiul de adrese este divizat în pagini de dimensiune constantă.
În general, dimensiunea unei pagini este egală cu dimensiunea unei pagini din
memoria internă, lucru care duce la netranslatarea adresei cuvântului de pagină. Cel
mai important avantaj este că un program poate fi executat fără a avea toate paginile
încărcate dintr-o data în memoria RAM, ci pe măsură ce prelucrarea o cere. Această
situaţie duce la o protecţie sporită a accesului şi la o utilizare eficientă a memoriei
interne.

RV
ai C
PROCESOR RM
UC P MTP C bi MEMORIA
Q INTERNA
Q

Canale de
transfer
Rezident

Acces
DISPOZITIV DE
MEMORIA
TRANSLATARE EXTERNA
Depasire

Figura 21. Organizarea la nivel de pagina

48
Sisteme de operare

Dispozitivul de translatare implementează o tabelă a paginilor (MTP) în


memoria internă RAM. Această tabelă conţine informaţii utilizate în translatarea
adreselor.
Pentru fiecare adresă virtuală ai solicitată de programul aflat în execuţie,
procesorul va asocia perechea (P,C) în care P va conţine numărul cuvintelor din pagină
şi C numărul de cuvânt referit din P. O pagină conţine 0...2P cuvinte. Din cadrul
paginii se extrage o componentă Q de o anumită dimensiune (solicitată de procesor) în
următoarele două variante:
• dacă RM(Q) ≠ 0, atunci adresa solicitată prin ai se află într-o
pagina rezidentă în memoria internă;
• dacă RM(Q) = 0, adresa solicitată prin ai nu este într-o pagină
rezidentă în memorie şi se va declanşa execuţia algoritmilor de transfer, plasare şi
reamplasare, ca urmare se face punerea lui REZIDENT pe 1 şi se actualizează MTP
pentru referirea noii adrese.

B.3. Memorie virtuală organizată la nivel de segment

Această memorie virtuală este prezentată în fig. 2.2. Notaţiile anterioare


rămân valabile, însă apar câteva noi:
• registru buffer, conţine adresa extrasă din tabela de seg-
mente MTS, iar semiregistrul R specifică baza segmentului şi
semiregistrul D specifică dimensiunea segmentului;
• registrul de adrese virtuale RV conţine: semiregistrul S care
conţine numele segmentului şi semiregistrul C care conţine numele
cuvântului din segment;
• registrul de adrese reale RM conţine: semiregistrul C (numele
cuvântului din segment) şi semiregistrul R (baza segmentului);
• registrul comparator care efectuează comparaţia între C şi D.
Pentru fiecare adresă virtuală ai solicitată de programul aflat în execuţie,
procesorul va introduce în registrul de adrese virtuale: numele segmentului în S şi
numele cuvântului din cadrul segmentului în C. Adresa de memorie unde începe
segmentul S se precizează ca bază în semiregistrul R, iar în D se va specifica
dimensiunea segmentului. Perechea (R, D) va reprezenta o intrare în tabela de
translaţie MTS. Registrul comparator efectuează comparaţia dintre C şi D, obţinându-
se în final adresa reală în registrul RM. Dacă R = 0, atunci se va declanşa execuţia
algoritmilor de transfer, plasare şi reamplasare, cu reactualizarea tabelei MTS şi cu
punerea la dispoziţia procesorului a informaţiilor solicitate.

49
Sisteme de operare

RV Comparator
PROCESOR ai C RM
UC MTS MEMORIA
S C bi INTERNA
D
R D R
R
Registru
buffer
Canale de
Rezident transfer

Acces
DISPOZITIV DE MEMORIA
TRANSLATARE EXTERNA
Depasire

Figura 22. Organizarea la nivel de segment

B.4. Memorie virtuală organizată la nivel de segment-pagină


Această memorie virtuală este reprezentată în fig. 2.3. Noile notaţii care apar
aici sunt:
• registrul de adrese virtuale este format din trei subregiştrii: S care
conţine adresa virtuală a segmentului, CP care conţine adresa virtuală a paginii în
segment şi CC care conţine adresa virtuală a cuvântului în cadrul paginii;
• registrele ACCES PAGINĂ şi ACCES SEGMENT dacă conţin
valoarea 1 permit accesul la pagina sau ia segmentul specificat;
• RA registrul buffer de acces în tabela MTP, în care subregistrul R
conţine adresa tabelei de pagini şi CP cu semnificaţia deja cunoscută.
Pentru fiecare adresă virtuală ai solicitată de programul aflat în execuţie,
procesorul va introduce în registrul de adrese virtuale RV: adresa virtuală a
segmentului (în S), adresa virtuală a paginii în cadrul segmentului (în CP) şi adresa
virtuală a cuvântului în cadrul paginii (în CC). Prin intermediul valorii din S se
caută în tabela MTS dacă se găseşte încărcată în memorie zona având adresa tabelei
de pagini (în R) şi dimensiunea segmentului (exprimată în pagini) în D. Cu
componenta CP de acces RA şi cu R din registrul buffer se extrage din tabela de
pagini MTP cuvântul exprimat prin CP şi R. Cuvântul selectat are q biţi şi reprezintă

50
Sisteme de operare

una din paginile reale din memoria internă, cuvânt care va fi introdus în registrul
adreselor reale RM.

CC bi
RM Q MEMORIA
INTERNA
RV RA
PROCESOR ai MTP
UC CC CP
Buffer
CP R
MTS Canale de
S
D transfer
R D
R Q
Buffer
Acces MEMORIA
pagina EXTERNA
Depasire Acces
segment segment

Rezident DISPOZITIV DE
TRANSLATARE

Figura 23. Organizarea la nivel segment-pagina

Se vor întâlni următoarele situaţii:


• dacă adresa virtuală a segmentului (cunoscută în S) nu se găseşte în
nici o intrare în MTS, atunci înseamnă că segmentul virtual solicitat nu se află în
memoria internă, sunt declanşaţi algoritmii de transfer, plasare şi reamplasare în
memoria internă ai segmentului solicitat, actualizându-se tabela de segmente şi
punându-se REZIDENT pe valoarea 1;
• dacă valoarea adresei virtuale a paginii în segment (aflat în CP) este
mai mare decât dimensiunea segmentului (exprimată în număr de pagini) din
registrul D, atunci există o depăşire semnalizată prin punerea pe 1 a valorii din
registrul DEPĂŞIRE SEGMENT;
• după găsirea segmentului se trece la determinarea paginii prin
intermediul tabelei MTS.

5.3. Gestiunea dispozitivelor periferice


51
Sisteme de operare

Dispozitivele periferice reprezintă o importantă resursă hardware, resursă care


este gestionată tot de sistemul de operare. Problematica ridicată de gestionarea
dispozitivelor periferice care bineînţeles trebuie privită prin prisma unei diversităţi
tipo-funcţionale, diverselor viteze de acces şi diverselor tipuri de transfer a datelor.
Există în general, adaptoare, controlere sau interfeţe hardware specifice fiecărui tip
de dispozitiv periferic (DP) în parte. Totuşi, se pot găsi o multitudine de elemente
comune caracteristice dispozitivelor periferice.
A. Unităţi de control ale dispozitivelor periferice - UCDP
UCDP-urile sunt prevăzute cu circuite integrate specializate (micropro-
cesoare specializate pe operaţii de intrare/ieşire, numite microcontrolere) care sunt
destinate controlului automat al citirii, respectiv scrierii, pe mediile fizice de stocare
a datelor.
UCDP-urile îndeplinesc următoarele funcţii:
• recunoaşterea adreselor fizice ale perifericelor pe care le
controlează;
• conversia comenzilor primite, de la unitatea de canal, în
semnale electronice acceptate de mecatronica perifericului coman-
dat;
• transmiterea către canal a semnalelor electronice standard,
privind evoluţia operaţiilor de intrare/ieşire lansate;
• efectuarea controalelor (în general de paritate) asupra datelor
transmise şi a informaţiilor de control care însoţesc transferul de
date;
• urmărirea îndeplinirii condiţiilor de execuţie a comenzii;
• generarea informaţiilor de stare ale dispozitivelor periferice şi ale
unităţilor de control, atât la iniţierea cât şi la terminarea transferului
de date;
• conversia formatului datelor din codul perifericului comandat în
codul acceptat de unitatea centrală de prelucrare şi invers.
Reţinem că există UCDP-uri care asigură conectarea la canal a unui singur
periferic sau a mai multor dispozitive periferice (de acelaşi tip, sau de tipuri diferite). În
cazul UCDP-urilor care conectează mai multe dispozitive periferice, numărul
acestora este limitat de debitul de transfer al canalului şi numărului de periferice
admis de UCDP-ul în cauză.

B. Canale de transfer
52
Sisteme de operare

Transferul de informaţii între memoria internă şi dispozitivele periferice se


poate realiza în următoarele două moduri:
• continuu, când un dispozitiv periferic se conectează logic la canalul
de transfer şi rămâne conectat la acesta până termină operaţia de
transfer de date (scriere sau citire), fără a permite altui periferic să
mai comunice cu canalul până la terminarea operaţiei respective de
intrare/ieşire;
• multiplex, când mai multe dispozitive periferice vor transmite
simultan prin canal, respectând anumite reguli impuse de
multiplexorul electronic implementat.
Canalele de transfer asigură dirijarea fluxului de date şi de informaţii între
memoria internă şi dispozitivele periferice, eliberând unitatea centrală de procesore a
calculatorului de sarcina tratării operaţiilor de intrare/ieşire. De aceea, în momentul în
care UC-ul ajunge să decodifice o instrucţiune care cere efectuarea unei operaţii de
intrare/ieşire, unitatea de procesare transmite o comandă UCDP-ului care
gestionează perifericul implicat, pentru a deservi el operaţia (timp în care UC-ul
"şomează", sau execută o altă secvenţă de program).
Canalele de transfer execută următoarele funcţii:
• transformarea comenzii primite de la UC în semnale acceptate
de UCDP-ul perifericului în cauză;
• eliberarea UC-ului şi preluarea controlului în totalitate de UCDP
pentru transferul de date;
• dezansamblarea sau ansamblarea datelor transferate între dispoziti-
vele periferice şi memoria internă;
• asigurarea sincronizării transferului de date cu activitatea UC-ului;
• controlul adresei sursă sau destinaţie (adresă de memorie internă)
inclusiv verificarea protecţiei de memorie;
• generarea şi gestionarea informaţiei de stare a canalului, care repre-
zintă "fotografia" dinamică a evoluţiei canalului, pe care o pune la
dispoziţia UC-ului.
C. Descrierea desfăşurării proceselor de intrare/ieşire
Orice operaţie de intrare/ieşire este iniţiată de UC prin execuţia unei
instrucţiuni care specifică canalul, adresa dispozitivului periferic şi adresa de
memorie internă la care, sau de la care, se face transferul de date. Comunicarea
dintre canalul de intrare/ieşire şi UC se realizează, în general, prin intermediul
întreruperilor. Unitatea centrală UC şi canalele de intrare/ieşire sunt în general,
proiectate pentru a opera în mod concurent dar ierarhizat (vezi fig. 24).

53
Sisteme de operare

Modurile de organizare a sistemelor de intrare/ieşire sunt:


• un canal de intrare/ieşire poate fi partajat de două UC-uri folosind un
controler unic pentru canalul de intrare/ieşire, în cazul sistemelor de
calcul exploatate în multiprelucrare;
• o unitate de control UCDP partajează mai multe canale, este cazul în care
acelaşi dispozitiv de intrare/ieşire este conectat la mai multe căi de acces, iar
două UC-uri partajează aceeaşi unitate de control;
• DP-ul poate fi partajat între mai multe UCDP-uri ataşate la diferite
canale ale aceluiaşi UC sau mai multe UC-uri, ca în fig. 2.5.

D. Gestiunea dispozitivelor periferice de către sistemul de operare

Pentru a degreva utilizatorii de scrierea programelor de canal pentru


operaţiile de intrare/ieşire, sistemele de operare dispun de programe specializate
pentru controloarele de intrare/ieşire.
Funcţiile care trebuie să le asigure gestiunea dispozitivelor periferice sunt:
• alocarea dispozitivului periferic, a unităţii sale de control şi a
canalului pentru procesul de intrare/ieşire;
• dezalocarea dispozitivului la terminarea operaţiei de intrare/ieşire;
• evidenţa stării tuturor DP-urilor prin blocuri de control asociate
fiecărui dispozitiv periferic (DP);
• decide cu privire la care, cât timp şi modul de acordare al
dispozitivului periferic.

54
Sisteme de operare

Gestriunea DP prin metode hardware: operarea independentă a


dispozitivului periferic, existenţa unui buffer proproiu în DP, căi multiple de acces la
DP şi multiplexarea canalului de transfer a datelor.
Sistemul de operare realizează gestiunea dispozitivelor periferice prin
următoarele module specializate:
• planificatorul de intrare/ieşire (input/output Scheduller) implementează
algoritmul strategic pentru alocarea canalului, unităţii de control UCDP şi a
dispozitivelor periferice propriu-zise;
• planificatorul de intrare/ieşire este similar cu planificatorul proceselor în sensul
că o operaţie de intrare/ieşire odată lansată în execuţie nu poate fi întreruptă
înainte de execuţia ei completă;
• controlerul traficului de intrare/ieşire (input/output Traffic Controller) are
menirea de evidenţia informaţiile de stare ale fiecărui dispozitiv periferic, prin
construirea unei tabele ce conţine un bloc de control pentru fiecare dispozitiv
periferic;
• manipulatorul dispozitivelor de intrare/ieşire (input/output Device Handler)
are rolul de a crea programul de canal, executând fizic operaţia de intrare/ieşire.
Există sisteme în care dispozitivele periferice se utilizează partajat "Shared
Devices". Această partajare impune:
• protecţia împotriva acceselor neaturizate;
• interfaţarea cererilor din partea proceselor;
• utilizarea sistemului Spooling pentru gestiunea perifericelor virtuale.

55
Sisteme de operare

6. SISTEMUL DE OPERARE DOS

A. Interfaţa UTILIZATOR - MS-DOS

Sistemul de operare MS-DOS este un sistem care lucrează în regim mono-


user (monoutilizator) şi mono programare. Interfaţa acestui sistem de operare este
adaptată regimului de lucru prezentat la paragraful 4.1, fiind o interfaţă simplă de tip
text. Utilizatorul introduce o comandă (cu eventuali parametrii) pe care sistemul de
operare (prin intermediul interpretatorului de comenzi) o preia, o analizează din punct
de vedere sintactic şi semantic, iar dacă totul este corect execută comanda. Orice
eroare existentă în sintaxa comenzii este semnalată printr-un mesaj de eroare.
Utilizatorul introduce secvenţial comenzi pe care sistemul de operare le execută. In
cazul când comenzile sunt introduse printr-un fişier, numit fişier de comenzi, ele se pot
executa în mod automat prin simpla invocare a numelui de fişier. Astfel de fişiere de
comenzi trebuie să aibe obligatoriu extensia .bat. Programele executabile sunt de
format binar având extensiile .exe sau .com. Lansarea în execuţie a unui fişier
executabil (program) se face prin simpla invocare a numelui fişierului, fără a fi
obligatorie precizarea extensiei. Orice program executabil este privit ca o comandă
externă (comandă care se află pe suport magnetic în memoria externă). Dacă în acelaşi
director se află trei fişiere care au numele nume.bat, nume.exe şi nume.com, şi
dacă se introduce prin tastare numai nume, atunci ordinea în care se face execuţia
este .com, exe şi .bat.

B. Conceptul de întrerupere

Unitatea centrală de prelucrare asigură următoarele funcţii, în procesul de


execuţie a unui program:
• generarea comenzilor electronice necesare execuţiei unei instrucţiuni;
• evidenţa şi execuţia înlănţuirii automate a instrucţiunilor;
• evidenţa evoluţiei stării de execuţie a instrucţiunilor printr-un
mecansim de evidenţiere stare-program.
Evidenţa evoluţiei stării de execuţie a instrucţiunilor se poate realiza în două moduri:
• prin memorarea dinamică a informaţiilor de stare a execuţiei instrucţiunii, în
cuvântul stare-program;
• prin sistemul de întreruperi.
Din punct de vedere funcţional UC-ul se poate afla într-una din următoarele
două stări funcţionale majore:
• operaţională - atunci când execută secvenţele de instrucţiuni în
favoarea unui program, sau ale unei rutine a sistemului de operare;
56
Sisteme de operare

• neoperatională - în situaţie de defect sau scos de sub tensiune.

Starea operaţională se manifestă prin următoarele substări generate de


procesele la care participă:
• starea activă;
• starea în aşteptare;
• starea întreruptibilă (stare în care procesul poate fi întrerupt);
• starea neîntreruptibilă (stare mascată special pentru a nu fi întrerupt
procesul);
• starea sistem (în care controlul este deţinut de sistemul de operare);
• starea utilizator (în care controlul este deţinut de programul utilizator).
Cuvântul stare-program are o evoluţie dinamică şi arată în orice
moment funcţionarea Unităţii Centrale (UC).
Acest cuvânt este memorat într-un registru al UC-ului numit registrul stare-
program. În cazul cel mai general, registrul stare-program ar trebui să conţină
următoarele informaţii:
• informaţii despre modul în care s-a încheiat execuţia instrucţiunii
precedente, ele reflectându-se în indicatorii de condiţie;
• măştile de întreruperi (pentru mascarea întreruperilor neîntre-
ruptibile);
• starea unităţii centrale;
• nivelul de prioritate aflat în execuţie;
• cheia de acces asociată zonei de memorie ocupată de program;
• adresa următoarei instrucţiuni ce urmează a fi executată.
În starea operaţională UC comută între substări prin întreruperi. În
cazul multiprogramării întreruperile au un rol esenţial pentru comutarea
controlului de la un program la altul.

Fig. 26. Tratarea întreruperilor

Există două niveluri de procesare a întreruperilor: hardware şi software.


Din punct de vedere hardware întreruperile sunt procesate de o componentă a UC-
ului care crează un şir de aşteptare (întreruperi în aşteptarea tratării), iar din
punct de vedere software întreruperile sunt procesate de rutinele de tratare a
întreruperilor (specifice fiecărei întreruperi), rutine care aparţin sistemului de
operare.
Întreruperile sunt de două tipuri: interne şi externe. Întreruperile pot fi generate
de:

57
Sisteme de operare

• programul aflat în execuţie, printr-o instrucţiune specială de


generare a unei întreruperi (de un anumit nivel);
• o interfaţă de dispozitiv periferic care semnalează terminarea
unei operaţii de intrare/ieşire sau apariţia unei erori de transfer cu
perifericul;
• alte sisteme şi echipamente de calcul cu care este cuplat sistemul de
calcul.
Procesarea unei întreruperi se face în următoarele etape:
• la apariţia cererii de întrerupere, ea va fi luată în considerare dacă are cea
mai mare prioritate din şirul de aşteptare;
• analizarea tipului întreruperii şi salvarea cuvântului stare-program al
programului curent într-o zonă prestabilită din memoria internă;
• lansarea în execuţie a rutinei de tratare a întreruperii prin încărcarea
cuvântului stare-program a rutinei;
• execuţia rutinei de tratare a întreruperii;
• relansarea în execuţie a programului întrerupt, prin reîncărcarea
cuvântului stare-program salvat anterior în memorie.
Prezentăm câteva macrouri pentru apelarea unor întreruperi:
1. Întreruperea 25H
; Citire sectoare de la adresa absoluta disc
ABS_DISK_READ macro disk,buffer,num_sectors,first_sector
mov al,disk
mov bx,offset buffer
mov cx,num_sectors
mov dx,first_sector
int 25H
popf
endm

2. Întreruperea 26H
; Scriere sectoare la adresa absoluta disc
ABS_DISK_WRITE macro disk,buffer,num_sectors,first_sector
mov al,disk
mov bx,offset buffer
mov cx,num_sectors
mov dx,first_sector
int 26H
popf
endm

58
Sisteme de operare

0
Tabela vectorului de întreruperi
Zona de informaii BIO/DOS
- punere sub tensiune BOOT _.................... 
- buton RESET de pe panou - verificexisten a pe HD a lui IBMBIO i IBMDOS
- tastatur [CTRL+ALT+DEL] - dacexistle încarcîn zona IBMBIO  i IBMDOS
- dcontrolul execu iei la IBMBIO
IBMBIO.COM
- iniializri interne, stiv , buffere disc ...
- încarcdriverele instalabile 
- încarcCOMMAND.COM
- dcontrolul COMMAND.COM - ului

Mesaje de IBMDOS.COM
ini
ializare

C:\> ...
Drivere instalabile
Partea rezident a COMMAND.COM - ului
11 - citirea i execu ia fiierului AUTOEXEC.BAT;
- garnisire memorie video;
- afi are prompter (a teaptcomenzi DOS)
BOOT
!!!- A TEPTARE C OMENZI MONITOR
FAT (iniializare sistem terminat
)
ROOT
PSP 20 ÷
Fi
ierul sistem
IBMBIO.COM 30 K
Zonutilizator
Fi
ierul sistem
IBMDOS.COM
Fiierul sistem Zona tranzitorie a COMMAND.COM -ului 640 K
COMMAND.COM
A Extensie memorie video
Fiierul utilizator 1 B Memoria video
2 C
Extensie ROM hard-disc
Rutina de R/W pe hard-disc - 
3 - citire HD
- scriere în MEM 
4 - RETUR
5
D
6
E
Programe sistem(ROM)
F Rutina de ini
ializare- 
 - Adr.HD Adr.MEM (BIO/DOS)
HD - CALL Rut.R/W
 - JMP BIO/DOS JMP 1M
16 M
P Executinstruc
iunea de la adresa (FFFF0)H 
RESET
(caracteristica familiei de  P)

Figura . Încrcarea sistemului de operare DOS
59
Sisteme de operare

; Macrodefiniii pentru apelul funciilor MS-DOS


;
;*******************
; Intreruperi
;*******************

; INTRERUPEREA 25H
; Citire sectoare de la adresa absoluta disc
ABS_DISK_READ macro
disk,buffer,num_sectors,first_sector
mov al,disk
mov bx,offset buffer
mov cx,num_sectors
mov dx,first_sector
int 25h
popf
endm

; INTRERUPEREA 26H
; Scriere sectoare la adresa absoluta disc
ABS_DISK_WRITE macro
disk,buffer,num_sectors,first_sector
mov al,disk
mov bx,offset buffer
mov cx,num_sectors
mov dx,first_sector
int 26h
popf
endm

; INTRERUPEREA 27H
; Retinere in statut de rezident
STAY_RESIDENT macro last_instruc
mov dx,offset last_instruc
inc dx
int 27h
endm

;
;
;********************************** *****

60
Sisteme de operare

; Apelarea functiilor MS_DOS


;********************************** *****

; APELAREA FUNCTIEI 00H


; Terminarea programului
TERMINATE_PROGRAM macro
xor ah,ah
int 21h
endm

; APELAREA FUNCTIEI 01H


; Citire cu ecou de la tastatura, daca se detecteaza CTRL+BREAK
sau
; CTRL+C se genereaza intreruperea
; INT 23h. In AL se returneaza caracterul citit.
READ_KBD_AND_ECHO macro
mov ah,01h
int 21h
endm

; APELAREA FUNCTIEI 02H


; Afisarea unui caracter pe monitor
DISPLAY_CHAR macro character
mov dl,character
mov ah,02h
int 21h
endm

; APELAREA FUNCTIEI 03H


; Asteapta introducerea unui caracter de la
; dispozitivul standard auxiliar (AUX = COM1).
; La initializarea ; sistemului DOS avem: v=2400
; bauds, fara bit de paritate,
; un bit de stop, 8 biti de date; daca se detecteaza
; CTRL+BREAK sau CTRL+C se genereaza intreruperea
; INT 23h. In AL se returneaza caracterul citit.
AUX_INPUT macro
mov ah,03h
int 21h
endm

; APELAREA FUNCTIEI 04H


; Iesire auxiliara, se transmite caracterul aflat in registrul
DL la AUX=COM1
; daca se detecteaza CTRL+BREAK
61
Sisteme de operare

; sau CTRL+C se genereaza intreruperea INT 23h.


AUX_OUTPUT macro
mov ah,04h
int 21h
endm

; APELAREA FUNCTIEI 05H


; Tiparirea unui caracter, al carui cod ASCII se
; afla in registrul DL, la LPT1.
; Daca se detecteaza CTRL+BREAK
; sau CTRL+C, se genereaza intreruperea INT 23h.
PRINT_CHAR macro character
mov dl,character
mov ah,05h
int 21h
endm

; APELAREA FUNCTIEI 06H


; Intrare/iesire directa la consola fara ecou.
; Daca registrul DL contine FFh, atunci se citeste un
; caracter de la
; consola in registrul AL (ZF=0), sau nimic (ZF=1).
; Daca in registrul DL se incarca un caracter ASCII el
; este direct afisat pe ecran.
DIR_CONSOLE_IO macro switch
mov dl,switch
mov ah,06h
int 21h
endm

; APELAREA FUNCTIEI 07H


; Citire directa fara ecou de la consola, in registrul AL.
; Nu verifica aparitia CTRL+BREAK sau CTRL+C.
DIR_CONSOLE_INPUT macro
mov ah,07h
int 21h
endm

; APELAREA FUNCTIEI 08H


; Citire directa fara ecou de la consola, in registrul AL.
; Aceasta functie verifica aparitia CTRL+BREAK sau
; CTRL+C la intrare si genereaza INT 23h.
READ_KBD macro
mov ah,08h
int 21h

62
Sisteme de operare

endm

; APELAREA FUNCTIEI 09H


; Afiseaza un sir terminat prin $ ($ nu se afiseaza,
; numai 40h afiseaza si $) pe ecranul sistemului. In DS:DX se
; da sirul de afisat.
DISPLAY macro string
mov dx,offset string
mov ah,09h
int 21h
endm

; APELAREA FUNCTIEI 0AH


; Citeste de la tastatura (cu ecou) un sir de caractere
; pana la intalnirea caracterului CR. Sirul (inclusiv CR)
; este citit si memorat incepand de la deplasamentul 2
; (octetul 3) al zonei tampon definite de utilizator.
; Adresa zonei tampon se da in DS:DX.
; Daca se detecteaza CTRL+BREAK sau CTRL+C se genereaza
; INT 23h. Se citesc maxin 255 caractere inclusiv CR.
GET_STRING macro limit,string
mov dx,offset string
mov string,limit
mov ah,0Ah
int 21h
endm

; APELAREA FUNCTIEI 0BH


; Verifica daca exista un caracter pregatit la intrarea
; standard. Daca se detecteaza CTRL+BREAK sau CTRL+C
; se genereaza INT 23h. Functia returneaza FFh in AL
; daca exista un caracter pregatit, in caz contrar returneaza
; 0. Se recomanda folosirea acestei functii inainte de
; functiile 01h, 07h si 08h.
CHECK_KBD_STATUS macro
mov ah,0BH
int 21H
endm

; APELAREA FUNCTIEI 0CH


; Sterge toate caracterele din zona tampon de intrare si
; apeleaza functia DOS specificata in AL. AL se poate
; incarca cu valorile 01h, 06h, 07h, 08h sau 0Ah. Orice
; alta valoare duce doar la stergerea zonei tampon de
; intrare.

63
Sisteme de operare

FLUSH_AND_READ_KBD macro switch


mov al,switch
mov ah,0Ch
int 21h
endm

; APELAREA FUNCTIEI 0DH


; Resetarea discului. Goleste toate zonele tampon de fisiere,
; fara a inchide fisierele. Toate zonele tampon
; modificate sunt scrise si toate zonele tampon ale memoriei
; CACHE sunt marcate ca fiind libere (le elibereaza).
; Aceasta functie se poate utiliza pentru
; tratarea lui CTRL+BREAK.
RESET_DISK macro
mov ah,0Dh
int 21h
endm

; APELAREA FUNCTIEI 0EH


; Selectarea unitatii de disc implicite prin specificarea ei
; in registrul DL (0=A, 1=B, ...), ca fiind unitate logica
; curenta.
SELECT_DISK macro disk
mov dl,disk[-65]
mov ah,0Eh
int 21h
endm

; APELAREA FUNCTIEI 0FH


; Deschiderea unui fisier, utilizand FCB (File Control
; Block). DS:DX trebuie sa contina un pointer la un FCB
; nedeschis. Functia returneaza in AL, 0h daca s-a gasit
; fisierul sau FFh daca nu s_a gasit.
OPEN macro fcb
mov dx,offset fcb
mov ah,0Fh
int 21h
endm

; APELAREA FUNCTIEI 10H


; Inchiderea unui fisier utilizand FCB. In intrare se incarca
; in DS:DX pointerul la FCB_ul deschis. Functia
; returneaza valoarea 0 in AL, daca s_a gasit o intrare in
; directorul specificat, sau valoarea FFh in AL daca nu
; s_a gasit fisierul.

64
Sisteme de operare

CLOSE macro fcb


mov dx,offset fcb
mov ah,10h
int 21h
endm

; APELAREA FUNCTIEI 11H


; Cauta in directorul curent primul fisier al carui nume se
; potriveste cu cel specificat in FCB. In intrare se incarca
; DS:DX cu un pointer la FCB-ul nedeschis. Numele fisierului
; din FCB poate contine caracterele "?" sau "*".
; Pentru fisierele ascunse sau sistem, DX obligatoriu trebuie
; sa pointeze primul octet al FCB-ului extins
; (deplasament -07h). AL contine valoarea 0 daca s-a gasit o
; intrare in director pentru fisierul specificat, sau
; valoarea FFh daca nu s-a gasit un astfel de fisier. Daca
; s-a gasit intrarea pentru numele de fisier din FCB, se
; creeaza un FCB nedeschis de acelasi tip la adresa DTA (Disk
; Transfer Address) curenta.
SEARCH_FIRST macro fcb
mov dx,offset fcb
mov ah,11h
int 21h
endm

; APELAREA FUNCTIEI 12H


; Cauta in directorul curent urmatorul fisier al carui nume
; se potriveste cu cel specificat in FCB. In intrare se
; incarca DS:DX cu un pointer la FCB-ul nedeschis. Numele
; fisierului din FCB poate contine caracterele "?" sau
; "*". Pentru fisierele ascunse sau sistem, DX obligatoriu
; trebuie sa pointeze primul octet al FCB-ului extins
; (deplasament -07h). AL contine valoarea 0 daca s-a gasit o
; intrare in director pentru fisierul specificat, sau
; valoarea FFh daca nu s-a gasit un astfel de fisier.
SEARCH_NEXT macro fcb
mov dx,offset fcb
mov ah,12h
int 21h
endm

; APELAREA FUNCTIEI 13H


; Sterge din directorul curent fisierul al carui nume se
; potriveste cu cel specificat in FCB. In intrare se incarca
; DS:DX cu un pointer la FCB-ul nedeschis. Numele fisierului

65
Sisteme de operare

; din FCB poate contine caracterul "?" . AL contine


; valoarea 0 daca s-a gasit o intrare in director pentru
; fisierul specificat, sau valoarea FFh daca nu s-a gasit un
; astfel de fisier. Inainte de stergere fisierele
; trebuie inchise.
DELETE macro fcb
mov dx,offset fcb
mov ah,13h
int 21h
endm

; APELAREA FUNCTIEI 14H


; Citeste secvential un articol din fisier in zona DTA,
; utilizand un FCB pointat de DS:DX. Campul cu
; deplasamentul 0Ch si articolul curent precizat de
; deplasamentul 20h din FCB, sunt incarcate in DTA, dupa care
; cele doua campuri sunt actualizate, in sensul ca sunt
; incrementate. Lungimea articolului se va lua din campul
; de dimensiune a articolului din FCB, care are deplasamentul
; 0Eh. Se returneaza in AL valorile:
; 00h - pentru citire cu succes,
; 01h - pentru citirea unui EOF fara a se citi date,
; 02h - pentru DTA prea mic anulandu-se citirea,
; 03h - pentru citirea unui EOF inaintea citirii unui
; articol intreg, completandu-se articolul cu zerouri.
READ_SEQ macro fcb
mov dx,offset fcb
mov ah,14h
int 21h
endm
; APELAREA FUNCTIEI 15H
; Scrierea secventiala a unui articol in fisier din zona DTA,
; utilizand un FCB pointat de DS:DX. Campul cu
; deplasamentul 0Ch si articolul curent precizat de
; deplasamentul 20h din FCB, sunt incarcate in DTA, dupa
; care cele doua campuri sunt actualizate, in sensul ca sunt
; incrementate. Lungimea articolului se va lua din
; campul de dimensiune a articolului din FCB, care are
; deplasamentul 0Eh. Se returneaza in AL valorile:
; 00h - pentru scriere cu succes,
; 01h - pentru disc plin cu anularea scrierii,
; 02h - pentru DTA prea mic anulandu-se scrierea.
; Este recomandabila punerea pe zero a campului articol
; curent (deplasament 20h in FCB), deoarece functia
; DOS 0Fh nu-l zerorizeaza.
WRITE_SEQ macro fcb
66
Sisteme de operare

mov dx,offset fcb


mov ah,15h
int 21h
endm

; APELAREA FUNCTIEI 16H


; Creaza un fisier utilizand un FCB pointat de DS:DX pe un
; fisier nedeschis. FCB-ul se completeaza ca la
; functia 0Fh. La revenire AL contine valoarea 00h daca
; fisierul a fost creat, sau valoarea FFh daca nu a fost
; creat.
CREATE macro fcb
mov dx,offset fcb
mov ah,16h
int 21h
endm

; APELAREA FUNCTIEI 17H


; Schimba numele unui fisier existent, utilizand FCB pointat
; de DS:DX, care contine numarul unitatii, vechiul
; nume, urmate la deplasamentul 11h de noul nume si noua
; extensie. La revenire, in registrul AL se returneaza
; valoarea 00h pentru redenumire reusita sau FFh daca
; redenumirea este nereusita sau un fisier cu noul nume
; exista deja.
RENAME macro fcb,newname
mov dx,offset fcb
mov ah,17h
int 21H
endm

; APELAREA FUNCTIEI 19H


; Obtinerea unitatii curente implicite. Returneaza in AL
; numarul unitatii implicite cu unu mai mic ca la
; majoritatea functiilor adica: 0=A, 1=B, 2=C, ...
CURRENT_DISK macro
mov ah,19h
int 21H
endm

; APELAREA FUNCTIEI 1AH


; Modificarea adresei zonei de transfer a discului DTA, la
; valoarea avand adresa in DS:DX. La lansarea
; programului in executie, implicit pentru DTA sunt folositi
; 128 de octeti, de la deplasamentul 80h din PSP

67
Sisteme de operare

; (Program Segment Prefix). Spatiul rezervat in mod implicit


; este insuficient, de aceea utilizatorul trebuie sa_si
; rezerve o zona proprie DTA care trebuie modificata cu
; functia 1Ah. Retinem ca toate accesele la fisiere
; utilizand FCB_ul se fac prin DTA, iar functiile de
; cautare 11h, 12h, 4Eh si 4Fh isi plaseaza datele in DTA.
SET_DTA macro buffer
mov dx,offset buffer
mov ah,1Ah
int 21H
endm

; APELAREA FUNCTIEI 1BH


; Aflarea informatiilor FAT (File Allocation Table) pentru
; unitatea curenta. Functia returneaza in AL numarul de
; sectoare pe cluster, in CX numarul de octeti pe sector, in
; DX numarul de cluster_e pe unitate, in DS:BX
; returneaza pointer_ul la octetul de identificare FAT, care
; identifica de fapt tipul unitatii.
DEF_DRIVE_DATA macro
mov ah,1Bh
int 21h
endm

; APELAREA FUNCTIEI 1CH


; Aflarea informatiilor FAT pentru unitatea specificata.
; Functia returneaza in AL numarul de sectoare pe cluster,
; in CX numarul de octeti pe sector, in DX numarul de
; cluster_e pe unitate, in DS:BX returneaza pointer_ul la
; octetul de identificare FAT, care identifica de fapt
; tipul unitatii.
DRIVE_DATA macro drive
mov dl,drive
mov ah,1Ch
int 21h
endm

; APELAREA FUNCTIEI 21H


; Citirerea in acces direct a unui articol dintr_un fisier.
; Citirea se face in zona de memorie a DTA_ului curent,
; DS:DX fiind incarcat cu un pointer la FCB_ul deja deschis.
; Articolul se va citi la adresa specificata la
; deplasamentul 21h din FCB, iar dimensiunea se afla la
; deplasamentul 0Eh din FCB. Functia returneaza in AL

68
Sisteme de operare

; valorile:
; 00h - pentru citire cu succes,
; 01h - in cazul citirii unui EOF fara a se citi date,
; 02h - pentru DTA prea mic si anularea citirii,
; 03h - pentru gasirea unui EOF inaintea citirii unui
; articol intreg.
READ_RAN macro fcb
mov dx,offset fcb
mov ah,21h
int 21h
endm

; APELAREA FUNCTIEI 22H


; Scrierea in acces direct, de la adresa DTA, intr_un fisier
; utilizand un FCB deschis a carui adresa este este data
; de DS:DX. Articolul scris este specificat la deplasamentul
; 21h din FCB iar dimensiunea articolului la
; deplasamentul 0Eh din FCB. Functia returneaza in
; AL valorile:
; 00h - pentru scriere incheiata cu succes,
; 01h - pentru disc plin,
; 02h - nu este nici un articol de scris in
; DTA, scriere abandonata.
WRITE_RAN macro fcb
mov dx,offset fcb
mov ah,22h
int 21h
endm

; APELAREA FUNCTIEI 23H


; Ontinerea dimensiunilor unui fisier, utilizand FCB
; nedeschis specificat prin DS:DX. Dimensiunea fisierului
; exprimata in numar de articole (cu rotunjire superioara) se
; precizeaza la deplasamentul 21h din FCB. In AL se
; returneaza valoarea:
; 00h - daca s_a gasit fisierul specificat, sau
; FFh - daca fisierul este inexistent.
FILE_SIZE macro fcb
mov dx,offset fcb
mov ah,23h
int 21h
endm

; APELAREA FUNCTIEI 24H


; Pozitionarea campului "Articol in acces direct" de la

69
Sisteme de operare

; deplasamentul 21h din FCB deschis al carui adresa este


; data de DS:DX.
SET_RELATIVE_RECORD macro fcb
mov dx,offset fcb
mov ah,24h
int 21h
endm

; APELAREA FUNCTIEI 25H


; Pozitioneaza adresa unei intreruperi in tabela vectorilor
; de intrerupere. In AL se incarca numarul intreruperii,
; iar DS:DX este incarcat cu un pointer la rutina utilizator
; de tratare a intreruperii. Se recomanda salvarea inainte
; de apel a vectorului de intrerupere, folosind functia 35h,
; astfel incat programul sa poata reincarca la iesirea din
; rutina utilizator, adresa rutinei originale a vectorului
; de intreruperi.
SET_VECTOR macro interrupt,handler_start
mov al,interrupt
mov dx,offset handler_start
mov ah,25h
int 21h
endm

; APELAREA FUNCTIEI 26H


; Crearea unui nou PSP in programul utilizator. PSP_ul
; current avand dimensiunea de 256 octeti este copiat la
; adresa DX:0000, iar noul PSP va fi actualizat, in sensul
; ca adresele rutinelor de tratare a intreruperilor INT
; 22h, INT 23h si INT 24h sunt plasate in PSP si este
; actualizata si locatia 06h din noul PSP cu informatii
; despre memorie. La intrare DX trebuie incarcat cu adresa
; segmentului ce contine noul PSP.
CREATE_PSP macro seg_addr
mov dx,offset seg_addr
mov ah,26h
int 21h
endm

; APELAREA FUNCTIEI 27H


; Citeste unul sau mai multe articole dintr_un fisier, in
; memorie la adresa DTA curenta, utilizand un FCB al carui
; adresa este precizata de DS:DX, iar in CX se va preciza
; numarul de articole de citit. Citirea incepe de la
; articolul specificat la deplasamentul 21h din FCB. Pentru

70
Sisteme de operare

; calcularea numarului de octeti de citit, se inmulteste


; dimensiunea articolului aflat la deplasamentul 0Eh din
; FCB, cu valoarea specificata in CX. Functia returneaza
; in registrul AL urmatoarele velori:
; 00h _ pentru citire cu succes,
; 01h _ pentru EOF gasit fara citire de date,
; 02h _ pentru DTA prea mic si anularea citirii,
; 03h _ pentru citirea unui EOF inaintea unui articol
; intreg, care va fi completat cu zerouri.
; In registrul CX se returneaza numarul de articole citite.
RAN_BLOCK_READ macro fcb,count,rec_size
mov dx,offset fcb
mov cx,count
mov word ptr fcb[14],rec_size
mov ah,27h
int 21h
endm

; APELAREA FUNCTIEI 28H


; Scrie unul sau mai multe articole intr_un fisier, din
; memoria la adresa DTA curenta, utilizand un FCB al carui
; adresa este precizata de DS:DX, iar in CX se va preciza
; numarul de articole de scris, scrierea se face de la
; articolul specificat la deplasamentul 21h din FCB. Pentru
; calcularea numarului de octeti de scris, se inmulteste
; dimensiunea articolului aflat la deplasamentul 0Eh din
; FCB, cu valoarea specificata in CX. Functia returneaza
; in registrul AL urmatoarele velori:
; 00h _ pentru scriere cu succes,
; 01h _ pentru EOF scris.
; In registrul CX se returneaza numarul de articole scrise.
RAN_BLOCK_WRITE macro fcb,count,rec_size
mov dx,offset fcb
mov cx,count
mov word ptr fcb[14],rec_size
mov ah,28h
int 21h
endm

; APELAREA FUNCTIEI 29H


; Analizeaza un sir de caractere al carui deplasament fata de
; adresa segment specificata in DS, se afla in
; registrul SI. Daca sirul specifica un nume de fisier (cu
; eventuala extensie), atunci va fi creat un FCB nedeschis,
; intr_o zona de memorie avand deplasamentul fata de adresa
71
Sisteme de operare

; ES:DI. Tot aceasta functie mai permite


; selectarea unui dispozitiv. La intrare se perecizeaza in AL
; bitii de control care au semnificatia:
; -bitul 0: 0 - se opreste analiza la intalnirea unui
; separator de fisier,
; 1 - se ignora separatorii,
; -bitul 1: 0 - pozitioneaza la 0 numarul dispozitivului,
; 1 - lasa neschimbat numarul dispozitivului,
; -bitul 2: 0 - pozitioneaza numele fisierului pe 8 spatii,
; 1 - lasa neschimbat numele fisierului,
; -bitul 3: 0 - pozitioneaza extensia pe trei spatii,
; 1 - lasa neschimbata extensia.
; In DS:SI se da un pointer la sirul de analizat. Functia
returneaza in registrul AL: 00h _ pentru succes fara
; intalnirea caracterelor "*" sau "?", 01h _ pentru succes si
; intalnirea caracterelor "*" sau "?", FFh _ pentru
; insucces. In registrul DS:SI se returneaza un pointer la
; octetul imediat urmator sirului curent analizat, iar in
; ES:DI va contine in caz de succes un pointer la un FCB
; nedeschis si in caz de insucces contine al doilea octet
; de la adresa pointata (adica ES:DI+1).
PARSE macro string,fcb
mov si,offset string
mov di,offset fcb
push es
push ds
pop es
mov al,0Fh
mov ah,29h
int 21h
pop es
endm

; APELAREA FUNCTIEI 2AH


; Asigura returnarea date curente din sistem, inclusiv ziua
; din saptamana. Functia returneaza in AL ziua din
; saptamana astfel: 0=duminica, 1=luni, ... , 6=sambata. In
; registrul CX se da anul curent, a carui valoare este
; cuprinsa intre 1980 si 2098. In registrul DH se da luna
; curenta ca o valoare numerica cuprinsa intre 1 si 12,
; unde 1=Ianuarie, 2=Februarie, ... , 12=Decembrie. In
; registrul DL se da ziua curenta care are valori numerice
; cuprinse intre 1 si 31.
GET_DATE macro
mov ah,2Ah
int 21h
72
Sisteme de operare

endm

; APELAREA FUNCTIEI 2BH


; Setarea datei curente a sistemului. Pentru apelarea
; functiei se incarca in registrul CX anul curent, al carui
; valoare este cuprinsa intre 1980 si 2098. In registrul DH
; se introduce luna curenta ca o valoare numerica
; cuprinsa intre 1 si 12, unde 1=Ianuarie, 2=Februarie, ... ,
; 12=Decembrie. In registrul DL se introduce ziua
; curenta care are valori numerice cuprinse intre 1 si 31.
; Functia returneaza in AH valoarea 00h daca s-a
; specificat o data valida si valoarea FFh daca s-a
; specificat o data invalida, abandonandu_se setarea.
SET_DATE macro year,month,day
mov cx,year
mov dh,month
mov dl,day
mov ah,2Bh
int 21h
endm

; APELAREA FUNCTIEI 2CH


; Returneaza ora curenta a sistemului de calcul. Functia
; returneaza in registrul CH ora curenta printr_o valoare
; numerica cuprinsa intre 0 si 23. In registrul CL se
; returneaza minutul curent printr-o val. numerica cuprinsa
; intre 0 si 59. In registrul DH se returneaza secunda
; curenta printr-o valoare cuprinsa intre 0 si 59, iar in
; DL se returneaza sutimile de secunda printr-o valoare
; cuprinsa intre 0 si 99.
GET_TIME macro
mov ah,2Ch
int 21h
endm

; APELAREA FUNCTIEI 2DH


; Seteaza ora curenta a sistemului de calcul. Functia are
; nevoie in registrul CH de ora curenta, specificata
; printr_o valoare numerica cuprinsa intre 0 si 23, iar in
; registrul CL de minutul curent specificat printr_o valoare
; numerica cuprinsa intre 0 si 59, in registrul DH de secunda
; curenta specificata printr_o valoare cuprinsa intre
; 0 si 59, iar in registrul DL se specifica sutimele de
; secunda printr_o valoare cuprinsa intre 0 si 99. Functia
; returneaza in AH valoarea 00h daca s_a specificat o ora

73
Sisteme de operare

; valida si valoarea FFh daca s_a specificat o ora


; invalida, abandonandu_se setarea.
SET_TIME macro hour,minutes,seconds,hundredths
mov ch,hour
mov cl,minutes
mov dh,seconds
mov dl,hundredths
mov ah,2Dh
int 21h
endm

; APELAREA FUNCTIEI 2EH


; Verifica prin citire inapoi, fiecare sector, dupa ce a fost
; scris. Registrul AL este incarcat valoarea 00h pentru
; setarea VERIFY OFF. Registrul AL este incarcat valoarea 01h
; pentru setarea VERIFY ON, asigurandu_se
; maximum de integritate a datelor prin verificare.
VERIFY macro switch
mov al,switch
mov ah,2Eh
int 21h
endm

; APELAREA FUNCTIEI 2FH


; Asigura obtinerea adresei DTA curenta in ES:BX. Trebuie
; mare atentie deoarece se modifica registrul de
; segment ES.
GET_DTA macro
mov ah,2Fh
int 21h
endm

; APELAREA FUNCTIEI 30H


; Asigura obtinerea versiunii DOS active in momentul
; apelului. Functia returneaza: numarul versiunii de baza in
; registrul AL si numarul versiunii secundare in reg. AH.
GET_VERSION macro
mov ah,30h
int 21h
endm

; APELAREA FUNCTIEI 31H


; Functia realizeaza iesirea (reintoarcerea) in procesul
; parinte, astfel incat programul din care se revine sa
; ramana rezident dupa terminare (TSR). Functia necesita in

74
Sisteme de operare

; intrare, incarcarea unui cod de retur (sau cod de


; eroare) in registrul AL. Registrul DX trebuie incarcat cu
; dimensiunea memoriei rezidente, exprimata in
; paragrafe, fiecare paragraf avand 16 octeti. Functia nu
; inchide fisierele ramase deschise.
KEEP_PROCESS macro return_code,last_byte
mov al,return_code
mov dx,offset last_byte
mov cl,4
shr dx,cl
inc dx
mov ah,31h
int 21h
endm

; APELAREA FUNCTIEI 33H


; Pozitionarea/Obtinerea starii indicatorului CTRL+C sau
; verificarea introducerii caracterelului CTRL+BREAK
; (pentru sistemele compatibile IBM_PC). Atunci cand starea
; este pe OFF, se verifica introducerea caractelelor
; CTRL+C sau CTRL+BREAK doar in timpul operatiilor de
; intrare/iesire de la echipamentul standard de intrare
; (functiile 01h, 02h, ... , 0Ch. La apelul functiei trebuie
; ca registrul AL sa fie incarcat cu valoarea: 00h _ pentru
; obtinerea starii sau 01h _ pentru pozitionarea starii
; iar in acest ultim caz (AL=01h) DL trebuie incarcat cu
; valoarea numerica:
; 00h - pentru setarea pe OFF sau
; 01h - pentru setarea pe ON.
; Functia returneaza in DL valorile:
; 00h - pentru OFF sau
; 01h - pentru ON; si valoarea
; FFh in registrul AL in caz de eroare.
CTRL_C_CK macro action,state
mov al,action
mov dl,state
mov ah,33h
int 21h
endm

; APELAREA FUNCTIEI 35H


; Returnarea din tabela de intreruperi vectorul specificat,
; punandu_se in ES adresa segmentului rutinei de tratare
; a intreruperii, iar in BX deplasamentul acestei rutine.
; La apelarea functiei registrul AL se incarca cu numarul
; intreruperii. Functia returneaza in ES:BX un pointer la
75
Sisteme de operare

; rutina de tratare a intreruperii.


GET_VECTOR macro interrupt
mov al,interrupt
mov ah,35h
int 21h
endm

; APELAREA FUNCTIEI 36H


; Obtinerea spatiului liber pe un disc magnetic, disc
; specificat printr_un numar de unitate incarcat in
; registrul DL.
; Valorile admise pentru numarul de unitate sunt:
; 00h - pentru discul magnetic implicit,
; 01h - pentru discul A,
; 02h - pentru discul B, ...
; Functia returneaza urmatoarele informatii,
; in urmatoarele registre:
; AX - numarul de sectoare pe unitatea de alocare
; (FFFFh - unitate de disc invalida);
; BX - numarul unitatilor de alocare disponibile pe disc;
; CX - numarul de octeti pe sector;
; DX - numarul de unitati de alocare de pe disc.
; Cu aceste informatii utilizatorul poate calcula:
; Spatiul liber in octeti de pe disc = (AX * BX * CX);
; Spatiul total in octeti al discului = (AX * CX * DX).
GET_DISK_SPACE macro drive
mov dl,drive
mov ah,36h
int 21h
endm

; APELAREA FUNCTIEI 37H


; Obtinerea informatiilor dependente de tara, in zona de
; memorie specificata in DS:DX. La apelul functiei in AL
; se incarca urmatoarele valori numerice:
; 00h _ pentru tara curenta
; 01h ... FEh _ pentru codul tarii dorite, sau
; FFh daca codul se va specifica in registrul BX (avand
; valori mai mari de 255). Zona specificata in DS:DX va
; avea maximum 34 octeti, iar DX va fi incarcat cu valoarea
; FFFFh. Functia returneaza in caz de eroare CF=1
; iar in registrul AH se da valoarea 02h pentru cod de tara
; invalid. Daca nu este eroare CF=0 in BX se da codul
; tarii iar in DS:DX se dau informatii dependente de tara.
GET_COUNTRY macro country,buffer
local gc_01
76
Sisteme de operare

mov dx,offset buffer


mov ax,country
cmp ax,0FFH
jl gc_01
mov al,0ffh
mov bx,country
gc_01: mov ah,37h
int 21h
endm

; APELAREA FUNCTIEI 38H


; Pozitionarea informatiilor dependente de tara, dintr-o zona
; de memorie specificata in DS:DX. La apelul functiei
; in AL se incarca urmatoarele valori numerice:
; 00h - pentru tara curenta,
; 01h ... FEh - pentru codul tarii dorite, sau
; FFh daca codul se va specifica in registrul BX (avand
; valori mai mari de 255). Zona specificata in DS:DX
; va avea maximum 34 octeti, iar DX va fi incarcat cu
; valoarea FFFFh. Functia returneaza in caz de eroare
; CF=1 iar in registrul AH se da valoarea 02h pentru cod de
; tara invalid. Daca nu este eroare CF=0 in BX se da
; codul tarii iar in DS:DX se dau informatii
; dependente de tara.
SET_COUNTRY macro country
local sc_01
mov dx,0FFFFH
mov ax,country
cmp ax,0FFH
jl sc_01
mov al,0ffh
mov bx,country
sc_01: mov ah,38h
int 21h
endm

; APELAREA FUNCTIEI 39H


; Crearea unui nou subdirector (MKDIR), prin utilizarea unei
; cai de acces de maximum 64 caractere ASCII, a
; cerei adresa se specifica in DS:DX. La retur, daca CF=1,
; directorul nu s_a creat si se precizeaza un cod de
; eroare in AL cu urmatoarea semnificatie:
; 03h - pentru cazul cand nu s-a gasit calea specificata;
; 05h _ pentru accesul interzis din cauza lipsei de
; spatiu, existentei unui subdirector cu alelasi nume sau
; specificarea unui nume de unitate eronata.
77
Sisteme de operare

MAKE_DIR macro path


mov dx,offset path
mov ah,39h
int 21h
endm

; APELAREA FUNCTIEI 3AH


; Stergerea unui subdirector (RMDIR) prin utilizarea unui sir
; de maximum 64 caractere ASCII aflate la adresa
; DS:DX, care reprezinta calea de acces la subdirectorul
; respectiv. La retur, daca CF=1 s-a depistat o eroare,
; care nu va duce la stergerea subdirectorului ci la
; returnarea in registrul AX a urmatoarelor coduri de eroare:
; 03h - pentru cazul in care nu s-a gasit calea specificata;
; 05h - pentru acces interzis adica directorul nu este gol
; sau calea specificata nu este valida;
; 06h - calea specifica directorul curent.
REM_DIR macro path
mov dx,offset path
mov ah,3Ah
int 21h
endm

; APELAREA FUNCTIEI 3BH


; Schimbarea directorului curent (CHDIR) prin specificarea
; unui sir de maximum 64 caractere ASCII,
; reprezentand calea de acces, sir a carui adresa se da in
; DS:DX. Daca la retur CF=1 atunci s_a produs o eroare
; care este explicitata prin pozitionarea codului de eroare
; 03h in AX si care semnifica faptul ca nu a fost gasita
; calea specificata.
CHANGE_DIR macro path
mov dx,offset path
mov ah,3Bh
int 21h
endm

; APELAREA FUNCTIEI 3CH


; Crearea unui fisier al carui nume se da prin specificarea
; unui sir de caractere ASCII, reprezentand numele si
; calea de acces, sir a carui adresa se da in DS:DX. La
; intrarea in functie utilizatorul trebuie sa specifice in
; registrul CX atributele fisierului ce urmeaza a fi creat
; prin indicarea valorilor:
; 00h _ pentru fisier obisnuit,

78
Sisteme de operare

; 01h _ pentru fisier de tip "read only",


; 02h _ pentru fisier de tip "headen" (ascuns),
; 04h _ pentru fisier de tip "system".
; Daca la retur CF=1 atunci s_a produs o eroare care este
; explicitata prin pozitionarea codului de eroare 03h in
; AX care semnifica negasirea caii ce acces, 04h in cazul
; cand sunt deschise prea multe fisiere si 05h care
; semnifica faptul ca accesul este interzis, adica mai
; exista un fisier cu acelasi nume dar cu atribute mai
; restrictive decat cel specificat.
CREATE_HANDLE macro path,attrib
mov dx,offset path
mov cx,attrib
mov ah,3Ch
int 21h
endm

; APELAREA FUNCTIEI 3DH


; Deschiderea unui fisier al carui nume se da prin
; specificarea unui sir de caractere ASCII, reprezentand
; numele si calea de acces, sir a carui
; adresa se da in DS:DX. La intrarea in functie
; utilizatorul trebuie sa precizeze in AL codul de acces
; la fisierul respectiv, grupat pe biti in felul urmator:
; 7 6 5 4 3 2 1 0
; M P P P R A A A
; unde: M este indicator de mostenire (are valoarea 0
; daca fisierul este mostenit de catre un process
; fiu creat cu functia 4Bh si valoarea 1 in
; caz contrar),
; PPP este un indicator de partajare a fisierului
; intre procese, si are valorile:
; 000 - compatibilitate: pentru deschiderea de
; catre orice proces;
; 001 - interzis orice: pentru esuare in acces R/W
; daca a fost deschis inmod compatibilitate;
; 010 - scriere interzisa: pentru esuare in
; scriere de orice alt proces;
; 011 - citire interzisa: pentru esuare in citire
; de orice alt proces;
; 100 - nimic interzis: pentru esuare in caz ca
; fisierul a fost deschis in mod
; compatibilitate de
; orice alt proces,
; R reprezinta un bit rezervat,
; AAA este un indicator pentru modul de acces:
79
Sisteme de operare

; 000 _ citire permisa;


; 001 _ scriere permisa;
; 010 _ scriere/citire permisa.
; La retur daca CF=0 in AX se returneaza indicatorul logic al
; fisierului, iar daca CF=1 se returneaza in AL codul
; de eroare:
; 01h - pentru numar de functie invalid,
; 02h - daca nu s_a gasit fisierul,
; 03h - daca nu s_a gasit calea,
; 04h - daca sunt prea multe fisiere deschise,
; 05h - pentru acces interzis si
; 0Ch - pentru mod de deschidere invalid.
OPEN_HANDLE macro path,access
mov dx,offset path
mov al,access
mov ah,3Dh
int 21h
endm

; APELAREA FUNCTIEI 3EH


; Inchiderea unui fisier, utilizand identificatorul logic.
; Functia goleste toate buffer_ele atasate fisierului,
; inchide fisierul care a fost deschis cu una din functiile
; 3Ch sau 3Dh, eliberand identificatorul logic si actualizand
; directorul. Identificatorul logic este precizat la intrare
; in registrul BX. La iesirea din functie, daca indicatorul
; CF=1, in registrul AX se da codul de eroare 06h – care
; reprezinta identificator logic invalid.
CLOSE_HANDLE macro handle
mov bx,handle
mov ah,3Eh
int 21h
endm

; APELAREA FUNCTIEI 3FH


; Citirea dintr-un fisier sau de la un dispozitiv al carui
; identificator logic se da in registrul BX, cu precizarea
; numarului de octeti de citit in registrul CX iar adresa
; zonei tampon in care se efectueaza citirea se da in
; DS:DX. La retur daca indicatorul CF=0 in AX se da numarul
; de octeti efectivi cititi, iar daca CF=1 in AX se
; returneaza un cod de eroare cu urmatoarea semnificatie:
; 05h - pentru acces interzis, sau
; 06h - pentru identificator logic
; nedeschis sau invalid.
READ_HANDLE macro handle,buffer,bytes
80
Sisteme de operare

mov bx,handle
mov dx,offset buffer
mov cx,bytes
mov ah,3Fh
int 21h
endm

; APELAREA FUNCTIEI 40H


; Scrierea intr_un fisier sau de la un dispozitiv al carul
; identificator logic se da in registrul BX, cu precizarea
; numarului de octeti de scris in registrul CX iar adresa
; zonei tampon din care se efectueaza scrierea se da in
; DS:DX. La retur daca indicatorul CF=1 in AX se returneaza
; un cod de eroare cu urmatoarea semnificatie:
; 05h - pentru acces interzis, sau
; 06h - pentru identificator logic nedeschis sau invalid.
WRITE_HANDLE macro handle,buffer,bytes
mov bx,handle
mov dx,offset buffer
mov cx,bytes
mov ah,40h
int 21h
endm

; APELAREA FUNCTIEI 41H


; Stergerea unui fisier prin invalidarea intrarii din
; director (UNLINK), pentru fisierul al carui nume este
; dat de un sir ASCII precizat in DS:DX,
; in sir pot sa apara si caracterele "*" sau "?".
; La iesire daca CF=1 atunci in AX se
; precizeaza un cod de eroare:
; 02h - pentru fisier negasit,
; 03h - pentru cale de acces invalida sau
; 05h - pentru acces interzis, cum este de exemplu
; stergerea unui fisier "read only".
DELETE_ENTRY macro path
mov dx,offset path
mov ah,41h
int 21h
endm

; APELAREA FUNCTIEI 42H


; Pozitionarea pointer_ului de citire/scriere (LSEEK) al unui
; fisier asociat identificatorului logic precizat in
; registrul BX.

81
Sisteme de operare

; Registrul AL este incarcat cu codul de pozitionare:


; 00h _ fata de inceputul fisierului,
; 01h _ fata de pozitia curenta si
; 03h _ fata de sfarsitul fisierului.
; In CX:DX se incarca deplasamentul, exprimat in octeti,
; fata de pozitia data in registrul AL. Daca la retur CF=0,
; in DX:AX se da noua locatie a pointer_ului, iar daca CF=1
; in AX se da codul de eroare:
; 01h - functie invalida, adica AL nu contine o
; valoare cuprinsa intre 0 si 2 (inclusiv) sau
; 06h _ pentru identificator logic invalid.
MOVE_PTR macro handle,high,low,method
mov bx,handle
mov cx,high
mov dx,low
mov al,method
mov ah,42h
int 21h
endm

; APELAREA FUNCTIEI 43H


; Obtinerea/Pozitionarea atributelor unui fisier (CHMOD),
; fisier specificat printr-un sir de caractere ASCII al carui
; adresa se afla in DS:DX. In AL se precizeaza codul
; subfunctiei:
; 00h - pentru obtinerea atributelor si
; 01h - pentru pozitionarea atributelor.
; In registrul CX se precizeaza atributele fisierului:
; 00h - pentru fisier de tip obisnuit,
; 01h - pentru fisier de tip "read only",
; 02h - pentru fisier ascuns,
; 04h - pentru fisier de sistem si
; 20h - pentru fisier de tip arhiva.
; La retur, daca CF=0 functia returneaza in CX octetul de
; atribute ale fisierului, iar daca CF=1 in AX se da codul
; de eroare:
; 01h - pentru functie invalida (diferita de 00h sau 01h),
; 02h - pentru fisier negasit,
; 03h - pentru cale negasita sau
; 05h - pentru acces interzis.
CHANGE_MODE macro path,action,attrib
mov dx,offset path
mov al,action
mov cx,attrib
mov ah,43h
int 21h
82
Sisteme de operare

endm

; APELAREA FUNCTIEI 4400H,01H


; Control intrare/iesire pentru dispozitivele periferice
; (IOCTRL _ Input/Output Control), pentru obtinerea/
; pozitionarea informatiilor despre dispozitiv. Daca AL
; se incarca cu 00h se returneaza informatii despre
; dispozitivul sau fisierul atasat identificatorului logic
; specificat in reg. BX, iar daca AL se incarca cu 01h se
; pozitioneaza informatiile referitoare la dispozitivul
; periferic atasat identificatorului logic specificat in BX,
; DH fiind incarcat cu 00h si DL incarcat cu informatiile ce
; trebuie setate. La retur, in cazul AL=00h se returneaza
; in DX unul din urmatoarele doua formate, dupa cum bitul 7
; are valoarea 0 sau 1:
; 1. Daca bitul 7 din DX este 1, atunci in DX se reprezinta
; starea unui dispozitiv de tip caracter:
; DX: Descriere:
; bitul 0 =1 daca este dispozitivul stand.intrare (consola)
; 1 =1 daca este disp. standard de iesire (consola)
; 2 =1 daca este dispozitivul NULL
; 3 =1 daca dispozitivul este ceasul calc.(CLOCK$)
; 4 rezervat
; 5 =1 pentru modul binar si = 0 pentru modul ASCII
; 6 =0 daca_i un EOF la intrare
; 7 =1 pentru dispozitiv de tip caracter
; 8-10 rezervati
; 11 =1 daca disp. intelege instructiuni open/close
; 12 rezervat
; 13 =1 disp.suporta iesirea pana cand devine ocupat
; 14 =1 daca disp. poate prelucra siruri de control
; 15 rezervat
; 2. Daca bitul 7 din DX este 0, atunci in DX se precizeaza
; starea unui fisier pe disc magnetic:
; DX: Descriere:
; bitul 0_5 numarul dispoz. de tip bloc, 0 = A, 1 = B, ...
; 6 =1 daca fisierul a fost scris
; 7 =0 pentru a indica un dispozitiv
; de tip bloc (disc)
; 8_15 rezervati
; La retur daca CF=1 atunci in AX se da un cod de eroare
; avand valoarea 06h semnificand un identificator
; logic invalid sau nedeschis.
; In cazul in care AL=01h se pozitioneaza informatiile
; despre dispozitiv in felul urmator:
; DX: Descriere:
83
Sisteme de operare

; bitul 0 =1 daca este disp. standard de intrare (consola)


; 1 =1 daca este disp. standard de iesire (consola)
; 2 =1 daca este dispozitivul NULL
; 3 =1 daca disp. este ceasul calculatorului (CLOCK$)
; 4 rezervat
; 5 =1 pentru modul binar si = 0 pentru modul ASCII
; 6 =0 daca-i un EOF la intrare
; 7 =1 pentru dispozitiv de tip caracter sau
; =0 pentru un fisier
; 8_15 =00h
; La retur daca CF=1 atunci in AX se da un cod de eroare
; avand valoarea:
; 01h pentru functie invalida, sau valoarea
; 06h semnificand un identificator logic invalid sau
; nedeschis.
IOCTL_DATA macro code,handle
mov bx,handle
mov al,code
mov ah,44h
int 21h
endm

; APELAREA FUNCTIEI 4402H,03H


; Citirea/Scrierea de la un dispozitiv de tip caracter atasat
; identificatorului logic precizat in BX. La intrarea in
; functie trebuie ca in registrul AL sa se incarce valorile:
; 02h pentru citire sau 03h pentru scriere. In registrul
; CX trebuie incarcat numarul de octeti de citit/scris
; in/din zona de memorie tampon precizata in DS:DX. La retur
; daca CF=0 in AX se da numarul de octeti efectiv
; transferati, iar daca CF=1 in AX se da un cod de eroare
; care poate avea valorile:
; 01h - pentru a indica faptul ca dispozitivul periferic
; nu permite siruri de control sau
; 06h - pentru a indica faptul ca indicatorul logic este
; invalid sau nedeschis.
IOCTL_CHAR macro code,handle,buffer
mov bx,handle
mov dx,offset buffer
mov al,code
mov ah,44h
int 21h
endm

; APELAREA FUNCTIEI 4404H,05H

84
Sisteme de operare

; Citire/Scriere de la un dispozitiv periferic de tip bloc (disc


magnetic) al carui indicator logic este specificat in
; BL, transferul facandu_se dintr_o zona tampon specificata in
DS:DX, transferandu_se un numar de octeti
; precizat in CX. Daca AL=04h se face o citire, iar daca AL=05h
se face o scriere. Identificatorul logic al
; dispozitivului se specifica prin introducerea in registrul BL
a valorilor: 00h _ pentru discul implicit, 01h _ pentru
; discul A, 02h _ pentru discul B, ...
; La retur daca CF=0 in AX se dau numarul de octeti efectiv
transferati, iar daca CF=1 in AX se da un cod
; de eroare care poate lua valorile: 01h _ pentru a specifica
faptul ca dispozitivul nu permite siruri de control sau
; 05h _ pentru driver invalid in BL.
IOCTL_STATUS macro code,drive,buffer
mov bl,drive
mov dx,offset buffer
mov al,code
mov ah,44h
int 21h
endm

; APELAREA FUNCTIEI 4406H,07H


; Obtinerea starii intrarii/iesirii unui dispozitiv periferic
; sau a unui fisier al carui indicator logic este specificat
; in BX.
; Daca AL=06h se solicita ontinerea starii intrarii, iar
; daca AL=07h se solicita obtinerea starii iesirii.
; Identificatorul logic al dispozitivului sau al fisierului
; de pe disc se specifica prin introducerea in registrul BX a
; valorilor:
; 00h - pentru discul implicit,
; 01h - pentru discul A,
; 02h - pentru discul B, ...
; La retur daca CF=1 in AX se da un cod de eroare care
; poate lua valorile:
; 05h _ pentru acces interzis sau
; 06h _ pentru identificator logic invalid sau nedeschis.
; Daca CF=0 in AL se returneaza starea intrarii/iesirii prin
; indicarea valorilor:
; 00h _ pentru dispozitiv nepregatit sau EOF la fisier si
; FFh _ pentru dispozitiv pregatit sau nu
; este un EOF pentru fisier.
IOCTL_BLOCK macro code,handle
mov bx,handle
mov al,code
85
Sisteme de operare

mov ah,44h
int 21h
endm

; APELAREA FUNCTIEI 4408H


; Verifica daca o unitate contine un dispozitiv care poate fi
; schimbat (disc flexibil ori sreamer) sau nu (disc fix).
; La apelul functiei se incarca 08h in AL, iar in BL se
; incarca numarul unitatii: 00h _ pentru unitatea implicita,
; 01h _ pentru unitatea A, 02h _ pentru B, ...
; La retur daca CF=0 in AX se ontine: 00h _ pentru un
; dispozitiv care poate fi schimbat, ori 01h _ pentru
; un dispozitiv care nu poate fi schimbat. Daca CF=1 in AX
; se da un cod de eroare care poate lua valorile:
; 01h _ pentru functie invalida sau 02h _ pentru
; unitate invalida.
IOCTL_CHANGE macro drive
mov bl,drive
mov al,08h
mov ah,44h
int 21h
endm

; APELAREA FUNCTIEI 4409H


; Verifica daca dispozitivul logic se afla intr-o retea
; (local) sau este redirectat unui server (la distanta).
; La apelul functiei se incarca valoarea 09h in AL, iar in
; BL se va incarca una din valorile:
; 00h - pentru discul implicit,
; 01h - pentru unitatea A,
; 02h - pentru B, ...
; La retur daca CF=0 in DX se dau urmatoarele informatii:
; bitul 12 pus pe valoarea 1 si restul bitilor pusi
; pe 0, indica faptul ca dispozitivul se afla la distanta,
; iar daca dispozitivul este local in DX se da cuvantul de
; atribuit din rutina de tratare a dispozitivului.
; Daca CF=1 in AX se da un cod de eroare care are valoarea:
; 01h _ pentru functie invalida, sau valoarea 0Fh - pentru
; dispozitiv invalid.
IOCTL_RBLOCK macro drive
mov bl,drive
mov al,09h
mov ah,44h
int 21h
endm

86
Sisteme de operare

; APELAREA FUNCTIEI 440AH


; Verifica daca identificatorul logic, specificat in BX, este
; asociat unui dispozitiv local (retea locala) sau unui
; server aflat la distanta.
; La retur daca CF=0 in DX se dau urmatoarele informatii:
; bitul 15 pus pe valoarea 1 si restul bitilor pusi
; pe 0, indica faptul ca identificatorul logic se afla la
; distanta, iar daca identificatorul logic este local in DX
; se da cuvantul de atribuit din handler-ul
; dispozitivului asociat.
; Daca CF=1 in AX se da un cod de eroare care are valoarea:
; 01h - pentru functie invalida, sau valoarea
; 06h - pentru identificator logic invalid.
IOCTL_RHANDLE macro handle
mov bx,handle
mov al,0Ah
mov ah,44h
int 21h
endm

; APELAREA FUNCTIEI 440BH


; Modificarea numarului de intoarceri, in sensul ca se
; specifica in DX de cate ori DOS va trebui sa reincerce
; operatia cu discul care a esuat datorita unei violari a
; partajarii fisierelor, valoarea implicita fiind 3.
; La apelarea functiei in CX se va incarca timpul de
; asteptere maxim dorit de utilizator, iar in AL se va
; incarca valoarea 0Bh.
; La retur daca CF=1 in AX se pune valoarea 01h care
; semnifica functie invalida.
IOCTL_RETRY macro retries,wait
mov dx,retries
mov cx,wait
mov al,0Bh
mov ah,44h
int 21h
endm

; APELAREA FUNCTIEI 440CH


; Cerere generica IOCTL pentru identificator logic, realizata
; prin pozitionarea sau returnarea contorului de iteratii
; la iesire, pentru o imprimanta care permite "Print til
; busy". Acest contor arata de cate ori driver-ul
; dispozitivului periferic va astepta semnalul "ready",
; inainte de a semnala "Device Busy". La apelul functiei pe
; langa incarcarea valorii 0Ch in AL, se incarca
87
Sisteme de operare

; identificatorul logic al dispozitivului periferic in BX,


; se incarca codul de categorie pentru imprimanta avand
; valoarea 05h in CH, in CL se incarca pentru pozitionare
; valoarea 45h iar pentru returnare valoarea 65h, iar in
; DS:DX se incarca un pointer la zona tampon de date care
; va contine noua valoare a contorului.
; La retur daca CF=1 in AX se da codul de eroare 01h care
; semnifica functie invalida.
GENERIC_IOCTL_HANDLES macro handle,Function,Buffer
mov ch,05H
mov cl,Function
mov dx,offset Buffer
mov bx,handle
mov ah,44h
mov al,0Ch
int 21h
endm
; APELAREA FUNCTIEI 440DH
; Cerere generica IOCTL pentru dispozitive periferice bloc
; (disc). La apelul functiei se incarca AL cu valoarea
; 0Dh, in BL se incarca numarul dispozitivului periferic
; (0=implicit, 1=A, 2=B,...), in CH se incarca codul major
; de categorie care are valoarea 08h (pentru disc), iar in CL
; se incarca codul minor corespunzator unei anumite
; subfunctii:
; 40h - pentru pozitionarea parametrilor dispozitivului
; periferic,
; 60h _ pentru returnarea parametrilor dispozitivului,
; 41h _ pentru scrierea unei piste pe dispozitivul logic,
; 61h _ pentru citirea unei piste de pe dispozitivul logic,
; 42h _ pentru formatarea unei piste pe dispozitivul logic si
; 62h _ pentru verificarea unei piste de pe dispozitivul
; logic.
GENERIC_IOCTL_BLOCK macro Drive_Num,Function,Parm_Blk
mov ch,08H
mov cl,Function
mov dx,offset Parm_Blk _ 1
mov bx,Drive_Num
mov ah,44h
mov al,0Dh
int 21h
endm

; APELAREA FUNCTIEI 440EH


; Obtinerea dispozitivului logic la anumite dispozitive bloc
; (disc) care admit mai mult decat o litera de driver
88
Sisteme de operare

; pentru a referi acelasi dispozitiv periferic. Asa de


; exemplu pe sistemele care au numai o unitate flexibila,
; se poate utiliza atat A: cat si B:. La apelul functiei se
; incarca in AL valoarea 0Eh, si in BX se incarca numarul
; driver_ului (0=implicit, 1=A, 2=B,...).
; La retur daca CF=1 in AX se da un cod de eroare care
; poate lua valorile: 01h _ pentru cod functie
; invalida sau 05h _ pentru driver invalid.
IOCTL_GET_DRIVE_MAP macro Logical_drv
mov bx,Logical_drv
mov ah,44h
mov al,0Eh
int 21h
endm

; APELAREA FUNCTIEI 440FH


; Selectarea dispozitivului logic, prin schimbarea literei de
; driver cel mai recent utilizata pentru a referi un
; dispozitiv periferic care poate fi specificat prin mai mult
; de o litera de driver. La apelare AL se incarca cu 0Fh,
; iar BX se incarca cu numarul driver_ului care poate lua
; valorile: 00h _ pentru driver_ul implicit, 01 _ pentru A,
; 02 _ pentru B, ...
; La retur daca CF=0 se ataseaza dispozitivlui bloc cea
; mai "inalta" litera: 1=A, 2=B etc. Daca CF=1 in
; AX se da un cod de eroare care poate lua valoarea:
; 01h - pentru cod functie invalid sau 05h _ pentru driver
; invalid.
IOCTL_SET_DRIVE_MAP macro Logical_drv
mov bx,Logical_drv
mov ah,44h
mov al,0Fh
int 21h
endm

; APELAREA FUNCTIEI 45H


; Duplicarea identificatorului logic al unui fisier (DUP)
; care este precizat in BX.
; La retur daca CF=0 in AX se da noul identificator logic
; al unui fisier, iar daca CF=1 in AL se da un cod
; de eroare care poate avea valorile:
; 04h - pentru prea multe fisiere deschise sau
; 06h - pentru identificator logic
; de fisier nedeschis ori invalid.
XDUP macro handle
mov bx,handle
89
Sisteme de operare

mov ah,45h
int 21h
endm

; APELAREA FUNCTIEI 46H


; Redirectarea unui identificator logic de fisier (FORCDUP)
; prin fortarea identificatorului precizat in registrul CX
; sa refaca acelasi fisier ca si un al doilea identificator
; specificat in registrul BX, ambele identificatoare logice
; trebuie sa existe si sa fie deschise. La retur daca CF=1 in
; AX se afla un cod de eroare care poate avea valorile:
; 04h _ pentru prea multe fisiere deschise si
; 06h _ pentru identificator logic de fisier nedeschis
; ori invalid.
XDUP2 macro handle1,handle2
mov bx,handle1
mov cx,handle2
mov ah,46h
int 21h
endm

; APELAREA FUNCTIEI 47H


; Obtinerea directorului curent, prin incarcarea in DL a
; numarului dispozitivului periferic si precizarea in DS:SI
; a adresei unei zone de memorie de 64 octeti, in care se
; va returna un sir ASCII cu calea integrala a
; directorului curent, sir terminat cu 0.
; La retur daca CF=1 in AX se da codul de eroare 0Fh care
; semnifica un numar de dispozitiv periferic invalid.
GET_DIR macro drive,buffer
mov dl,drive
mov si,offset buffer
mov ah,47h
int 21h
endm

; APELAREA FUNCTIEI 48H


; Alocarea dinamica a memoriei pentru procesul curent, prin
; specificarea numarului de paragrafe, de cate 16
; octeti fiecare paragraf, numar precizat in registrul BX.
; La retur daca CF=1 in AX se da un cod de eroare
; care are urmatoarele valori:
; 07h - pentru deteriorarea blocului de control al
; memoriei de catre un utilizator care a modificat
; memoria care nu_i apartine si

90
Sisteme de operare

; 08h - pentru memorie insuficienta.


ALLOCATE_MEMORY macro bytes
mov bx,bytes
mov cl,4
shr bx,cl
inc bx
mov ah,48h
int 21h
endm

; APELAREA FUNCTIEI 49H


; Elibereaza memoria alocata anterior prin functia 48h,
; facand_o disponibila sistemului de operare. In ES se va
; incarca adresa segment a memoriei de eliberat, lungimea
; fiind dedusa de sistem din blocul de control din fata
; zonei de memorie.
; La retur daca CF=1 in AX se da un cod de eroare care
; poate avea valorile:
; 07h - pentru deteriorarea blocului de control al
; memoriei de un program utilizator caruia nu-i
; apartinea zona de memorie,
; 09h - pentru adresa segment incorecta, adica memoria
pointata de ES nu a fost alocata cu functia 48h.
FREE_MEMORY macro seg_addr
mov ax,seg_addr
mov es,ax
mov ah,49h
int 21h
endm

; APELAREA FUNCTIEI 4AH


; Modificarea alocarii memoriei (SET BLOCK), prin precizarea
; noii dimensiuni, exprimata in paragrafe de 16
; octeti fiecare, precizata in BX, iar in ES se precizeaza
; adresa segment a zonei de memorie.
; La retur daca CF=1 in BX se precizeaza numarul maxim de
; paragrafe disponibile, iar in AX un cod de eroare
; care poate avea una din valorile:
; 07h - pentru indicarea deteriorarii blocului de control
; al memoriei prin modificarea de catre un
; utilizator a memoriei care nu-i apartine,
; 08h _ pentru memorie insuficienta si
; 09h _ pentru adresa in ES eronata, blocul de memorie
; neputand fi modificat.
SET_BLOCK macro last_byte
mov bx,offset last_byte
91
Sisteme de operare

mov cl,4
shr bx,cl
add bx,17
mov ah,4Ah
int 21h
mov ax,bx
shl ax,cl
mov sp,ax
mov bp,sp
endm

; APELAREA FUNCTIEI 4B00H


; Incarcarea si executia unui program (EXEC) al carui nume
; este dat printr_un sir ASCII, terminat cu 0, sir a carui
; adresa se afla in DS:DX. In AL se incarca valoarea 00h.
; Incarcarea si executia se face sub controlul unui bloc
; de parametri care are adresa data in ES:BX si are formatul:
; adresa lungime
; 00h 2 - adresa segment a sirului de mediu (max 34
; octeti), se va plasa la noul PSP+2Ch;
; 02h 4 - adresa de segment si deplasament a liniei de
; comanda (max 128 octeti), se va plasa
; la noul PSP+80h;
; 06h 4 - adresa de segment si deplasamentul primului
; FCB implicit, se va plasa la noul PSP+5Ch;
; 0Ah 4 - adresa de segment si deplasamentul celui
; de-al doilea FCB implicit, se va plasa la
; noul PSP+6Ch.
; La retur daca CF=1 in AX se afla un cod de eroare care
; poate avea valorile:
; 01h - pentru functie invalida in AL,
; 02h - nu s-a gasit fisierul,
; 03h - nu s-a gasit calea,
; 04h - prea multe fisiere deschise,
; 05h - acces interzis,
; 08h - memorie insuficienta,
; 0Ah - mediu eronat (peste 32 KO), sau
; 0Bh - format eronat, exista un fisier .EXE cu
; informatii inconsistente.
EXEC macro path,command,parms
mov dx,offset path
mov bx,offset parms
mov word ptr parms[02h],offset command
mov word ptr parms[04h],cs
mov word ptr parms[06h],5ch
mov word ptr parms[08h],es
92
Sisteme de operare

mov word ptr parms[0ah],6ch


mov word ptr parms[0ch],es
mov al,0
mov ah,4Bh
int 21h
endm

; APELAREA FUNCTIEI 4B03H


; Incarcarea fara executie a unui program al carui nume
; este dat printr_un sir ASCII, terminat cu 0, sir a carui
; adresa se afla in DS:DX. In AL se incarca valoarea 03h.
; Incarcarea si executia se face sub controlul unui bloc
; de parametri care are adresa data in ES:BX si are formatul:
; Adresa Lungime
; 00h 2 - adresa segment la care va fi incarcat
; programul
; 02h 2 - factorul de relocare al programului,
; doar fisierele .EXE.
; La retur daca CF=1, in AX se afla un cod de eroare care
; poate avea valorile:
; 01h - pentru functie invalida in AL,
; 02h - nu s-a gasit fisierul,
; 03h - nu s-a gasit calea,
; 04h _ prea multe fisiere deschise,
; 05h - acces interzis,
; 08h - memorie insuficienta,
; 0Ah - mediu eronat (peste 32 KO),
; 0Bh - format eronat, exista un fisier .EXE cu
; informatii inconsistente.
EXEC_OVL macro path,parms,seg_addr
mov dx,offset path
mov bx,offset parms
mov parms,seg_addr
mov parms[02H],seg_addr
mov al,3
mov ah,4Bh
int 21h
endm

; APELAREA FUNCTIEI 4CH


; Terminarea procesului (EXIT) si predarea controlului la
; procesorul parinte, pozitionand un cod de retur, inchide
; toate fisierele iar vectorii CTRL+BREAK (Int 23h) si
; Eroare critica (i nt 24H) sunt reincarcati la adresa din
; PSP_ul parinte. Functia nu returneaza nimic.
END_PROCESS macro return_code
93
Sisteme de operare

mov al,return_code
mov ah,4Ch
int 21h
endm

; APELAREA FUNCTIEI 4DH


; Obtinerea codului de retur al procesului fiu (WAIT), cod de
; retur pozitionat la iesirea din proces prin una din
; functiile 4Ch sau 31H. Functia returneaza in AX
; infotmatiile astfel:
; - in AL codul returnat de catre insusi procesul terminat;
; - in AH un cod care specifica modul de terminare al
; procesului, care poate avea valorile:
; 00h - pentru terminare normala,
; 01h - pentru terminare cu CTRL+C sau CTRL+BREAK,
; 02h - pentru terminarea de catre DOS datorata unei
; erori critice la dispozitivul periferic, si
; 03h - pentru terminarea prin functia 31h.
WAIT macro
mov ah,4Dh
int 21h
endm

; APELAREA FUNCTIEI 4EH


; Gasirea primului fisier potrivit cu fisierul specificat
; intr-o zona de memorie data de DS:DX (FIND FIRST), sub
; forma unui sir, terminat cu 0, a carui atribute sunt
; precizate in CX. In registrul CX se precizeaza atributele
; fisierului:
; 00h - pentru fisier de tip obisnuit,
; 01h - pentru fisier de tip "read only",
; 02h - pentru fisier ascuns,
; 04h - pentru fisier de sistem si
; 20h - pentru fisier de tip arhiva.
; La retur, daca CF=1 se da un cod de eroare in AX care
; are valoarea:
; 02h - pentru fisier negasit,
; 03h - pentru cale negasita si
; 12h - daca nu mai exista fisiere.
FIND_FIRST_FILE macro path,attrib
mov dx,offset path
mov cx,attrib
mov ah,4Eh
int 21h
endm

94
Sisteme de operare

; APELAREA FUNCTIEI 4FH


; Gasirea urmatorului fisier potrivit cu fisierul specificat
; intr_un apel precedent al functiei 4Eh (FIND NEXT). La
; retur daca CF=0 informatia este depusa in zona DTA curenta,
; iar daca CF=1 se da un cod de eroare in AX
; care are valoarea 12h, indicand faptul ca nu mai
; exista fisiere.
FIND_NEXT_FILE macro
mov ah,4Fh
int 21h
endm

; APELAREA FUNCTIEI 54H


; Verificarea starii indicatorului VERIFY in operatiile de
; scriere in fisierele aflate pe disc. Functia returneaza in
; registrul AL valorile:
; 00h - pentru VERIFY OFF si
; 01h - pentru VERIFY ON.
GET_VERIFY macro
mov ah,54h
int 21h
endm

; APELAREA FUNCTIEI 56H


; Schimbarea intrarii intr-un director. Redenumeste un fisier
; existent, specificat printr-un sir ASCII terminat cu car.
; 0 a carui adresa se afla in DS:DX si/sau il muta intr-un
; alt director specificat printr_un al doilea sir, a carui
; adresa se afla in ES:DI. Nu se admit in siruri si
; caracterele "*" sau "?". La retur in caz de eroare se
; pozitioneaza indicatorul CF=1 iar in AX se pune un cod de
; eroare care are urmatoarele valori:
; 02h _ pentru fisier negasit,
; 03h _ pentru cale negasita,
; 05h _ pentru acces interzis sau
; 11h _ pentru dispozitiv periferic diferit de cel
; specificat.
RENAME_FILE macro old_path,new_path
mov dx,offset old_path
push ds
pop es
mov di,offset new_path
mov ah,56h
int 21h
endm

95
Sisteme de operare

; APELAREA FUNCTIEI 57H


; Obtinerea/Pozitionarea datei si orei ultimei modificari a
; unui fisier descris printr-un identificator logic dat
; in registrul BX. In registrul AL se poate incarca valoarea
; 00h pentru obtinerea datei si orei sau valoarea 01h
; pentru setarea (pozitionarea) datei si orei. Daca AL=01h
; atunci trebuie incarcat registrul CX cu ora de
; pozitionat si registrul DX trebuie incarcat cu data de
; pozitionat. Daca AL=00h atunci functia returneaza in CX
; ora si in DX data. La retur daca CF=1 functia returneaza si
; un cod de eroare in AX care poate avea valoarea:
; 01h - pentru functie invalida sau valoarea
; 06h - pentru identificator logic invalid sau nedeschis.
; Data si ora se calculeaza in felul urmator:
; CX = Ora*2048 + Minut*32 + Secunda
; DX = (An - 1980)*512 + Luna*32 + Zi
; Reprezentati pe biti:
; CX: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
; O O O O O M M M M M M S S S S S
; unde: OOOOO=Ora (0...23), MMMMMM=Minutul (0...59),
; SSSSS=Secunda (0...30),
; DX: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
; A A A A A A A L L L L Z Z Z Z Z
; AAAAAAA=Anul dupa 1980 (0...199), LLLL=Luna (0...12),
; ZZZZZ=Zi (0...31).
GET_SET_DATE_TIME macro handle,action,time,date
mov bx,handle
mov al,action
mov cx,word ptr time
mov dx,word ptr date
mov ah,57h
int 21h
endm

; APELAREA FUNCTIEI 58H


; Obtinerea sau selectarea strategiei de alocare a memoriei
; interne. La intrare AL se poate incarca cu una din
; valorile:
; 00h _ pentru obtinerea strategiei de alocare sau
; 01h _ pentru selectarea strategiei de alocare. Daca
; AL este incarcat cu 01h, atunci BX se incarca cu tipul
; strategiei, care poate fi:
; 00h - pentru strategia First Fit
; (alocarea primului bloc disponibil cu adresa cea
; mai mica),
96
Sisteme de operare

; 01h - pentru Best Fit (alocarea celui mai mic bloc


; care satisface cererea),
; 02h - pentru Last Fit (alocarea blocului disponibil
; de cea mai inalta adresa).
; La retur daca CF=1, in AX se afla valoarea 01h care
; specifica o functie invalida, iar daca CF=0 in AL se
: returneaza tipul strategiei de alocare utilizata:
; 00h - pentru First Fit,
; 01h - pentru Best Fit si
; 02h - pentru Last Fit.
ALLOC_STRAT macro code,strategy
mov bx,strategy
mov al,code
mov ah,58h
int 21h
endm

; APELAREA FUNCTIEI 59H


; Obtinerea informatiilor suplimentare despre o eroare, care
; a aparut la apelul anterior al unei functii, la apel mai
; fiind necesar sa se incarce 00h in BX. In patru registre
; se returneaza codurile de eroare si sursa lor:
; AX - pentru codul extins al erorii,
; BH - pentru clasa erorii,
; BL - pentru actiune sugerata utilizatorului si
; CH - pentru sursa erorii.
; Codul extins al erorii dat in AX are valorile:
; 01h - numar functie invalid
; 02h - fisier negasit
; 03h - cale negasita
; 04h - prea multe fisiere deschise
; 05h - acces interzis
; 06h - identificator logic de fisier invalid
; 07h - blocurile de control ale memoriei sunt distruse
; 08h - memorie insuficienta
; 09h - adresa de bloc de memorie invalida
; 0Ah - mediu invalid
; 0Bh - format invalid
; 0Ch - cod de acces invalid
; 0Dh - data invalida
; 0Fh - driver de disc invalid
; 10h - incercare de stergere a directorului curent
; 11h - dispozitive periferice diferite
; 12h - nu mai exista fisiere
; 13h - disc protejat la scriere
; 14h - unitate necunoscuta
97
Sisteme de operare

; 15h - driver nepregatit


; 16h - comanda necunoscuta
; 17h - eroare de data (CRC)
; 18h - cerere gresita pentru lungimea structurii
; 19h - eroare de cautare
; 1Ah - tip unitate necunoscut
; 1Bh - sector negasit
; 1Ch - lipsa hartiei la imprimanta
; 1Dh - eroare in scriere
; 1Eh - eroare la citire
; 1Fh - eroare generala
; 20h - violarea partajarii fisierelor
; 21h - violarea unui blocaj
; 22h - schimbare de disc invalida
; 23h - FCB indisponibil
; 50h - fisier deja existent
; 52h - nu se poate crea directorul
; 53h _ eroare critica.
; In registrul BH se dau urmatoarele clase de eroare:
; 01h - lipsa de resurse
; 02h - este doar o problema temporara care
; urmeaza a se termina
; 03h - problema de autorizare, de permisiune
; 04h - eroare interna a sistemului de operare
; 05h - eroare hard
; 06h - eroare de sistem care nu se datoreaza
; programului curent
; 07h - eroare a programului aplicativ
; 08h - fisier sau orice alt obiect negasit
; 09h - fisier sau orice alt obiect in format invalid
; 0Ah - fisier sau orice alt obiect interblocat
; 0Bh - problema cu tipul de disc
; 0Ch - contradictie cu un obiect existent
; 0Dh - alta eroare.
; In registrul BL se sugereaza urmatoarele actiuni:
; 01h - reluare
; 02h - reluare, dupa o pauza
; 03h - cerere pentru utilizator de reintroducere data
; 04h - terminare cu curatire
; 05h - terminare imediata, eroare de sistem
; 06h - eroare informationala, se ignora
; 07h - se cere o manevra din partea utilizatorului,
; apoi se reia.
; In registrul CH se indica urmatoarele surse ale erorii:
; 01h - necunoscuta
; 02h - legata de dispozitivul periferic

98
Sisteme de operare

; 03h - legata de retea


; 04h - legata de un dispozitiv periferic serial
; 05h - legata de memoria interna RAM.
; Functia distruge continutul registrilor:
; CL, DX, SI, DI, DS si ES.
GET_ERROR macro
mov ah,59h
int 21h
endm

; APELAREA FUNCTIEI 5AH


; Crearea unui fisier temporar unic, al carui nume este
; specificat printr_un sir de caractere ASCII, terminat prin
; caracterul \ si urmat de 13 octeti rezervati, sir a carui
; adresa se da in DS:DX. In registrul CX se precizeaza
; atributele fisierului care urmeaza a fi creat:
; 00h - pentru fisier de tip obisnuit,
; 01h - pentru fisier de tip "read only",
; 02h - pentru fisier ascuns,
; 04h - pentru fisier de sistem si
; 20h - pentru fisier de tip arhiva.
; La retur, daca CF=0 functia returneaza in AX identifi-
; catorul logic al fisierului, iar daca CF=1 in AX see da
; codul de eroare:
; 03h - pentru cale negasita,
; 04h - pentru prea multe fisiere deschise sau
; 05h - pentru acces interzis.
CREATE_TEMP macro pathname,attrib
mov cx,attrib
mov dx,offset pathname
mov ah,5Ah
int 21h
endm

; APELAREA FUNCTIEI 5BH


; Creaza un nou fisier al carui nume si cale de acces se da
; printr-un sir de caractere ASCII, sir a carui adresa se
; precizeaza in DS:DX.
; In registrul CX se precizeaza atributele fisierului care
; urmeaza a fi creat:
; 00h - pentru fisier de tip obisnuit,
; 01h - pentru fisier de tip "read only",
; 02h - pentru fisier ascuns,
; 04h - pentru fisier de sistem si
; 20h - pentru fisier de tip arhiva.
; La retur, daca CF=0 functia returneaza in AX
99
Sisteme de operare

; identificatorul logic al fisierului, iar daca


; CF=1 in AX se da codul de eroare:
; 03h - pentru cale negasita,
; 04h - pentru prea multe fisiere deschise,
; 05h - pentru acces interzis sau
; 50h - pentru fisier deja existent.
CREATE_NEW macro pathname,attrib
mov cx,attrib
mov dx,offset pathname
mov ah,5Bh
int 21h
endm

; APELAREA FUNCTIEI 5C00H


; Blocheaza accesul la o regiune specificata a unui fisier,
; care este utilizat intr-un mediu multitasking sau retea
; de calculatoare. La apelarea functiei registrul BX se va
; incarca cu identificatorul logic al fisierului, CX:DX va
; contine deplasamentul regiunii in fisier care va fi blocata
; iar SI:DI va fi incarcat cu lungimea acestei regiuni.
; Dupa executia functiei CF = 1 in caz de eroare.
; Explicitarea erorii se deduce din valorile numerice
; continute de registrul AL:
; 01h - pentru cod functie invalid,
; 06h - pentru identificator logic invalid sau
; fisier nedeschis,
; 21h - pentru bolcaj violat adica regiune deja
; blocata, si
; 24h - pentru zona tampon cu intrari de blocaj depasita.
LOCK macro handle,start,bytes
mov bx,handle
mov cx,word ptr start
mov dx,word ptr start+2
mov si,word ptr bytes
mov di,word ptr bytes+2
mov al,0
mov ah,5Ch
int 21h
endm

; APELAREA FUNCTIEI 5C01H


; Deblocheaza accesul la o regiune specificata a unui fisier,
; care este utilizat intr_un mediu multitasking sau
; retea de calculatoare. La apelarea functiei registrul BX se
; va incarca cu identificatorul logic al fisierului, CX:DX
; va contine deplasamentul regiunii in fisier care va fi
100
Sisteme de operare

; deblocata iar SI:DI va fi incarcat cu lungimea acestei


; regiuni. Dupa executia functiei CF = 1 in caz de eroare.
; Explicitarea erorii se deduce din valorile numerice
; continute de registrul AL:
; 01h - pentru cod functie invalid,
; 06h - pentru identificator logic invalid sau fisier
; nedeschis,
; 21h - pentru debolcaj violat adica regiune deja
; deblocata, si
; 24h - pentru zona tampon cu intrari de deblocaj
; depasita.
UNLOCK macro handle,start,bytes
mov bx,handle
mov cx,word ptr start
mov dx,word ptr start+2
mov si,word ptr bytes
mov di,word ptr bytes+2
mov al,1
mov ah,5Ch
int 21h
endm

; APELAREA FUNCTIEI 5E00H


; Obtinerea numelui masinii (numele calculatorului local) sub
; forma unui sir ASCII, pe care-l depune intr-o zona
; tampon de 16 octeti aflata la adresa DS:DX. Functia
; returneaza:
; CH = 00h _ daca numele nu a fost definit;
; CL = va da numarul numelui NETBIOS, daca CH nu este 0
; AX = are semnificatie numai daca CF = 1 (eroare) si el
; poate contine valoarea 01h, indicand faptul ca
; nu a fost incarcat programul de retea.
GET_MACHINE_NAME macro buffer
mov dx,offset buffer
mov al,0
mov ah,5Eh
int 21h
endm

; APELAREA FUNCTIEI 5E02H


; Asigura pozitionarea antetului imprimantei de retea care
; va fi pus la inceputul fiecarui fisier destinat unei
; imprimante aflate in retea. La intrarea in functie BX este

101
Sisteme de operare

; incarcat cu indexul listei de redirectare, CX este


; incarcat cu lungimea sirului de antet care este de maximum
; 64 de octeti iar DS:SI este incarcat cu un pointer
; la o zona tampon care contine in ASCII antetul propriu-zis
; sub forma unui sir. Functia returneaza in caz
; de eroare CF=1 si in AX codul de eroare 01h, care semnifica
; faptul ca programul de retea nu a fost incarcat.
PRINTER_SETUP macro index,lgth,string
mov bx,index
mov cx,lgth
mov dx,offset string
mov al,2
mov ah,5Eh
int 21h
endm

; APELAREA FUNCTIEI 5F02H


; Obtinerea informatiilor despre lista de intrare in lista de
; redirectari care a fost creata cu functia 5F03h. Aceste
; informatii vor fi plasate in zona tampon rezervata de
; utilizator pentru numele local al carui pointer se

; precizeaza (la intrare in functie) in DS:SI, si numele de


; retea al dispozitivului precizat (tot la intrare) in
; ES:DI. Functia returneaza indicatorul CF=1 pentru
; terminarea cu incident a operatiei, iar in acest caz se dau
; urmatoarele specificatii:
; BX - va contine un flag (fanion) de stare al
; dispozitivului:
; bitul 0 = 0 - pentru dispozitiv valid,
; bitul 0 = 1 - pentru dispozitiv invalid;
; BL - va da tipul dispozitivului:
; 03h - imprimanta,
; 04h - driver de disc.
; Functia altereaza registrii DX si BP.
GET_LIST macro I ndex,local,remote
mov bx,index
mov si,offset local
mov di,offset remote
mov al,2
mov ah,5Fh
int 21h
endm

; APELAREA FUNCTIEI 5F03H


; Redirectarea unei imprimante sau a unui driver de disc
102
Sisteme de operare

; (denumit dispozitivul sursa) spre un director de retea


; pe care-l vom numi dispozitivul destinatie. La intrare in
; BL se incarca valoarea numerica 3, daca este vorba
; de o imprimanta sau valoarea numerica 4, daca este vorba
; de un driver de disc. DS:SI trebuie sa contina
; un pointer la numele dispozitivului sursa, reprezentat
; printr-un sir ASCII, iar ES:DI va fi incarcat cu un
; pointer la numele dispozitivului destinatie, reprezentat
; tot printr-un sir ASCII.
; Functia returneaza indicatorul CF pozitionat. Daca CF=1,
; atunci operatia s-a terminat incorect si trebuie testat
; codul de eroare care se gaseste in registrul AX si care
; poate lua nalorile numerice:
; 01h - pentru cazul in care nu s-a incarcat programul de
; retea sau valoarea din BL este eronata,
; 03h - pentru indicarea unui director de retea invalid,
; 05h - pentru semnalarea unui acces interzis,
; 08h - pentru semnalarea memoriei insuficiente.
REDIR macro local,remote,device,value
mov bl,device
mov cx,value
mov si,offset local
mov di,offset remote
mov al,3
mov ah,5Fh
int 21h
endm

; APELAREA FUNCTIEI 5F04H


; Anularea unei redirectera care a fost realizata cu functia
5F03h, realizandu_se semnificatia fizica initiala, pentru
; dispozitivul periferic specificat.
CANCEL_REDIR macro local
mov si,offset local
mov al,4
mov ah,5Fh
int 21h
endm

; APELAREA FUNCTIEI 62H


; Obtinerea adresei de segment pentru PSP-ul procesului
; curent, in registrul BX.
GET_PSP macro
mov ah,62h
int 21h
endm
103
Sisteme de operare

104
Sisteme de operare

;
;
;***********************
; MACRO_URI GENERALE
;***********************
;
; AFISEAZA UN SIR ASCII, TERMINAT PRIN $.
DISPLAY_ASCIIZ macro asciiz_string
local search,found_it
mov bx,offset asciiz_string

search:
cmp byte ptr [bx],0
je found_it
inc bx
jmp short search
found_it:
mov byte ptr [bx],"$"
display asciiz_string
mov byte ptr [bx],0
display_char 0DH
display_char 0AH
endm

;
; MUTAREA UNUI NUMAR DE CARACTERE DINTR-UN SIR SURSA IN
; UNUL DESTINATIE.
MOVE_STRING macro source,destination,count
push es
push ds
pop es
assume es:code
mov si,offset source
mov di,offset destination
mov cx,count
rep movs es:destination,source
assume es:nothing
pop es
endm

;
; CONVERSIA UNUI NUMAR INTREG INTR-O BAZA PRECIZATA DE
; UTILIZATOR.
CONVERT macro value,base,destination
local table,start
105
Sisteme de operare

jmp start
table db "0123456789ABCDEF"

start:
push ax
push bx
push dx
mov al,value
xor ah,ah
xor bx,bx
div base
mov bl,al
mov al,cs:table[bx]
mov destination,al
mov bl,ah
mov al,cs:table[bx]
mov destination[1],al
pop dx
pop bx
pop ax
endm

;
; CONVERSIA IN BINAR A UNUI NUMAR.
CONVERT_TO_BINARY macro string,number,value
local ten,start,calc,mult,no_mult
jmp start
ten db 10

start:
mov value,0
xor cx,cx
mov cl,number
xor si,si

calc:
xor ax,ax
mov al,string[si]
sub al,48
cmp cx,2
jl no_mult
push cx
dec cx
mult:
mul cs:ten
loop mult
106
Sisteme de operare

pop cx

no_mult:
add value,ax
inc si
loop calc
endm

CONVERT_DATE macro dir_entry


mov dx,word ptr dir_entry[24]
mov cl,5
shr dl,cl
mov dh,dir_entry[24]
and dh,1FH
xor cx,cx
mov cl,dir_entry[25]
shr cl,1
add cx,1980
endm

;
; CONVERSIA UNEI DATE CALENDARISTICE.
PACK_DATE macro date
local set_bit
;
; In intrare: DH=ziua, DL=luna, CX=(anul_1980)
;
sub cx,1980
push cx
mov date,dh
mov cl,5
shl dl,cl
pop cx
jnc set_bit
or cl,80h
set_bit:
or date,dl
rol cl,1
mov date[1],cl
endm

107
Sisteme de operare

MEMENTO
Comenzi şi programme utilitare LINUX1
Nr.crt. Denumire Funcieţie
1 alias - afişează sau defineşte pseudonimele (alias-urile)
unor comenzi (alias l l = ' l s - l ' ) .
2 apropos - afişează paginile de manual referitoare la un termen
(apropos chmod).
3 at - realizează managementul activităţilor executate la mo-
mente periodice.
4 aumix - controlează automat sunetul.
5 bash - reprezintă interpretorul de comenzi implicit.
6 bc - oferă posibilităţi de calcul (asemănător calculatorului
de buzunar).
7 bg - trimite un proces pentru a fi executat în fundal, fără
interacţiune directă cu utilizatorul.
8 bunzip2 - dezarhivează fişiere . b z 2 comprimate cu
utilitarul bzip2 (bunzip2 documentaţii.bz2).
9 bzip2 - arhivează fişiere folosind o metodă de compresie
foarte bună, dar lentă (bzip2 documentaţii.bz2 *.pdf
*.ps).
10 cal - afişează un calendar (cal 06 2009).
11 cat - concatenează conţinutul mai multor fişiere (cat *
.txt).
12 cc - reprezintă compilatorul de C - este echivalent cu gcc.
13 cd - schimbă directorul curent (cd /bin).
14 cdplay - realizează redarea CD-urilor audio
15 cdrecord - inscripţionează CD-uri (cdrecord -eject
speed=4 dev=0,1 , 0 thewall. img).
16 change - modifică atributele de securitate ale utilizatorilor.
17 chfn - modifică informaţii afişate de finger (adică cele
privitoare la utilizator).
18 chgrp - modifică grupul din care face parte un utilizator.
19 chkconfig - permite configurarea nivelurilor de execuţie în care să

1
Tabel adaptat după Dragoş Acostăchioaie şi Sabin Buraga - Utilizare LINUX. Noţiuni de
bază şi practică - Editura Polirom Bucureşti, ISBN 973-681-542-0, pag. 359 ş.u.
108
Sisteme de operare

Nr.crt. Denumire Funcieţie


ruleze serviciile de sistem.
20 chmod - modifică permisiunile de acces la fişiere/directoare
(chmod +or script. cgi ).
21 chown - schimbă proprietarul fişierelor şi grupul din care face
parte proprie tarul ( chown horea:profs *. zip ).
22 chsh - modifică interpretorul de comenzi implicit al unui
utilizator.
23 clear - şterge ecranul (terminalul).
24 cmp - compară (la nivel de octet) conţinutul unor fişiere.
25 cp - copie un fişier la o altă locaţie sau sub alt nume (cp
/bin/ls ~/tmp).
26 cut - decupează diverse informaţii din fiecare linie a unui
fişier, pe coloane sau conform unor delimitatori
(cut /etc/passwd -d: -fi,5).
27 date - afişează data şi timpul curent.
28 dd - oferă duplicarea conţinutului unor fişiere - dispozitive,
discuri etc.
29 df - afişează spaţiul liber rămas (df /dev/hdal).
30 diff - compară (la nivel de linie) conţinutul unor fişiere.
31 dir - afişează informaţii privitoare la numele fişierelor dintr-
un director (dir .*); se preferă utilizarea comenzii ls.
32 du - afişează spaţiul ocupat de un director (du /tmp).
33 dvipdf - transformă fişiere .dvi în fişiere .pdf (Portable
Document Format) în vederea vizualizării/tipăririi cu
xpdf (dvipdf teza.dvi -o teza.pdf).
34 dvips - transformă fişiere .dvi în fişiere .ps (PostScript) în
vederea vizualizării/tipăririi cu gv (dvips teza.dvi -o
teza.ps).
35 dump - creează copii de siguranţă pentru o scrie de fişiere.
36 echo - afişează la terminal (ieşirea standard, implicit) un şir
de caractere (echo " S a l u t a r e ! " ) .
37 ed - editează la nivel de linie conţinutul unui fişier.
38 eject - demontează şi eliberează un mediu de stocare (e.g., CD
sau DVD).
39 emacs - reprezintă un editor de texte configurabil, deosebit de flexibil
şi puternic.
40 eog - vizualizează conţinutul fişierelor grafice, disponibil în
GNOME.
41 eval - evaluează o expresie în cadrul interpretorului de
109
Sisteme de operare

Nr.crt. Denumire Funcieţie


comenzi.
42 ex - editează la nivel de linie conţinutul unui fişier.
43 expr - evaluează o expresie (echo ‘expr 10 * 3’).
44 fc - compară fişiere.
45 fdisk - partiţionează discul şi modifică informaţii privitoare
la partiţiile existente.
46 fg - trimite un proces pentru a fi executat în prim-plan, interac-
ţionând direct cu utilizatorul.
47 file - determină tipul unor fişiere (file ~/Documents/*).
48 find - găseşte fişiere, conform unor criterii sofisticate (find /
-name „k*” –print).
49 finger - furnizează informaţii despre utilizatori, eventual pe alte
maşini (finge r bunu@re my .uab.ro ).
50 fortune - afişează aleatoriu o maximă, un aforism sau un citat
celebru.
51 fsck - verifică sistemele de fişiere ale dispozitivelor (fsck
/dev/hda5).
52 ftp - realizează o conexiune cu un server FTP, în vederea
transferului de fişiere la distanţă.
53 galeon - este un navigator Web furnizat de GNOME.
54 gcc -reprezintă varianta GNU a compilatorului de C (gcc
program, c -o executabil).
55 gdm - reprezintă managerul de ferestre oferit de GNOME.
56 gfloppy - reprezintă un utilitar grafic oferit de GNOME pentru
formatarea dischetelor.
57 giftrans - controlează transparenţa imaginilor stocate în format GIF.
58 gimp - reprezintă un program de realizat grafică raster (bitmap),
oferind multe facilităţi de prelucrare şi filtrare.
59 gnome-cd - realizează redarea CD-urilor audio în GNOME.
60 gnorpm - desemnează un utilitar pentru managementul grafic al
pachetelor .rpm.
61 gnozip - reprezintă un utilitar grafic pentru managementul arhivelor.
62 grecord - reprezintă un program de înregistrat conţinut audio.
63 grep - caută în cadrul fişierelor (la nivel de linie) diverse şiruri de
caractere (grep "config" *.conf).
64 groupadd - adaugă un grup de utilizatori (groupadd catedra).
65 groupdel - şterge un grup de utilizatori (groupdel mate).
66 groupmod - modifică diverşi parametri asociaţi unui grup de
utilizatori (groupmod catedra).
110
Sisteme de operare

Nr.crt. Denumire Funcieţie


67 grub - permite încărcarea unui sistem de operare dintr-o listă de
sisteme instalate.
68 gtkam - preia fotografii realizate cu camera digitală.
69 gunzip - dezarhivează un fişier .gz compresat cu gzip
(gunzip copie .tar .gz).
70 gv - realizează vizualizarea/tipărirea de fişiere .ps (PostScript).
71 gzip -arhivează un fişier, creând în locul lui o arhivă .gz
(gzip copie.tar).
72 halt - opreşte sistemul de operare.
73 head - afişează primele linii ale conţinutului unui fişier (head
-3 /etc/ group).
74 help - afişează informaţii de ajutor privitoare la interpretorul de
comenzi (help exit).
75 history - realizează managementul istoricului comenzilor introduse.
76 host - afişează informaţii privitoare la adresa (simbolică ori IP) a
unei gazde (host www .uab. ro).
77 hostname - afişează informaţii privitoare la adresa maşinii curente.
78 id - oferă informaţii privitoare la identitatea unui utilizator.
79 ifconfig - configurează interfeţele (echipamentele) de reţea.
80 indent - afişează, formatat corespunzător, codul sursă al programelor
C sau C++.
81 info - oferă informaţii privitoare la diverse comenzi şi utilitare, în
formă de hipertext (info mtools).
82 iptables - configurează firewall-ul.
83 isoinfo - oferă informaţii privitoare la mediile de stocare respectând
standardul ISO 9660 (CD-uri şi DVD-uri).
84 ispell - oferă posibilităţi de detectare/corecţie a erorilor de
gramatică.
85 jobs - afişează procesele lansate în fundal.
86 joe - reprezintă un editor de texte oferind diverse facilităţi, bazat
pe combinaţii de taste WordStar/TurboPascal.
87 jpico - reprezintă un editor de texte oferind diverse facilităţi
(joe cu combinaţiile de taste ale editorului de texte pico).
88 k3b - este un program de inscripţionare de CD-uri, disponibil în
KDE.
89 kate - reprezintă un editor de texte oferit de mediul KDE, utilizat
în regim grafic.
90 kcalc - reprezintă un program de calcul tabelar, parte a suitei de
birou KOffice.
111
Sisteme de operare

Nr.crt. Denumire Funcieţie


91 kde-config - reprezintă un utilitar de configurare oferit de KDE.
92 kde - desemnează managerul de ferestre KDE (The KDesktop
Environment), un mediu grafic oferind multe facilităţi.
93 kdf - este un utilitar grafic similar cu df şi du, parte a
sistemului KDE.
94 kedit - desemnează un editor de texte simplu, oferit de KDE.
95 kfloppy - reprezintă un utilitar grafic oferit de KDE pentru
formatarea dischetelor.
96 kformula - reprezintă un utilitar de editare de formule matematice,
parte a suitei KOffice.
97 khelpcenter - reprezintă sistemul de asistenţă oferit de KDE.
98 kill - trimite un semnal (implicit de terminare) proceselor
existente în sistem (kill -9 -1).
99 killall - trimite un semnal (implicit de terminare) tuturor
proceselor deţinute de un utilizator (killall mc).
100 klipper - reprezintă clipboard-ul KDE.
101 kmail - reprezintă un program KDE pentru managementul poştei
electronice.
102 kmix - reprezintă un utilitar KDE pentru controlul sunetului.
103 knotes - reprezintă un utilitar KDE pentru managemenul
notiţelor.
104 konqueror - reprezintă navigatorul Web şi managerul de fişiere
oferit de KDE.
105 konsole - reprezintă consola KDE (lansează diverse interpretoare de
comenzi).
106 kpackage - este un program KDE care realizează managementul
pachetelor RPM.
107 kpaint - reprezintă un program simplu de grafică raster, oferit
de KDE.
108 kpersonalize - reprezintă un utilitar de personalizare a interfeţei
r KDE.
109 kppp - configurează legătura cu un furnizor de servicii Internet
(client PPP).
110 kscd - realizează redarea CD-urilor audio în KDE.
111 ksnapshot - este un program de capturare a ecranului (desktop-
ului).
112 kuickshow - vizualizează conţinutul fişierelor grafice, disponibil în
KDE.
113 kuser - reprezintă un utilitar KDE pentru managementul
112
Sisteme de operare

Nr.crt. Denumire Funcieţie


utilizatorilor.
114 kview - reprezintă un utilitar KDE de previzualizare a conţi-
nutului fişierelor.
115 kword - reprezintă un procesor de texte avansat, oferit de suita de
birou KOffîce.
116 kwrite - reprezintă un editor de texte, parte a sistemului KDE.
117 last - oferă lista ultimelor conectări ale utilizatorilor în
sistem (last bunu).
118 latex - reprezintă un procesor sofisticat de texte, bazat pe
marcatori şi folosit la generarea de fişiere indepen-dente
de dispozitiv .dvi (latex articol.tex ).
119 less - afişează paginat conţinutul unui fişier, cu posibilitatea
derulării acestui conţinut.
120 lilo - permite încărcarea unui sistem de operare dintr-o listă
de sisteme instalate.
121 links - reprezintă un navigator Web rapid, disponibil în mod text
sau grafic, cu suport pentru CSS şi JavaScript
(îmbunătăţire a programului lynx).
122 linuxconf - reprezintă un utilitar complex utilizat la configurarea
unui sistem Linux.
123 ln - realizează legături (scurtături) între două fişiere ( ln
-s /trap /usr /trap).
124 logout -realizează deconectarea unui utilizator (părăsirea sesiunii
de lucru).
125 lpc - reprezintă o interfaţă pentru administrarea siste-mului
de tipărire.
126 lpq - listează coada de sarcini de tipărire.
127 lpr - trimite un fişier pentru tipărire, adaugându-1 la coada
de sarcini ( lpr curs.ps ).
128 lprm -şterge o sarcină din coada de sarcini de tipărire ( lprm
-Plaser 210 ).
129 ls - afişează în diverse formate lista fişierelor dintr-un
director ( ls –alf ~/mail ).
130 lynx - reprezintă un navigator Web rapid, disponibil în mod
text (lynx http://www.uab.ro ).
131 mail - reprezintă un utilitar pentru managementul poştei
electronice în regim linie de comandă ( mail
jhorea@uab.ro -sSalutari ).
132 make - reprezintă un utilitar pentru execuţia de programe,
113
Sisteme de operare

Nr.crt. Denumire Funcieţie


conform unor reguli care satisfac diverse dependenţe.
133 man2html - transformă fişiere folosite de man în format
hipertext.html .
134 man - reprezintă principalul program de afişare de pagini de
manual privind diverse aspecte ale sistemului: comenzi,
apeluri de sistem, funcţii, formate de fişiere etc. ( man
last).
135 mc - reprezintă managerul de fişiere Midnight Commander ,
disponibil în mod text, oferind diverse facilităţi (cu o
interfaţă inspirată de Norton Commander pentru DOS).
136 mcedit - reprezintă un editor de texte simplu, parte compo-nentă a
Midnight Commander .
137 mesg - oferă un comutator pentru inhibarea trimiterii cu write
de mesaje către un anumit terminal ( mesg n).
138 mkdir - creează un director ( mkdir copia ).
139 mkfifo - creează un fişier special FIFO (conductă -pipe).
140 mkisofs - creează un sistem de fişiere ISO 9660 - standardul
utilizat pentru stocarea informaţiilor pe CD.
141 more - afişează paginat conţinutul unui fişier.
142 mount - montează în cadrul unui director structura sistemului
de fişiere stocat de un dispozitiv: disc, CD/DVD,
memorie USB etc. (mount -tvf at
/dev/hda1 /mntwin_c ).
143 mozilla- - este un editor vizual de pagini Web, componentă
composer (opţională) a navigatorului Mozilla.
144 mozilla - desemnează un navigator Web performant, rulând în medii
grafice.
145 mpg123 - reprezintă un utilitar pentru ascultarea de fişiere MPG în
linie de comandă ( mpgl23 /mnt/cdrom/pink_f
loyd/*.mp3 ).
146 mtools - desemnează un set de utilitare pentru realizarea de
operaţii uzuale cu dischete formatate DOS: mdir, mcopy,
mren, med, mformat etc. (mdir a:, mcopy teza.pdf a : ,
med a:/copie, mformat a : ).
147 mv - mută/redenumeşte un fişier ( mv teza .ps
/tmp/de_copiat ).
148 mysql - reprezintă clientul utilizat la conectarea la un server
MySQL , în vederea realizării unui dialog prin comenzi
SQL (mysql -u busaco -p ).

114
Sisteme de operare

Nr.crt. Denumire Funcieţie


149 mysqladmin - reprezintă un utilitar de administrare a serverului
MySQL.
150 nautilus - reprezintă managerul de fişiere oferit de GNOME .
151 netstat - oferă informaţii privitoare la starea reţelei: tipuri de
conexiuni, porturi deschise etc. ( netstat -t ).
152 nice - modifică prioritatea relativă a proceselor.
153 nohup - inhibă tratarea semnalului HOHUP, astfel încât
procesele să poată rula în fundal şi după deconec-tarea
utilizatorului ( nohup wget ftp://
f tp . u a b . r o/ pu b/ l i nu x/ md k9 .2 .i s o & ) .
154 nslookup - oferă informaţii privind adresele simbolice ale unor
calculatoare.
155 oofice - reprezintă complexa suită de birou OpenOffice .
156 passwd - realizează schimbarea parolei unui utilizator ( passwd
horea).
157 pdf2ps - converteşte un fişier .pdf în format .ps.
158 perl - reprezintă interpretorul de Perl, un limbaj puternic pentru
administrare de sistem şi nu numai ( perl admin.pl ).
159 perldoc - desemnează un utilitar care oferă acces la
documentaţiile Perl (perldoc -f print).
160 pgsql - reprezintă clientul utilizat la conectarea la un server
PostgreSQL în vederea realizării unui dialog prin co-
menzi SQL.
161 pico - reprezintă un editor de texte simplu, oferind aceleaşi
combinaţii de taste ca utilitarul pine.
162 ping - reprezintă un utilitar pentru verificarea conexiunii cu o
altă maşină (ping horea.uab.ro).
163 pinky - desemnează o versiune simplificată a utilitarului
finger, oferind informaţii privitoare la utilizatorii locali
(pinky horea).
164 pr - formatează un fişier text în vederea tipăririi.
165 printerdrake - configurează imprimantele ataşate, disponibil în
Mandrake.
166 procmail - reprezintă un program pentru managementul mesajelor de
e-mail.
167 ps2ascii - extrage informaţiile text dintr-un fişier . p s .
168 ps2pdf - desemnează un utilitar care converteşte fişiere .ps în
fişiere .pdf.
169 ps - afişează informaţii privitoare la procesele din sistem:
115
Sisteme de operare

Nr.crt. Denumire Funcieţie


identificatori,
stare, proprietar etc. (ps ux).
170 pstree - oferă o vedere arborescentă a proceselor din sistem.
171 pwd - afişează directorul curent.
172 python - reprezintă interpretorul de Python, un limbaj puternic
pentru realizarea diverselor sarcini de sistem şi nu nu-
mai (python demontare.py).
173 reboot - restartează sistemul de operare.
174 redhat- - configurează imprimantele ataşate, disponibil
config- în Fedora/RedHat.
printer
175 redhat- - reprezintă un instrument de management al utiliza-
config-users torilor, disponibil în Fedora/RedHat.
176 restore - restaurează copiile de siguranţă create cu dump.
177 rm - şterge fişiere (rm -/temporar/* -Rf).
178 rmdir - şterge un director (rmdir temporar).
179 rpm - realizează managementul pachetelor soft.rpm
(RedHat Package Manager).
180 rpmdrake- - desemnează un utilitar de eliminare a unor pachete
remove .rpm, oferit de Mandrake.
181 rpmdrake - desemnează un utilitar de management al pachetelor .rpm,
oferit de Mandrake, utilizat în special la instala-
rea/actualizarea pachetelor.
182 scp - reprezintă un utilitar pentru copierea de fişiere aflate
la distanţă, în regim securizat (variantă sigură a
programului ftp).
183 script - lansează un interpretor de comenzi astfel încât
dialogul între utilizator şi calculator să fie stocat într-
un fişier ' typescript '.
184 sed - reprezintă un editor în linie de comandă.
185 serviceconf - configurează în mod grafic serviciile de sistem:
niveluri de execuţie, rularea/oprirea unor servicii etc.
186 set - realizează managementul variabilelor unei sesiuni de
lucru, mai ales al celor de sistem: MAIL , PATH, PS1,
TERM etc.
187 sh - reprezintă interpretorul de comenzi „clasic" al
sistemului (implicit este bash).
188 shutdown - realizează oprirea sistemului, posibil cu restartarea lui
(shutdown -h now ).
116
Sisteme de operare

Nr.crt. Denumire Funcieţie


189 sleep - are scop „adormirea" unui proces pentru o durată de timp
(sleep 30 ).
190 sort - sortează conţinutul unui fişier ( sort /etc/passwd ).
191 spell - oferă posibilităţi de detectare/corecţie a erorilor de
gramatică.
192 split - divizează conţinutul unui fişier în fişiere de dimen-
siuni mai mici.
193 ssh - reprezintă un client securizat pentru accesul la distanţă la
un interpretor de comenzi (variantă sigură a pro-
gramului telnet ).
194 startx - lansează sistemul de ferestre XWindow care va oferi
suport pentru un manager de ferestre precum KDE sau
GNOME .
195 stat - oferă informaţii privitoare la un fişier: permisiuni,
dimensiune, pro prietar, data accesării etc. ( stat
/bin/bash ).
196 stty - oferă posibilităţi de setare a terminalului.
197 su - substituie un utilizator ( su - horea ).
198 switchdesk - schimbă managerul de ferestre (mediul desktop ) al
unui utilizator ( switchdesk KDE ).
199 sync - sincronizează conţinutul buffer-elor de memorie,
scrieind informaţiile pe disc.
200 sysctl - modifică diverşi parametri ai nucleului sistemului de
operare.
201 tac - desemnează un program similar cu comanda cat, însă
concatenează liniile de la sfârşitul fişierului către
început ( tac /etc/httpd/logs/ error_log ).
202 tail - afişează ultimele linii ale conţinutului unui fişier
(tail -4 /etc/ mtab).
203 talk - permite realizarea de conversaţii locale sau la dis-tanţă
între perechi de utilizatori.
204 tar - arhivează conţinutul unui grup de fişiere, prezervându-le
informaţiile legate de permisiuni, proprietar, data
creării etc. (creare: tar -cf copie.tar * .ps, dezar-
hivare: tar -xf copie.tar).
205 telnet - reprezintă un program eare realizează conectarea la
distanţă - terminal virtual (telnet localhost 3000).
206 test - testează diverse condiţii: existenţa unui fişier, tipul unui
fişier, valoarea unei variabile de sistem etc. (test -d
117
Sisteme de operare

Nr.crt. Denumire Funcieţie


/tmp && echo "Exista").
207 tex - procesor sofisticat de texte, pe baza căruia ope-rează
latex.
208 tidy - este un utilitar de validare (verificare sintactică) a
documentelor HTML (tidy index.html).
209 time - modifică data/timpul de sistem.
210 top - realizează un top al execuţiei proceselor de pe o
maşină.
211 totem - reprezintă un utilitar pentru vizualizarea de conţinut video,
disponibil în Mandrake.
212 touch - modifică timpul unui fişier la timpul curent sau
creează fişierul, dacă nu există(touch /etc/issue).
213 tr - transformă şiruri de caractere.
214 traceroute - determină ruta de la maşina curentă la un calculator din
reţea (traceroute www.lug.ro).
215 tree - afişează directoarele sub forma unei structuri arbo-
rescente (tree / -d -L 1).
216 troff - reprezintă un procesor de texte, oferind diverse
posibilităţi de formatare a textului.
217 umask - stabileşte permisiunile implicite care vor fi setate la
crearea fişierelor şi directoarelor (umask 700).
218 umount - demontează un dispozitiv, operaţie inversă celei de
montare cu mount (umount /dev/cdrom).
219 unalias - şterge un alias al unei comenzi (unalias 11).
220 uname - oferă informaţii privitoare la maşina curentă.
221 uniq - afişează liniile unice ale unui fişier sortat.
222 unset - elimină o variabilă din cadrul unei sesiuni de lucru.
223 unzip - dezarhivează fişiere .zip comprimate cu zip
(unzip documente.zip).
224 usbview - oferă informaţii referitoare la dispozitivele co-
nectate la porturile USB .
225 useradd - adaugă un utilizator ( useradd horea ).
226 userdel - şterge un utilizator ( userdel ionela ).
227 userdrake - reprezintă un instrument de management al utiliza-
torilor, disponibil în Mandrake .
228 userinfo - oferă diverse informaţii privitoare la un utili-
zator, în Mandrake .
229 usermod - modifică diverşi parametri asociaţi unui utili-
zator ( usermod ionela ).
118
Sisteme de operare

Nr.crt. Denumire Funcieţie


230 users - desemnează un utilitar pentru afişarea utili-
zatorilor conectaţi.
231 vi - reprezintă un editor de texte clasic al sistemu-lui
UNIX .
232 viewres - reprezintă un utilitar pentru vizualizarea resur-
selor sistemului.
233 vim - reprezintă o îmbunătăţire a editorului vi, oferind
diverse facilităţi.
234 vimtutor - desemnează un utilitar pentru învăţarea edito-
rului vim .
235 w - oferă lista sesiunilor de lucru existente în sistem.
236 wall - afişează un mesaj tuturor utilizatorilor din sistem.
237 wc - numără linii, cuvinte şi caractere ale conţinutu-lui
unor fişiere ( wc -l /etc/group ).
238 wget - reprezintă un utilitar folosit la salvarea locală a
unor resurse Web : pagini, fragmente de situri
sau şiruri Web complete ( wget
http:// www.uab.ro/-horea/books.html ).
239 whereis - reprezintă un utilitar care afişează locul un-de
este stocat un program ( whereis traceroute ).
240 which - afişează paginile de manual desemnând un
anumit cuvânt-cheie (which chmod ).
241 who - oferă lista utilizatorilor conectaţi în sistem şi a
sesiunilor lor de lucru.
242 whoami - afişează informaţii privitoare la utilizatorul curent.
243 write - scrie un mesaj la terminalul unui utilizator.
244 xcalc - reprezintă un calculator de buzunar, disponibil
pentru XWindow .
245 xcdroast - inscripţionează CD -uri, oferind o interfaţă
grafică.
246 xclock - reprezintă un ceas afişat de sistemul XWindo w.
247 xdvi - vizualizează fişierele independente de dispozitiv
.dvi (xdvi teza.dvi ).
248 xedit - reprezintă un editor de texte, disponibil pentru
sistemul XWindow .
249 xemacs - este varianta XWindow a editorului de texte
configurabil emacs .
250 xeyes - reprezintă un utilitar de divertisment, disponibil
pentru XWindow, care afişează nişte ochişori urmă-
119
Sisteme de operare

Nr.crt. Denumire Funcieţie


rind cursorul mouse-ului.
251 xf86config - configurează sistemul X.
252 xfig - reprezintă un program de realizare de grafică
vectorială, specializat în generarea de scheme şi
diagrame.
253 xine - reprezintă un utilitar pentru vizualizarea de conţinut
video.
254 xkill - trimite un semnal unei ferestre XWindow, în
vederea eliminării acesteia.
255 xlock - blochează sesiunea de lucru XWindow a unui uti-
lizator.
256 xmag - reprezintă un utilitar de tip „lupă" pentru mărirea
conţinutului grafic dintr-o sesiune XWindow.
257 xman - desemnează echivalentul comenzii man, în acest caz
în XWindow.
258 xmms - desemnează un program pentru derularea de conţinut
multimedia, similar Winamp-ului.
259 xmovie - reprezintă un utilitar pentru vizualizarea de conţinut
video.
260 xpdf - reprezintă un program pentru vizualizarea de
fişiere .pdf (xpdf document.pdf).
261 xscreensaver - reprezintă un program care lansează diverse screen-
saver-e.
262 xterm - reprezintă terminalul XWindow.
263 yelp - reprezintă sistemul de asistenţă folosit de GNOME.
264 zip - arhivează fişiere stocându-le în formatul .zip, com-
patibil cu PKZIP din DOS sau WinZIP din Win-
dows (zip -9 document.zip).

120
Sisteme de operare

BIBLIOGRAFIE

1. Andrew S. Tanenbaum - SISTEME DE OPERARE MODERNE, Ediţia a II-a,


Editura Byblos S.R.L, Bucuresti 2004, ISBN 973-86699-2-8.
2. Abraham Silberchats, Peter Baer Galvin, Greg Garne - Operating Szstem
Concepts, Seventh Edition, John Wiley & Sons. INC 2005, ISBN 978-0-471-69466-3.
3. Vasile Lungu - Procesoare INTEL Programare în limbaj de asamblare , Ediţia a II-a,
Editura Teora, Bucuresti 2006, ISBN 973-20-0099-6.
4. Gabriel Rădulescu - Elemente de arhitectură a sistemelor de calcul. Programare în
limbaj de asamblare, Editura MATRIX ROM, Bucuresti 2007, ISBN 978-973-755-
178-8.
5. Dragoş Acostăchioaie, Sabin Buraga - Utilizare LINUX * Noţiuni de bază şi
practică, Editura POLIROM, Bucuresti 2004, ISBN 978-681-542-0.
6. Mihai Ceapâru - PROGRAMMATION EN LANGUAGE D ASSAMBLAGE,
Editura MATRIX ROM, Bucuresti 2007, ISBN 978-9390-25-0.
7. Cezar Unguraşu, Mirela Petrea, Laurenţiu Vornicu - Învăţaţi rapid LIMBAJUL
DE ASAMBLARE pentru procesoare X86 , Editura EduSoft, Bacău 2006, ISBN 978-
97714-1-2.
8. Gheorghe Muscă - Programarea în Limbaj de asamblare, Editura Teora, Bucuresti
1997, ISBN 973-601-480-0.
9. Radu Mârsanu - Sistemele de operare MS-DOS si UNIX , Editura Tehnica,
Bucuresti 1995, pag 17-118, 119-135, 174-234.
10. V. Caprariu s.c. - Sistemul de operare DOS * Ghidul programatorului,
Microinformatica, Cluj-Napoca 1991, pag. 105- 263.
11. Joldeş Remus şi Olteanu Emil - Arhitectura calculatoarelor, vol. II, Instrucţiunile
familiei INTEL 80X86, Seria Didactica, Alba Iulia 2006.
12. Joldeş Remus, Tulbure Adrian şi Colectivul - Limbajul de asamblare prin
exemple. Îndrumător, Seria Didactica, Alba Iulia 2008.

121