You are on page 1of 274

Sisteme de operare: Mecanisme interne i principii de proiectare

Operating systems: Internals and Design Principless

Universitatea Tehnic a Moldovei


Catedra Automatic i Tehnologii Informaionale

ef catedr Victor Beliu


Ciclu de prelegeri pentru studenii specialitii TI

1
1.INTRODUCERE
1.1. NOIUNI DE BAZ I CLASIFICRI
1.1.1. Noiuni i termeni din domeniul resurselor tehnice
1.1.2. Noiuni i termeni din domeniul sistemelor de operare
1.1.3. Tipuri de sisteme de operare, obiective i funcii
1.1.4. Exemple de sisteme de operare
1.1.4.1. Cazul calculatoarelor personale
1.1.4.2. Gestionarea unor procese industriale
1.1.4.3. Sisteme de operare n timp real
1.1.4.4. Sisteme tranzacionale
1.1.4.5. Sisteme n timp partajat
1.2.SISTEMUL DE OPERARE I PROCESELE
1.3.MAIN IERARHIC I MAIN EXTINS
1.4.ALTE PUNCTE DE VEDERE ASUPRA SISTEMELOR DE OPERARE
1.4.1. Abordare funcional
1.4.2. Abordare din punctul de vedere al interfeei cu utilizatorul
1.5.EVOLUIA SISTEMELOR DE OPERARE
1.5.1. De la poart deschis la tratarea pe loturi
1.5.2. Multiprogramarea i partajarea timpului
1.5.2.1. Organizarea efecturii operaiilor intrare/ieire n memorii tampon
1.5.2.2. Multiprogramarea
1.5.2.3. Sisteme cu timp partajat
1.6.EXEMPLE DE SO: MS DOS, WINDOWS, UNIX I ALTE SISTEME

2
Scopul lucrrii: expunerea bazelor contemporane ale metodelor i mijloacelor
de elaborare a resurselor program de sistem (inclusiv operaii asincrone,
tratarea ntreruperilor, interfeele sistemelor de operare, compromisele
dintre dispozitivele tehnice i resursele program) i pregtirea cititorului
pentru analiza i proiectarea sistemelor de operare (SO).

Un sistem de calcul nu poate s prelucreze date fr s fie programat, un


program constnd dintr-o succesiune de instruciuni ce converg ctre
soluia problemei care se rezolv. Exist dou categorii de programe:
1) programe aplicaii sau simplu aplicaii, care sunt destinate s
rezolve probleme specifice; acestea efectueaz prelucrri ale datelor n
concordan cu cerinele problemei;
2) programe de sistem, destinate coordonrii procesului de operare a
circuitelor sistemului, asistnd aplicaiile. Ele sunt create s faciliteze
utilizarea eficient a resurselor fizice i logice ale sistemului de calcul, s
ajute la dezvoltarea i execuia programelor aplicaii.

Programele de sistem sunt scrise pentru anumite categorii de sisteme de


calcul i nu pot fi folosite pe orice calculator; sunt furnizate de ctre
productorii sistemelor de calcul sau alte firme specializate, fiind astfel
proiectate nct s corespund unei game variate de solicitri.

3
Prin noiunea de sistem de operare nelegem modulele program ale unui SC,
care administreaz resursele tehnice. Modulele n cauz soluioneaz situaiile de
conflict, optimizeaz productivitatea sistemului, sporesc eficiena utilizrii lui. Ele
joac rol de intermediar (interfa) ntre programele utilizatorului i
componentele tehnice ale calculatorului. Alte denumiri istorice ale SO: program
de administrare, monitor, supervizor.

Fig.1.1. Relaia dintre un sistem de operare i componentele unui calculator.


4
Software de sistem Aplicaii

Sisteme de Drivere de Programe Limbaje de


operare dispozitiv utilitare programare

Constau din Sunt Majoritatea Sunt utilizate


unul sau mai programe ce utilitarelor pentru a scrie
multe ofer trateaz programe, ce
programe calculatorului operaiile de pot fi
Controleaz informaii
echipamentele stocare i executate apoi
specifice gestionare a de ctre
hardware
privind un fiierelor calculator
Gestioneaz
toate celelalte anumit Unele Permit
aplicaii echipament utilitare sunt utilizatorilor
Sunt concepute hardware incluse ca s introduc
pentru a lucra Sunt utilizate pri ale SO instruciuni
cu o anumit de SO pentru mai inteligibile
arhitectura comunicarea dect limbajul
hardware cu main 5
echipamentel
Fig. 1.2. Sistemul de operare-interfa ntre hardware i utilizator

6
1.1. NOIUNI DE BAZ I CLASIFICRI

Un calculator const dintr-un ansamblu de componente funcionale fizice i


logice, care coopereaz pentru a satisface cerinele utilizatorilor privind
introducerea, stocarea, prelucrarea, cutarea i transmiterea informaiilor.
Aceste componente funcionale sunt structurate pe niveluri, care
interacioneaz prin interfee bine definite. Suportul fizic (resursele tehnice,
hardware) constituie nivelul inferior al sistemului de calcul construit n baza
unor componente electronice, magnetice, optice, mecanice etc., mai mult sau
mai puin sofisticate n funcie de stadiul de dezvoltare a tehnologiilor
respective.

1.1.1. Noiuni i termeni din domeniul resurselor tehnice


Pentru a trece la noiunile principale, legate de hardware, vom face
cunotin mai nti cu funciile de baz ale unui calculator. Pot fi evideniate
cinci funcii eseniale [2]: iniializarea (bootup), introducerea datelor,
procesarea datelor, stocarea datelor i extragerea rezultatelor:
iniializarea implic testarea prilor importante ale
calculatorului, rularea fiierelor de pornire i ncrcarea altor fiiere
necesare, cum ar fi driverele dispozitivelor periferice;
introducerea reprezint transferul datelor dintr-o surs
extern n calculator. Surse externe pot fi tastatura, mouse-ul, discheta,
discul mobil, memory stick-ul, aparatul digital de fotografiat etc.;
procesarea se refer la manipularea datelor introduse n
scopul producerii unui rezultat (ieirea);
stocarea constituie procesul salvrii informaiilor (date 7sau
programe) ntr-un dispozitiv de pstrare, de exemplu discul fix, pentru
1.1.2. Noiuni i termeni din domeniul sistemelor de operare

Un sistem de operare este un ansamblu de programe de control i de serviciu care


ghideaz un calculator n execuia sarcinilor sale, asist programele de aplicaie i
interacioneaz cu utilizatorul prin intermediul anumitor funciuni. Natura funciilor i
modul n care acestea sunt realizate determin atributele care caracterizeaz un sistem
de operare: timpul de rspuns, simultaneitatea utilizrii, eficiena, partajarea resurselor
i protecia informaiei n calculator, generalitatea, flexibilitatea, extensibilitatea,
fiabilitatea i disponibilitatea, transparena i vizibilitatea.

Timpul de rspuns exprim durata intervalului delimitat de lansarea unei cereri de


serviciu i achitarea acesteia de ctre sistem. Are dou componente: timpul de
ateptare pentru ca cererea respectiv s fie luat n consideraie i timpul de execuie
a acestei cereri.

Simultaneitatea utilizrii msoar gradul n care un sistem poate s execute n acelai


timp mai multe lucrri.

Eficiena msoar proprietatea unui sistem de a folosi n mod optim resursele de care
dispune.

Partajarea resurselor i protecia informaiei caracterizeaz nivelul la care utilizatorii au


posibilitatea s utilizeze n comun informaia prezent n sistem i nivelul la care pot s
comunice ntre ei, n deplin siguran (n sensul evitrii accesului neautorizat i/sau
alterrii intenionate sau accidentale a informaiei). 8
Generalitatea, flexibilitatea i extensibilitatea msoar gradul n care un
sistem poate fi folositor i adaptabil unui context specific, precum i gradul n
care se pot include n sistem noi componente hardware i software fr
eforturi de proiectare i programare suplimentare.
Fiabilitatea i disponibilitatea exprim proprietatea unui sistem de a cdea
foarte rar n pan i de a evita goluri n funcionare din cauza defectrii uneia
sau mai multor componente ale sale.
Transparena i vizibilitatea exprim pe de o parte proprietatea unui sistem
de a face invizibil utilizatorului ceea ce se afl sub interfaa (ascuns de
utilizator) care i se ofer i, pe de alt parte, capacitatea de a permite
utilizatorilor si s obin anumite informaii despre modul cum el
funcioneaz, informaii de care, n mod teoretic, ei nu au nevoie pentru a
beneficia de o utilizare complet, ns care ar putea s-i ajute la obinerea
unei utilizri mai eficiente.
Resursele program (logice) reprezint seturi de programe i date utilizate
pentru soluionarea anumitor probleme.
Programul este transcrierea ntr-un limbaj de programare a unui algoritm,
altfel programul este o secven de instruciuni sau simplu, cod.
Utilizatorul (Userul) este oricare doritor s ndeplineasc anumite lucrri la
calculator. Prin lucrare (sarcin, task) vom nelege un set de aciuni,
necesare pentru ndeplinirea unui lucru anume. Sarcina poate conine mai
muli pai. Pai de task sunt uniti de lucru, care vor fi ndeplinite
consecutiv, de exemplu, trei pai compilare, ncrcare i execuie. Primind o
lucrare de la utilizator, SO poate crea cteva procese. Deci, procesele sunt
secvene de calcul care pot fi efectuate paralel cu alte secvene de calcul.
Relaia dintre user, task, proces i spaiu de adrese (sau de adresare) este 9
prezentat n fig.1.4.
User
Creat de utilizator sau de
mediul integrat
Task

Creat de sistem
Ansamblulprogramelor
Pas de task . . . . . Pas de task i datelor accesate n
timpul procesului,
formeaz spaiul de
adrese. Fig. conine
Proces . . . . . Proces
dou exemple de spaii
de adresare unul
Componente Regulator Regulator I/O pentru procesul de
standard ale
Planificator Planificator I/O intrare/ieire i altul
sistemului de
operare pentru procesul UC. Una
Sistem de fiiere ...
din destinaiile sistemului
... Sistem de fiiere de operare este de a
asigura proiectarea
Program Main Program de iniiere I/O
Componente spaiului de adresare
definite de Subprogram A a unui proces n memoria
utilizator Bufere date fizic. Pentru rezolvarea
Subprogram B
...
acestei probleme sunt
... utilizate att resurse tehnice
Spaiu de adresare (procesCPU) Spaiu de adresare (proces I/O) ct i resurse logice.

Relaia dintre user, task, proces i spaiu de adrese

10
1.1.3. Tipuri de sisteme de operare, obiective i funcii
Valorile concrete ale atributelor sistemelor de operare i combinaii ale
acestora determin diverse tipuri de SO. Conform acestor atribute pot fi
evideniate urmtoarele tipuri de sisteme de operare:
secveniale,
cu multiprogramare,
cu prelucrare multipl,
n timp real, etc.

Un sistem secvenial (tratare pe loturi, engl. batch processing, fr. traitement


par lots) execut la un moment dat un singur program, care trebuie terminat
nainte de a lua ncepe execuia unui alt program.

Sistemele cu multiprogramare accept la un moment dat mai multe programe


n memoria central, acestea aflndu-se n diferite stadii de execuie.

Un sistem de calcul cu prelucrare multipl dispune de mai multe procesoare,


care pot s execute simultan unul sau mai multe programe.

Sistemele de timp real funcioneaz, de obicei, n cadrul unor sisteme de


comand i este necesar ca valorile anumitor atribute s se ncadreze n
limite destul de restrictive, dictate de dinamica proceselor comandate.

11
Tipurile de sisteme de operare enumerate mai sus nu sunt nici disjuncte i
nici exhaustive. Dac se face o analiz prin prisma obiectivelor pe care le
urmresc, majoritatea sistemelor existente pot fi ncadrate n mai multe
clase.

La capitolul obiective vom aminti, n primul rnd, de maximizarea eficienei


sistemului de calcul i a satisfaciei utilizatorilor. Tot la acest capitol poate fi
trecut i cererea de minimizare a posibilitii de apariie a unor erori i de
maximizare a transparenei sistemului de operare, garantarea securitii
datelor, optimizarea controlului comunicaiilor n cazul unei reele de
calculatoare.

Un obiectiv foarte important este necesitatea de minimizare a efortului


concepie - realizare a sistemului, ultim n enumerare, dar poate cel mai
important pentru specialiti.

Toate aceste obiective sunt consecine ale dezideratului principal: un sistem


de operare este destinat s administreze resursele fizice i logice ale
sistemului de calcul i anume, memoria, procesorul (procesoarele),
dispozitivele periferice i informaia.

Un sistem de operare este obligat:


s pstreze informaia despre starea fiecrei resurse,
s ia decizia crui proces s i se aloce resursa, n ce cantitate, cnd, 12
cum
i unde,
1.1.4. Exemple de sisteme de operare

1.1.4.1. Cazul calculatoarelor personale

Cea mai simpl configuraie a unui calculator personal (PC) include o unitate
central, o memorie principal, un display, o tastatur i un mouse. Aceast
configuraie, de regul, este completat de o memorie secundar i o
imprimant.

Utilizatorul unui astfel de sistem va cere minimum urmtoarele dou tipuri de


servicii:
identificarea i crearea unor fiiere sau mulimi structurate de
informaii;
stocarea acestor fiiere n memoria secundar; transferarea informaiilor
ntre fiiere i dispozitivele de intrare/ieire;
execuia unor programe existente sau introduse sub form de fiiere n
PC;
introducerea datelor necesare pentru execuia programului (de la
tastatur, dintr-un fiier sau de la alte surse periferice); listarea
rezultatelor la display, imprimant sau copierea lor ntr-un fiier.

Sistemul de operare va acorda aceste servicii prin intermediul unui limbaj


special, numit limbaj de comand, introducndu-se de la tastatur
instruciuni de forma <aciune> <parametri> sau utiliznd mouse-ul i o
interfa grafic a utilizatorului, acionrile mouse-lui fiind imediat
interpretate de sistem. 13
Exemple de secvene tipice de activiti n cazul unui PC:

elaborarea unui program;


introducerea programului cu ajutorul tastaturii i a unui editor de texte;
execuia programului introducndu-se datele necesare de la tastatur i
extrgnd rezultatele la display sau imprimant;
modificarea programului, dac rezultatele nu sunt satisfctoare i
repetarea execuiei;
perfectarea versiunii finale a programului, inclusiv documentarea la
necesitate a acestuia;
exploatarea unui program;
cererea de execuie a unui program deja existent. Vor fi pregtite n
prealabil datele de intrare sau acestea vor fi introduse n mod interactiv la
cerere cu ajutorul tastaturii; dintr-un fiier sau de la alte surse periferice;
afiarea rezultatelor pe ecran, listarea la imprimant sau copierea lor
ntr-un fiier pentru o utilizare ulterioar.

Pentru acest tip de sisteme cele mai importante caracteristici sunt:


fiabilitatea;
eficacitatea;
simplitatea utilizrii;
facilitatea extensibilitii.

14
1.1.4.2. Gestionarea unor procese industriale

Reactor

Robinete
A Captoare
C

Semnale de
msur

nregistrri
Semnale de comand
Calculator

Fig.1.6. Schema unui proces. chimic


Procesul tehnologic este comandat de un calculator care ndeplinete urmtoarele funcii:
Reglare. Pentru o derulare mai bun a procesului de producere parametrii de funcionare (temperatura, presiune
concentraia, etc.) trebuie s se afle ntr-o plaj (ntr-un diapazon) de valori predefinite. Pentru aceasta va
debitul de intrare a materiilor prime A sau B. Valorile parametrilor de funcionare a procesului sunt msur
ajutorul unor captoare. Calculatorul preia aceste msurri i, n dependen de algoritmul de gestionare,
robinetele de intrare.
nregistrare. Rezultatele msurrilor sunt periodic nregistrate; valorile lor sunt afiate pe un tablou (panou) de b
i recopiate ntr-un fiier (jurnal de bord) n scopul unor prelucrri ulterioare (date statistice).
Securitate. n cazul n care unul dintre parametrii msurai depete o valoare critic predefinit reactorul
15 trebu
Acest mod de funcionare introduce unele restricii, descrise mai jos.
Msurrile sunt efectuate periodic; fie T valoarea intervalului de timp dintre
dou msurri consecutive (perioada de eantionare), iar t - timpul total de
prelucrare a datelor de ctre calculator,. Sistemul va funciona doar n cazul
respectrii relaiei de restricionare t mai mic T.

Securitatea sistemului are prioritate maxim. Depirea unor valori critice


trebuie s fie detectat n orice moment i tratarea acestor accidente va
ntrerupe toate operaiile n curs de execuie.

Funciile principale ale sistemului de operare sunt:


acionarea dispozitivelor externe;
evidena timpului real;
reacia la evenimentele exterioare (oprire de urgen);
gestiunea informaiilor (pstrarea i ntreinerea fiierului jurnalului de
bord).

Existena unor restricii (cerine) stricte a duratei de prelucrare a


informaiilor, noiunea de tratare prioritar, conectarea la nite dispozitive
exterioare de msurare i acionare sunt caracteristice aplicaiilor
informatice n timp real. Pot fi menionate i alte domenii cu comand n
timp real: centralele telefonice, comanda aparatelor de zbor, robotica,
monitoringul medical, etc.

n cazul acestor sisteme caracteristica principal este fiabilitatea: rezultatele


16
unei funcionri neadecvate pot fi catastrofale. Sistemul trebuie s garanteze
un serviciu minim n cazul unor cderi n pan a dispozitivelor tehnice, unor
1.1.4.3. Sisteme de operare n timp real

Pentru o lung perioad de timp sistemele de operare de timp real au fost


utilizate, de regul, n aplicaii specializate cu constrngeri din punctul de
vedere al vitezei de rspuns i al predictibilitii. Dezvoltarea excepional a
reelelor de calculatoare, a Internetului i necesitatea tot mai stringent de
asistare a aplicaiilor n timp real (n special multimedia) pe calculatoare de
tip desktop au impus apariia sistemelor de operare de timp real.

Proiectarea sistemelor de operare de timp real este mult mai complicat


dect proiectarea sistemelor de operare clasice datorit numeroaselor
condiionri ce trebuie rezolvate n timpul execuiei (engl., runtime) i care
impun schimbarea n mod dinamic a comportrii unui element de execuie
(proces, task, thread).

Prin definiie, toate aplicaiile de tip Internet includ aspecte de timp real.
Menionm cteva dintre sistemele de operare de timp real comerciale mai
cunoscute: QNX, VxWorks, pSOS, Vrtx, OS/9, Lynx. Majoritatea acestor
sisteme de operare sunt portabile, fiind implementate pe numeroase
procesoare.

O definiie simplist a software-ului de timp real ar fi: este acel software care
trebuie s opereze n cadrul unor constrngeri specifice de timp.

17
1.1.4.4. Sisteme tranzacionale

Caracteristicile principale:
sistemul gestioneaz un set de informaii sau baze de date, care pot
atinge volume importante de informaie;
asupra acestor informaii pot fi executate un anumit numr de operaii
predefinite sau tranzacii, adesea interactive;
sistemul este dotat cu un mare numr de puncte de acces i un mare
numr de tranzacii se pot derula simultan.

Ca exemplu pot fi menionate sistemele de rezervare a biletelor de tren sau


avion, de gestionare a conturilor bancare, de arhivare i consultare a
documentelor.

Restriciile sunt n primul rnd legate de integritatea i coerena intern a


informaiilor, care formeaz bazele de date. Aceste restricii depind, evident,
de aplicaie.

De exemplu, numrul de locuri rezervate ntr-un avion nu poate depi


numrul locurilor disponibile, un loc distinct poate fi atribuit unei singure
persoane, etc.

Caracteristicile obligatorii ale unui astfel de sistem tranzacional sunt


disponibilitatea i fiabilitatea; pentru unele sisteme poate fi important i
tolerana la defeciuni. O caracteristic important ale sistemelor
tranzacionale este multitudinea activitilor paralele, iar n multe cazuri18
i
repartizarea geografic a componentelor.
1.1.4.5. Sisteme n timp partajat

Destinaia principal a unor astfel de sisteme este furnizarea serviciilor


necesare unei mulimi de utilizatori, fiecare dintre ei beneficiind de servicii:
echivalente serviciilor unui calculator individual;
legate de existena unei comuniti de utilizatori: partajarea
informaiilor, comunicaii ntre utilizatori.

Problemele care apar datorit conceptului de partajare a timpului sunt o


combinaie a problemelor existente n cazul unui calculator individual cu cele
din sistemele tranzacionale i pot fi clasificate dup cum urmeaz:
definirea mainii virtuale oferite fiecrui utilizator;
partajarea i alocarea resurselor fizice comune: procesoare, memorii,
dispozitive de comunicaie;
gestionarea informaiilor partajate i a comunicaiilor.

Caracteristicile obligatorii ale unui astfel de sistem mbin, n egal msur,


calitile unui sistem de operare al unui calculator individual i al unui sistem
tranzacional, cum ar fi: disponibilitatea, fiabilitatea, securitatea, exploatarea
optim a caracteristicilor resurselor fizice, calitatea interfeei i serviciilor
utilizatorului, facilitatea adaptrii i extensibilitii.

19
1.2. Sistemul de operare i procesele
Noiunea de proces este asociat conceptului de lucrare i poate fi definit ca
o suit temporal de execuii de instruciuni, considerat ca fiind o entitate
de baz n descrierea sau analiza funcionrii unui sistem. Evoluia n timp a
unui proces presupune un consum de resurse, dictat de natura i
complexitatea instruciunilor de execuie. Orice utilizare a unei resurse este
asociat, la un moment dat, unui proces i procesul respectiv i asum
rspunderea de utilizare a acestei resurse. n particular, rezult c ori de cte
ori se execut procedurile de sistem, resursele, pe care le utilizeaz acesta,
intr n administrarea procesului, care a cerut serviciul. Resursele alocate
unui proces variaz n timp.

Anterior un sistem de operare a fost definit ca un set de programe destinat


s administreze resursele. Care sunt relaiile dintre componentele sistemului
de operare?
Atunci cnd un proces este creat, care
Procesul 1 este ordinea de utilizare a unui
program anume?
Procesul 2

Procesul 3
Sistemul de
operare

20
Fig.1.7. Trei procese ntr-un sistem cu multiprogramare.
Ciclul de via a unui proces poate fi reprezentat printr-un set de stri ale
procesului i trecerea de la o stare la alta. Vom evidenia trei stri
elementare ale unui proces: proces ales (sau exe) procesului i s-a alocat un
procesor, este n curs de execuie, proces blocat procesul ateapt s se
produc un anumit eveniment, al crui apariie este indispensabil, proces
eligibil procesul are la dispoziie toate resursele necesare, lips fiind doar
procesorul, adic procesul este pregtit s se execute din momentul alocrii
unitii centrale (fig.1.8).
Procesului i s-a
alocat
procesorul Procesul
Ales (Exe) ateapt
terminarea
operaiei I/O

Operaia de
I/O s-a
terminat

Eligibil Blocat
(Ready) (Wait)

Fig. 1.8. Ciclul de via a unui proces 21


Administrarea
memoriei
Administrarea
Expirarea dispozitivelor Administrarea
intervalului Eliberarea procesoarelor
de timp memoriei
Starea Eliberarea Eliberarea
procesorului dispozitivelor procesorului
Administrarea
procesoarelor
Ales Terminare
Administrarea
procesoarelor
Cerere de citire
informaii

Prezentare Pstrare Eligibil Blocat


Gestiunea
informaiei

Administrarea Iniiere I/O


Administrarea procesoarelor
resurselor
Administrarea
Toate procesoarelor Administrarea
MO este accesibil? dispozitivele sunt dispozitivelor
alocate?

Creare proces I/O


Gestiunea Semnal
informaiei Administrarea Administrarea
memoriei dispozitivelor
Administrarea
procesoarelor

Fig.1.9. Schimbarea strilor unui proces i componentele SO responsabile de aceste 22


schimbri
1.3. Main ierarhic i main extins

Doar cu cteva decenii n urm un utilizator era nevoit s programeze n


zerouri i uniti, utiliznd un calculator fr hainele program. Chiar i
specialitii nu prea iubesc s scrie programe ntr-un limbaj de asamblare sau
utiliznd doar instruciuni din setul, garantat de hardware.
Un program elaborat de un specialist poate fi de forma:
1. Transfer C, B stabilete C=B
2. Gsete zona 80, X se gsesc 80 de octei de memorie liberi i se plaseaz
adresa zonei n X
3. Introdu date n X se citesc datele indicate n zona X
4. Compar X(2), /* se compar dac coninutul primilor 2 octei ai zonei X
coincide cu /*?
5. Dac da, stop dac coincid, salt la STOP

Instruciunile 1, 4 i 5 sunt instruciuni standard n multe calculatoare


contemporane. ns execuia corect i eficient a instruciunilor 2 i 3 poate
necesita ndeplinirea a zeci, sute sau chiar mii de comenzi din setul standard,
deoarece aceste instruciuni cer interaciunea cu unele resurse cheie, cum ar
fi memoria operativ i dispozitivele de intrare/ieire. Sistemul de operare
asigur instruciuni pentru realizarea unor astfel de funcii de administrare a
resurselor. Din aceast cauz, instruciunile 2 i 3 sunt instruciuni ale
mainii extinse, neavnd instruciuni echivalente n setul de instruciuni
hardware. Sistemul de operare completeaz (extinde) setul standard, realizat
23
hardware, cu instruciuni de acest gen.
Setul de instruciuni realizat hardware mpreun cu instruciunile
suplimentare ale sistemului de operare formeaz sistemul de comenzi al
mainii extinse. n fig.1.10. este reprezentat (n mod grafic) conceptul de
main extins.
Procesul 1 Procesul 2
Maina extins

Maina goal Programele


utilizatorului
(procese)

Sistemul de operare
Procesul 4
Procesul 3

Fig.1.10. Maina extins.

Nucleul sistemului de operare va fi executat pe maina goal, iar


programele utilizatorului pe maina extins. S facem cunotin acum 24
cu
modul n care sunt organizate ntr-un tot ntreg componentele sistemelor de
operare.
Componente ale S.O.

Sistemul de operare Sistemul de operare


Procesul A Procesul B

Procesul 1 Procesul 2
Maina extins extern

Maina extins
intern

Maina Programele
goal utilizatorului
(procese)

Funcii cheie ale


S.O.

Procesul 4 Alte funcii Procesul 3


ale S.O.

Fig.1.11. Ilustrarea conceptului de main ierarhic,

25
Taskuri

Planificator de taskuri

Procesul 2
Procesul 1 Procesul 3 Procese I/O care
I/O de sistem deservesc procesul 3
al utilizatorului
Proces creat Stratul 2
de utilizator

Proces I/O
Nivelul 5
Stratul 1
Nivelul 4

Nivelul 3

Nivelul 2 Stratul 0
Nivelul 1

Maina
goal
Administrare
procesoare (P,V),
planificare procese
Administrare memorie
Administrare procesoare (nivel superior,
mesaje, creare i distrugere procese)

Administrare dispozitive

Administrare informaie
26
Fig.1.12. Structura ierarhic a sistemului de
1.4. Alte puncte de vedere asupra sistemelor de operare
Sistemele de operare pot fi abordate din diferite puncte de vedere, cum ar fi
SO i procesele, SO i maina extins sau SO i maina ierarhic. Exist i
alte puncte de vedere asupra sistemelor de operare pe care un specialist ar
trebui s le cunoasc.

1.4.1. Abordare funcional


Pentru un utilizator obinuit, convins c un calculator este doar un
instrument care l ajut n soluionarea unor probleme din domeniul su de
activitate, noiunile, cum ar fi administrarea memoriei cu paginaie sau
driverele dispozitivelor, nu semnific prea multe. Destinaia principal a unui
sistem de operare pentru aceast categorie de utilizatori este punerea la
dispoziie a unui set de programe care l-ar ajuta n formularea i soluionare
problemelor concrete ce in de domeniul su de activitate.

1.4.2. Abordare din punctul de vedere al interfeei cu utilizatorul


Interfaa sistemului de operare cu utilizatorul prezint un interes aparte.
Progresul n acest domeniu este spectaculos, dac vom lua n consideraie c
n primele sisteme de operare utilizatorul era obligat s indice n mod explicit
i manual (n regim textual) fiecare pas, orict de nesemnificativ ar fi prut.
Formularea pailor cu ajutorul unui limbaj specializat, cum ar fi Job Control
Language (JCL), nu a schimbat substanial situaia.

27
2. TEHNICI DE EXECUIE I COMUNICAIE
2.1. Modul secvenial de execuie a unui program
2.1.1. Noiuni fundamentale
2.1.2. Starea i contextul procesorului
2.2. ntreruperi, devieri, apelarea supervizorului
2.2.1. Activiti asincrone
2.2.2. Mecanisme de comutare a contextului
2.2.3. ntreruperi
2.2.4. Devieri i apelarea supervizorului
2.2.5. Exemple de sisteme de ntreruperi
2.3. Implementarea mecanismelor de comutare a contextului
2.3.1. Utilizarea devierilor i apelrii supervizorului
2.3.2. Exemple de utilizare a ntreruperilor
2.3.3. Concluzii
2.4. Programarea operaiilor de intrare-ieire
2.4.1. Organizarea general
2.4.2. Metode de comand a perifericelor
2.4.3. Intrri-ieiri buferizate n memorie
2.4.4. ncrcarea iniial
Exerciii

28
Mecanismele, care dau posibilitatea unui calculator s interacioneze cu
mediul exterior, pe de o parte, i s manipuleze mai multe sarcini, pe de alta,
formeaz baza oricrui sistem de operare.
2.1. Modul secvenial de execuie a unui program
Nucleul: memoria + procesorul. Instruciunile i datele se afl n segmente
distincte.
Execuia instruciunilor, care formeaz un program secvenial, conduce la
evoluia strii calculatorului. Evoluia strii calculatorului poart un caracter
discret, starea este observabil doar n momente de timp numite puncte de
observare.
Starea calculatorului este definit de starea procesorului i starea memoriei.
Starea memoriei este determinat de coninutul locaiunilor segmentelor
ncrcate n memorie. Starea procesorului este definit de coninutul setului
de registre, ataate procesorului.
2.1.1. Noiuni fundamentale
Un program secvenial = o mulime de proceduri, care se pot apela reciproc.
Fiecrei proceduri i este asociat un segment distinct de procedur. Datele
sunt reprezentate prin segmente, pot fi proprii unei proceduri sau partajate
ntre mai multe proceduri.

Numim activitate fenomenul care rezult din execuia nentrerupt a unei


proceduri unice. !!Execuia unui program secvenial const dintr-un lan de
activiti!!!!

Numim context al unei activiti mulimea informaiilor accesibile


procesorului n cursul acestei activiti. Contextul activitii este compus29din
contextul procesorului (registrele programabile i interne) i contextul
Exemplul 2.1. O procedur p (apelant) provoac execuia unei proceduri q
(apelate) cu ajutorul unei secvene de apel care conine urmtoarele
etape:
1. Pregtirea parametrilor, transmii de ctre procedura p procedurii q,
2. Salvarea parial a contextului lui p, necesar la retur,
3. nlocuirea contextului procedurii p prin contextul lui q.

La revenire din procedura q avem o schem simetric, doar contextul lui q


fiind pierdut:
1. Pregtirea rezultatelor, transmise de ctre procedura q procedurii p,
2. Restabilirea contextului procedurii p, salvat nainte de apel.

2.1.1.1. Mecanisme de execuie secvenial


Vom descrie un mecanism general pentru execuia programelor
secveniale, formate dintr-o suit de activiti, rezultate din
execuia unei proceduri sau corutine. Acest mecanism realizeaz
funciile urmtoare:

1. Salvarea i restabilirea contextului la apelare i retur,


2. Transmiterea parametrilor ntre procedurile apelant i
apelat,
3. Administrarea unei zone de lucru proprii fiecrei
proceduri, cu permisiunea apelurilor recursive. 30
Cazul procedurilor.
Structura de date - stiva de execuie. Descriem o organizare foarte apropiat
schemei de execuie din limbajul de programare C, presupunnd
respectarea urmtoarelor ipoteze:
1. Parametrii unei proceduri sunt transmii prin valori; la retur un singur rezultat
este returnat,
2. Procedurile pot fi apelate recursiv (direct sau indirect).

La fiecare apelare a procedurii o structur de date numit regiune a mediului


(sau simplu mediul procedurii) este creat n vrful stivei de execuie,
care va dispare la returul respectiv. O procedur apelat recursiv are n
stiv attea medii cte execuii neterminate exist pentru aceast
procedur. La un moment concret de timp mediul din top-ul stivei
corespunde procedurii q n curs de execuie (procedura activ), mediul
imediat urmtor este al procedurii p, care a apelat procedura q, etc.
Stiva este administrat prin intermediul a doi pointeri (fig.2.1.):
baza pointerul care indic baza mediului procedurii active,
top pointerul care indic primul amplasament
top liber pentru a crea un nou
mediu. top q
baza
p
p
baza
Stiv Mediul procedurii
Stiv
nainte de apelarea procedurii q de
ctre procedura p Dup apelarea procedurii q
Fig.2.1. Stiva de execuie
31
Mediul procedurii conine urmtoarele informaii:
informaii de salvare i legturile de retur
un pointer la baza contextului procedurii apelante
adresa returului
un amplasament pentru rezultat
parametri
n+1 amplasamente, primul coninnd numrul de parametri,
variabilele locale i spaiul de lucru al procedurii.

Operaiile executate la apelarea i returul procedurii sunt urmtoarele:


Apelare
alocarea unei zone n stiva de execuie pentru mediul procedurii apelate
temp:=baza
baza:=top
top:=top+dimensiunea mediului
salvarea informaiilor de retur
baza_veche:=temp
memorizarea adresei de retur
ordonarea parametrilor
executarea unei ramificaii la procedura apelat.
Retur
salvarea rezultatului ntr-un amplasament stabilit Rezumat: contextul memoriei
unei activiti la un moment
restabilirea informaiilor de retur i eliberarea mediului
curent de timp conine, n afara
temp:=adresa de retur segmentului procedurii n
top:=baza curs de execuie i
baza:=baza_veche segmentele de date, zona
returul mediului curent din stiva de
ramificare *temp ramificare indirect execuie. 32
2.1.2. Starea i contextul procesorului
Starea procesorului este determinat de coninutul registrelor acestuia.
Registrele pot fi:
adresabile, numite registre generale, manipulate de programe,
registre speciale - cuvnt de stare program (program status word, PSW).
PSW conine informaii:
Referitoare la starea procesorului:
Starea de execuie. Procesorul se poate afla n starea activ n care ndeplinete
instrucii, sau n starea de ateptare, cnd execuia este suspendat. Tranziia activ
ateptare se realizeaz prin ncrcarea cuvntului de stare sau prin executarea
unei instruciuni speciale; trecerea invers ateptare activ este n mod obligator
rezultatul unei ntreruperi.

Modul de funcionare:
Protecie - se permite doar programelor SO executarea unor instruciuni anumite
(speciale), programele utilizatorilor neavnd acces la aceste instruciuni. Aceasta
poate fi realizat definind dou moduri de funcionare a calculatorului, care se
deosebesc printr-un bit indicator n cuvntul de stare: modul supervizor i modul
program.

Masca ntreruperilor.

Referitoare la contextul accesibil al memoriei i drepturile de acces asociate: tabele de


segmente, indicatori de protecie a memoriei, etc.

Referitoare la derularea activitii curente: codul condiiei, contorul operaiei33


urmtoare (contor ordinal). Pentru unele calculatoare contorul, care conine adresa
operaiei urmtoare, poate fi un registru distinct al cuvntului de stare, pentru altele el
2.2. ntreruperi, devieri, apelarea supervizorului

2.2.1. Activiti asincrone

Modelul descris mai sus poate fi folosit doar pentru un singur program,
reprezentat printr-o secven de activiti, executate pe un singur procesor.
Unicele mecanisme necesare pentru organizarea comunicrilor ntre activiti
sunt operaiile de apelare i retur pentru proceduri sau reluare pentru
corutine.

Pentru cazuri mai generale sunt necesare mecanisme suplimentare, cum ar fi


conceptele de asincronism sau de protecie reciproc ntre activiti.

Prin asincronism nelegem efectul care l pot avea asupra derulrii unei
activiti anumite evenimente exterioare.

Numim protecie reciproc ntre activiti o modificare mai profund a


contextului, atunci cnd se trece de la o activitate la alta, n comparaie cu
ceea ce are loc n cazul unei simple apelri de procedur.

Un caz tipic de asincronism este executarea intrrilor-ieirilor simultan cu


execuia unui program. Trebuie s fie asigurat posibilitatea informrii
programului despre terminarea unui transfer de informaii. O prim
posibilitate, care nu necesit utilizarea unor dispozitive speciale, este cea
34 a
ateptrii active, prezentat mai jos.
CDC Cyber 170: un PC i 10 PP. Programele sistemului de operare erau
executate pe PP: unul dintre acestea, numit PS, avea "grij" de
nlnuirea lucrrilor i alocarea resurselor, celelalte, notate PES(i), erau
specializate n operaii de I/E. PC i PP comunicau prin intermediul unei
memorii comune. Schematic, o operaie de I/E se va derula n felul
urmtor:

programul utilizatorului programul supervizor programul pentru I/E


<cerere de I/E> ciclu ciclu
D:=1; if D=1 then if DEX(i)=1 then
F:=0; caut PES(i); execut I/E;
DEX(i):=1; <sincron>
FEX(i):=0; FEX(i):=1;
endif endif
<test terminare I/E> endciclu
if F=1 then <test terminare execuie>
if FEX(i)=1 then
F:=1;
endif
endciclu
Comentarii:
1. relaiile ntre PC i PS, pe de o parte, i PS i PES, pe de alta, au aceeai schem.
Fiecare indicator poate fi pus n 1 sau consultat de un singur procesor.
2. procesorul central este n totalitate eliberat de operaiile de I/E. El poate fi ncrcat
cu alte lucrri n timpul acestor operaii. n acelai timp, programul, care cere
transferuri de informaii verific n mod explicit terminarea operaiilor de I/E.
35
3. operaiile de I/E sunt ele nsi separate n dou pri: supervizarea (alegerea
procesorului de intrare-ieire n funcie de starea lui PES i urgena operaiei) i
Limitele metodei de ateptare activ.

Exemplul 2.3. Sistem multiprocesoral. Fie un calculator, arhitectura cruia presupune o


memorie comun la care sunt asociate mai multe procesoare identice (sistem
multiprocesoral cu memorie comun), aceste procesoare nefiind specializate cum a fost n
cazul precedent, ci banalizate, adic o activitate poate fi executat pe oricare procesor.
Comunicarea ntre activitile executate pe diferite procesoare poate fi realizat prin
modificarea i testarea periodic a indicatorilor memoriei comune. ns ateptarea activ
conduce n acest caz la eficien sczut, deoarece consultarea periodic imobilizeaz
procesorul.

Exemplul 2.4. Msurarea timpului. n cadrul derulrii unui program adesea este necesar s
se ia n consideraie timpul real (cazul proceselor tehnologice, raionamente de securitate
- oprirea unui program care abuzeaz de procesor din cauza unei bucle infinite, etc.).
Deoarece ceasul calculatorului este un dispozitiv extern procesorului, el trebuie periodic
consultat de ctre program, soluie costisitoare i adesea imprecis. Este necesar un
mecanism care ar permite ceasului la momente fixe s acioneze asupra procesorului.

Exemplul 2.5. Intervenii externe. Din mai multe considerente (for major, securitate,
etc.) poate fi necesar s existe posibilitatea ntreruperii derulrii unui program pentru a
impune procesorul s execute o aciune anume. Aceast ntrerupere poate fi declanat de
ctre un operator uman, un dispozitiv automat, etc. Este o situaie analogic cu cea din
exemplul precedent; din aceleai considerente nu este binevenit consultarea periodic a
unui indicator. Avem nevoie de un mecanism de acionare direct n acest caz.

36
2.2.2. Mecanisme de comutare a contextului

Comutarea contextului unui procesor permite executarea ntr-o manier


indivizibil (atomar) a urmtoarelor dou operaii:
1. trecerea cuvntului de stare ntr-un amplasament specificat al memoriei,
2. ncrcarea n cuvntul de stare a coninutului unui alt amplasament specificat al
memoriei.

Comutarea contextului poate fi necesar din mai multe cauze distincte.


Presupunem c fiecrei cauze i-a fost asociat un numr de ordine. Pot fi
ntlnite dou scheme de comutare a contextului.
1. Salvare n amplasamente fixe. Fiecrei cauze (numrul unei cauze fiind i) i sunt
ataate n mod constant dou amplasamente de memorie adresele crora le
vom nota prin csp_vechi[i] i csp_nou[i] (csp semnificnd cuvnt de stare
program). Comutarea se produce dup cum urmeaz:
Mp[csp_vechi[i]]:=<cuvnt de stare program>
<cuvnt de stare program>:= Mp[csp_nou[i]]
n setul de instruciuni exist o instruciune privilegiat schimb_csp(adr) cu urmtorul
efect:
<cuvnt de stare program>:= Mp[adr].
2. Salvare ntr-o stiv. Acelai procedeu n ceea ce const cuvntul de stare nou.
ns cuvntul de stare vechi nu este salvat ntr-un amplasament fix, ci ntr-o
stiv special:
ptr :=ptr+1
stiva[ptr] :=<cuvnt de stare program>
<cuvnt de stare program> := Mp[csp_nou[i]]
Instruciunea schimb_csp(adr) este identic celei din 1); exist ns i o instruciune
restabilete_csp, care restabilete PSW folosind pentru acesta top-ul stivei:
<cuvnt de stare program> :=stiva[ptr] 37
ptr :=ptr-1
Comutarea contextului, descris mai sus, este declanat sub influena strii
unor indicatori interni (din PSW) pe care procesorul i consult la
interpretarea fiecrei instruciuni. Conform semnificaiei acestor indicatori i
maniera n care ei sunt modificai, pot fi evideniate trei mecanisme de
comutare, descrise n tabelul de mai jos:

Tabelul 2.1. Mecanisme de comutare a contextului


Denumirea Cauza Utilizarea
mecanismului

ntrerupere Exterioar derulrii Reacionare la un eveniment


instruciunii curente asincron extern

Deviere Legat de derularea Tratarea unei erori sau situaii


instruciunii curente excepionale

Apelarea supervizorului Comutare explicit Apelarea unei funcii a S.O.

Adesea toate aceste trei denumiri sunt nlocuite cu una singur - ntrerupere.

38
2.2.3. ntreruperi
ntreruperea - comutarea contextului procesorului declanat de o cauz
extern derulrii instruciunii curente. Fizic = trimiterea unui semnal
procesorului, acest semnal provocnd schimbarea strii unuia dintre
indicatorii, consultai n cursul executrii fiecrei instruciuni. Semnalul
poate proveni de la alt procesor, de la un organ de I/E, de la un dispozitiv
extern, i n genere, de la orice proces fizic, extern procesorului ntrerupt.
O ntrerupere permite s cerem procesorului s suspende executarea
programului curent, din primul punct ntreruptibil, i s treac la execuia
unui program predefinit. Acesta din urm este numit program de tratare
a ntreruperii (interrupt handler, eng., traitant de l'interruption, fr.).
Programul de tratare a ntreruperii este executat ntr-un context diferit
de cel al programului ntrerupt, diferena fiind legat de modul de
tratare, protecie, informaiile accesibile, etc.
Nivele de prioritate. Cauzele care duc la necesitatea ntreruperii unui procesor
sunt diferite, drept rezultat i programele predefinite, care trateaz
ntreruperile difer. Mecanismul ntreruperilor trebuie s poat deosebi
aceste cauze. Dou scheme de baz sunt utilizate n acest scop:
1. Exist un indicator unic pentru toate ntreruperile. Acestui indicator i este
asociat un program de tratare a ntreruperilor. Codul ntreruperii, care se conine
n PSW sau ntr-un amplasament de memorie, d posibilitatea deosebirii
cauzelor. Programul de tratare a ntreruperilor consult mai nti codul
ntreruperii pentru a stabili originea acesteia, apoi se va trece la tratarea
propriu-zis.
39
2. Fiecrei cauze este ataat un indicator, se mai spune c fiecare cauz este
ataat unui nivel de ntrerupere. Fiecrui nivel i corespunde un program
Armare Dezarmat

ntrerupere Dezarmare

Declanare
programat Armat

[ Punct de ntrerupere ]
Ateptare

[ Nivel cu masca eliminat ]


[Nu exist nivel activ cu o prioritate mai mare]

Activ
Achitare

40
Fig.2.3. Strile unui nivel de ntrerupere
Prioriti i mascarea ntreruperilor. Atunci cnd exist mai multe nivele de
ntrerupere este posibil necesitatea modificrii simultane a doi indicatori, legai de
dou cauze diferite. Conflictul poate fi reglat stabilind o ordine de prioritate n cadrul
nivelelor de ntrerupere.

Protejarea contra unor ntreruperi anume a execuiei unei suite de


instruciuni (de exemplu, poate fi interzis ntreruperea unui program de
tratare a ntreruperii). Aceasta ar nsemna ntrzierea comutrii contextului.
Se zice atunci, c nivelul este mascat sau inhibat (ntrerupere mascat).
Ridicarea inhibrii ("demascarea") va autoriza schimbarea ulterioar a
contextului. Informaiile asociate mascrii ntreruperilor se afl n cuvntul
de stare a procesorului.

Pentru unele nivele de ntrerupere efectul sosirii semnalului de ntrerupere


poate fi suprimat de parc nsi cauza ntreruperii a fost suprimat: nivelul
ntreruperii este dezarmat. Un nivel dezarmat poate fi rearmat, adic repus n
serviciu.

Declanare programat. Pentru unele calculatoare, ndeosebi cele utilizate n controlul


proceselor, exist o instruciune de declanare programat care permite modificarea indicatorului,
asociat unui nivel de ntrerupere, din interiorul unui program. n acest fel este posibil simularea
apariiei unei cauze externe de ntrerupere.

Atunci cnd toate condiiile necesare pentru ca o ntrerupere s fie luat n


consideraie sunt prezente, nivelul se numete activ. Aceast stare
corespunde executrii programului de tratare a ntreruperii. (Aceast execuie
poate fi suspendat pentru a permite tratarea unei ntreruperi cu o prioritate mai nalt).
41
Schema unui program de ntrerupere.
O ntrerupere foreaz procesorul s reacioneze la un eveniment. Executarea
programului curent este suspendat, comanda fiind transmis programului
de tratare a ntreruperii. Programul reluat de ctre procesor dup tratarea
ntreruperii nu este n mod obligator programul ntrerupt (ntreruperea putea
avea scopul realocarea procesorului). Schema general de tratare a unei
ntreruperi este
Programul ntrerupt P prezentat n fig.2.4.
Tratarea ntreruperii

Comutarea cuvntului de stare


Salvarea contextului programului P

Tratarea specific ntreruperii, care presupune determinarea


programului Q pentru lansare (poate fi chiar P sau altul)

Restabilirea contextului programului Q ncrcarea


cuvntului de stare a lui Q

Instruciunea schimb_csp (achitare)


Programul nou Q
Fig.2.4. Schema general a tratrii unei ntreruperi
42
2.2.4. Devieri i apelarea supervizorului

Spre deosebire de o ntrerupere, o deviere sau un apel al supervizorului sunt


provocate de o cauz legat direct de derularea instruciunii curente.

O deviere (trap, eng., droutement, fr.) semnalizeaz o anomalie n derularea


unei instruciuni, care prohibiteaz executarea instruciunii. Originile pot fi
diverse:
date incorecte, care conduc la imposibilitatea execuiei corecte a instruciunii
(mprirea la zero, de exemplu), tentativa executrii unei operaii interzise
de mecanismul de protecie (violarea proteciei memoriei, executarea unei
instruciuni privilegiate n modul program, etc.), instruciune neexecutabil
(cod neautorizat de operaie, adres n afara memoriei existente, utilizarea
unui dispozitiv opional, care este lips n configuraia dat, etc.).

Devierile pot fi clasificate, ca i ntreruperile, conform cauzelor care le


genereaz. Efectul unor cauze poate fi suprimat (de exemplu devierile legate
de operaiile aritmetice, erorile fiind semnalate doar de valoarea codului
condiiei).

Important! Natura unei devieri nu permite aplicarea noiunii de masc. O


deviere poate fi suprimat, dar nici intr-un caz retardat.

43
Un apel al supervizorului (supervisor call, prescurtat SVC, eng., appel au
superviseur, fr.) este o instruciune chemat s provoace o comutare a
contextului procesorului.

Acest efect este analogic apelrii unei proceduri, ns modificarea contextului


este mai profund, fiindc ea afecteaz ntreg cuvntul de stare i nu numai
contorul ordinal.

Destinaia unui apel al supervizorului este de a permite apelarea unei


proceduri a sistemului de operare, pretinznd la drepturi mai mari (modul
master, ntreruperi mascate, drepturi de acces, etc.), direct din programul
utilizatorului. Mecanismul comutrii contextului permite asigurarea
proteciei, impunnd condiiile de intrare procedurii apelate.
Ca rezultat: contextul nou (modul, masca, etc.,) este specificat n noul cuvnt
de stare, amplasat intr-o zon de memorie inaccesibil utilizatorilor,
programul de tratare a apelului supervizorului ncepe cu o secven de
verificare a drepturilor utilizatorului de a executa acest apel i stabilirea
validitii parametrilor transmii.

Parametrii sunt transmii ca i n cazul apelului unei proceduri obinuite.


Returul n programul apelant se face prin restabilirea cuvntului de stare
salvat la apelare.

Alegerea procedurii accesibile n cazul unui apel al supervizorului este


determinat de un parametru suplimentar. Putem considera, c mulimea
procedurilor accesibile utilizatorului n acest mod constituie o extensie a 44
setului de instruciuni, formnd astfel o "main" nou.
2.2.5. Exemple de sisteme de ntreruperi

Exemplul 2.6. IBM 370.


Cuvntul de stare (64 bii) conine urmtoarele cmpuri:
<0-7> masca ntreruperii <16-31> codul ntreruperii
<8-11> cheie de protecie <32-33> lungimea instruciunii
<12> codul caracterelor <34-35> codul condiiei
<13> masca ntreruperii <36-39> suprimarea devierii
<14> 1 - ateptare, 0 - activ <40-63> contor ordinal
<15> 0 - stpn, 1 - sclav.

Sistemul de ntreruperi are 5 nivele (n ordinea de descretere a prioritilor):


eroare hardware, deviere, apelare supervizor, extern i intrare-ieire. Fiecrui
nivel i corespunde n memoria operativ un cuplu de amplasamente
rezervate cuvintelor de stare vechi i nou. Fiecare nivel conine mai multe
cauze de ntrerupere. Pentru a face o deosebire a acestor cauze este utilizat
un cod al ntreruperii format din biii 16 - 31 ai PSW. Acest cod este n mod
automat pus la zi n cazul unei ntreruperi. De exemplu, pentru o ntrerupere
de intrare-ieire el va conine adresa canalului i a perifericului care au
provocat ntreruperea; pentru o ntrerupere extern acest cod permite s se
stabileasc originea - ceasul, apel al operatorului, adresare a unui organ
extern, etc.

Biii 0 - 7 i 13 ai PSW - masca ntreruperii. Permit mascarea nivelelor de


ntrerupere extern, eroare hardware i, selectiv, ntreruperile de intrare-
ieire, care provin de la diferite canale. Biii 36 - 39 permit inhibarea a 4
45
cauze de deviere.
Devierile i apelrile supervizorului sunt tratate ca i ntreruperi particulare.
2.3. Implementarea mecanismelor de comutare a contextului

Implementarea mecanismelor este ilustrat prin exemple, legate de utilizarea


lor.

Vom preciza notaia utilizat n schemele programelor:


1. coninutul unui cuvnt de stare este reprezentat prin notaia <activitate, mod,
mascare, contor ordinal>. Primele trei cmpuri pot lua, respectiv, valorile:
ateptare/activ, master/slave, mascat/demascat. Dac csp desemneaz un
cuvnt de stare, cmpurile sale vor fi desemnate de csp.act, csp.mod, csp.masc
i csp.co.
2. operatorul adr aplicat unui identificator de variabil sau de procedur,
desemneaz adresa amplasamentului unde se afl variabila sau prima
instruciune a procedurii,
3. notaia Mp[adr] desemneaz coninutul amplasamentului cu adresa adr.
4. notaiile svc_vechi, dev_vechi, intr_x_vechi, svc_nou, dev_nou, intr_x_nou
desemneaz amplasamentele unde sunt plasate i de unde sunt ncrcate
cuvintele de stare.

Vom mai presupune c


1. apelarea supervizorului este de forma SVC <cod>, unde <cod>
reprezint un numr care permite identificarea funciei cerute,
2. un indicator <cauz> permite stabilirea cauzei care provoac o
deviere.

Schemele prezentate conin un program de iniializare, executat la prima46


ncrcare a sistemului. Funcia acestui program este de a iniializa
Simularea instruciunilor lips. Tentativa executrii unei instruciuni
opionale lips genereaz o drivere de tipul instruciune inexistent.
Realizarea prin program:
procedura iniializare;
dev_nou:=<activ,master,mascat, adr tratare_deviere>;
csp[ADD_FL]:= <activ,slave,demascat, adr ADD_FL>;

csp [DIV_FL]:= <activ,slave,demascat, adr DIV_FL>;
procedura tratare deviere;
begin
save(zon);
case cauz of

instruciune inexistent:
cod_op:=Mp[dev_vechi.co].cod_operaie;
case cod_op of

ADD_FL: determinarea operanzilor;
introdu_n_stiv(stiv_utilizator,dev_vechi.co+1);
ncarc_csp(csp[ADD_FL])

else -- caz de eroare
<tratarea erorii>
end;
end;
restabilire(zon); 47
ncarc_csp(dev_vechi)
Msurarea capacitii memoriei. SO trebuie s se adapteze configuraiei
concrete, ca i condiiilor particulare de utilizare (numr de utilizatori,
prioriti, etc.). Crearea unei asemenea versiuni specifice se numete
generarea sistemului de operare. Pentru a reduce frecvena generrilor S.O.
unii parametri de configurare pot fi determinai n mod automat la
iniializare.
Astfel, poate fi determinat capacitatea memoriei operative utiliznd o
deviere pentru adresa amplasamentului de memorie inexistent.
Realizarea prin program:
program principal:
begin
dev_nou:= <activ,master,mascat, adr msurare>;
i:=1;
ciclu
<accesare cuvnt cu adresa i.p>;
i:=i+1;
endciclu;
ieire ciclu: nbloc:=i;
dev_nou := <activ,master,mascat, adr tratare_deviere>;
end
procedura msurare; -- apelare prin deviere
if cauz = adres n afara memoriei then
csplucrare:= <activ,master,mascat, adr ieire ciclu>;
ncarc_csp(csplucrare)
endif
La ieirea din programul de msurare a capacitii memoriei se va restabili 48
tratarea normal a devierilor (procedura tratare_deviere).
Limitarea timpului de execuie a unei proceduri. Realizarea prin program:
procedura iniializare;
intr_ceas_nou:=<activ,master,mascat,adr intr_ceas>;
svc_nou :=<activ,master,mascat,adr tratare_svc >;
dezarmare(intr_ceas);
procedura tratare_svc;
save(zon);
case cod of

apel_lim_timp_ex: -- parametrii p, q, tratare_eroare
ceas:=q;
cspretur:=svc_vechi; -- salvare pentru retur
csplucrare:= <activ,slave,demascat,adr p>;
csperoare:= <activ,slave,demascat,adr tratare_eroare>;
armare(intr_ceas);
restabilete(zon);
ncarc_csp(csplucrare);

retur: -- datorat terminrii procedurii p
dezarmare(intr_ceas);
ncarc_csp(cspretur);

endcase
procedura intr_ceas; -- expirarea timpului limit
dezarmare(intr_ceas);
ncarc_csp(csperoare);

49
Culegerea unor date de msurare. Perioada ceasului este de 5 s. Datele
trebuie culese fiecare 100 ms. Deoarece timpul necesar culegerii datelor este
cu mult inferior perioadei de eantionare, calculatorul poate executa alte
lucrri n regim de fond. Msurare Msurare Msurare Msurare

Fond Fond Fond Fond

Realizarea prin program: Iniializare


const q = 20000 -- 100ms/5s 100 ms 100 ms 100 ms 100 ms 100 ms
procedura iniializare;
begin
intr_ceas_nou:=<activ,master,mascat,adr intr_ceas>;
csplucrare:= <activ,slave,demascat,adr fond>;
cspmsurare:= <activ,slave,demascat,adr msurare>;
ceas:=q;
ncarc_csp(cspdev)
end
procedura intr_ceas;
begin
save(zon); salvarea contextului de fond
cspsave:=intr_ceas_vechi; salvarea cuvntului de stare pentru fundal
ceas:=q;
ncarc_csp(cspmsurare) programul de culegere a datelor
end

Programul de msurare trebuie s se termine printr-o apelare a


supervizorului SVC retur efectul creia este de a restabili contextul lucrului n
fond. Acest apel execut secvena:
restabilete (zon);
ncarc_csp(cspsave); 50
2.3.3. Concluzii

Exemplele precedente ilustreaz modurile elementare de comunicare dintre


programele unui sistem de operare i mediul exterior. Programele
sistemului sunt activate:
1. de un program al utilizatorului, care semnaleaz o anomalie sau cere achitarea
unui serviciu,
2. de un dispozitiv extern (ceas, proces comandat, organ periferic sau linie de
comunicaii), care semnaleaz producerea unui eveniment i care cere o reacie
imediat a sistemului.

Ca i rezultat putem afirma c un sistem de operare este pilotat de


evenimente (event-driven).

Important! Comunicaia intern ntre programele unui sistem folosete


apelarea supervizorului dac un anumit tip de protecie trebuie s fie
activat (program executat n modul slave, de exemplu) i apelarea unei
proceduri obinuite n caz contrar.

O secven de execuie a unui program de sistem se termin prin ncrcarea


unui cuvnt de stare a procesorului care permite controlul total al
contextului restabilit.

51
2.4. Programarea operaiilor de intrare-ieire

Intrare-ieire numim orice transfer de informaii din sau spre nucleul


calculatorului.

Operaiile de I/E semnific:


1. transferurile de informaii dintre diferite nivele ierarhice ale
memoriei,
2. transferurile de informaii din sau spre mediul exterior (organe
periferice locale sau la distan, captoare sau dispozitive de
acionare, alte calculatoare, etc.).
2.4.1. Organizarea general
2.4.1.1. Periferice, controlere, canale
Un organ de intrare-ieire este un dispozitiv capabil s transfere informaii ntre
procesorul sau memoria calculatorului i un suport extern de informaie. Acest
transfer este comandat de ctre procesorul central. n cel mai simplu caz, o
instruciune special a procesorului permite transferarea informaiei ntre suportul
extern i un registru al procesorului, care va fi deci ocupat pe toat perioad
transferului informaiei.

Odat cu evoluia calculatoarelor, n scopul unei mai bune utilizri a procesorului s-a ajuns
la necesitatea acordrii unei autonomii organelor de intrare-ieire ncredinndu-le
funcii tot mai complicate de nlnuire i comand, procesorului central lsndu-i-se
doar iniiativa de lansare i de control a operaiilor.

Din considerente economice mai apoi s-a trecut la separarea dispozitivelor de comand 52 a
perifericelor de perifericele propriu-zise, pentru ca dispozitivele de comand s poat
fi partajate ntre mai multe periferice.
Cteva scheme de organizare a perifericelor sunt prezentate n fig.2.5. Schema (c)
este proprie unui calculator de putere mare, (a) i (b) corespund
configuraiilor calculatoarelor de putere mai mic.

Magistral Magistral
UC UC

Cp Cp ADM
M M

p p Cp Cp

p p
(a) (b)

UC UC

Magistral

C C
M UC : unitate central
M : memorie
Cp Cp Cp C : canal
ADM : acces direct la memorie
Cp : controler
(c) p p p p p : dispozitiv periferic
53
Fig. 2.5. Organizarea intrrilor-ieirilor
Un canal (sau unitate de schimb) este un procesor specializat n operaiile de intrare-
ieire. El poate fi lansat doar de un procesor central, nu posed ntreruperi, dar poate
ntrerupe un procesor central. Setul de instruciuni ale canalului i permite s
acioneze controlerele i perifericele, care-i sunt conectate. Mini- i
microcalculatoarele pot poseda organe, numite Uniti de acces direct la memorie
(ADM), care sunt nite canale simplificate.

Un contrler este un dispozitiv de comand adaptat la un tip concret de echipament


periferic. Autonomia sa este limitat de operaii foarte elementare. Destinaia
principal a unui controler este de a permite conectarea a mai multor periferice de
acelai tip la un singur controler. Un singur dispozitiv periferic poate transmite
informaii prin intermediul controlerului la un moment de timp dat. n acelai timp,
este posibil executarea simultan a unor operaii pe alte periferice, operaii care nu
implic transferul de informaii (rebobinarea unei bande magnetice, deplasarea
braului unui disc, etc.). Partajarea funciilor ntre periferic i controler depinde de
tipul perifericului. De obicei, funciile logice (nlnuirea i sincronizarea operaiilor,
emiterea unor semnale n caz de accident sau terminarea normal a execuiei) sunt
ncredinate controlerului, iar funciile fizice (transferul propriu-zis) - perifericului. n
programarea intrrilor-ieirilor nu este necesar, de obicei, s se fac o deosebire
ntre un controler i un periferic.

Un periferic este un organ capabil s transfere informaii din sau spre un suport extern.
Controlerul este legat de periferic printr-o interfa, care conine un set de funcii
(intrare, ieire, semnalizri de comand i de accident) i o linie de comunicaie, care
servete la transferul informaiilor.

Un canal poate comanda un singur dispozitiv periferic cu debit ridicat (disc, de ex.) sau
poate fi multiplexat pentru mai multe periferice cu debitul mai mic. 54
Diferite organe sunt desemnate, la fiecare nivel, printr-o adres care permite s evideniem:
canale legate de memorie,
controlere ataate fiecrui canal,
dispozitive periferice ataate fiecrui controler.

Adresa este un simplu numr de ordine. Un periferic este desemnat printr-o adres compus din
<numrul canalului, numrul controlerului, numrul dispozitivului periferic>.

p
000
0
Controler
p
Canal 0 1 001
0 00

1 0 p 010
Controler
100

Canal 0 1
1 01, 10 p 011
101
110
1 0
Controler
p
111
Aceast organizare permite 1
11
ameliorarea performanelor i
disponibilitii sistemului. Existena
mai multor ci de acces la un periferic
Fig.2.6. Adresarea perifericelor
diminueaz riscul unor indisponibiliti
din cauza saturaiei sau ieirii din 55
funciune a unui canal sau controler.
2.4.2. Metode de comand a perifericelor
Programul, care controleaz funcionarea elementar a unui dispozitiv periferic se
numete driver. Driverul gestioneaz n mod direct interfaa controlerului
perifericului, trateaz ntreruperile generate de acesta, detecteaz i trateaz
cazurile de eroare. Vom prezenta mai jos modurile principale de control ale
perifericelor i primitivele elementare de intrare-ieire.
2.4.2.1. Intrri-ieiri sincrone
n acest caz nu exist nici un fel de paralelism ntre procesare i transferul informaiilor.
Procesorul este ocupat pentru toat durata transferului.

Specificarea mecanismului

Operaia de baz const n transferarea unor informaii elementare de volum fix ntre un
amplasament de memorie i un dispozitiv periferic. Presupunem c volumul
informaiei transmise, care depinde de perifericul considerat, este un octet. Starea
ansamblului controler-periferic este definit printr-un cuvnt de stare, aflat n
controler. Acest cuvnt de stare conine o mulime de indicatori booleeni, dintre care
doar 3 ne vor interesa aici:
preg : perifericul este pregtit (gata) de funcionare,
term : transferul este terminat; perifericul este gata s transfere un nou caracter,
err : n cursul transferului a avut loc o eroare.

Controlerul este comandat de unitatea central cu ajutorul a trei instruciuni de intrare-


ieire, efectul crora este descris mai jos:
IN(adr_mem, adr_perif) : cerere de transfer tip intoducere a unui octet,
OUT(adr_mem, adr_perif) : cerere de transfer tip extragere a unui octet,
TEST(adr_perif) : copie cs ntr-un registru cu scopul de a consulta
56
indicatorii.
Programul driver-ului

Fie c vrem s extragem o secven de n caractere care se afl ntr-un masiv


T[0..n-1]. Caracterul T[i], dac i>0, poate fi extras doar dac a fost
transferat T[i-1]. Pentru a verifica aceast condiie se testeaz iterativ
(ateptare activ) indicatorul term.

iniializare : term:=false;
TEST(adr_perif);
if nonpreg then
<tratare eroare>
endif;
for i:=0 to n-1 do
OUT(adr T[i],adr_perif);
ciclu : TEST(adr_perif);
if err then
<tratare eroare>
endif;
if nonterm then goto ciclu
endif;
endfor

Intrrile-ieirile sincrone sunt folosite la microprocesoarele cele mai simple


sau atunci cnd procesorul nu poate fi exploatat n mod util n timpul57
transferului.
2.4.2.2. Intrri-ieiri asincrone cu ntreruperi

Specificarea mecanismului.
Terminarea procesului de transferare a caracterului T[i] este semnalizat
printr-o ntrerupere. Dac acest caracter nu este ultimul (i<n-1),
urmtorul caracter poate fi transmis. Procesul este declanat de
transferul primului caracter. Acest transfer este cerut de ctre programul
principal prin intermediul unui apel a supervizorului (SVC intrare sau
ieire), care are drept parametri:
adresa perifericului,
numrul de caractere care vor fi transferate,
adresa de origine sau de destinaie a primului caracter,
booleanul term, valoarea TRUE a cruia semnalizeaz sfritul transferului.

Programul principal programul de tratare a


ntreruperii
term:=FALSE (la prsirea lui T[i])
SVC i:=0;
ieire OUT(adr T[i], adr_perif);
save context;
TEST(adr_perif);
if err then
<tratare eroare>
else
if i<n-1 then
<tratare paralel> i:=i+1;
OUT(adr T[i], adr_perif)
else
term:=TRUE 58
if term then endif
endif;
2.4.3. Intrri-ieiri buferizate n memorie
2.4.3.1. Specificarea problemei
Diferena considerabil dintre viteza de lucru a unitii centrale i cea a
organelor periferice impune "buferizarea" intrrilor-ieirilor, adic
introducerea unei zone-tampon de memorie ntre periferic i programul
utilizatorului. Scopul este de a reduce timpul de inactivitate a unitii
centrale, dezlegnd funcionarea acesteia de periferice.

Programul utilizatorului va transfera informaiile din sau spre zona-tampon,


iar aceast zon-tampon va servi, n mod paralel, drept surs sau
destinaie la schimbul de date cu perifericul. Dezlegarea unitii centrale
de periferic este cu att mai bine realizat cu ct este mai mare
capacitatea zonei-tampon. Adesea, pentru a nu suprancrca memoria
principal, zona-tampon este situat pe discul fix.

Pentru descrierea modelului sunt necesare urmtoarele specificaii:


schimburile de informaii cu perifericele se va face prin nregistrri de lungime
fix,
zona-tampon este de volum fix egal cu N nregistrri,
pentru un program utilizator, schimbul de informaii cu zona-tampon trebuie s
simuleze schimbul cu perifericul, drept consecin, ordinea de depozitare sau de
extragere a informaiilor trebuie s fie bine stabilit i nici o nregistrare s nu
fie pierdut,
ateptrile inutile trebuie reduse la minimum, att n cazul unitii centrale, ct
i a perifericului,
capacitatea suporturilor nu este limitat: n cazul unei operaii de citire organul
59
de intrare va fi totdeauna alimentat; n cazul unei operaii de scriere, organul de
ieire poate accepta ntotdeauna o nregistrare,
2.4.3.2. Descrierea algoritmilor
Citire
Un program de citire este o procedur citire(nregistrare), care prezint drept rezultat
valoarea nregistrrii citite. Aceast procedur, realizat printr-o apelare a
supervizorului, are ca efect citirea din zona-tampon a nregistrrii urmtoare. Citirea
este posibil doar dac zona-tampon conine cel puin o nregistrare, care nu a fost
nc citit. n caz contrar, activitatea apelant trece n starea de ateptare. n ambele
cazuri, continuitatea alimentrii zonei-tampon este asigurat de citirea unei
nregistrri de la perifericul de intrare, dac un transfer nu are deja loc.
Terminarea transferului unei nregistrri n zona-tampon provoac o ntrerupere. Pentru a
menine perifericul n stare activ, programul de tratare asociat acestei ntreruperi
trebuie s relanseze transferul urmtor, dac mai exist loc n zona-tampon. Plus la
aceasta, dac activitatea apelant era n ateptarea
programul sosirii
utilizatorunei nregistrri, ea
periferic
trebuie relansat. de
intrare citire (nreg)

Zon-tampon cu N locaiuni
procedura citire(nreg) tratare ntrerupere
(apelare supervizor)
if tamponul_nu este_vid then if tamponul_nu este_plin then
extragere(nreg, tampon); lansare_transfer;
lansare_transfer n caz de necesitate; if ateptare then // ateptare
pentru citire
else reluare citire
lansare_transfer n caz de necesitate; endif
60
ateptare
endif
Scriere
Schema care corespunde unei scrieri se obine din precedenta, nlocuind dup cum
urmeaz:
citire prin scriere
extragere prin introducere
tampon_vid prin tampon_plin
tampon_plin prin tampon_vid programul utilizator
periferic de
ieire scriere (nreg)

Zon-tampon cu N locaiuni

procedura scriere(nreg) tratare ntrerupere


(apelare supervizor)
if tamponul_nu este_plin then if tamponul_nu este_vid then
introducere(nreg, tampon); lansare_transfer;
lansare_transfer n caz de necesitate; if ateptare then
else reluare scriere
lansare_transfer n caz de necesitate; endif
ateptare
endif

61
Programe
Zona-tampon: fir de ateptare, gestionat circular cu ajutorul a doi pointeri:
tcitire (top-ul FA) - indic urmtoarea nregistrare care urmeaz a fi preluat,
qcitire (coada FA) - indic amplasamentul unde se va introduce urmtoarea
nregistrare.
Funcia suc realizeaz nlnuirea amplasamentelor;

Realizare pentru o zon-tampon secvenial cu N nregistrri a cte L amplasamente:


suc(ptr) = (ptr + L) mod (L.N)
Procedurile lansare_citire i lansare_imprimare realizeaz pregtirea programului
canalului i lansarea transferului. programul utilizator (SVC)
periferic de intrare
citire (nreg)

Zon-tampon

qcitire tcitire

Variabile Semnificaie Valoare iniial


L lungimea unei casete (nregistrri) const.
Ncitire numrul de casete a zonei-tampon const
nvcitire numrul de casete vide Ncitire
citire_activ indicator al activitii perifericului de intrare false
tcitire, qcitire pointeri top i coad 0, 0
suc() pointer spre caseta urmtoare

62
citire(nreg) tratare_ntrerupere_perif_de_intrare
save(zon_svc); save(zon_ntrerupere);
nceput: qcitire:=suc(qcitire);
if nvcitire<Ncitire then nvcitire:=nvcitire-1;
nreg:=tampon[tcitire]; if nvcitire>0 then
tcitire:=suc(tcitire); lansare_perif_de_intrare(qcitire)
nvcitire:=nvcitire+1; else
if non citire_activ then citire_activ:=false
citire_activ:=true; endif;
lansare_perif_de_intrare(qcitire) if ateptare_citire then
endif ntrerupere_veche.act:=activ;
else ateptare_citire:=false
if non citire_activ then endif;
citire_activ:=true; restabilire(zon_ntrerupere);
lansare_perif_de_intrare(qcitire) ncrcare_csp(ntrerupere_veche);
endif;
csplucrare:=<ateptare,slave,demascat, adr nceput>;
lansare_perif_de_intrare(qcitire)
ateptare_citire:=true; elaborare prog.canal:
ncrcare_csp(csplucrare); <sens=citire
endif; adr.memorie=adr
tampon[qcitire]
restabilire(zon_svc); contor_octei=L>
ncrcare_csp(svc_vechi); SIO
<prog=prog.canal
perif= perif_de_intrare>

63
Excluderea mutual
Remarc. Executarea tratrii ntreruperii este declanat de sfritul transferului fizic al unei
nregistrri, activitate, care are loc paralel cu executarea programului primitivei
citire(nreg) pe procesor. Drept rezultat, este posibil ca ntreruperea s survin ntr-un
punct oarecare (observabil) al executrii acestei primitive, ceea ce va nsemna intercalarea
executrii programului de tratare a ntreruperii ntre dou puncte oarecare ale programului
citire(nreg).

Exemplu. S considerm instruciunea a doua


if non citire_activ then
citire_activ:=true;
lansare_perif_de_intrare(qcitire)
endif
din programul citire(nreg). Ea se descompune n urmtoarele instruciuni elementare:
a) load R, citire_activ
b) jifz R, urm -- ramificare dac true
c)
urm:
<ateptare>
Presupunem c ntreruperea sosete ntre instruciunile (a) i (b), valoarea pus n R de (a) este
true; programul de tratare a ntreruperii pune citire_activ n false. Dup prelucrarea
ntreruperii, instruciunea (b) este executat cu R avnd valoarea true i activitatea
apelant trece n starea de ateptare n care rmne un timp indefinit.
Putem afirma, c validitatea variabilelor comune (de ex. citire_activ, nvcitire etc.,) nu poate fi
garantat dac autorizm sosirea ntreruperilor de terminare a operaiilor de intrare-ieire
n orice moment de timp. Apelarea supervizorului pentru a realiza secvena de cod
citire_nreg trebuie executat cu ntreruperile de intrare-ieire mascate.

Situaia dat este cunoscut sub numele de excludere mutual i este o consecin a execuiei
activitilor asincrone. 64
Capitolul 3. Gestiunea activitilor
paralele
3.1. Exemple introductive
3.1.1. Administrarea tamponat a intrrilor-ieirelor
3.1.2. Comanda unui proces industrial
3.2. Noiune de proces secvenial
3.2.1. Proces unic. Context
3.2.2. Relaii ntre procese
3.3. Sincronizarea proceselor
3.4. Implementarea sincronizrii
3.4.1. Probleme-tip
3.4.2. Administrarea unei resurse partajate
3.4.3. Comunicarea ntre procese
3.4.4. Administrarea intrrilor-ieirilor
3.4.5. Sincronizare temporal
3.5. Gestiunea dinamic a proceselor
3.6. Sincronizarea n Windows 65
3.1.1. Administrarea tamponat a intrrilor-ieirelor

scriere_linie
SL SD CD IF

tm1 tm2

(memorie) (memorie)
td

(disc)

Fig.3.1. Gestionarea buferizat a unei imprimante

1) primitiva scriere_linie SL (unitatea central)


2) scriere pe disc SD (canal 1)
3) citire de pe disc CD (canal 2)
4) imprimare fizic IF (canal 3)

Aceste patru activiti sunt n mare msur autonome - ele sunt executate pe
procesoare distincte, cu programe diferite.

Ele nu sunt totui independente, deoarece acceseaz obiecte comune: dou


tampoane n memorie, tm1 i tm2 i un tampon pe disc, td.
66
1) Condiii, care stabilesc posibilitatea existenei unor activiti

O nregistrare nu poate fi preluat dintr-un tampon nainte de a nu fi


depozitat aici.
Tampoanele au capaciti limitate; dac un tampon este ocupat cu
nregistrri, care nu
au fost nc preluate, este imposibil depozitarea fr a pierde informaii.

Activitate Aciune Condiie


SL scriere n tm1 tm1 nu este plin
SD citire din tm1 tm1 nu este vid
SD scriere n td td nu este plin
CD citire din td td nu este vid
CD scriere n tm2 tm2 nu este plin
IF citire din tm2 tm2 nu este vid

Execuia activitilor modific veridicitatea acestor condiii: astfel,


imprimarea unei linii
pune n TRUE condiia tm2 nu este plin.
O activitate, care nu poate executa o aciune, deoarece condiia asociat are
valoare
FALSE, trebuie s atepte, adic execuia unei aciuni este retardat pn
cnd
valoarea logic a condiiei devine TRUE. n capitolul 2 a fost discutat 67
realizarea acestui
mecanism de ateptare i continuare cu ajutorul ntreruperilor.
2) Condiii de validitate a informaiilor partajate

Dac vom examina procesul de accesare a tampoanelor, vom descoperi o alt


form de
interaciune, cauzat de posibilitatea de accesare simultan de ctre dou
activiti a
unui amplsament de memorie. Astfel, dac SD citete coninutul unei
nregistrri din
tm1 pe care SL este n curs de a o modifica, rezultatul acestei citiri risc s
fie
incoerent, dac nu au fost luate msuri speciale de precauie. Problema
poate fi
rezolvat impunnd una din activiti, aflate n conflict, s atepte pn
cnd cealalt
va termina accesarea.

Concluzii:

Lucrarea imprimare tamponat este realizat prin patru activiti


simultane, n mare
msur autonome, care coopereaz pentru atingerea scopului final.

Executarea corect a lucrrii impune restricii logice n vederea derulrii


acestor 68
activiti. Aceste restricii pot conduce la ntrzierea execuiei unei activiti,
care este
3.1.2. Comanda unui proces industrial

R1 i R2 funcioneaz n paralel. Vom examina dou soluii posibile:


1) utilizarea a dou calculatoare (cte unul pentru fiecare reactor),
2) folosirea unui singur calculator pentru comanda ambelor reactoare.

Implementarea variantei doi impune verificarea posibilitii apariiei unor


condiii
suplimentare. Fie P1, P2, D1, D2 segmentele procedurilor i datelor pentru
comanda
celor dou reactoare R1 i R2, memoria principal avnd capacitatea necesar
pentru
pstrarea acestor segmente.
Programele P1 i P2 sunt executate pe rnd de procesor. Relaia 2t<T trebuie s
fie
respectat. Dac acesta va fi cazul, funcionarea reactoarelor pentru un
observator
extern pare identic pentru ambele soluii. Trebuie, totui s subliniem, c
soluia doi
impune restricii mai severe n ceea ce privete performanele calculatorului

Modalitile de implementare a soluiei doi.


1) Partajarea procesorului
2) Partajarea programului 69
Programele P1 i P2, fiind identice, putem pstra doar o singur copie, s-i
zicem P, pentru economisirea memoriei. Condiiile necesare pentru
S rezumm rezultatele celui de-al doilea exemplu.

1. Au fost evideniate dou activiti logic independente: comanda


reactoarelor R1 i R2. Aceste dou activiti pot fi puse pe dou
maini distincte fr s existe vre-o legtur ntre ele.
2. Considerente de economie pot impune ca aceste activiti s
partajeze resurse fizice i resurse program comune. Buna
funcionare a acestei partajri restricioneaz execuia
activitilor i modul de utilizare a obiectelor partajate.

Ca i concluzie pentru ambele exemple putem evidenia dou


momente:
existena unor activiti evolutive, care pot derula simultan,
existena unor relaii ntre aceste activiti: cooperare
pentru executarea unor sarcini comune, concuren n
utilizarea resurselor partajate.

Continuarea acestui capitol are drept scop elaborarea unui suport


formal
pentru aceste noiuni, introducnd conceptele de proces i
sincronizare i 70
descriind modalitile lor de utilizare n cadrul unui sistem
Proces unic
Executarea unui program se traduce ntr-o suit de aciuni a1, a2,..., ai,..., cu
nceput(ai)<sfrit(ai)
O astfel de suit este numit proces secvenial sau simplu proces.
Un proces poate, deci, fi descris cu ajutorul succesiunii evenimentelor nceput(a1),
sfrit(a1), nceput(a2), sfrit(a2),...

Aceast suit de stri datate ale mainii se numete traiectorie temporal


(sau istorie) a procesului.

Mulimea informaiilor pe care aciunile unui proces le pot consulta sau modifica se
numete contextul procesului.

Contextul unui proces rezultant din executarea unui program conine:


1) Contextul procesorului (cuvntul de stare i registrele),
2) Un context n memorie, sau spaiul de lucru (segmente procedur, date, stiv de
execuie),
3) O mulime de atribute ataate procesului i care specific diferite proprieti:
a) Nume. Numele unui proces, care servete pentru identificarea lui, este de regul, un
numr intern atribuit la crearea procesului i care permite s se ajung la
reprezentarea contextului su.
b) Prioritate. Prioritatea proceselor permite ordonarea lor pentru alocarea procesorului.
c) Drepturi. Drepturile unui proces specific operaiile care i sunt permise, n scopul
asigurrii proteciei informaiei. 71
Traiectoria temporal a unui proces este definit de irul strilor contextului su.
3.2.2. Relaii ntre procese

Vom cerceta n continuare execuia unei mulimi de procese i interaciunea


reciproc a
acestora. Noiunile, introduse mai sus, pot fi extinse pentru o mulime de
procese:
traiectoria temporal a unei mulimi de procese este irul
evenimentelor formate de nceputurile i sfriturile aciunilor
rezultante din executarea programelor acestor procese.
contextele unor procese diferite pot avea pri comune. Dou
procese, contextele crora sunt disjuncte, se numesc independente;
ele nu pot avea interaciuni reciproce. Partea contextului, care
aparine unui singur proces, se numete context privat al procesului
dat.

Exemplu. Fie dou procese care partajeaz o procedur reentrant.


Segmentul executabil, care conine aceast procedur aparine
contextului comun.

Segmentul de date i stiva fiecrui proces formeaz contextul lor privat.


72
3.2.2.1. Mulimi de procese. Paralelism
S considerm dou programe distincte P i Q, fiecare avnd n memorie un
segment
cod i un segment de date. Numim p i q procesele rezultante din executarea
respectiv
a acestor dou programe. Executarea setului (p, q) poate s se produc n
diferite p q
(1)
moduri, caracterizate de forma particular a traiectoriei sale temporale.
Aceste
traiectorii sunt reprezentate
p n figura
q 3.2. p q p q
(2)

p q
(3)

Fig. 3.2. Executarea unei mulimi de procese

Comment:
schema 1: este executat mai nti tot procesul p, apoi procesul q la fel n ntregime,
schema 2: sunt executate iruri de instruciuni ale procesului p n mod alternativ cu 73
iruri
de instruciuni ale procesului q, i tot aa pn la terminarea ambelor procese,
schema 3: executarea proceselor p i q este simultan; n acest caz sunt necesare dou
Nivelul de observare cel mai fin (cel al instruciunilor) este numit nivel de baz.

S ne situm mai nti la nivelul de observare la care, prin convenie, executarea


complet a
fiecrei dintre programele P i Q reprezint o aciune unic. Definiiile care
urmeaz sunt
pentru acest nivel.
a) schema de tip 1 este a unei execuii secveniale a lui p i q. Ea este caracterizat de
relaiile:
sfrit(q) < nceput(p) sau sfrit(p) < nceput(q)
b) schemele de tip 2 sau 3 sunt scheme de execuie paralel. Ele sunt caracterizate de
sfrit(p) > nceput(q) sau sfrit(q) > nceput(p).

Nivelul de baz. Putem face o distincie ntre schemele 2 i 3. ntr-adevr, n


schema 2, din considerente de existen a unui singur procesor, la un
moment de timp dat doar o singur aciune poate fi executat, contrar
schemei 3. Se va spune c n schema 3 are loc un paralelism real, iar n
schema 2 un pseudo-paralelism. Paralelismul real necesit dou procesoare
distincte. Dou observaii importante sunt necesare:

1) Diferena acestor scheme de execuie este legat de alegerea nivelului de


observare. Astfel, la nivelul de baz, diferena dintre schemele 1 i 2 dispare:
ambele sunt secveniale.

2) Alegerea nivelului de baz depinde de fineea fenomenelor, care dorim s le


considerm elementare. Dac trebuie s studiem executarea instruciunilor
74
n pipe-line pe un procesor microprogramat, n calitate de nivel de baz va
fi ales nivelul microinstruciunilor, iar contextul va fi completat cu memoria
3.2.2.2. Concurena proceselor. Resurse virtuale

Situaia descris de schemele 1 i 2 nu rezult dintr-o legtur logic ntre p i q,


ci doar din
existena unui singur procesor. Ea poate fi generalizat astfel:
fie o mulime de procese contextele crora au un obiect comun, care poate fi utilizat la
un moment de timp dat de un singur proces. Se va spune n acest caz, c obiectul
constituie o resurs critic pentru procesele date sau c procesele sunt n excludere
mutual (excludere reciproc sau concuren) pentru utilizarea unei resurse.

Excluderea mutual a unei resurse conduce la serializarea execuiei proceselor


concurente,
n cazul unor aciuni, care cer aceast resurs. Schemele 1 i 2 difer doar prin
nivelul de
finee la care este executat serializarea.

Funcionarea corect a unei mulimi de procese, care particip la ndeplinirea unei


lucrri
comune, implic relaii logice de cooperare. Este comod s se separe aceast
cooperare de
concurena pentru resursele fizice cu scopul de a simplifica nelegerea i
aplicarea celor
dou tipuri de relaii. Pentru aceasta este folosit noiunea de resurse virtuale:
fiecrei resurse fizice critice i se asociaz tot attea copii imaginare (sau virtuale) ale
acestei resurse cte procese concurente solicit utilizarea ei. Trebuie s tratm dou 75
probleme distincte:
Conceptual, totul va avea loc ca i cum procesele s-ar derula paralel, conform
unei scheme,
numite logice sau virtuale, analogice schemei 3 din fig.3.2. Cu toate acestea,
trebuie de
menionat, c aceast schem logic reprezint doar o notaie compact pentru
mulimea
schemelor reale posibile i c ele sunt obligatoriu de forma 1 sau 2 din
considerentele
unicitii procesorului. Pentru o schem real i una virtual a unui proces dat
este pstrat
doar ordinea de succesiune a evenimentelor (nceputul i sfritul aciunii) i nu
sunt
pstrate valorile absolute ale intervalelor de timp, care le separ.
Timpul folosit la reperarea evenimentelor n schema logic este numit timp logic.
a1 a2
+------+-----------------+------+ procesul p
b1 b2 (timp logic)
+--+-------+---------+ procesul q

a1 a2
+------+---+ +----------+ +----+------+ p (timp real, execuia 1)
+--+--+ +-----+---------+ q
b1 b2
76
a1 a2
3.2.2.3. Excludere mutual
Exemplu 3.3. Dou procese p i q trebuie fiecare s actualizeze valoarea unei
variabile comune n (de exemplu, n este starea unui cont bancar
pentru care p i q
efectueaz o depozitare) :
procesul p: Ap : n=n+np procesul q: Aq : n=n+nq
S realizm decompoziia acestor aciuni n instrucii, notnd prin Rp i Rq
registrele
locale ale proceselor p i q respectiv:
procesul p procesul q
1. load Rp, n 1. load Rq, n
2. add Rp, np 2. add Rq, nq
3. sto Rp, n 3. sto Rq, n
Dac aceste aciuni sunt executate n ordinea 1, 1, 2, 2, 3, 3, efectul lor
global este de
executat n:=n+nq i nu n:=n+np+nq: una din actualizri a fost pierdut i
valoarea
final a variabilei n este incorect. Pentru evitarea acestei incoerene
aciunile Ap i Aq
trebuie s fie executate n excludere reciproc; se zice de asemenea c ele
constituie
pentru p i q seciuni critice.
Este necesar s se respecte condiia
sfrit(Ap) < nceput(Aq) sau sfrit(Aq) < nceput(Ap). 77
Aceast condiie de serializare, care are efectul de a face Ap i Aq s devin
3.3. Sincronizarea proceselor
3.3.1. Exprimarea i implementarea restriciilor de succesiune

Exemplul 3.4. Procesul p transmite informaii procesului q scriind ntr-un


segment a,
consultat de q (aceast transmitere are loc o singur dat). Este
necesar
s se ndeplineasc condiia:
sfrit(scriere(a)) < nceput(citire(a))

Aceast relaie exprim restricia, c citirea lui a de ctre q nu poate ncepe


nainte de
terminarea scrierii lui a de ctre p.

Exemplul 3.5. Rendez-vous. Fie N procese p1,..., pN. Definim n programul fiecrui
proces
un punct, numit rendez-vous, pe care procesul nu-l poate trece
nainte ca
alte procese s ajung la punctul lor propriu de rendez-vous.
Dac programul procesului pi are forma
<debut_i>;
<rendez-vous>
<continuare_i>;
atunci restriciile de sincronizare se vor exprima dup cum urmeaz:
pentru orice i, j din [1..N]: sfrit(debut_i) < nceput(continuare_j)
78
Restriciile de sincronizare pot fi exprimate prin urmtoarele dou forme
echivalente:
Vom utiliza noiunea de ateptare pentru specificarea sincronizrii proceselor.
Aceast specificare se va produce n dou etape:
definirea punctelor de sincronizare pentru fiecare proces,
asocierea unei condiii de depire fiecrui punct de sincronizare, condiie
exprimat prin intermediul variabilelor de stare a sistemului.
Vom ilustra acest mod de specificare pentru cele dou exemple precedente.
Notm un punct de sincronizare prin ps, iar condiia de depire asociat
prin aut(ps). Dac aceast condiie are valoare TRUE, procesul n cauz este
autorizat s execute instruciunea etichetat cu ps.
Exemplul 3.6: var f : boolean init false
procesul p procesul q
scriere(a); <debut_q>;
f:=true;
<continuare_p> ps : citire(a)
aut(ps) : f:=true
A fost introdus variabila de stare f pentru a exprima condiia procesul p a
terminat aciunea scriere(a).
Exemplul 3.7: var n : integer init 0;
procesul pi
<debut_i>;
n:=n+1
ps: <continuare_i>
aut(psi): n=N (i=1,...,N);
Variabila de stare n este n acest caz numrul procesului sosit n punctul de 79
rendez-vous.
3.3.2. Probleme de realizare a sincronizrii
Vom ncerca s implementm sincronizarea specificat de condiiile de
depire. Pentru aceasta trebuie s definim un mecanism de ateptare i
s introducem noiunea de evenimente memorizate. Un eveniment
memorizat (e) este o variabil, care poate lua dou valori: sosit i
non_sosit, valoarea iniial este non-sosit. Asupra evenimentului
memorizat sunt posibile dou operaii, care sunt aciuni indivizibile:
e:=<valoare> -- atribuirea imediat a unei valori
ateptare(e).
Operaia ateptare(e), executat de un proces p, are urmtoarea specificaie:
if e = non_sosit then
starea(p) := blocat -- p este trecut n ateptarea lui e
endif
Cnd e ia valoarea sosit, toate procesele care ateptau e trec n starea activ.
Vom ncerca acum s realizm cu ajutorul acestui mecanism sincronizarea
pentru cele dou exemple.
Exemplul 3.8. var e : eveniment memorizat;
procesul p procesul q
scriere(a); <debut_q>;
e:=sosit; ateptare(e);
<continuare_p> citire(a)
Analiza acestui sistem (care nu conine alte variabile de stare, dect
evenimentul memorizat e) poate fi fcut enumernd traiectoriile
temporale posibile. Aceast analiz arat, c sincronizarea este corect
80
atunci cnd operaiile asupra evenimentului memorizat sunt indivizibile.
Exemplul 3.9. var e : eveniment memorizat;
n : integer init 0;
procesul pi
<debut i>;
A n:=n+1;
B if n<N then
ateptare(e)
else
e:=sosit
endif
<continuare i>
O analiz mai atent, analogic celei din exemplul din 3.2.2.3, ne arat c acest
program este incorect. Notnd un registru local al procesului i prin Ri,
aciunile (A) i (B) pot fi descompuse dup cum urmeaz:
load Ri, n
ai Ri, 1 -- adunare imediat
ci Ri, N --comparare imediat
br () etichet -- salt dac Ri N
<ateptare (e)>
...
etichet : ...
Presupunem, c toate proceselor sunt n ateptarea punctelor lor de rendez-vous,
cu excepia a dou, notate prin pj i pk. Dac pj i pk vor fi executate pe
traiectoria temporal (1j, 1k, 2j,...), atunci fiecare va atribui lui n valoarea
final N-1 i se va bloca, drept rezultat toate procesele se vor bloca pentru 81
un timp indefinit.
3.3.3. Monitorul mecanism de sincronizare
Un monitor este constituit dintr-o mulime de variabile de stare i o mulime de
proceduri, care utilizeaz aceste variabile. Unele dintre aceste proceduri,
numite externe, sunt accesibile utilizatorilor monitorului; numele acestor
proceduri sunt numite puncte de intrare ale monitorului. Procesele, care
utilizeaz monitorul pentru a se sincroniza, nu au acces direct la variabilele
de stare. Monitorul poate fi utilizat doar prin apelarea procedurilor sale
externe; acestea permit blocarea sau deblocarea proceselor conform
specificaiilor problemei. Condiiile de blocare sau deblocare sunt exprimate
ca funcie ale variabilelor de stare, iar mecanismul de execuie a monitorului
garanteaz manipularea acestor variabile n regim de excludere mutual. Un
monitor conine un fragment de cod de iniializare, executat o singur dat
la crearea monitorului.

Blocarea i deblocarea proceselor se exprim, n procedurile monitorului, prin


intermediul unor condiii. O condiie este declarat ca i o variabil, dar nu
are valoare: o condiie c poate fi utilizat doar prin intermediul a trei
operaii sau primitive, efectul crora este descris mai jos (prin p am notat
procesul, care le execut)
c.ateptare : blocheaz procesul p i l plaseaz n ateptarea lui c
c.vid : fn bool (true, dac nu exist nici un proces n ateptarea lui c,
altfel false)
c.semnalizare : if non c.vid then <deblocarea proceselor care sunt n ateptarea
lui c> endif
Procesele, care sunt n ateptarea unei condiii c, sunt grupate ntr-un fir de
ateptare asociat lui c. Putem spune, c o condiie furnizeaz proceselor82un
instrument de desemnare a unui astfel fir de ateptare.
Exemplul 3.10. sinc: monitor;
var fact: boolean;
term: condiie;
procedura terminare_scriere;
begin
fact:=true;
term.semnalizare
end
procedura debut_citire;
if non fact then
term.ateptare
endif
begin -- iniializare
fact := false
end
end sinc

Monitorul este utilizat dup cum urmeaz:


procesul p procesul q
scriere(a); <debut_q>
sinc.terminare_scriere; sinc.debut_citire;
<continuare_p> citire(a);

83
Exemplul 3.11.
rendez-vous : monitor;
var n : integer;
toi_sosii : condiie;
procedura sosire;
begin
n := n+1;
if n < N then
toi_sosii.ateptare --nu au sosit toate procesele
endif
toi_sosii.semnalizare -- a sosit i ultimul
end

begin -- iniializare
n:=0
end
end rendez_vous

Programul procesului pi va fi de forma:


procesul pi
<debut i>
rendez_vous.sosire;
<continuare i>
84
3.4. Implementarea sincronizrii
3.4.1. Probleme-tip

Experiena demonstreaz, c problemele de sincronizare logic ntlnite n


practic pot fi reduse, n marea lor majoritate, la combinaia unui numr
mic de situaii elementare, schemele de soluionare ale crora sunt
cunoscute. Seciunile 3.4.2 3.4.5 sunt consacrate studierii acestor
probleme-tip, utiliznd instrumentarul de baz, pus la dispoziie de
monitoare.

Problemele-tip sunt urmtoarele:


accesarea de ctre o mulime de procese a unei resurse partajate
comune,
comunicarea ntre procese,
gestionarea perifericelor i intrrilor-ieirilor tamponate,
sincronizare temporal.

85
3.4.2. Administrarea unei resurse partajate

Considerm o resurs (fizic sau logic) partajat de o mulime de procese.


Utilizarea acestei resurse trebuie s respecte nite reguli de utilizare,
destinaia crora const n garantarea unor proprieti specificate sau
restricii de integritate. Aceste restricii sunt specificate pentru fiecare
resurs.

O modalitate de garantare a respectrii regulilor de utilizare a unei resurse


const n adoptarea urmtoarei scheme:
modul de folosire a resursei presupune utilizarea obligatorie a
procedurilor de
acces asociate resursei; orice tentativ de utilizare, care nu respect
acest mod
este detectat automat,
procedurile de accesare sunt grupate ntr-un monitor, sau mai multe,
programul
cruia impune respectarea restriciilor de integritate.

Cel mai simplu caz este acela al unei resurse pentru care singura restricie de
integritate este de a fi utilizat n excludere reciproc. Simpla grupare a
procedurilor sale de acces ntr-un monitor unic garanteaz respectarea
acestor restricii.
86
3.4.2.1. Alocarea resurselor banalizate
Considerm o resurs pentru care exist un numr fix de N exemplare. Un
proces poate accesa la cerere n uniti din cele N, le poate utiliza i apoi
elibera. Toate unitile sunt echivalente din punctul de vedere al
proceselor utilizatoare, se mai zice c resursa este banalizat.
Utilizarea resursei are loc conform schemei de mai jos.
ps:resurse.cerere(n); -- cerere pentru n uniti
-- ateptare n caz de eec
<utilizarea unitilor primite>
resurse.eliberare(n) -- eliberarea resurselor
Condiia de sincronizare se va scrie pentru orice proces:
aut(ps) : n nlibere
Monitorul resurse va utiliza direct condiia de sincronizare:
resurse: monitor;
var nlibere : integer;
disp : condiie;
procedura cerere(n); procedura eliberare(n);
begin begin
while n>nlibere do nlibere:=nlibere+n;
disp.ateptare; disp.semnalizare --
deblocare n lan
endwhile; end;
nlibere:=nlibere-n
end;
begin -- iniializare
nlibere:=N 87
end
resurse : monitor
type element : struct
lungime : integer
proc : proces
end;
var nlibere : integer;
disp : array[proces] of condiie;
<declaraia f.de at. f i procedurilor sale de accesare: introducere, extragere, primul>
procedura cerere(n);
begin
var e: element;
if n>nlibere then
e.lungime:=n;
e.proc:=p; -- p este procesul apelant
introducere(e,f); -- n ordinea de cretere a lungimii
disp[p].ateptare
endif;
nlibere:=nlibere-n
end;
procedura eliberare(n);
var e: element;
begin
nlibere:=nlibere+n;
while primul(f).lungime nlibere do
extragere(e,f); -- elementul extras = primul (f)
disp[e.proc].semnalizare -- e.proc = procesul deblocat
endwhile;
end;
begin -- iniializare
nlibere:=N;
f:=<vid>
end 88
end resurse
3.4.2.2. Modelul cititorului i scriitorului
S considerm un fiier manipulat de procese din dou clase diferite: cititori,
care consult fiierul fr a modifica coninutul lui i scriitori, care pot
modifica acest coninut. Fie pentru un moment arbitrar de timp ncit i nscr
numrul de cititori i de scriitori, respectiv, care folosesc o procedur de
acces la fiier. Cererea de asigurare a coerenei fiierului ne impune s
respectm urmtoarele restricii:
(nscr=0) i (ncit 0) -- fiier n citire
sau (nscr =1) i (ncit=0) -- fiier n scriere

Fie fich un monitor care asigur respectarea acestor restricii. Vom impune
urmtoarea form a acceselor la fiier:
proces cititor proces scriitor
fich.debut_citire; fich.debut_scriere;
<acces citire> <acces scriere>
fich.terminare_citire; fich.terminare_scriere;

Procedurile debut_citire, terminare_citire, debut_scriere, terminare_scriere


trebuie s asigure respectarea restriciilor de mai sus.
Presupunem c cititorii au prioritate n faa scriitorilor (o scriere nu va fi
autorizat, dac exist cititori n ateptare). Definim urmtoarele
variabile de stare:
scr = o scriere este n curs (valoare boolean)
nc = numrul de cititori n ateptare sau n curs de citire

Condiiile de depire se vor exprima dup cum urmeaz: 89


aut(citire) : scr=false (nu exist scrieri curente)
fich : monitor;
var scr : boolean;
nc : integer;
c_scr, c_cit : condiie;

procedura debut_citire;
begin
nc:=nc+1;
if scr then procedura terminare_scriere;
c_cit.ateptare; begin
endif scr:=false;
end if nc>0 then -- prioritate
cititorilor care ateap
procedura terminare_citire;
c_cit.semnalizare
begin
nc:=nc-1; else
if nc=0 then -- ultimul cititor a terminat c_scr.semnalizare
c_scr.semnalizare endif
endif end
end
begin -- iniializare
procedura debut_scriere;
begin scr:=false;
if scr or nc>0 then -- scriere sau citire n curs nc:=0
c_scr.ateptare end
endif; end fich
scr:=true
end
90
3.4.3. Comunicarea ntre procese
Procesele pot comunica prin accesarea unei mulimi de variabile comune. Acest
mod de comunicare este slab structurat i ineficient - cere excluderea
reciproc a variabilelor. Comunicarea prin mesaje - modelul productorului i
consumatorului, realizat cu ajutorul monitoarelor (3.4.3.1). O alt
posibilitate, descris n 3.4.3.2, const n a considera operaiile de
comunicare ca un fel de mecanisme primitive de sincronizare. n 3.4.3.3
prezentm o aplicaie frecvent de comunicare modelul client-server.
3.4.3.1. Modelul productorului i consumatorului
Un proces (productorul) trimite mesaje unui alt proces (consumatorul), utiliznd
o zon tampon n memoria comun. Mesajele sunt de lungime fix i
capacitatea tamponului este de N mesaje.
Specificaiile comunicaiei:
un mesaj dat poate fi preluat doar o singur dat dup ce a fost depozitat n
tampon,
un mesaj nu poate fi pierdut;
dac tamponul conine N mesaje nepreluate, nu pot fi depozitate alte
mesaje,
o operaie imposibil blocheaz procesul, care ncearc s o execute.

Condiiile de depire (n numrul de mesaje din tampon, care nu au fost nc


preluate):
aut(depozitare) : n < N -- tamponul nu este plin
aut(preluare) : n > 0 -- tamponul nu este vid

Respectarea acestor restricii este asigurat de un monitor tampon, utilizat 91


astfel:
tampon : monitor; Procedurile introducere(m) i
var n : 0..N; extragere(m) definesc politica de
non_plin, non_vid : condiie; gestionare a tamponului i
<declaraii ale procedurilor introducere i reprezentarea intern a mesajelor.
extragere>
procedura depozitare(m:mesaj); type mesaj : <descrierea formatului
begin mesajelor>
if n=N then pt : 0..N-1;
non_plin.ateptare var fa : array[pt] of mesaj;
endif; top, coad: ptr;
n:=n+1; procedura introducere(m:mesaj);
introducere(m); begin
non_vid.semnalizare fa[coad]:=m;
end coad:=coad+1 mod N
procedura preluare(var m:mesaj); end;
begin procedura extragere(var m:mesaj);
if n=0 then begin
non_vid.ateptare m:= fa[top];
endif; top:=top+1 mod N
extragere(m); end;
n:=n-1; <iniializarea se va completa cu top:=0;
non_plin.semnalizare coad:=0;>
end;
begin -- iniializare Schema poate fi extins pentru mai
n:=0; muli productori i consumatori.
end Drept efect, procedurile 92
end tampon monitorului asigur accesarea
Exemplul 3.12. Sistemul de operare Thoth [8]. Comunicarea folosete desemnarea
direct i sincronizarea prin rendez-vous. Mesajele - lungime constant. Sunt
utilizate patru primitive:
id:=send(message, id_dest)
emite procesului id_dest un mesaj; blocheaz emitorul pn la primirea unui rspuns,
transmis n message. Primitiva indic identitatea procesului care a transmis
rspunsul (nil, dac destinatarul nu exist).
id:=receive(message, id_orig)
recepioneaz un mesaj; procesul origine poate s nu fie specificat. Valoarea transmis
este identitatea emitorului.
reply(message, id_orig, id_dest)
trimite un rspuns destinatarului specificat (care trebuie s-l atepte); nu este
blocant; fr consecine, dac rspunsul nu era ateptat.
forward(message, id_orig, id_dest)
aceast operaie non blocant este utilizat de un proces dup recepionarea unui
mesaj trimis de ctre id_orig, pentru ca s impun mesajul s ajung la id_dest,
care are acum obligaia de a rspunde lui id_orig.

Exemplul 3.13. Sistemul de operare Unix [9]. n sistemul Unix comunicarea ntre
procese utilizeaz zone-tampon, numite pipes (tuburi), administrate conform
schemei productor-consumator. Mesajele transmise sunt caractere. Un pipe (tub)
leag un emitor i un receptor, conexiunea fiind stabilit dinamic.

Exemplul 3.14. Limbajul Ada permite definirea proceselor. Forma sintactic a


comunicrilor ntre procese este apelarea procedurii, ns transmiterea
parametrilor i a rezultatelor are loc conform principiului de transmitere a 93
mesajelor cu rendez-vous. Recepionarea poate fi condiionat (un apel este
3.4.3.3. Client-server

O aplicaie curent a comunicrilor ntre procese este relaia client-server. Un


proces server are n arj ndeplinirea unor servicii (executarea unor
programe predefinite) proceselor client. Pentru aceasta este utilizat
urmtoarea schem:

procesul server procesul client


ciclu
poart_serviciu.emitere(cerere)
poart_serviciu.recepionare(cerere)
<executare serviciu> ...
[poart_client.emitere(rezultat)] ...
endciclu
[poart_client.recepionarere(rezultat)]

Procesul server este asociat unei pori, unde clienii i depun cererile; el este
blocat atta timp ct nu exist cereri de servicii n ateptare.

Serviciul cerut poate conine trimiterea la client a rezultatului. n acest caz


clientul trebuie s trimit serverului n cererea sa numrul unei pori la care
el se va bloca n ateptarea rezultatului.

Modelul din 3.4.2.1 (alocarea resurselor banalizate) i modelul client-server sunt


reprezentative pentru dou scheme de obinere a unui serviciu cu ajutorul
proceselor ntr-un sistem de operare: apelarea unei procedure de monitor 94
sau activarea unui proces server ciclic prin emiterea mesajelor. Alegerea
Administrarea unui periferic Fiecrui periferic i este asociat un monitor procedurile
externe ale cruia permit executarea intrrilor-ieirilor la acest periferic. Forma
general:
perif: monitor;
var ..., sfr_schimb_i,...: condiie;
<declaraiile variabilelor de stare ale perifericului>
...
procedura schimb_i(<parametri>);
begin
<mascarea ntreruperilor>;
if starea preg then
<tratare eroare(perifericul nu este gata)>
endif;
lansare_transfer_i(parametri);
sfr_schimb_i.ateptare; -- ntrerupere demascat
if starea ok then-- n timpul ateptrii
<tratare eroare(incident de transfer)>
endif;
<demascare ntreruperi>
end;
...
begin
<iniializare>
end
end perif
Procedura lansare_transfer_i pregtete programul pentru schimbul cerut (construirea
programului canalului, innd cont de parametrii schimbului) i lanseaz execuia sa
(instruciunea SIO). Procesele apelante ateapt sfritul transferului datorit condiiei
sfr_schimb_i. Sosirea unei ntreruperi, care marcheaz sfritul schimbului de tip i provoac n
95
mod automat executarea urmtoarei secvene:
if sfr_schimb_i.vid then <tratarea eroare ntrerupere care nu este ateptat>
3.4.4.2. Buferizarea imprimrii

Trei zone-tampon tm1 i tm2 de capacitate N1 i N2 n memoria central i unul pe


disc, td, de lungime Ndisc. Pentru simplitate presupunem, c transferurile se
fac cu blocuri constante egale cu o linie. Fiecare bufer este comandat de un
monitor cu aceeai structur care are rolul de a asigura excluderea mutual i
sincronizarea condiiilor tampon plin i tampon vid.

Definind tm1, tm2 i td ca tablouri de elemente de lungimea unei linii i pointerii


top i coad locali fiecrui monitor, procedurile de depozitare i preluare pot fi:

<pentru tm 1> <pentru tm 2>


procedura intrare(l:linie); procedura intrare(l:linie);
tm1[coad] := l; tm2[coad] := l;
coad := coad+1 mod N1 coad := coad+1 mod N2

procedura ieire(var l:linie); procedura ieire(var l:linie);


l := tm1[top]; l := tm2[top];
top := top+1 mod N1 top := top+1 mod N2

n monitorul t_d operaiile de depozitare i preluare sunt intrri-ieiri, care


utilizeaz monitorul de gestionare a discului:

procedura intrare(l:linie); procedura ieire(var l:linie);


disc.scriere(l,td[coad]); disc.scriere(l,td[top]); 96
coad := coad+1 mod N disctop := top+1 mod Ndisc
Intrrile-ieirile sunt realizate prin cooperarea a patru procese programele crora
sunt prezentate schematic mai jos (trei procese ale sistemului de operare i
procesul utilizator). Pentru a simplifica expunerea au fost omise secvenele de
tratare a erorilor i am admis, c sistemul funcioneaz n regim permanent
fr limitarea numrului de linii la imprimare.

Programele folosesc trei monitoare de gestionare a perifericelor (tampon1,


tampon2 i tampon_disc) i dou monitoare de gestionare a perifericelor (impr
i disc), construite n baza modelului perif, prezentat n 3.4.4.1

proces imprimare linie proces scriere_disc proces citire_disc


ciclu ciclu ciclu
tampon2.preluare(l); tampon1.preluare(l);
tampon_disc.citire(l);
impr.scriere(l); tampon_disc.scriere(l);
tampon2.depozitare(l);
endciclu endciclu endciclu

Imprimarea unei linii este cerut de procedura:


procedura scriere_linie(l:linie);
tampon1.depozitare(l)

Putem constata, c programele de mai sus sunt mult mai simple dect cele care
folosesc direct ntreruperile. Structura modular, introdus de monitoare
permite separarea total a gestionrii tampoanelor de cea a perifericelor.97
Schimbarea capacitii unui tampon modific doar monitorul care comand
3.4.5. Sincronizarea temporal

Sincronizarea temporal face ca timpul s intervin nu


numai ca mijloc de ordonare a evenimentelor, dar
i ca msur de durat absolut. Acest mod de
sincronizare este utilizat n aplicaiile de timp real,
care conin interaciuni cu organe externe
(comanda proceselor industriale, de exemplu).

Sincronizarea temporal solicit folosirea unui ceas,


realizat prin intermediul generatorului de
sincronizare, care emite impulsuri la intervale
regulate. Aceste impulsuri pot fi utilizate pentru a
declana o ntrerupere
la fiecare impuls sau
pentru a decrementa n mod automat coninutul 98
unui registru contor, o ntrerupere este
3.5. Gestionarea dinamic a proceselor

n sistemele cele mai simple procesele sunt n numr constant i create odat
pentru totdeauna la generarea sistemului de operare. n sistemele
performante, mai ales n cele interactive, procesele sunt comandate dinamic.
Astfel, n Multics, un proces nou este creat odat cu admiterea unui nou
utilizator; n Unix, la executarea fiecrei comenzi.
Primitivele de creare i distrugere a proceselor pot fi puse n arja sistemului de
operare sau la dispoziia utilizatorilor. Crearea unui proces presupune alocarea
resurselor i iniializarea contextului. Distrugerea unui proces elibereaz toate
resursele care i-au fost alocate.
Primele primitive, propuse pentru gestionarea dinamic a proceselor, au fost fork i
join. Istoric i cronologic, aceste operaii au fost introduse pentru organizarea
executrii paralele a programelor pe un sistem multiprocesoral, noiunea de
proces nefiind nc clar.

Fie P o procedur. Instruciunea


id := fork(p),
executat de procesul p (printe), creeaz un proces nou q (fiul), care va fi
executat paralel cu p. Primitiva fork prezint ca rezultat identificatorul lui q
(sau nil, dac imposibil). Contextul iniial al lui q este o copie a lui p, nu i
contorul ordinal, care este fixat la prima instruciune a lui p. Procesul fiu se
termin cu o primitiv, numit exit sau quit, care provoac dispariia sa.
Dup ce fork creaz un proces fiu q, primitiva join q permite procesului printe
99 s
fixeze un punct de rendez-vous cu acest fiu. Executarea lui join q blocheaz
Capitolul 4. Administrarea proceselor

4.1. Realizarea excluderii mutuale


4.1.1. Specificarea problemei
4.1.2. Excluderea mutual prin ateptare activ

4.1.3. Semaforul instrument elementar pentru excluderea mut


ual

4.2. Funcionarea i structura unui nucleu de sincronizare


4.2.1. Strile unui proces. Fire de ateptare
4.2.2. Administrarea contextelor i schemele primitivelor

4.3. Realizarea unui nucleu de sincronizare


4.3.1. Organizarea general
4.3.2. Realizarea monitoarelor
4.3.3. Operaii asupra proceselor
4.3.4. Excluderea mutual i alocarea procesorului

4.4. Procese i fire n Linux


4.4.1. Crearea proceselor
4.4.2. Distrugerea proceselor
4.4.3. Daemoni n Linux 100
4.4.4. Obinerea informaiilor despre procese
Acest capitol este consacrat implementrii noiunilor
proces i sincronizare n cadrul unui sistem de
operare.

Mecanismele utilizate sunt bazate pe realizarea


principiul excluderii mutuale, studiat n 4.1.

Principiile directoare ale reprezentrii i gestiunii


proceselor (contexte, alocarea procesorului) sunt
prezentate n 4.2 i ilustrate n 4.3 printr-un
exemplu schematic de realizare a unui nucleu de
sincronizare.

101
4.1. Realizarea excluderii mutuale

Mecanismele care realizeaz excluderea mutual


pentru un set de programe sunt bazate pe un
principiu comun: utilizarea mecanismului de
excludere mutual existent deja la un nivel inferior.
Drept rezultat, sunt utilizate variabile comune ale
proceselor concurente, iar coerena acestor
variabile trebuie ea nsi s fie garantat.

La nivelul de baz (cel al resurselor fizice) exist dou


mecanisme elementare: excluderea mutual la
accesarea unui amplasament de memorie i masca
ntreruperilor. Aceste dou mecanisme sunt, n
principiu, suficiente pentru toate necesitile. Dar,
din considerente de eficacitate, la nivelul
resurselor fizice sau microprogramelor exist 102
dispozitive mai sofisticate, cum ar fi instruciunea
4.1.1. Specificarea problemei

Fie {p1, p2,...,pn} o mulime de procese pe care le vom considera ciclice; programul
fiecrui proces conine o seciune critic. Excluderea mutual este asigurat prin
dou fragmente de program (prolog i epilog), care ncadreaz seciunea critic a
fiecrui proces. Soluia trebuie s posede urmtoarele proprieti:
excludere mutual: la fiecare moment de timp cel mult un proces execut
seciunea critic,
absena blocajelor intempestive (care nu sunt la timpul lor): dac n seciunea
critic nu se afl vreun proces, nici un proces nu trebuie s fie blocat de
mecanismul excluderii mutuale,
toleran la defecte: soluia trebuie s rmn valid i n cazul unor defecte n
unul sau n mai multe procese, care se afl n afara seciunii critice,
absena privaiunilor: un proces, care a cerut intrarea ntr-o seciune critic nu
trebuie s
atepte un timp infinit (presupunnd, c toate procesele au aceeai prioritate),
simetrie: prologul i epilogul trebuie s fie identice pentru toate procesele i
independente de numrul lor.

Vom construi o soluie de forma:


<iniializare>-- comun tuturor proceselor
<programul procesului pi>:
ciclu
<prolog> -- intrare n seciunea critic
<seciunea critic>
<epilog> -- ieire din seciunea critic 103
<restul programului>
4.1.2.2. Ateptarea activ n sistemele multiprocesorale: Test & Set

Pentru tratarea cu ajutorul ateptrii active a cazului n care mai multe


procese actualizeaz i consult variabile comune, unele maini au o
instruciune, care realizeaz ntr-o manier indivizibil consultarea i
actualizarea unui amplasament de memorie. Aceast instruciune,
adesea numit Test And Set (tas), este utilizat n sistemele
multiprocesorale (n sistemele monoprocesor mascarea ntreruperilor
este suficient pentru asigurarea excluderii mutuale).

Fie m adresa amplasamentului de memorie considerat, sau lactul, iar R un


registru al procesorului. Prin convenie, dac lactul este n 0, seciunea
critic este liber, iar dac este 1 ea este ocupat. Efectul lui Test And
Set este descris mai jos (Mp[m] desemneaz amplasamentul de memorie
cu adresa m):

tas R, m : <blocare acces la Mp[m]>


R:=Mp[m]
Mp[m]:=1
<eliberare acces la Mp[m]>
Excluderea mutual prin ateptare activ poate fi programat cu ajutorul
urmtoarelor secvene:
iniializare : stz m -- Mp[m]:=0
prolog : tas R, m
br(R0)$-1 -- test iterat 104
epilog : stz m
4.1.3. Semaforul instrument elementar pentru excluderea mutual
4.1.3.1. Definiii

Un semafor s este constituit prin asocierea unui contor cu valori ntregi, notat s.c., i
a unui fir de ateptare, notat s.f. La crearea semaforului contorului i se atribuie
o valoare iniial s0 (s00), i firul de ateptare s.f. este vid.

Un semafor servete la blocarea proceselor ateptnd s se produc o condiie


pentru deblocarea lor; procesele blocate sunt plasate n s.f. Mai multe procese
pot fi sincronizate prin semafoare, care aparin prii comune a contextului lor.
Un procesor poate fi manipulat doar cu ajutorul a dou operaii P(s) i V(s),
numite primitive. Valoarea contorului i starea firului de ateptare sunt
inaccesibile, chiar i pentru citire.

Fie p un proces care execut P(s) sau V(s), iar q un proces care se afl n firul de
ateptare s.f. Algoritmul primitivelor este urmtorul:
P(s): V(s):
s.c.:=s.c.-1; s.c.:=s.c.+1;
if s.c.<0 then if s.c.0 then
stare(p):=blocat; extragere(q,s.f.);
introducere(p,s.f.) stare(q):=activ
endif endif

Aceste operaii sunt executate n excludere mutual.


105
Doar executarea primitivei P poate bloca un proces, acesta va putea fi deblocat doar
de un alt proces, care a executat primitiva V pe acelai semafor. Executarea
4.1.3.2. Proprieti

Proprietile principale ale sincronizrii cu ajutorul semafoarelor pot fi deduse din


cteva relaii invariante: relaii verificate iniial i care rmn neschimbate
dup executarea primitivelor P i V un numr arbitrar de ori.

Fie, pentru un semafor s:


np(s) numrul total de execuii a operaiei P(s),
nv(s) numrul total de execuii a operaiei V(s).

Are loc relaia:


s.c. = s0 np(s) + nv(s) (1)

deoarece valoarea iniial a lui s.c. este s0, fiecare operaie P(s) scade din aceast
valoare o unitate, iar V(s) adaug 1.

Aceste operaii, fiind executate n excludere mutual, nici o modificare nu este


pierdut.

Fie nbloc(s) numrul proceselor blocate n s.f. Are loc relaia:


nbloc(s) = if s.c. 0 then 0 else s.c. endif (2)
care poate fi de asemenea scris
nbloc(s) = max(0, s.c.) (21)
106
Relaia (2) poate fi scris sub o alt form, care ne va fi util mai departe.

Fie nf(s) numrul de treceri de ctre procese a primitivei P(s), adic suma
numrului de executri a lui P(s) fr blocare i a numrului de deblocri
realizate de ctre V(s).

Vom avea n acest caz:


nbloc(s) = np(s) nf(s).

Introducnd aceast valoare n (21) obinem:

- nf(s) = max(-np(s), -s.c.-np(s)), sau

nf(s) = min(np(s), s.c.+np(s)).

n fine, utiliznd valoarea lui s.c. din (1), avem:

nf(s) = min(np(s), s.c.+nv(s)). (3)

107
4.1.3.3. Realizarea excluderii mutuale cu ajutorul semafoarelor

Prezentm o schem, care rezolv problema excluderii mutuale pentru n


procese. n cazul n care nu se fac ipoteze speciale despre gestionarea
firului de ateptare, nu se garanteaz lipsa privaiunilor (blocrilor
indefinite).
iniializare: semafor mutex init 1
prolog : P(mutex)
<seciunea critic>
epilog : V(mutex)

S ne convingem, c soluia prezentat este n conformitate cu specificaiile


din 4.1.1.

Trebuie s verificm proprietile a, b i c au loc.

Fie nc numrul de procese, care se afl n s.c. la un moment concret de timp.


Avem:
nc = nf(mutex) nv(mutex) (4)
Proprietile n cauz pot fi verificate aplicnd semaforului mutex relaia (3):
nf(mutex) = min(np(mutex), 1+nv(mutex)) (5)

Excluderea mutual

Din (5) avem: 108


nf(mutex) 1+nv(mutex)
Absena blocajelor

Presupunem, c nici un proces nu se afl n seciunea critic. Vom avea n acest caz
nc = 0, sau
nf(mutex) = nv(mutex) sau nc
nf(mutex) 1+nv(mutex)
Conform relaiei (5):
nf(mutex) = np(mutex) sau
nbloc(mutex) = 0
Proprietatea b este prezent, ca i proprietatea c, deoarece nu s-a fcut nici o
ipotez despre starea proceselor, dac ele nu se afl n seciunea lor critic.

1). Seciuni critice incorporate. Blocaje


Fie dou procese p i q pentru care programul conine dou seciuni critice,
corespunztoare utilizrii a dou resurse critice distincte.
procesul p procesul q
... ...
(1) P(mutex1) (11) P(mutex2)
... ...
(2) P(mutex2) (21) P(mutex1)
... ...
V(mutex2) V(mutex1)
... ...
V(mutex1) V(mutex2) 109
Dac traiectoria temporal de execuie a proceselor p i q ncepe cu (1, 11, 2, 21),
se va ajunge la o situaie n care ambele procese sunt blocate pentru un timp
2). Ateptare infinit n seciunea critic sau impas

Validitatea soluiei propuse se bazeaz pe presupunerea, c toate procesele


prsesc seciunea critic n timp finit. Numai ce am stabilit, c aceast ipotez
poate fi infirmat dac seciunile critice se intersecteaz. Pot fi i alte cauze,
care conduc la o ateptare infinit. Astfel, blocarea, incorectitudini sau ciclri
infinite ntr-un proces, care se afl n seciunea critic, pot paraliza toate
procesele concurente cu procesul dat. n cazul unor seciuni critice globale,
realizate pentru un SO, pot fi propuse urmtoarele soluii:
oricrui proces, care execut o seciune critic global, i se atribuie, pe toat
durata acestei execuii, un statut special, care i confer anumite drepturi
particulare: prioritate nalt, protecie contra distrugerii, etc.
un orologiu de gard este armat la intrarea unui proces n seciunea critic;
dac procesul nu prsete seciunea critic dup un interval de timp
predefinit, sistemul de operare foreaz ieirea procesului i elibereaz astfel
seciunea critic.

3). Privaiune

Algoritmul excluderii mutuale garanteaz intrarea exact a unui proces n seciunea


critic, dac mai multe procese ncearc acest lucru, cnd seciunea critic este
liber. Se poate ntmpla ca un proces particular s fie reinut pentru un
interval de timp nedefinit: acest fenomen se numete privaiune.

Pentru cazul cel mai frecvent, cnd firele de ateptare a semafoarelor sunt 110
gestionate conform ordinii prim sosit prim servit fr prioritate, riscul de
privaiune este eliminat. ntradevr, dac presupunem c execuia unei seciuni
4.2. Funcionarea i structura unui nucleu de sincronizare

Noiunea de proces i operaiile asociate nu fac, de obicei, parte din setul de baz
al calculatorului. Ele vor fi implementate cu ajutorul unor programe i/sau
microprograme, care formeaz nucleul de administrare a proceselor.

n cadrul descrierii unui sistem de operare cu ajutorul mainilor abstracte ierarhice,


nucleul constituie nivelul cel mai inferior, realizat direct pe maina fizic.
Maina abstract, realizat astfel poate fi numit o main a proceselor, care
posed, n afara setului de instruciuni de baz, primitivele care permit
crearea, distrugerea i sincronizarea proceselor. Ca i orice main abstract,
maina realizat n acest mod ascunde unele proprieti ale mainii fizice.

Astfel:
noiunea de proces ascunde utilizatorilor nucleului mecanismul de alocare a procesoarelor
fizice. La un nivel superior nivelului nucleului chiar i numrul procesoarelor nu intervine
dect doar asupra performanelor sistemului i nici ntr-un fel asupra structurii sale logice,
primitivele de sincronizare, realizate de nucleu, ascund mecanismele fizice de comutare a
contextului, de exemplu, cele oferite de ntreruperi.

Structura unui nucleu de sincronizare depinde de specificaiile mainii fizice


(gestiunea ntreruperilor, structura cuvntului de stare, sistem mono- sau
multiprocesoral, etc.) i de specificaiile mainii abstracte care trebuie
realizate, ndeosebi de mecanismul de sincronizare ales.

Este, totui, posibil de evideniat cteva caracteristici comune ale acestei structuri,
pe care le vom prezenta nainte de a descrie o realizare concret. 111
4.2.1. Strile unui proces
Luarea n consideraie a alocrii fizice a unui procesor ne impune s descompunem
starea activ n dou stri noi. Un proces activ se numete ales, dac el este n
curs de execuie pe un procesor fizic; el se numete eligibil dac nu poate fi
executat din cauza lipsei unui procesor disponibil.

Tranziiile 3 i 4 (blocare i deblocare) sunt tranziiile interne, datorate


sincronizrii proceselor. Tranziiile tehnologice 1 i 2 sunt datorate alocrii
procesoarelor fizice proceselor.
Retragere (eng. preemption, fr. rquisition) a procesorului.
Administrarea proceselor face apel la fire de ateptare. Astfel, fiecrei cauze
distincte de blocare (semafor, condiie ntr-un monitor, etc.) i se asociaz un fir
de ateptare pentru a stabili o ordine a proceselor blocate. Mai mult, procesele
eligibile sunt meninute ntr-un fir special de ateptare, gestionarea cruia
permite implementarea unei politici de alocare a procesoarelor fizice. Dac
presupunem, c viitorul proces ales este totdeauna primul (1) din firul proceselor
eligibil ales
eligibile, algoritmul de alocare poate fi definit
(ready) (2) (exe)

cu ajutorul algoritmului de inserare


n firul proceselor eligibile sau
(4) (3)
cu ajutorul algoritmului care
determin retragerea procesoarelor fizice.
blocat
(wait)

Fig.4.1. Strile unui proces 112


Mulimea programelor, care realizeaz aceti algoritmi se numete planificator
(eng. scheduler, fr. ordonnanceur).
Programul, care realizeaz alegerea propriu-zis se numete dispecer (eng.
dispatcher, fr. distributeur).

Schema general a firelor de ateptare ale proceselor este prezentat n fig.4.2.

Deplasarea proceselor ntre aceste fire corespunde schimbrii strii.

planificator

fire de procese blocate

dispecer proces ales


firul proceselor eligibile

Fig.4.2. Fire de ateptare ale proceselor, administrate de nucleul sistemului de operare

113
4.2.2. Administrarea contextelor i schemele primitivelor
Coninutul contextului
Operaia de alocare a procesorului fizic impune pstrarea pentru fiecare proces a
unei copii a contextului. Aceast copie a contextului descrie starea procesorului
pentru procesul considerat. n acest scop fiecrui proces i se asociaz o mulime
de informaii rezidente n memorie i numit vector de stare, bloc de control al
procesului sau blocul contextului, care conine:
informaiile despre starea procesorului, necesare la realocarea lui,
valorile atributelor procesului (prioritate, drept de acces),
pointeri la spaiul de lucru al procesului (segmentele procedur i date, stiva
de execuie),
informaii de gestiune (starea, legturile de nlnuire).
Organizarea nucleului
Execuia programelor nucleului poate fi declanat n dou moduri (fig.4.3):
prin apelarea unei primitive de administrare a proceselor (creare, distrugere, sincronizare,
etc.); aceste primitive sunt realizate sub form de apel al supervizorului,
printr-o ntrerupere: programele de tratare a ntreruperilor fac parte din nucleu, deoarece
ntreruperile sunt traduse n operaii de sincronizare i sunt invizibile la nivelurile superioare.
alocare procesor apelare supervizor Programele primitivelor i cele de tratare
proces
a ntreruperilor manipuleaz blocurile
contextului i firele proceselor. Pentru
programul asigurarea coerenei informaiilor aceste
nucleului programe trebuie executate n excludere
mutual. Executarea unui program al
nucleului se termin n toate cazurile
periferice, prin realocarea procesorului sau
lansare ceasul ntreruperi procesoarelor, adic prin apelarea
dispecerului. 114
Fig.4.3. Comunicarea cu un nucleu de sincronizare
Programul unei primitive a nucleului are urmtoarea schem general:

prolog; -- salvarea contextului i intrarea n seciunea


critic
control; -- verificarea drepturilor i a parametrilor
<corpul programului> -- manipuleaz firele proceselor
alocare_procesor; -- programul dispecer i ieirea din seciunea
critic

Secvena prolog, comun tuturor operaiilor, salveaz contextul procesului,


care execut operaia, i asigur intrarea n seciunea critic. Secvena
control verific drepturile procesului apelant de a executa primitiva i
validitatea parametrilor transmii. Detaliile depind de primitiv.
Secvena alocare_procesor este programul dispecerului: ea realizeaz
realocarea procesorului i ieirea din seciunea critic.

Tratarea ntreruperilor de ctre nucleu trebuie s fie coordonat cu


mecanismele de sincronizare alese. De obicei sunt considerate dou
scheme de baz:

Asocierea unui concret proces, care trateaz o ntrerupere. Doar acest proces se va
afla n ateptarea unei ntreruperi anume, existnd pentru aceasta o instruciune
special.
Asocierea unei operaii de deblocare (semnalizare asociat unei condiii, V la un
semafor, etc.) la o ntrerupere.

115
Problemele de mascare i de prioritate a ntreruperilor sunt tratate asociind
prioriti proceselor.
4.3. Realizarea unui nucleu de sincronizare
Vom prezenta n cele ce urmeaz schema realizrii unui nucleu particular de
sincronizare. Descrierea este cu titlu de ilustrare, fiind posibile multe ameliorri
att din punct de vedere al interfeei, ct i n ceea ce privete detaliile de
realizare.
4.3.1. Organizarea general
4.3.1.1. Interfeele
Gestionarea proceselor
Procesele pot fi create i distruse n mod dinamic i sunt organizate ierarhic conform
relaiei de paternitate. Un proces este creat cu ajutorul primitivei:
creare(p, context iniial, atribute)
Atributele unui proces conin prioritatea (exprimat printr-un ntreg) i drepturile de
a executa anumite operaii. Contextul iniial specific starea iniial a cuvntului
de stare, a registrelor procesorului i a spaiului de lucru asociat procesului
(stiva, date proprii).
Procesul este creat n starea eligibil. Numrul su p (numele) este returnat ca
rezultat (valoarea nil, dac crearea este imposibil).

Primitivele care urmeaz pot fi aplicate unui proces existent i executate doar de
proc-printe.

Procedura distrugere poate fi utilizat de ctre un proces pentru a se autodistruge.


distrugere(p) va distruge toate procesele desemnate de procesul p i toi
descendenii acestora.

Procedura suspendare(p) ntrerupe execuia unui proces p, plasndu-l ntr-un116 fir de


ateptare special. Execuia lui p poate fi reluat doar cu ajutorul primitivei
Sincronizarea

Procesele sunt sincronizate cu ajutorul monitoarelor. Gestiunea ntreruperilor


este integrat n mecanismul monitoarelor: o ntrerupere este asociat
unei condiii.

Monitoarele sunt declarate n programele proceselor; un monitor este creat la


compilarea programului, unde el este declarat, i este mai apoi utilizat
conform regulilor, definite de limbajul de programare utilizat.

4.3.1.2. Structuri i algoritmi

Din momentul crerii sale unui proces i se asociaz un numr fix (nume
intern, process handler), care servete la desemnarea lui i permite
accesarea blocului su de context. Blocul de context conine urmtoarele
cmpuri:
Csp : zona de salvare a cuvntului de stare a programului,
Reg : zona de salvare a registrelor generale ale procesorului,
Stare : valoarea strii procesului (eligibil, blocat, ...),
Prio : prioritatea procesului,
Drepturi : drepturile procesului,
Fire : legturi de nlnuire n ierarhia proceselor,
Suc : legturi de nlnuire n firele de ateptare (FA).
117
Administrarea proceselor utilizeaz fire de ateptare, ordonate n ordinea de
descretere a prioritilor i comandate de un set de proceduri de accesare:

introducere(p, f) Introduce p n f, n elementul lui f care corespunde prioritii


procesului.
primul(f) ntoarce numrul (numele) procesului din vrful lui f (nil dac f
este vid); nu
modific f.
ieire(p, f) Extrage din f primul proces, numrul pus n p (nil dac f este vid).
extragere(p, f) Extrage din firul f procesul cu numrul p specificat, nil dac pr nu
exist n f.
legtur de nlnuire
vid(f) .. Funcie bool cu valoarea adevrat, dac firul f este vid, fals n caz
contrar. .
Csp[i]

Reg[i]
Bloc de context
Stare[i]
Drepturi[i]
Prio[i]
legturi de nlnuire n FA
..
. context n memorie

blocul contextului i
Fig.4.4. Organizarea unui FA de procese
118
4.3.2. Realizarea monitoarelor
Monitorul, descris mai jos, n raport cu noiunea clasic de monitor, prezint
urmtoarele diferene:
Semantica primitivei semnalizare. Specificarea iniial a primitivei c.semnalizare
precizeaz c unul din procesele care sunt n ateptarea condiiei c (dac
exist) este imediat deblocat, ceea ce implic trecerea temporar n starea
blocat a procesului, care execut semnalizare. n specificarea prezent
procesul deblocat este simplu trecut n starea eligibil i trebuie s intre n
monitor; el se afl, deci, n competiie cu alte procese, care ateapt s intre n
monitor, i nu este garantat c va fi imediat ales. Condiia, care provocase
deblocarea, poate fi modificat nainte ca procesul deblocat s-i reia execuia
n monitor. Pentru aceast nou interpretare trebuie s fie modificat forma
punerii n ateptare. O construcie de forma
if continuare_non_posibil then
c.ateptare
endif
devine n acest caz
while continuare_non_posibil do
c.ateptare
endwhile
Dei aceast construcie introduce un risc de privaiune, ea prezint o serie de
avantaje de ordin practic. Ea evit o comutare a contextului, cu preul unei
evaluri suplimentare a condiiei. Dar principalul este c ea permite definirea
simpl a unor posibiliti suplimentare utile (deblocare multipl, ntrzieri de
control sau de gard).
Verificarea validitii monitorului este simplificat, deoarece condiia de depire
119
(continuare_posibil) este consultat n timpul deblocrii: procesul care
Deblocare multipl
Problema deblocrii multiple poate fi rezolvat uor introducnd o primitiv nou
c.difuzare_semnal efectul creia se exprim astfel:
while c.non_vid do
c.semnalizare
endwhile

Fiind dat, c toate procesele deblocate vor testa din nou condiia i cer din nou
acces la monitor, aceast primitiv va avea evident efectul ateptat.

ntrziere de gard.
Din probleme de securitate, n special pentru tratarea blocajelor, poate fi util s
se asocieze o ntrziere de gard condiiei unui monitor. Aceast ntrziere
este egal cu durata maxim de blocare a unui proces ntr-un fir de ateptare
asociat condiiei date. La expirarea ntrzierii de gard va fi efectuat o
tratare specificat. Aceast tratare poate consta n simpla deblocare a
procesului (care va testa din nou condiia de depire) sau transferul su
ntr-un fir de ateptare special.

Fie M.c.ntrziere ntrzierea de gard asociat unei condiii c n monitorul M. Se


presupune disponibil un ceas habs, care pune la dispoziie timpul absolut.
Trebuie s adugm n programul primitivei c.semnalizare instruciunea
urmtoare:
hdeblocare[p]:=habs+M.c.ntrziere
unde hdeblocare[p] este un cmp nou al blocului de context al procesului p. Un
120
proces, numit gardian, deblocat la intervale regulate de timp parcurge
mulimea contextelor i efectueaz tratamentul specificat proceselor pentru
4.3.2.1. Algoritmi de baz

Programul monitorului trebuie s asigure dou funcii:


excluderea mutual pentru procedurile monitorului,
blocarea i deblocarea asociate primitivelor ateptare i semnalizare.

Fiecrui monitor M i sunt asociate urmtoarele structuri de date:


un dispozitiv de excludere mutual M.disp (lact), care poate lua dou valori
liber sau ocupat,
un fir de ateptare M.fir asociat acestui dispozitiv. Iniial M.disp=liber,
M.fir=<vid>.

Fiecrei condiii c de M i este asociat un fir M.c.fir, un contor de gard


M.c.ntrziere i, pentru condiiile asociate unei ntreruperi, un indicator
boolean M.c.ntr_sosit.

Firul proceselor eligibile este determinat de f_eligibil.


Pentru M : intrare, ieire, c.ateptare i c.semnalizare (secvenele intrare i ieire
sunt inserate de compilator i ncadreaz execuia procedurilor externe ale
monitorului). S definim mai nti procedurile de gestiune a dispozitivului:
cerere_disp(M, p): eliberare_disp(M):
if M.disp=ocupat then if vid(M.fir) then
intrare(p, M.fir); M.disp:=liber
stare[p]:=blocat else
else ieire(q, M.fir);
M.disp := ocupat; intrare(q, f_eligibil); 121
intrare(p, f_eligibil); stare[q]:=eligibil
stare[p]:=eligibil endif
Cele patru secvene se vor scrie utiliznd urmtoarele proceduri:
intrare(M): ieire(M):
prolog; prolog;
p:=<proces apelant>; p:=<proces apelant>;
cerere_disp(M, p); eliberare_disp(M);
alocare_procesor; intrare(p, f_eligibil);
alocare_procesor;

c.ateptare: c.semnalizare:
prolog; prolog;
p:=<proces apelant>; p:=<proces apelant>;
intrare(p, M.c.fir); if non_vid(M.c.fir) then
stare[p]:=blocat; ieire(q, M.c.fir);
eliberare_disp(M); cerere_disp(M, p);
alocare_procesor; cerere_disp(M, q);
eliberare_disp(M)
else
intrare(p, f_eligibil)
endif
alocare_procesor;
S ne amintim, c secvena prolog asigur salvarea contextului i intrarea n
seciunea critic, iar secvena alocare_procesor asigur alocarea procesorului
i prsirea seciunii critice.

Notm, c n primitiva semnalizare, procesul apelant p i procesul deblocat q sunt


introduse (cu ajutorul primitivei cerere_disp) n firul de ateptare pentru122
a intra
n monitor. Procesul activat prin intermediul primitivei este primul proces din
4.3.2.2. Tratarea ntreruperilor

Pentru asigurarea uniformitii mecanismelor de sincronizare fiecrei ntreruperi i se


asociaz:
o condiie ntr-un monitor, un proces ciclic care realizeaz tratarea ntreruperilor, n
stare de repaus acest proces este n ateptarea condiiei.

O condiie poate fi asociat unui singur nivel de ntrerupere. Sosirea unei ntreruperi
provoac executarea funciei semnalizare pentru condiia asociat. Prioritatea
relativ a ntreruperilor este tradus n prioritatea proceselor, care trateaz
ntreruperile.

Acest mecanism are carene. De exemplu, excluderea procedurilor monitorului nu


poate fi aplicat ntreruperilor. Se poate ntmpla ca o ntrerupere s fie cerut
atunci cnd procesul, care trateaz ntreruperile, este nc activ, din care cauz
ntreruperea va fi pierdut. Evitarea acestui fenomen se va face cu ajutorul unui
indicator boolean, care memorizeaz sosirea unei ntreruperi. Vom avea:
<proces de prelucrare a ntreruperii>
ciclu
test if nonM.c.ntr_sosit then
c.ateptare; -- evitarea pierderii unei ntreruperi
go to test
endif;
<tratarea ntreruperii>
endciclu
<sosirea unei ntreruperi asociate lui M.c> 123
M.c.ntr_sosit := true;
4.3.2.3. Tratarea erorilor

Principiul de tratare a erorilor const n blocarea procesului care a provocat eroarea


i expedierea unui mesaj procesului printe, care va putea lua msurile
necesare (corectarea erorii i relansarea sau distrugerea procesului, care a
generat eroare). Pentru aceasta este folosit un fir special f_eroare (n
conformitate cu organizarea sistemului, poate fi prevzut un fir unic sau un fir
pentru fiecare utilizator, pentru fiecare subsistem, etc.).
Presupunem c o eroare care are loc n cursul execuiei unui proces provoac o
deviere, tratarea creia se va scrie astfel:
prolog;
p:=<proces apelant>;
intrare(p, f_eroare);
<tratare specific>;
stare[p]:=suspendat;
alocare_procesor;
Am definit o stare nou (suspendat), care se aplic unui proces activitatea cruia
a fost ntrerupt de un eveniment, considerat anormal.

Nu detaliem aici <tratare specific>, care trebuie s fie specificat de ctre procesul
printe la momentul crerii procesului descendent. Acest program conine,
evident, codul de diagnosticare (identitatea procesului generator de eroare,
natura erorii), care trebuie transmis procesului printe ntr-un mod special,
conform gradului de urgen (actualizarea unui indicator, deblocare, etc.).124
4.3.3.1. Crearea i distrugerea proceselor
Pentru alocarea contextelor i numelor proceselor sunt utilizate dou metode
principale:
pentru blocurile contextelor sunt rezervate un numr fix de amplasamente; amplasamentele neutilizate
-o valoare special (nil) a cmpului stare; blocul este desemnat de un numr, care este numrul utilizat
pentru desemnarea procesului asociat;
amplasamentele rezervate blocurilor sunt alocate dinamic n memorie; numerele sunt alocate
proceselor de asemenea n mod dinamic i un tabel de coresponden, asociaz numrului fiecrui
proces adresa n memorie a blocului su de context.

Disponibil o procedur alocare_context(p), care realizeaz alocarea contextului


(blocul de context i spaiul de lucru) i ntoarce ca rezultat un numr p al
procesului. Numrul procesului creat este ntors drept rezultat al primitivei:
creare(p, context iniial):
prolog;
control; -- verificarea drepturilor
alocare_context(p);
if p nil then
iniializare_context(i);
intrare(p, f_eligibil)
endif;
intrare(proces apelant, f_eligibil);
alocare_procesor; -- este ntors p drept rezultat

Contextul iniial este specificat de ctre procesul creator: el trebuie s defineasc


valoarea iniial a registrelor i a cuvntului de stare a procesului creat, starea
iniial a spaiului de lucru, atributele, cum ar fi prioritatea i drepturile. Unele
125
cmpuri ale cuvntului de stare sunt predefinite i nu pot fi modificate (modul,
mascarea ntreruperilor, etc.). Pentru elementele legate de protecie
Distrugerea trebuie s implice eliberarea resurselor. Doar numele i contextul sunt
gestionate direct de nucleu; celelalte resurse, cum ar fi fiierele, sunt preluate
de mecanisme specifice.

Distrugerea unui proces, care se afl n seciunea critic poate conduce la o blocare.
Seciunile critice ale monitoarelor sunt gestionate direct de nucleu. Este posibil
s se asocieze unui proces numrul dispozitivului de blocare, care se afl n
posesia procesului dat (el poate fi angajat n mai multe apeluri incorporate), i
s difereniem distrugerea procesului pn cnd valoarea acestui numr nu va fi
0. O alt soluie const n examinarea periodic a fiecrui dispozitiv de blocare i
s eliberm dispozitivul de blocare, dac procesul care l posed a fost distrus.

Principiul primitivei distrugere este dat n schema de mai jos:


distrugere (p):
prolog;
control; -- verificarea drepturilor
eliberare_context(p);
intrare(proces apelant, f_eligibil);
alocare_procesor;

Procedura eliberare_context trebuie s asigure eliberarea resurselor ocupate de


procesul distrus i de descendenii acestuia:
eliberare_context(p):
list:=<lista firelor procesului p>;
restituire_bloc_context(p);
restituire_memorie(p);
for q list do
eliberare_context(q)
126
endfor;
4.3.3.2. Suspendarea i reluarea

Efectul primitivei suspendare poate fi ca i al unei devieri i programul de tratare


poate fi analogic. Suspendarea unui proces pune o problem analogic celei de
distrugere, dac procesul se afl n seciunea critic ntr-un monitor.
suspendare(p):
prolog;
control;
< tratare seciune critic>;
f:=<fir care conine p>;
extragere(p, f);
intrare(p, f_eroare);
stare[p]:=suspendat;
intrare(proces apelant, f_eligibil);
alocare_procesor;
Primitiva reluare permite unui proces s deblocheze un fir suspendat, dup
modificarea eventual a contextului su.
reluare(p):
prolog;
control;
extragere(p, f_eroare);
stare[p]:=eligibil;
intrare(proces apelant, f_eligibil);
intrare(p, f_eligibil);
alocare_procesor;
127
4.3.4. Excluderea mutual i alocarea procesorului
4.3.4.1. Realizarea pentru cazul monoprocesor

n acest caz excluderea mutual este realizat prin mascarea ntreruperilor. Pentru aceasta
trebuie pregtit masca ntreruperii n cuvntul de stare, care ar specifica programele
asociate primitivelor de tratare a ntreruperilor. Dac notm prin proces_ales o variabil
global, care conine numrul procesului ales, iar prin salv_csp locaiunea n care a fost
salvat cuvntul de stare a procesorului la apelarea supervizorului sau la ntrerupere,
prologul va fi de forma:
prolog:
<mascarea ntreruperilor> -- masca n cuvntul de stare
csp[proces_ales] := salv_csp;
salv_registre(Reg[proc_al]);

Programul dispecerului, care de asemenea realizeaz ieirea din seciunea critic, are grij s
aloce procesorul primului proces din firul de procese eligibile. Pentru simplificarea
manipulrii acestui fir este binevenit s fie introdus aici un proces special cu prioritate
joas, care rmne tot timpul n coada firului i nu poate fi blocat. Acest proces, care poate
fi ales doar atunci cnd el este unicul eligibil, execut o activitate de fond, care nu este
urgent sau o simpl bucl de ateptare. El garanteaz, deci, c firul proceselor eligibile nu
este niciodat vid.

Programul dispecerului este de forma:


alocare_procesor:
ieire(proces_ales, f_eligibil);
ncrcare_registre(Reg[proc_al]);
ncrcare_csp(csp[proces_ales]);
Figura 4.5 ilustreaz principiul de funcionare a nucleului, exemplificnd efectul global al unei
128
realocri a procesorului dup blocarea procesului ales.
f_eligibil

Cuvnt de stare
proc_al Registre

Csp Csp Procesor


Reg Reg
Prio=6 5 3 2
p1 p2 p3 p4

c.fiier
(a) nceputul executrii c.ateptare

5 1
p5 p6
Cuvnt de stare
f_eligibil proc_al Registre

Procesor

6 5 3
p1 p2 p3
c.fiier

(b) sfritul executrii c.ateptare

5 2 1
p5 p4 p6
129
Fig.4.5. Alocarea procesorului
4.4.1. Crearea proceselor n Linux
n Linux procesele se nmulesc prin clonare: apelul de sistem, care creaz un
proces nou, se numete clone, iar procesul fiu este o copie aproape exact a
procesului printe, doar c mai departe va executa codul su, iar procesul
printe ceea ce este scris dup apelarea lui clone. Dac dorim s evitm
diferenierea, apelarea lui clone permite s definim urmtorii indicatori (flags),
care specific momentele comune ale fiului i printelui:
Spaiul de adrese (Clone_VM);
Informaiile despre sistemul de fiiere (Clone_FS);
Tabelul fiierelor deschise (Clone_FILES);
Tabelul programelor de tratare a semnalelor (Clone_SIGHAND);
Printele (Clone_PARENT) n acest caz, evident, va fi creat un proces frate.

Firele sunt realizate n biblioteca standard de susinere a programelor cu mai multe


fire ca i procesele, generate cu indicatorul Clone_VM, i, din punctul de vedere
al nucleului sistemului, nu se deosebesc de alte procese. n unele biblioteci de
alternativ pot exista diferene.
Exist fire handicapate, generate de funcia kernel_thread pentru necesiti
interne ale sistemului. Acestea nu au parametri pentru linia de comand, de
obicei nu au fiiere deschise, etc.

Procesele - funciile exec (bibl Linux stand): execl, execlp, execle, execv, execve,
execvp.
nlocuiesc codul din procesul curent cu codul, care se afl n fiierul indicat. Fiierul
poate fi un fiier binar executabil Linux, un script al interpretorului limbajului de
comand, un fiier binar de un alt format (de exemplu, o clas java, un fiier
130
executabil DOS). n ultimul caz modalitatea de prelucrare va fi determinat de
modulul de adaptare a nucleului binfmt_misc. Din aceast cauz, operaia de
4.4.2. Distrugerea proceselor n Linux

La terminarea execuieia unui proces (normal, forat sau accidental), el este


distrus elibernd toate resursele, care fusese alocate anterior.

Dac procesul printe se termin naintea procesului descendent, ultimul


devine orfan (orphaned process). Toi orfanii sunt nfiai n mod
automat de programul init, executat de procesul cu numrul 1, care duce
evidena terminrii execuiei lor.

Dac a fost terminat deja execuia procesului descendent, iar procesul


printe nu este gata s recepioneze de la sistem semnalul despre acest
eveniment, descendentul nu dispare total, ci este transformat n Zombie;
n cmpul Stat aceste procese sunt notate cu litera Z. Procesele Zombi
nu cer timp de procesor, dar n tabelul proceselor este pstrat linia lor
i structurile respective ale nucleului nu sunt eliberate. Dup terminarea
execuiei procesului printe, procesul Zombi orfan devine pentru o
perioad scurt de timp descendentul lui init, ca mai apoi s moar
definitiv.

Un process poate s cad n hibernare, fr a putea fi scos din aceast


stare: n cmpul Stat acest eveniment se va nota prin litera D. Procesele
aflate n hibernare nu reacioneaz la cererile de sistem i pot fi distruse
doar prin rencrcarea sistemului. 131
4.4.3. Demoni n Linux

Demon (daemon) n Linux este numit procesul predestinat s lucreze n regim


de fond fr terminal i care execut anumite operaii pentru alte
procese (nu obligator pe calculatorul Dumneavoastr). De obicei,
demonii i ndeplinesc n linite lucrul i ne amintim de ei doar n cazul
unor situaii ieite din comun: spaiu insuficient demonul singur
informnd utilizatorul despre aceasta, sau refuz s lucreze i suntei
ntrebat de ef cnd se vor termina problemele cu imprimant .

Pentru multe calculatoare demonii, care servesc procesele altor calculatoare,


sunt rar utilizai din care cauz nu trebuiesc pstrai constant n
memorie cu cheltuieli neraionale ale resurselor sistemului. Pentru
coordonarea lucrului acestora a fost creat un superdemon inetd
(Internet daemon).

n fiierul de configurare inetd (/etc/inetd.conf) este indicat care demon


acceseaz un serviciu anume de Internet. De obicei, cu ajutorul lui inetd
sunt apelate programele pop3d, imap4d, ftpd, telnetd (exerciiu -
determinai serviciul pus la dispoziie), etc. Aceste programe nu sunt n
mod constant active, n rezultat, ele nu pot fi considerate demoni n
adevratul sens al cuvntului, dar, deoarece ele sunt create de un demon
adevrat, sunt numite demoni.
132
4.4.4. Obinerea informaiilor despre procese

Pentru obinerea informaiilor despre procese, vizualizate de programele ps


i top, Linux-ul utilizeaz un sistem special de fiiere, numit procfs.

n majoritatea distributivelor el este iniializat la lansarea sistemului de


operare cu titlul de catalog /proc. Datele despre procesul cu numrul 1
(de obicei /sbin/init) se afl n subcatalogul /proc/1, despre procesul cu
numrul 182 - n /proc/182, etc. Toate fiierele, deschise de un proces,
sunt reprezentate sub forma unor referine simbolice n catalogul
/proc/<pid>/fd, iar referina la catalogul rdcin este pstrat ca
/proc/<pid>/root.

Sistemului de gestiune a fiierelor procfs i sunt asociate i alte funcii. De


exemplu, cu ajutorul comenzii echo 100000>/proc/sys/fs/file-max un
superuser poate indica, c se permite deschiderea unui numr de pn la
100000 de fiiere, iar comanda
echo 0>/proc/sys/kernel/cap-bound va retrage proceselor din sistem toate
drepturile suplimentare, adic va priva sistemul de noiunea superuser.

Informaii utile pune la dispoziie programul lsof. Acesta returneaz lista


tuturor fiierelor, utilizate la momentul curent de ctre procese, inclusiv
cataloagele folosite de ctre unele procese n calitate de catalog curent
sau catalog rdcin, bibliotecile dinamice, ncrcate n memorie, etc.
133
5.1. Principiile gestiunii informaiei
5.1.1. Definiii generale
5.1.2. Interpretarea numelor
5.1.2.1. Construirea cii de acces
5.1.2.2. Structura reprezentrilor. Descriptori
5.1.2.3. Contexte i medii
5.1.3. Legarea
5.1.4. Protecia
5.1.4.1. Domenii i drepturi de acces
5.1.4.3. Problemele proteciei
5.2. Desemnarea i legarea fiierelor i intrrilor-ieirilor
5.2.1. Ci de acces la un fiier
5.2.2. Desemnarea extern a fiierelor. Cataloage
5.2.2.1. Introducere
5.2.2.2. Organizarea arborescent
5.2.3. Legarea fiierelor cu fluxurile de intrare-ieire
5.3. Legarea programelor i datelor
5.3.1. Etapele de via a unui program
5.3.2. Funcionarea unui ncrctor
5.3.3. Funcionarea unui editor de legturi
5.3.3.1. Legarea prin substituie
5.3.3.2. Legarea prin nlnuire
5.4. Mecanisme de gestiune a obiectelor
5.4.1. Segmentarea 134
Acest capitol este consacrat studierii principiilor de gestiune a informaiei
ntr-un SO. Noiunea de obiect formeaz suportul director al studiului
dat.

Vom ncepe cu prezentarea unor concepte de baz, care permit o mai bun
nelegere a mecanismelor de administrare a informaiei ntr-un sistem:
nume sau identificator, cale de acces, legare, protecia obiectelor. Aceste
noiuni vor fi utilizate n dou domenii importante: desemnarea i
legarea fiierelor i legarea programelor i a datelor.

Informaia, care circul ntr-un sistem de calcul const din obiecte; obiectele
sunt entitile asupra crora sunt efectuate anumite operaii. Toate
operaiile pot fi clasificate n patru categorii:
de creare,
de modificare,
de cutare,
de distrugere a obiectelor.

Fiecare obiect are o reprezentare extern (n afara calculatorului) i una


intern, determinat de suportul fizic. Un obiect poate fi accesat cu
ajutorul funciilor de acces.

Problema central a administrrii informaiei const n conversia reprezentrii externe


i a funciilor de acces asociate n reprezentarea intern i funciile de acces135
corespunztoare tuturor obiectelor sistemului.
5.1. Principiile gestiunii informaiei
Noiunile de identificator, valoare, tip, desemnare, reprezentare sunt utilizate n
informatic n forme extrem de diverse. Pentru a fi inacelasi cadru conceptual
ne vom limita aici cu prezentarea unui model simplificat, care se contureaz n
cadrul limbajelor de programare i care permite s inem cont de cele mai
frecvente situaii.
5.1.1. Definiii generale
Programul unui sistem informatic descrie acest sistem ca o mulime de obiecte,
obiectele sistemului i operaiile asociate sunt cele specificate de limbajul
utilizat. Pentru implementarea sistemului descris ntr-un sistem informatic va
trebui s definim pentru fiecare obiect o reprezentare concret, care are
forma unei mulimi de informaii n memorie, pentru unitile periferice, etc.
Implementarea sistemului se traduce prin aciuni, care modific starea
acestor reprezentri.

Procesul de reprezentare utilizeaz dou scheme de baz:

n schema compilrii obiectele abstracte, specificate de program, sunt


nlocuite, n faza preliminar de translatare, prin reprezentrile lor. Aceste
reprezentri sunt obiecte executabile direct interpretate de un dispozitiv fizic.

n schema interpretrii un sistem logic (interpretorul) este alimentat direct


de program; el asociaz (n mod static sau dinamic) o reprezentare intern
fiecrui obiect i stabilete corespondena ntre obiectul abstract i
reprezentarea la fiecare accesare.
136
Schema interpretrii este de regul mai puin eficace n comparaie cu schema
Programul unui sistem utilizeaz nume pentru a desemna obiectele acestui sistem.
Numele unui obiect este o informaie cu funcie dubl: pe de o parte permite
s se fac distincia obiectului dat de alte obiecte; pe de alt parte, el
servete ca i cale de acces la obiect, adic el poate fi interpretat n scopul
efecturii unor aciuni asupra obiectului. Numele respect anumite reguli
proprii limbajului de programare. Nume sunt identificatorii, care desemneaz
variabilele i procedurile ntr-un limbaj de programare sau fiierele ntr-un
limbaj de comand.
n cazul reprezentrii externe un identificator desemneaz un anumit obiect, care
poate fi o constant sau o informaie ce permite accesul la un alt obiect
(obiectul permite referirea unui alt obiect, fig.5.1).
Program
.. D obiect/reper Ri
.
identificator
..
.
obiect

Fig.5.1. Relaia identificator - obiect

Trecerea de la identificator la obiectul propriu-zis se realizeaz prin compunerea


funciilor de acces D i Ri, obinnd calea de acces la un obiect.
137
Suportul fizic al informaiei este memoria. La acest nivel memoria poate fi
considerat un ir de amplasamente caracterizate printr-un coninut. Un proces
desemneaz un amplasament printr-un nume folosit de unitatea central pentru
a citi i la necesitate a modifica coninutul acestui amplasament. Coninutul
unui amplasament poate fi interpretat ca un ntreg, o instruciune sau ca un
nume care desemneaz alt amplasament.
Reprezentarea extern este convertit n cuplul (amplasament, coninut), numele
amplasamentului devenind numele obiectului. De exemplu, o constant devine
un cuplu (amplasament, coninut invariabil), iar un obiect care repereaz altul -
(amplasament, coninut variabil).

Vom face o deosebire ntre celulele memoriei fizice i amplasamente prin utilizarea
noiunii de adres pentru primele i nume pentru amplasamente. Obiectele
definite de perechea (amplasament, coninut) pot fi deplasate n memoria fizic,
schimbarea adresei fizice a unui amplasament nu afecteaz, n general, numele
lui.

Acestea au fost obiectele simple. Obiectele constituite din mai multe obiecte de
acelai tip sau de tip diferit (masive, fiiere, structuri) se numesc obiecte
compuse. Numele obiectului compus se afl ntr-un amplasament al crui
coninut este un descriptor. Descriptorul, fiind reprezentarea intern a unui
obiect compus, definete tipul, numrul componentelor obiectului, o eventual
ordine a acestora, precum i amplasamentele n care se afl aceste
componente. Funcia de acces asociat descriptorului are parametri i
furnizeaz un coninut sau un nume de amplasament.
138
Numim obiect accesibil un obiect cruia i s-a asociat o cale de acces. Numim obiect
5.1.2. Interpretarea numelor
La nivelul SO obiectele sunt memorate n amplasamente, iar procesele le pot accesa
prin nume. Stabilirea cii de acces la un obiect prin compunerea funciilor de
acces ataate se numete legare. Se spune c un obiect este legat atunci cnd
pentru el este stabilit calea de acces. n cazul operaiilor aritmetice calea de
acces asociat unui obiect conduce la o constant; n cazul listelor sau
parametrilor - la un nume. Legarea se traduce, n ultim instan, prin stabilirea
corespondenei ntre identificatori i adrese.
5.1.2.1. Construirea cii de acces
Fie F1 i F2 doua funcii de acces, F1 permind accesul de la o1 la o2, iar F2 de la o2 la
o3: o1F1o2 i o2F2o3, accesul de la o1 la o3 fiind realizat prin compunerea acestor
funcii. Calea de acces de la o1 la o3 poate fi construit prin metoda substituiei
sau prin metoda nlnuirii.

Metoda substituiei stabilete o nou funcie de acces F3, o3 fiind accesat direct de la
o1: o1F3o3. Metoda are avantajul c accesul este rapid, dar i dezavantajul c o2
este iremediabil pierdut.

Metoda nlnuirii cere ca la fiecare accesare a obiectului o3 pornind de la o1 s fie


parcurs calea o1F1o2F2o3. Nu se pierde nici o informaie, dar accesul este mai
lent.

Unele obiecte pot fi legate la faza de compilare (de ex., obiectele private ale unui
program), pentru altele calea de acces este stabilit ntr-o faz ulterioar (ob.
externe i parametrii sunt obiecte libere dup compilare). Pentru un obiect 139
extern compilatorul creeaz un obiect legtur al crui coninut este un ir de
La acest nivel prin segment subnelegem un ansamblu de amplasamente
consecutive n care se reprezint obiecte de acelai tip, cu aceeai durat de
existen i cu acelai grad de protecie. Segmentul este cea mai mic unitate
care poate fi partajat i poate conine obiecte compuse - un masiv, un fiier, o
stiv sau o procedur - accesibile unui proces la un anumit moment.

Obiectului procedur i sunt asociate mai multe noiuni: modul surs, modul obiect
sau modul executabil.

Modulul surs al unei proceduri este textul acesteia scris de ctre programator ntr-
un limbaj de programare i care va fi tratat de ctre compilator.

Modulul obiect al procedurii este obinut la ieirea compilatorului, deci este un


produs al compilatorului. Modulul obiect este reprezentat ntr-un segment sau
ntr-un fiier, destinat interpretrii (dup editarea legturilor, la necesitate) de
ctre procesor ca instruciuni, valori etc., fiind manipulat n consecin.

Pentru a separa gestiunea resurselor de administrarea informaiei, interferen ce


are loc din mai multe motive (memorii limitate din punctul de vedere al
capacitii, timpi de acces foarte variai, execuia instruciunilor numai atunci
cnd se afl n memoria operativ, ceea ce impune un grad de mobilitate al
obiectelor pe suporturile fizice etc.), s-a introdus noiunea de memorie fictiv:
memorie operativ ipotetic suficient de mare pentru a conine toate obiectele
sistemului. Memoria fictiv este asociat sistemului, iar memoria virtual este
proprie procesului. 140
5.1.2.2. Structura reprezentrilor. Descriptori
Schema de mai jos poate fi utilizat doar pentru obiecte elementare, cum ar fi valori
ntregi, reale sau caractere, reprezentarea crora cere un singur amplasament i
pentru care funciile de acces sunt reprezentate direct prin instruciunile mainii
fizice. Se va mai ine cont de urmtoarele dou aspecte:
pot exista obiecte compuse, structura intern a crora poate fi complex,
lungimea poate varia pe perioada timpului de existen a obiectului,
poate fi necesar s se realizeze unele funcii complexe de accesare a obiectelor
compuse.

Numele obiectului compus se afl ntr-un amplasament al crui coninut este un


descriptor. Utilizarea unui descriptor pentru a accesa un obiect impune trecerea
printr-un program de accesare care va interpreta acest descriptor i prezint
urmtoarele avantaje:

n cazul n care obiectul este pasat ca parametru unei proceduri este suficient s fie
transmis descriptorul sau adresa acestuia: este mult mai simplu s administrezi informaii
de volum fix i cunoscut,
descriptorul constituie un punct de trecere impus pentru accesarea reperat a
obiectului i, ca rezultat, poate servi la implementarea unor controale ale accesrii, de
msurare, etc.,
descriptorul asigur un acces indirect la obiectul reperat, ceea ce permite modificarea
dinamic a cii de acces (substituirea unui obiect printr-un alt obiect) sau deplasarea unui
obiect n memorie fr recompilarea modulului surs,
partajarea obiectelor ntre mai muli utilizatori cu drepturi sau proceduri de accesare 141
diferite poate fi realizat construind tot atia descriptori, ci utilizatori exist; aceti
5.1.2.3. Contexte i medii
Considerente din care mulimea obiectelor accesibile unui proces variaz n timp:
Decompoziia aplicaiilor. Metodele de decompoziie, utilizate pentru
structurarea unei aplicaii complexe, definesc componentele. Fiecrei
componente i se asociaz o mulime distinct de obiecte accesibile.
Gestiunea dinamic. Mulimea obiectelor accesibile unui pr i poate modifica
compoziia din considerente, legate de natura aplicaiei: obiectele pot fi create
sau distruse n timpul execuiei.
Protecia. O modalitate simpl de a mpiedica un proces s atepte un obiect,
accesul la care i este interzis, este de a suprima toate cile de acces ale
procesului spre acest obiect..
Eficacitatea. Dac un obiect este cutat ntr-o mulime de alte obiecte,
cutarea este cu att mai eficace cu ct mulimea are mai puine elemente.

Trebuie s lum n consideraie att posibilitatea evoluiei dinamice a mulimii


obiectelor, ct i a cilor de acces la aceste obiecte. Introducem pentru aceasta
noiunile care urmeaz.
Vom numi lexic o mulime de identificatori. Mulimea obiectelor, desemnate de
identificatorii lexicii la un moment de timp dat, se numete context asociat la
aceast lexic. Starea de execuie a unui context este starea mulimii obiectelor,
care constituie acest context.
Fiind dat doar lexica nu putem defini un context: mai trebuie s fie specificate
regulile de interpretare, care vor fi aplicate identificatorilor din cadrul lexicii.

Vom numi mediu mulimea format dintr-o lexic i informaiile (programe, date,142
reguli de interpretare) necesare la utilizarea acestei lexici. Aceste informaii pot
Vom numi accesibilitate a unui identificator ntr-un program regiunea programului n
care acest identificator este valid, adic poate fi utilizat ca origine a unei ci de
acces. Altfel spus, un proces poate utiliza acest identificator pentru a desemna
un obiect atunci cnd el execut partea n cauz a programului.
Atunci cnd un proces execut un program, mulimea obiectelor la care procesul are
acces este definit pentru orice moment de timp, aplicnd identificatorilor valizi
n aceste momente de timp regulile de interpretare, specificate de mediul
curent.

Exemplul 5.2. Fie procesul (presupus unic) asociat utilizatorului unui sistem
interactiv. n mediul, definit de interpretorul limbajului de comand, lexica
conine numele fiierelor accesibile utilizatorului. Atunci cnd utilizatorul
comand execuia unei proceduri, mediul se modific: lexica conine
identificatorii definii n interiorul procedurii de regulile de accesibilitate ale
limbajului i interpretai conform regulilor proprii acestui limbaj.
ident.
context

reguli de
lexica interpretare obiect
cale de acces
mediul
Fig.5.3. Contextul de execuie a unui proces

143
Conform specificaiilor sistemului de operare, identificatorii fiierelor pot sau nu pot
Starea de execuie a unui proces (valoarea obiectelor contextului su) se poate
modifica la execuia fiecrei instruciuni, ns coninutul contextului su
(identitatea obiectelor care-l formeaz), se schimb cu o frecven mai mic.

Iat evenimentele principale care pot modifica coninutul contextului unui proces:
Schimbarea mediului, implicnd o modificare a compoziiei lexicii i, eventual,
aplicarea unor reguli de interpretare noi: apel de procedur, intrarea ntr-un bloc
nou (ntr-un limbaj cu structur de blocuri), schimbarea catalogului curent (ntr-
un limbaj de comand).
Modificarea explicit a cii de acces, pornind de la un identificator al lexicii:
asocierea unui fiier sau unui periferic unui flux de intrare-ieire.
Crearea sau distrugerea explicit a unui obiect desemnat de un identificator din
lexic: crearea sau distrugerea unui fiier, alocarea sau eliberarea unei variabile
administrate dinamic.

Examinnd aceste cazuri putem diferenia durata de via a unui obiect, a unui
identificator, care desemneaz acest obiect i cea a unei ci de acces, care
conduce la obiectul n cauz.

Sunt posibile diferite situaii: un identificator poate fi legat succesiv de diferite


obiecte; reciproc, un obiect poate succesiv (sau simultan) s fie desemnat de
mai muli identificatori diferii; un obiect poate deveni inaccesibil (nici o cale de
acces nu conduce la el).
144
Existena obiectelor inaccesibile pune problema recuperrii spaiului ocupat de
acestea: tehnici speciale de adunare a frmiturilor, permit rezolvarea acestei
Exemplul 5.3. Cu titlu de exemplu vom indica diferite clase de obiecte, accesibile unui
proces n cursul execuiei unei proceduri, exprimat ntr-un limbaj de
programare de nivel nalt. Aceste clase difer din punct de vedere a duratei de
via, duratei legturii i modului de partajare a obiectelor.
1. Obiecte interne: acestea sunt instruciunile, care compun textul procedurii.
Ele sunt desemnate de etichetele, utilizate pentru instruciunile de
ramificare. Durat lor de via coincide cu durat de via a procedurii.
2. Obiecte locale: acestea sunt variabilele, declarate n interiorul procedurii.
Aceste obiecte sunt create la fiecare apel al procedurii i distruse la retur. n
cazul unui apel recursiv, un exemplar nou al fiecrui obiect local este creat
la fiecare apel i identificatorul su desemneaz ultimul exemplar creat
(celelalte rmnnd inaccesibile pn la returul la nivelul corespunztor).
3. Obiecte remanente i obiecte globale: acestea sunt obiectele care existau
deja la apelul procedurii i care vor supravieui la retur; durata lor de via
este fie cea a procesului (obiecte remanente), fie cea a unei proceduri, care
nglobeaz procedura dat (obiecte globale).
4. Obiecte externe: sunt obiectele construite i pstrate independent de
procedura i procesul considerat (alte proceduri, fiiere, etc.). Durata lor de
via nu depinde de cea a procedurii sau a procesului; ele pot fi create sau
distruse n mod dinamic n timpul execuiei procedurii.
5. Parametri: parametrii formali sunt identificatori, utilizai n interiorul
procedurii i care sunt legai doar n momentul apelrii. Obiectele legate de
acestea sunt numite parametri efectivi sau activi; parametrii efectivi sunt
furnizai de ctre procedura apelant sau sunt obiecte externe. Legtura
dintre parametrii formali i cei efectivi poate lua diferite forme n 145
dependen de regulile definite n limbajul de programare: apelare prin
5.1.3. Legarea
Numim legare procesul construirii unei ci de acces. Legarea obiectelor unui program
poate fi efectuat la diferite momente de via a programului n sistem:
n momentul scrierii programului. Cazul unui program scris direct n cod binar
cnd fiecare obiect este desemnat prin adresa absolut a amplasamentului,
care-l conine. Un atare program poate fi imediat executat, dar orice modificare
este dificil i conine un risc ridicat de eroare.
La una din fazele de translatare (asamblare sau compilare). Legtura este
definitiv i identificatorii sunt nlocuii prin adrese absolute. Dezavantajul este
c programul nu poate fi deplasat n memorie fr a fi recompilat (dac nu exist
mecanisme de translatare a adreselor). De asemenea, legtura stabilit la
translatare nu este dect parial: identificatorii nu sunt nlocuii de adrese
absolute, ci relative ncepnd cu originea programului (deplasare).
La o faz de ncrcare i editare a legturilor. Faza ncrcrii are drept scop
nlocuirea adreselor relative prin adrese absolute, fixnd originea programelor n
memorie. Faza editrii legturilor are ca scop stabilirea legturii referinelor
externe. ncrcarea i editarea legturilor pot fi combinate ntr-o singur
operaie sau realizate separat.
n timpul execuiei; legtura este numit n acest caz dinamic. Exist mai multe
considerente de retardare a legturii pn la faza de execuie:
informaiile necesare pot fi cunoscute doar la aceast faz, n particular dac
obiectele desemnate sunt create dinamic, fiind, deci necunoscute la momentul
compilrii,
calea de acces trebuie modificat n timpul execuiei: este cazul cnd un identificator
este reutilizat pentru a desemna succesiv mai multe obiecte (de exemplu,146 flux de
intrare-ieire reasociat mai multor fiiere diferite),
5.1.4. Protecia

Vom nelege prin termenul protecie mulimea metodelor i mecanismelor, care


vizeaz specificarea regulilor de utilizare a obiectelor i garanteaz respectarea
acestor reguli.

Protecia este asigurat de o combinaie de dispozitive fizice i logice. Exist legturi


strnse ntre desemnarea obiectelor i protecia lor.

Trei observaii, legate de protecie:

O modalitate simpl de a interzice unui proces orice acces la un obiect const n


suprimarea tuturor cilor de acces la acest obiect, altfel spus, de a le retrage din
contextul procesului.

Atunci cnd operaiile permise asupra unui obiect sunt specificate prin apartenena
la o clas sau un tip, este posibil verificarea prealabil execuiei (adic n
momentul compilrii sau editrii legturilor) dac obiectul este utilizat conform
regulilor specificate,

n cazul n care verificarea este fcut n momentul execuiei, o procedur de acces


faciliteaz implementarea verificrii i reduce riscul unor erori. Aceast
procedur poate fi la nivel logic (un interpretor, de exemplu) sau fizic (un
dispozitiv va aproba trecerea mai departe). 147
5.1.4.1. Domenii i drepturi de acces

Printre obiectele, care formeaz un sistem informatic cele care pot aciona asupra
altor obiecte, modificndu-le starea, vor fi numite active. Regulile de utilizare
pot fi exprimate specificnd drepturile de acces ale fiecrui obiect activ, adic
mulimea de operaii pe care obiectele active sunt autorizate s le execute
asupra altor obiecte.

S precizm acum noiunea de obiect activ, adic s definim entitile crora sunt
ataate drepturile. Am putea s legm drepturile direct de procese, ns aceast
alegere nu permite exprimarea simpl:
a posibilitii evoluiei dinamice a drepturilor unui proces,
a faptului, c mai multe procese pot avea, n aceleai circumstane, acelai set
de drepturi.

Pentru a ine cont de aceste dou aspecte a fost introdus noiunea de domeniu de
protecie. Aceast noiune este un caz particular al noiunii de mediu - un
domeniu definete:
o mulime de obiecte accesibile sau context,
pentru fiecare dintre aceste obiecte, o mulime de operaii permise (drepturi),
un mecanism, care asigur accesul la aceste obiecte, respectnd restriciile de
mai sus.

Un proces este ntotdeauna executat ntr-un domeniu bine definit; contextul su este
cel ataat domeniului, procesul posednd drepturile specificate asupra tuturor
obiectelor acestui context. 148
Domeniile de protecie pot fi definite prin mai multe modaliti; exemplificm cteva
mai jos.
un domeniu pentru sistemul de operare, unul pentru fiecare utilizator,
un domeniu pentru fiecare subsistem, care realizeaz o funcie particular,
un domeniu pentru fiecare mediu (definit, de exemplu, de cuplul (procedur, catalog
curent)).
Alegerea depinde de funciile cerute i, cel mai important, de mecanismele
disponibile.
Presupunem pentru nceput, c exist un numr constant de obiecte. Regulile de
protecie pot fi reprezentate sub forma unui tablou bidimensional, numit
matricea drepturilor. Acest tablou conine cte o linie pentru fiecare domeniu Di
i cte ofiierul
coloan1 pentrufiierul
fiecare
2 obiect Oj (notm, c
periferic D1 domeniile, D2 fiind obiecte
D3
Dparticulare,
1
apar de <citire,
<citire, scriere, asemenea i n coloane).
scriere, <alocare, Caseta
<> (i, j) conine
<apelare>drepturile pe
<schimbare
care leexecutare>
are un proces, executare>
care se execut n domeniul Di, asupra unui obiect
retragere> Oj.
drepturi>
D2 <citire, scriere, <citire, scriere, <cerere, <apelare> <> <apelare>
executare> executare> eliberare>
D3 <citire, scriere, <citire, scriere, <> <nil> <apelare> <>
executare> executare>

149
Notaia nil semnific faptul, c obiectul Oj nu figureaz n contextul domeniului Di,
Reprezentarea coloanelor: lista de acces
Lista de acces, asociat unui obiect este o list (Di, <di>), unde Di este un domeniu,
care conine obiectul, iar <di> este mulimea drepturilor acestui domeniu asupra
lui. De exemplu, dac un domeniu este asociat fiecrui utilizator al unui sistem n
timp partajat, lista de acces a unui fiier conine pentru fiecare utilizator lista
operaiilor pe care el este autorizat s le ntreprind.
O metod frecvent utilizat pentru a reprezenta mai compact listele de acces const
n specificarea pentru un obiect a unor drepturi implicite (default) pe care le
posed fiecare domeniu. De exemplu, putem specifica implicit, c orice fiier
este accesibil doar pentru lectur fiecrui utilizator. Lista de acces va conine
doar cuplurile (Di, <di>) pentru care drepturile difer de cele implicite.
Reprezentarea liniilor: lista de drepturi
Lista drepturilor asociat unui domeniu este o list (Oj, <dj>) n care Oj desemneaz
un obiect, care figureaz n contextul domeniului, iar <dj> este mulimea
drepturilor domeniului asupra lui Oj. Un proces, care este executat n domeniul
considerat, primete aceast list de drepturi; la fiecare accesare a unui obiect
mecanismul de accesare trebuie s verifice c operaia curent este licit, adic
este n <dj>. Din considerente de eficacitate, este de dorit ca acest mecanism s
fie cablat. Forma cea mai primitiv n acest sens este bitul supervizor-sclave a
cuvntului de stare a unui procesor.

O operaie important este cea de schimbare a domeniului, care permite unui proces
s-i modifice mediul i drepturile asupra obiectelor. Pentru a garanta
respectarea regulilor de protecie, trebuie luate msuri de precauie de fiecare
dat, cnd are loc extinderea drepturilor. Aceast circumstan se poate 150produce
n egal msur att la apel, ct i la retur. Pentru controlarea operaiei de
5.2. Desemnarea i legarea fiierelor i intrrilor-ieirilor
Vom examina aici modul de desemnare a fiierelor, legarea lor cu programele, care le
utilizeaz i relaiile lor cu intrrile-ieirile. Nu avem nevoie pentru aceasta s
cunoatem organizarea intern a unui fiier, interesndu-ne doar organizarea lui
ca un tot ntreg.
5.2.1. Ci de acces la un fiier
Un fiier este un obiect compus: el posed un descriptor, care conine informaiile,
necesare localizrii sale fizice i realizrii funciilor de acces. Pentru sistemul de
operare, numele descriptorului unei fiier permite accesul la fiier. Acest nume al
descriptorului, de obicei necunoscut de utilizatori i rezervat doar pentru
sistemul de operare, este numit nume intern al fiierului. Descriptorul i numele
intern al fiierului sunt unice.
Un fiier este desemnat de ctre utilizatorii externi cu ajutorul identificatorilor
nume externe. Aceste nume externe sunt definite ntr-un mediu comun mai
multor utilizatori. Structurile de date, care permit construirea cii de acces la un
fiier pornind de la unul din numele sale externe, sunt numite cataloage sau
directorii.
n afara numelor interne i externe, adesea mai este definit un nume, zis local sau
temporar. Un nume local este definit ntr-un mediu propriu unui utilizator i are o
Mediul global Mediul local Mediul SGF
existen doar temporar
Legarea numelor
nume externe locale este realizat
nume localprin nlnuire:
numeun nume local desemneaz un
intern
descriptor local, care la rndul su, direct sau indirect, repereaz descriptorul
unic (Cataloage)
al fiierului. descriptor local Descriptor fiier

Fig.5.4. Ci de acces la un fiier


151
5.2.2. Desemnarea extern a fiierelor. Cataloage
Vom examina modul n care un utilizator poate nota fiierele cu ajutorul
identificatorilor sau nume externe, i structurile de date sau cataloagele, care
permit determinarea descriptorului fiierului, pornind de la un nume extern.
Pentru simplificarea expunerii vom presupune, c descriptorii se conin direct n
catalog; n realitate doar o parte a descriptorului se poate afla n catalog,
acompaniat de un nume intern, care permite determinarea restului.
5.2.2.1. Introducere
Un catalog definete un mediu, adic o mulime de identificatori (sau o lexic) i
regulile de interpretare a acestor identificatori. Organizarea cea mai simpl
poate fi schematic reprezentat de un tabel, care asociaz unui identificator
descriptorul fiierului pe care acesta l desemneaz. Organizarea pe un singur
nivel (fig.5.5, (a)) nu este folosit, cu excepia unor sisteme mono-utilizator
foarte mici. Este preferat cea ierarhic n care fiierele i cataloagele sunt
organizate conform unei structuri arborescente. Aceast structur se reflect n
structura identificatorilor. Adncimea arborescenei poate fi limitat: de
exemplu, o structur cu dou nivele (fig.5.5 catalogul
(b)) permite definirea a cte un
utilizatorilor
catalog pentru
(a) fiecare utilizator a unui
(b) sistem, aceste cataloage fiind i ele
grupate ntr-un catalog general.
catalog
Mos Ion ... Christy ... Eugen

fiier program doc ... ... ...

test doc program doc program 152


fiier
Fig. 5.5. Organizarea fiierelor pe niveluri
5.2.3. Legarea fiierelor cu fluxurile de intrare-ieire
Un program schimb informaii cu mediul exterior prin intermediul unor operaii de
intrare-ieire. care permit comunicarea cu un fiier sau un periferic. n momentul
elaborrii programului nu este nc cunoscut cu care fiier sau periferic se vor
produce intrrile-ieirile; adesea este necesar s se utilizeze fiiere sau
periferice, care difer de la o execuie la alt. Din aceste considerente este util
s se poat ntrzia legtura unui program cu fiierele sau perifericele pe care
acesta le utilizeaz. n acest scop se introduce noiunea de flux de intrare-ieire.
Un flux de intrare-ieire este un obiect, care posed toate caracteristicile unui
periferic de intrare-ieire (nume, operaii de acces), dar care nu are o existen
real. Pentru a fi efectiv utilizat n transferul informaiilor, un flux trebuie s fie
n prealabil legat, cu ajutorul unei operaii, numite asociere, cu un fiier sau
periferic. Transferul informaiei, descris de operaiile asupra fluxului, vor fi
executate asupra fiierului sau perifericului, asociat fluxului. Asocierea poate fi
modificat de la onume
execuie
de flux la alta, ns textul programului,
nume de fluxcare face referin
nume doar
de fluxla numele fluxului, rmne invariant.
fiier perif
nil descriptor descriptor descriptor
de flux de fiier de periferic

tampon procedur tampon procedur


(a) pn la asociere de acces de acces

(b) dup asociere la un fiier (c) dup asociere la un periferic


153
Fig.5.7. Asocierea unui flux de intrare-ieire
5.3. Legarea programelor i datelor

Am prezentat mai sus diferite momente n care poate fi stabilit legtura dintre
instruciunile i datele unui program. Vom prezenta n rezumat cele mai
frecvente scheme nainte de a trece la realizarea lor. Aceast prezentare vizeaz,
n principal, expunerea folosirii noiunii de legare, fr a detalia aspectele
tehnice ale funcionrii unui ncrctor sau editor de legturi.
1. Program interpretat date

program surs program interpretat rezultat

2. Program compilat
program surs
program obiect
translator program obiect ncrctor (adrese absolute)
(adrese relative)

date calculatorul

rezultatul

Compararea acestor dou scheme pune n eviden diferena important ntre


interpretare i compilare: modificarea unui program interpretat are efect
imediat, n timp ce n cazul compilrii suntem nevoii s parcurgem toate
etapele, ncepnd cu translatarea.
program compus
Constituirea unui program unic, pornind de la programe construite independent, se
realizeaz pornind de la programe obiect n adrese relative (deplasabile),154
adic
obinute dup translatare, prin legarea referinelor externe. Aceast operaie
5.3.2. Funcionarea unui ncrctor

Un ncrctor este destinat s pun n form absolut un program (sau modul) obiect
n adrese relative. Aceast operaie const n nlocuirea tuturor adreselor
relative la originea modulului prin adrese absolute. Pentru aceasta se va efectua
un lucru preliminar n faza de translatare: nregistrrilor modulului obiect, care
conin o adres translatabil, li se va ataa un indicator, care va fixa poziia
acestei adrese n interiorul nregistrrii (dac poziia nu este specificat n mod
implicit). Adresele translatabile pot s apar:
sau n cmpul de adres al instruciunii,
sau n cazul datelor, n expresii pentru calcularea adresei, destinate a fi
utilizate ca relaii de direcionare sau s fie ncrcate n registrele de baz.

ncrctorul utilizeaz metoda substituiei: orice adres relativ a este nlocuit prin
adresa absolut a+originea, unde originea este adresa absolut ncepnd cu
care este ncrcat modulul.

Dac programul ncrcat trebuie imediat executat, o funcie suplimentar a


ncrctorului va determina adresa absolut de la care trebuie s nceap
execuia. Aceast adres este adesea fixat prin convenie (de exemplu, se va
porni de la primul amplasament al modulului).

Pentru cazuri mai generale, modulul poate avea mai multe puncte de intrare,
desemnate cu ajutorul identificatorilor; el va conine n acest caz un tabel al
punctelor de intrare, construit de translator, care asociaz o adres relativ
fiecrui identificator. Aceste adrese sunt transformate n adrese absolute;155
adresa punctului de intrare este determinat pornind de la identificator prin
Pentru a ilustra prezentm un format posibil al unui modul obiect translatabil i
programul corespunztor al ncrctorului.
en-tte <id_modul, lungime,...>
...
corpul modulului <adr, n, r, cod>
...
...
tabelul punctelor de intrare <identificator, adres relativ>
...
O nregistrare a corpului modulului este de forma <adr, n, r, cod> cu
adr : adresa relativ a codului <cod> n modul
n : lungimea lui <cod> n octei
r : 1 sau 0 (cod translatabil sau nu)
cod : n octei ai programului.

156
Algoritmul ncrctorului poate fi urmtorul:

Parametrii de apel : identitatea modulului (numele fiierului)


: adr_ncrcare (adresa absolut de ncrcare)
: id_nceput (identificatorul punctului de intrare)
citire(en-tte);
<verificare dac lungimea permite ncrcarea>
repeat
citire nregistrare; -- <adr, n, r, cod>
if r = 1 then
translatare(cod)
endif;
adr_implantare := adr + adr_ncrcare;
<ordonarea codului pornind de la adr_implantare>
until corp de modul epuizat
citire(tabel de puncte de intrare);
cutare(id_nceput,adr_exe);
if eec then
<ieire eroare> -- sau alegerea unei adrese implicite
else -- implicit
adr_exe := adr_exe + adr_ncrcare
endif;
<ramificaie la adresa adr_exe>
Procedura translatare(cod) modific <cod>-ul, translatnd adresele relative ale
acestuia: fiecare adres relativ este incrementat cu adr_ncrcare. Poziia 157
acestor adrese n interiorul nregistrrii trebuie.
6. Gestiunea fiierelor
6.1. Noiuni generale
6.1.1. Funciile unui sistem de gestiune a fiierelor
6.1.2. Organizarea general a unui sistem de gestiune a fiierelor
6.2. Organizarea logic a fiierelor
6.2.1. Introducere
6.2.2. Acces secvenial
6.2.3. Acces direct
6.3. Organizarea fizic a fiierelor
6.3.1. Implantare secvenial
6.3.2. Implantare non contigu
6.3.3. Alocarea memoriei secundare
6.4. Realizarea funciilor de acces elementar
6.4.1. Organizarea descriptorilor
6.4.2. Crearea i distrugerea
6.4.3. Deschiderea i nchiderea
6.4.4. Acces elementar la informaii
6.5. Securitatea i protecia fiierelor
6.5.1. Despre securitate i protecie
6.5.2. Securitatea fiierelor
6.5.3. Protecia fiierelor
6.5.4. Autentificarea n Windows NT
6.6. SGF din sistemul de operare Unix
6.6.1. Caracteristici generale
6.6.2. Organizarea datelor
6.6.3. Funcionarea i utilizarea 158
Acest capitol este consacrat studierii detaliate a gestiunii fiierelor n sistemele de
operare: organizarea logic, reprezentarea informaiei, realizarea funciilor de
acces, protecia i securitatea. Noiunile menionate sunt ilustrate cu exemple
de gestionare a fiierelor n sistemele de operare Windows i Unix.

6.1. Noiuni generale

6.1.1. Funciile unui sistem de gestiune a fiierelor

Numim fiier o mulime de informaii, formate cu scopul pstrrii i utilizrii lor n


cadrul unui sistem informatic.
Fiierele au o durat de via superioar timpului de execuie a unui program sau
duratei unei sesiuni de lucru: ca rezultat, suportul lor permanent este memoria
secundar.
Fiierul este un obiect: el posed un nume, care permite desemnarea sa, are asociate
funcii de acces, adic operaii, care permit crearea sau distrugerea, consultarea
sau modificarea informaiilor, etc.
Componentele unui sistem de operare, care asigur posibilitatea pstrrii fiierelor i
realizeaz funciile de acces se numete sistem de gestionare a fiierelor (SGF).
Utilizatorul unui sistem informatic organizeaz informaiile fiierelor conform
necesitilor proprii, impunndu-le o organizare, numit logic; funciile de
acces sunt exprimate cu ajutorul acestei structuri. Reprezentarea informaiilor
fiierelor n memoria secundar (adresa de implantare, codificarea informaiei)
determin organizarea fizic a fiierelor. Reprezentarea structurii logice a
fiierelor printr-o organizare fizic este sarcina SGF.
159
Adesea un fiier este definit ca o colecie de informaii elementare de aceeai natur,
Funciile principale, asigurate de un sistem de gestiune a fiierelor sunt:
crearea unui fiier (definirea numelui, alocarea eventual a spaiului),
distrugerea unui fiier (eliberarea numelui i a spaiului, alocat fiierului),
deschiderea unui fiier (declararea inteniei de a folosi fiierul cu ajutorul funciilor de acces i a
drepturilor specificate),
nchiderea unui fiier deschis (interzicerea oricrui acces ulterior),
diverse funcii de consultare i modificare: citire, scriere, modificarea lungimii, etc.

Aceste funcii sunt materializate prin operaiile de baz, prezente n toate SGF.
Trebuie s adugm aici diverse funcii detaliile crora depind de organizarea
sistemului de gestiune: specificarea i consultarea drepturilor de acces,
consultarea caracteristicilor (data crerii, modificrii, etc.), operaii asupra
numelui (schimbarea numelui, etc.).

Pstrarea fiierelor i realizarea funciilor de acces impune SGF s aib n arj:


gestiunea suporturilor fizice, ascunznd unui utilizator obinuit detaliile organizrii fizice,
securitatea i protecia fiierelor, adic garantarea integritii lor n caz de accident sau de rea voin i
respectarea regulilor stabilite de utilizare (drepturi de acces, condiii de
partajare).

ntr-un sistem de operare SGF joac rolul central, deoarece el trebuie s comande
cea mai mare parte a informaiilor utilizatorilor, ct i a sistemului propriu-zis.
SGF are legturi strnse cu sistemul de intrare-ieire, este adesea convenabil
conceptual s nu se fac distincie ntre fiiere i unitile periferice ca suport
160
surs sau destinaie a informaiei n timpul execuiei unui program.
6.1.2. Organizarea general a unui sistem de gestiune a fiierelor
SGF realizeaz corespondena ntre organizarea logic i organizarea fizic a
fiierelor. Organizarea logic, unic cunoscut de utilizator, este determinat de
consideraii de comoditate i universalitate; organizarea fizic, legat de
suporturile de memorie utilizate, este determinat de considerente de
economisire a spaiului i eficacitatea accesului. Aceste dou organizri sunt, n
genere, diferite fiecare fiind definite prin structuri de date proprii, controlate de
SGF. Drept rezultat, SGF sunt construite conform unei structuri ierarhice, care
are cel puin dou niveluri corespunztoare celor dou organizri, menionate
mai sus: orice aciune, definit la nivelul logic este interpretat de un set de
aciuni la nivelul fizic.
Pentru separarea organizrii fizice de organizarea logic este recomandabil s fie
introdus o organizare intermediar, care joac rol de interfa. Aceast
organizare intermediar poate fi un segment, adic o suit de amplasamente
adiacente, desemnate de valori ntregi pozitive, numite adrese logice sau
deplasri. Putem separa, n acest caz, n dou etape stabilirea corespondenei
ntre organizarea logic i cea fizic (fig.6.1):
traducerea numelor, specificate de funciile de acces la fiier, n adrese logice
funcii
(un atare de acces
nume desemneaz o nregistrare sau un cmp al acesteia),
traducerea adreselor logice n adrese fizice

desemnarea nregistrrii adres logic adres fizic

Fig.6.1. Adresare logic ntr-un fiier 161


Completnd modelul de mai sus cu elementele, legate de
desemnarea fiierelor, organizarea SGF poate fi reprezentat
conform schemei de mai jos
Funcii de acces logic
Nume externe Interfaa
i locale utilizatorului
legarea numelor

Interpretarea numelor Interpretarea numelor


locale externe

Nume Realizarea
interne funciilor de acces
logic

Interfee interne la SGF


Adrese Realizarea
logice funciilor de acces
fizic

Adrese Alocarea Realizarea


fizice memoriei I-E
secundare fizice

Fig.6.2. Organizarea unui sistem de gestiune a fiierelor

162
6.2. Organizarea logic a fiierelor

Vom examina modurile principale de organizare logic a unui fiier


i realizarea lor. La aceast faz a studiului este suficient s
traducem n adrese logice sau deplasare localizarea
nregistrrilor, manipulate de funciile de acces. Pentru
specificarea organizrii logice a unui fiier definim mai nti o
structur abstract a fiierului:

Un fiier este o mulime de nregistrri (articole). Fiecrui articol i


este asociat un numr constant de n atribute, aceleai pentru
toate articolele. Un atribut este definit printr-un nume i un
domeniu de valori. Numele este pentru desemnarea
atributului; dou atribute distincte au nume diferite. Domeniul
de valori specific valorile pe care le poate lua atributul.

Specificarea organizrii fiierului este completat de restriciile,


care trebuie s fie satisfcute de ctre articole. Aceste
restricii pot lua forme diverse (restricii de ordine a
articolelor, restricii legate de valorile atributelor, relaii163
ntre
atributele diferitelor articole, etc.). Desemnarea articolelor, n
Exemplul 6.1. Fiier secvenial de caractere.
Fiecare nregistrare a fiierului posed urmtoarele atribute:
(numr de ordine, <ntreg>)
(coninut, <caracter ASCII>)

Restricia este, c articolele fiierului sunt ordonate, articolele succesive


avnd drept numr de ordine valori ntregi consecutive.

n reprezentarea fiierului atributul numr de ordine nu este reprezentat


explicit, dar este definit de ordinea articolelor. Mai mult, atributul
valoare este reprezentat doar prin valoarea sa, iar fiierul este
reprezentat sub forma unei suite de caractere.

Utilizarea atributului numr de ordine permite specificarea diferitor funcii


de acces. De exemplu, dac ne vom limita la consultare:

citire(urm) citete caracterul, care urmeaz dup o poziie curent


specificat (poziia ultimei lecturi); pune valoarea caracterului n urm.

citire(i, c) citete caracterul cu numrul i; valoarea acestuia este pus n


c.
164
n ambele cazuri se va specifica efectul funciei, dac caracterul nu exist.
Exemplul 6.2. Fiier de tip document.
Fiecare nregistrare a acestui fiier are urmtoarele atribute:
(nume_lucrare, <identificatorul lucrrii>)
(autor, <lan de caractere>)
(editor, <lan de caractere>)
(an, <ntreg>)
(subiect, <lan de caractere>)
Restricie: 2 articole diferite au ca nume identificatori de lucrri
distincte.
Dac stabilim o anumit ordine a celor cinci atribute ale unei
nregistrri, numele acestor atribute (care sunt acelai pentru
orice articol), nu este necesar s fie pstrat n mod explicit. Orice
articol este reprezentat de un ir din cinci cmpuri, fiecare avnd
un format prestabilit.
Pot fi specificate funcii de acces direct, desemnnd un articol prin
atributul nume_lucrare (dac aceast desemnare este unic).
Pentru a specifica funcii de acces secvenial va fi necesar s
ordonm n prealabil articolele cu ajutorul unei restricii
suplimentare (relaii de ordine, de exemplu, definind o ordine 165a
numelor, autorilor, anului de editare, etc.).
6.2.2. Acces secvenial
Este permis doar utilizarea funciei succesor. Accesul secvenial este
modul obinuit de utilizare a unui fiier, implantat fizic pe un suport n
care accesarea amplasamentelor este ea nsi secvenial, cum ar fi
banda magnetic.
Un fiier f poate fi deschis pentru citire sau scriere. Unele organizri
autorizeaz scrierea ncepnd de la o nregistrare oarecare.
Considerm, c scrierea se face la sfritul fiierului i deschiderea
pentru scriere iniializeaz fiierul n vid.

Deschiderea este realizat prin operaia:


deschide(mod):
if mod=citire then
f.rest:=<irul nregistrilor fiierului>
else
f:=<vid>
endif;
f.mod:=mod;
avansare
unde funcia avansare este definit dup cum urmeaz:
if f.rest=vid then
f.sfrit:=true
else
f.primul:=<pointer pe primul(f.rest)>; 166
f.rest:=f.rest-primul(f.rest)
Operaia de citire a unei nregistrri are forma:
citire(f, a):
if f.sfrit=false then
a:=<nregistrarea desemnat de f.primul>;
avansare
endif
Scrierea adaug o nregistrare la sfritul fiierului:
scriere(f,a):
if mod=citire then
<eroare>
else
alocare articol nou;
if eec then -- lungimea maxim a fost atins sau este necesar un spaiu mai
mare
<eroare>
else
f.pa:=<pointer pe amplasamentul nregistrrii noi>;
<copiere a n amplasamentul desemnat de f.pa>
endif
endif

Aceste funcii de acces se traduc utiliznd adresele logice. Dac articolul curent nu
este ultimul n fiier, adresa logic a succesorului su este dat de
adresa(curent)+lungimea(curent).
Dac articolele sunt de lungime variabil, lungimea nregistrrii curente poate167
fi
obinut plecnd de la coninutul acestui articol.
6.2.3. Acces direct
Funciile de acces sunt exprimate ca funcii ale atributelor nregistrrilor;
aceste atribute sunt valori ale diferitor cmpuri. Se numete cheie
orice cmp al unei nregistrri valoarea cruia poate servi la
identificarea nregistrrii. Conform organizrii adoptate, unul sau mai
multe cmpuri pot servi drept cheie.
6.2.3.1. Cheie unic
ntr-un fiier cu cheie unic fiecare nregistrare conine o singur cheie,
care identific nregistrarea fr ambiguitate; restul nregistrrii este
informaia propriu-zis. Dou nregistrri distincte vor avea totdeauna
dou valori diferite ale cheii.
Definim o procedur cutare(cheie, al), care pentru orice valoare a cheii:
sau pune la dispoziie adresa logic al (unic) a nregistrrii pentru
care cheia posed valoarea dat (caz de succes)
sau semnalizeaz cu ajutorul unui mecanism, c o atare nregistrare nu
exist (caz de eec): excepie, cod de condiie; valoarea al este adresa
la care nregistrarea ar putea fi inserat (valoare special, dac nu mai
este spaiu liber).
Procedura cutare servete la realizarea funciilor elementare de acces
direct citire(cheie, info), adugare(cheie, info), suprimare(cheie,168
info),
modificare(cheie, info).
Adresare dispersat (hash-coding)
Procedura cutare este realizat direct, construind o funcie al = f(cheie). Funcia f
se numete funcie hash.

Dac dorim s evitm utilizarea ineficient a spaiului memoriei va trebui s ne


ndreptm atenia spre alegerea funciei de coresponden a adreselor logice i
celor fizice. Folosirea funciei identitate este limitat la cazurile rare pentru care
domeniul de variaie a cheii este utilizat eficient cu o rat ridicat de ocupare a
memoriei.

O funcie hash ideal realizeaz o permutare ntre mulimea cheilor i cea a adreselor
logice, limitat la numrul de nregistrri din fiier. Pentru simplitate
presupunem, c adresele logice pentru un fiier cu n nregistrri sunt 0,..., n-1.
Funcia de dispersare trebuie s posede urmtoarele proprieti:
pentru orice nregistrare din fiier cu cheia c: 0 f(c) < n, (6.1)
pentru orice cuplu de nregistrri f(c1) f(c2), dac c1 c2. (6.2)

n practic este dificil s se satisfac proprietatea (6.2): din aceast cauz trebuie
admis posibilitatea coliziunilor - numrul de valori distincte calculate de funcia
de dispersare este inferior valorii lui n. n caz de coliziune este necesar o faz
suplimentar pentru determinarea nregistrrii cutate sau, n cazul unei
inserri, s i se caute un loc.

Alegerea funciei de dispersare n scopul reducerii probabilitii coliziunilor i a


metodelor de tratare a coliziunilor trebuie s in cont de caracteristicile
utilizrii fiierului: 169
probabilitatea unor valori diferite ale cheii,
articol 2 al2=f(cheie2)
f(cheie2)= f(cheie3)

cheie 1

cheie 2 funcie de
dispersare f(cheie1) articol 1 al1=f(cheie1)
cheie 3
tratare
coliziuni
(coliziune ntre cheie2 i cheie3)
articol 3 al 3

Fig.6.3. Acces direct prin adresare dispersat

Principalul avantaj al metodei adresrii dispersate (dac se reuete s se asigure un


nivel acceptabil al coliziunilor) este rapiditatea: n lipsa coliziunilor gsirea unei
nregistrri necesit o singur accesare a discului.

Totui, n cazul cel mai frecvent, cnd mulimea cheilor este ordonat, funcia de
dispersare nu ntotdeauna asigur o relaie simpl ntre ordinea cheilor i
ordinea adreselor logice a nregistrrilor respective. Drept consecin, un acces
secvenial, care ar respecta ordinea cheilor, trebuie s fie realizat ca o suit de
accese directe, fr simplificri.

Metodele accesului indexat permit remedierea acestui inconvenient. 170


Fiiere indexate
Metodele accesului indexat sunt utilizate n cazul cnd mulimea cheilor este
ordonat. Relaia dintre cheie i adresa logic este materializat printr-un tabel,
numit tabel al indicilor, n care ordinea cheilor este semnificativ. Schema
principiului organizrii indexate este dat de fig.6.4
Schemele utilizate efectiv n practic sunt mai complexe pentru a permite:
accelerarea cutrii n cadrului indicelui,
facilitarea inserrii i a suprimrii nregistrrilor.

171
6.2.3.2. Chei multiple
Este cazul cnd pot fi utilizate mai
multe chei pentru a desemna o
nregistrare. n caz general, pot
exista mai multe nregistrri
pentru care o cheie particular
are o valoare dat. O cheie,
valoarea creia determin
nregistrarea n mod univoc, se
numete cheie primar; acest
termen este aplicat, prin
extensie, i pentru o
combinaie de chei.
Tehnica de baz folosit pentru
manipularea unui fiier cu chei
multiple este organizarea
multilist. Este utilizat cte un n afara tabelului indicilor referinelor au mai fost
indice distinct pentru fiecare introduse un tabel al autorilor i unul al
cheie. Fiecare intrare a editorilor. Fiecare intrare a tabelului indicilor
tabelului indicilor, asociat unei autorilor este topul unei liste, care grupeaz
chei concrete, care corespunde toate nregistrrile pentru care valoarea
unei valori distincte a acestei cmpului autor este aceeai. Pointerii acestor
chei, puncteaz topul unei liste liste sunt adrese logice. Este simplu de gsit
n care sunt toate nregistrrile toate lucrrile unui autor publicate la una i
pentru care cheia considerat aceeai editur. Pot fi obinute combinaii pentru
posed valoarea dat. Pentru 172
aceste cereri cu ajutorul operaiei intersecie.
realizarea acestor liste fiecare
Este posibil comprimarea reprezentrii
fiierului, utiliznd liste circulare, care
includ intrrile corespunztoare ale
tabelelor indicilor (lista lucrrilor adres
tabelul
scrise de Paul, de exemplu, se nchide logic
indicilor
la intrarea Paul din tabelul indicilor referinelo
autorilor). Cmpurile autor i editor r
ale prii info a reprezentrii
nregistrrilor pot fi suprimate pentru tabelul
c ele pot fi determinate din listele nregistrr
indicilor
respective. Dezvoltnd aceast idee, i
autorilor
se poate crea cte un indice distinct
pentru fiecare cmp; reprezentarea
tabelul
nregistrrilor va conine doar pointeri indicilor
i toat informaia se conine doar n editorilor
tabelele indicilor. Un fiier reprezentat
n acest mod se numete inversat. tabelul
Aceast reprezentare permite un indicilor
rspuns imediat la cereri legate de anilor
combinaii ale cmpurilor i poate fi Fig.6.6. Organizarea unui fiier inversat
combinat cu organizarea direct,
utiliznd o cheie primar. Tabelele
indicilor secundari conin n acest caz
listele valorilor cheii primare. Pentru
exemplul unui fiier documentar
organizarea descris mai sus este 173
schematic prezentat n figura 6.6.
6.3. Organizarea fizic a fiierelor

n modelul prezentat mai sus, problema organizrii fizice a fiierelor poate fi


formulat astfel: s se elaboreze o implantare n memoria secundar a unei
mulimi de fiiere respectnd urmtoarele ipoteze:
orice fiier este definit logic ca un segment, adic ca o mulime de informaii,
care ocup amplasamente adiacente, reperate prin adrese logice sau deplasri,
dac nu exist concretizri particulare (band magnetic, de exemplu),
memoria secundar este de tip disc, organizat ca o mulime de blocuri de
lungime fix.

Notm aici, c dac sistemul de operare realizeaz o memorie virtual segmentat,


implantarea fizic a segmentelor i realizarea funciilor de acces elementar
(citire, scriere, execuie) sunt puse n arja sistemului. Este posibil n acest caz
confundarea noiunilor de segment i fiier.

Vom trata cazul unei gestionri directe de ctre SGF a implantrii fizice a fiierelor.
Pot fi evideniate dou clase de metode, dac lum n considerare respectarea
sau nerespectarea contiguitii adreselor logice.

174
6.3.1. Implantare secvenial (contigu)
n acest caz fiecare fiier ocup o mulime de blocuri consecutive n memoria
secundar. Este unicul mod de implantare n cazul unei benzi magnetice:
fiierele sunt aranjate consecutiv pe band, fiecare fiind separat de urmtorul cu
ajutorul unui simbol, numit sfrit de fiier (end of file, EOF). Un EOF dublu
marcheaz sfritul prii utilizate a benzii. Descriptorul unui fiier este plasat la
nceputul fiierului i, adesea, repetat la sfritul fiierului. n interiorul fiierului
nregistrrile sunt aranjate consecutiv; dac lungimea lor este variabil, ea va fi
prezent la nceputul fiecrei nregistrri. Caracterul EOF este detectat n mod
automat de controlerul mecanismului de derulare a benzii. O operaie cutarea
EOF-ului fiierului permite saltul de la un fiier la altul pentru cutarea unui
fiier cu numele dat.

Implantarea secvenial poate fi n egal msur folosit i pentru discuri. Avantajul


principal const n garantarea unui acces secvenial eficient (informaiile cu
adrese logice succesive sunt implantate n blocuri adiacente) permind n
acelai timp un acces direct eficient (calcularea adresei fizice pornind de la
adresa logic este foarte simpl i nu cere accesarea discului). Totui, aceast
metod prezint inconveniente grave n cazul n care crearea, distrugerea sau
modificarea lungimii unui fiier sunt operaii frecvente.

Implantarea contigu pe disc este utilizat pentru fiierele numrul i lungimea


crora nu variaz (de exemplu, fiiere create odat pentru totdeauna i utilizate
mai apoi doar pentru consultare); sisteme primitive pentru microcalculatoare,
cnd simplitatea realizrii este un factor preponderent.
175
6.3.2. Implantare non contigu
Dac abandonm restricia contiguitii implantrii, memoria secundar se
transform ntr-o resurs banalizat, blocurile memoriei secundare fiind
echivalente din punctul de vedere al alocrii lor.
6.3.2.1. Blocuri nlnuite

Fig.6.7. Alocare prin blocuri nlnuite

Blocurile fizice, care conin amplasamente logice consecutive sunt nlnuite ntre
ele; pentru aceast nlnuire trebuie s fie rezervat n fiecare bloc un pointer.
Descriptorul conine un pointer la primul i ultimul bloc i numrul blocurilor
ocupate (fig.6.7).
Ultimul bloc, care poate fi utilizat parial, trebuie s conin indicaii despre numrul
de amplasamente ocupate. Deoarece exist un pointer la ultimul bloc este
simplu s extindem un fiier, adugnd informaii la sfrit.
Este bine adaptat accesului secvenial. Putem accesa un bloc doar respectnd
nlnuirea; accesul direct este costisitor, deoarece fiecare citire a unui pointer
necesit o accesare a discului. La fel i extinderea altfel, dect la sfrit, 176
este
foarte dificil.
6.3.2.2. Tabele de implantare
n cazul accesului direct timpul de acces la un bloc trebuie s nu depind de adresa
sa, ceea ce poate fi obinut punnd toi pointerii ntr-un tabel unic de
implantare. Problema principal este garantarea uniformitii timpilor de acces
pentru tabelele de lungime mare i permiterea inserrii i distrugerii blocurilor
n orice punct al fiierului.
Tabel unic
Figura 6.8 (a) descrie o organizare cu tabel unic. Lungimea fiierului este limitat de
numrul blocurilor pe care descriptorul le definete n tabel (el nsui
coninndu-se ntr-un numr ntreg de blocuri).
Tabel nlnuit
Conform organizrii din fig.6.8 (b) tabela de implantare const dintr-o suit de
blocuri nlnuite. Putem depi n acest fel limitarea dimensiunii unui fiier,
devine posibil inserarea blocurilor n mijlocul fiierului, cu condiia rezervrii
unor amplasamente libere n tabel. Reorganizarea generat de inserare este
legat de un bloc al tabelului, iar dimensiunea tabelului de implantare este
limitat de costul cutrii n acest tabel. Pentru tabele mari organizarea descris
este mai eficace.
Tabele cu mai multe nivele
Figura 6.9 descrie o organizare n care tabelul de implantare a fiierului este
organizat n mod arborescent, pe niveluri (de obicei, dou sau trei niveluri).
Organizarea dat permite un acces direct rapid la un bloc cu adresa logic dat;
ea permite inserrile cu unele msuri de precauie.

177
Fig.6.8. Tabel de implantare cu un
nivel

178
Fig.6.9. Tabel de implantare cu dou
nivele
6.3.3. Alocarea memoriei secundare
Problema alocrii memoriei secundare poate fi pus n termeni similari cu cea a
memoriei principale; restriciile principale sunt:
alocarea prin blocuri de lungime fix,
costul ridicat al accesului,
caracteristicile proprii fiecrui suport: piste, dispozitive de citire-scriere mobile
sau fixe.

Interfaa alocatorului memoriei secundare conine dou primitive:


cerere_zon(n,a) date: n (ntreg), numrul de blocuri contigue cerute
rezultat: a (adres), adresa primului bloc
excepie: numr de blocuri insuficiente
eliberare_zon(n,a) date: n (ntreg), numrul de blocuri contigue eliberate
a (adres), adresa primului bloc
excepie: numr de blocuri eliberate

Cazul n=1 - primitive particulare (cerere_zon, eliberare_zon).

Structura de date cel mai des utilizat pentru a descrie starea de ocupare a memoriei
este un lan de bii, bitul cu numrul i indicnd starea (ocupat sau liber) a
blocului cu acelai numr.
Acest tabel de ocupare poate atinge dimensiuni importante; de exemplu, sunt
necesari 12,5 Ko pentru a descrie ocuparea unui disc de 200 Mo alocai prin
blocuri de 2 Ko. Pentru a spori eficiena algoritmilor de alocare tabelul poate
179 fi
organizat pe mai multe niveluri.
6.4. Realizarea funciilor de acces elementar
6.4.1. Organizarea descriptorilor
Un descriptor de fiier trebuie s conin informaii diverse:
informaii pentru localizarea fizic,
informaii referitoare la utilizare,
informaii asociate proteciei i securitii.
6.4.1.1. Localizarea fizic
Dac aceste informaii sunt de dimensiune fix i redus (implantare contigu,
blocuri nlnuite) ele se conin direct n descriptor; n caz contrar (tabele de
implantare nlnuite sau pe mai multe niveluri), descriptorul conine doar un
pointer la tabelul de implantare i nite informaii sintetice, cum ar fi
dimensiunea fiierului, dimensiunea tabelului de implantare, etc.
6.4.1.2. Informaii de utilizare
Informaiile, legate de utilizarea unui fiier pot fi clasificate dup cum urmeaz:
Informaii de stare. Aceste informaii definesc starea curent a fiierului:
deschis sau nchis, gradul de partajare, disponibilitatea pentru modificare, etc.
Informaii despre coninutul fiierului. Aceste informaii permit interpretarea
coninutului fiierului. Este posibil s se asocieze unui fiier un tip, care specific
operaiile permise.
Informaii despre structura logic. Aici pot fi plasate informaiile care permit
trecerea de la structura logic la structura fizic a fiierului. De exemplu, n
cazul nregistrrilor de lungime fix este convenabil s se aleag lungimea
nregistrrii multiplu sau submultiplu al lungimii blocului fizic. Raportul lungimea
blocului/lungimea nregistrrii, adesea numit factor de bloc, figureaz n cadrul
descriptorului.
Informaii despre utilizrile precedente. Aceste informaii pot fi de natur 180
statistic (numrul deschiderilor, accesrilor, intervalul mediu timp de ntre
Ca i majoritatea funciilor unui sistem de operare, aceste primitive pot fi apelate n
dou moduri: cu ajutorul unor instruciuni sau prin apelarea regimului
supervizor.

La nivelul limbajului de comand fiierele sunt desemnate prin numele lor simbolic,
care este interpretat n contextul curent. Dac o primitiv este apelat printr-un
apel al supervizorului, n timpul execuiei unui program, fiierele sunt, de obicei,
desemnate de numele local, care este cel al unui descriptor valid n interiorul
programului curent.

Corespondena ntre numele simbolice i numele locale este realizat prin


instruciuni de asociere. Interpretarea numelor fiierelor este comun tuturor
primitivelor.

Pentru fiecare primitiv vom prezenta:


specificrile interfeei,
algoritmul care o realizeaz,
situaiile anormale posibile.

181
6.4.2.1. Crearea
Specificarea interfeei
Parametrii furnizai sunt:
numele fiierului
tipul (opional)
lungimea (opional)
starea iniial (opional)

Cel mai frecvent, parametrii starea iniial i lungimea nu sunt furnizai, avnd valori
implicite: lungimea = 0, fiierul este nchis, lista de acces predefinit.
Operaii
s se creeze un descriptor pentru fiier, obinem astfel un nume intern,
dac numele furnizat este un nume extern, s se creeze o intrare a acestui nume n
catalogul curent,
s se aloce memorie fiierului; chiar dac lungimea sa este nul, un fiier conine un
antet, care ocup primul su bloc,
s se iniializeze descriptorul cu informaiile de localizare, lungime, protecie (lista
drepturilor iniiale de acces),
dac descriptorul nu se conine direct n catalog, s se introduc o intrare n catalog
cu numele intern al fiierului (adresa descriptorului).
Cazuri anormale
nume furnizat incorect (incorect construit sau care desemneaz un fiier deja
existent);
memorie insuficient n memoria secundar.
Fiierul nu poate fi creat i situaia anormal este semnalat.
182
6.4.2.2. Distrugerea

Specificarea interfeei
Unicul parametru furnizat este numele fiierului. Efectul operaiei este de a suprima
orice acces ulterior la fiier, invalidnd toate numele acestuia i elibernd toate
resursele pe care fiierul le utilizeaz (intrri n tabele, memorie).

Operaii
s se elibereze toat memoria, care a fost alocat fiierului;
s se elibereze memoria alocat descriptorului i numele intern s devin reutilizabil;
suprimarea numelui extern al fiierului n catalogul, care-l include, de asemenea,
dac este cazul, n tabelul numelor locale.

Aceast ultim operaie poate fi destul de delicat, dac exist mai multe ci de
acces la fiier.

Poate fi utilizat una din urmtoarele soluii:


dac cile multiple de acces sunt legturi, nu se va lua nici o msur; un acces
ulterior prin una din aceste legturi va conduce la numele extern. Inexistena
fiierului va fi detectat (cu excepia cazului n care un fiier cu acelai nume a
fost creat n intervalul de timp dat);
dac cile multiple de acces sunt nume (ceea ce se poate produce, dac structura
catalogului nu este o arborescen) vor fi utilizate sau legturi inverse (metod
costisitoare), sau un contor al referinelor pstrat n descriptor, care duce
evidena numrului cilor de acces. Un fiier poate fi distrus doar dac exist o
singur cale de acces. Aceast soluie este utilizat, de exemplu, n sistemul183
Unix.
6.4.3.1. Deschiderea
Specificarea interfeei
Parametrii operaiei de deschidere sunt:
numele fiierului, condiiile de utilizare: modul de acces (citire, scriere, execuie,
etc.), procedurile de acces (secvenial, direct, sincron, etc.), parametrii de
transfer (tampoane, etc.)

Scopul - de a pune un fiier n starea n care accesul este posibil conform modului
specificat. Aceast operaiei este de dubl utilitate pentru SGF:
Protecie. SGF poate s controleze:
la deschidere, dac utilizatorul este autorizat s acceseze fiierul n condiiile
specificate,
la fiecare accesare a fiierului, dac condiiile de acces sunt compatibile cu cele
specificate la deschidere,
n caz de partajare, dac condiiile de accesare ale utilizatorilor sunt reciproc
compatibile.
Eficien. SGF poate s accelereze accesul la fiierele deschise, aducnd n memorie
descriptorii lor, tabelele de implantare i textele procedurilor de acces. Fiierul
nsui poate fi transferat, eventual, pe un suport cu acces mai rapid; dac el se
afl pe un suport amovibil nemontat, montarea este necesar.
Operaii
La deschidere vor fi realizate urmtoarele operaii:
localizarea fiierului i, eventual, transferarea lui pe un suport mai rapid,
controlarea dreptului utilizatorului de a deschide fiierul n modul specificat,
crearea unui descriptor local i atribuirea unui nume local,
alocarea eventual a memoriei pentru zonele tampon de intrare-ieire. 184
Cazuri anormale
6.4.3.2. nchiderea

Specificarea interfeei
Unicul parametru necesar este numele fiierului. Efectul operaiei este de a interzice
orice acces ulterior la fiier i de a-l transfera ntr-o stare coerent i stabil,
redndu-i definitiv toate modificrile operate n perioada ct a fost deschis.

Operaii
Descriptorul fiierului este actualizat (dac aceasta nu a fost fcut anterior) pentru a
nregistra definitiv modificrile operate n perioada ct a fost deschis;
descriptorul local este suprimat, numele local putnd fi reutilizat. Memoria
ocupat de zonele tampon i procedurile de intrare-ieire este eliberat, dac ea
a fost alocat doar pentru perioada de deschidere a fiierului. Fiierul este,
eventual, transferat pe suportul su de origine; o cerere de demontare este
trimis dac suportul de origine este amovibil.

Unele sisteme opereaz cu fiiere temporare, adic fiiere desemnate doar de


numele local. La nchiderea unui astfel de fiier, utilizatorul are de ales ntre
dou posibiliti:
s catalogheze fiierul, atribuindu-i un nume extern; fiierul va fi n acest caz salvat.
(implicit) s nu fac nimic, fiierul fiind distrus n acest caz.

Cazuri anormale
Pentru garantarea coerenei fiierului, n timpul nchiderii nu trebuie s aib loc
operaii de transfer (a descriptorului sau a fiierului).
185
6.4.4. Acces elementar la informaii

Parametrii primitivelor de transfer permit specificarea:


metodei de acces utilizate, care determin modul de desemnare a
nregistrrilor - obiectul transferului (acces secvenial, direct, cu chei, etc.),
sincronizarea transferului (transfer sincron sau asincron); n cazul unui transfer
asincron, modul de deblocare a unui proces apelant,
zonele tampon utilizate (specificate de ctre utilizator sau furnizate de SGF).

Accesul elementar (citire sau scriere) la o nregistrare a fiierului const din dou
etape:

determinarea adresei fizice a nregistrrii plecnd de la desemnarea sa logic;


executarea transferului fizic.

186
6.5.1. Despre securitate i protecie

Fiierele conin toat informaia administrat de sistemul de operare, inclusiv


informaia necesar gestiunii sistemului. Este important s se garanteze
integritatea acestor informaii n eventualitatea unor pene fizice, logice sau n
caz de rea voin. Obiectivele i metodele pot fi considerate aparinnd la dou
direcii: securitate i protecie.

Cu titlul securitate vom ngloba mulimea metodelor, care sunt chemate s garanteze
execuia tuturor operaiilor asupra unui fiier n conformitate cu specificaiile lor,
chiar n cazul unor defecte n cursul execuiei, i c informaiile coninute ntr-un
fiier nu sunt alterate, dac nici o operaie nu a fost executat. Metodele
utilizate sunt, n caz general, cele care asigur tolerana sistemului la defecte;
baza lor este redundana informaiilor.

Prin protecie vom nelege mulimea metodelor chemate s specifice regulile de


utilizare i s garanteze respectarea lor. O descriere succint a metodelor
principale de protecie a fost adus n 5.1.4. Ele se bazeaz pe noiunea de drept
de acces i existena unui mecanism, care permite s se garanteze
conformitatea operaiilor drepturilor de acces specificate.

187
6.5.2. Securitatea fiierelor
Securitatea fiierelor este asigurat, dup cum a fost menionat, prin redundana
informaiilor. Redundana poate fi introdus n dou moduri: salvarea periodic a
unor informaii, pentru a putea restabili o stare anterioar n caz de distrugere,
i redundana intern, care permite reconstituirea unor informaii devenite
incoerente din cauza unui accident de origine fizic sau logic, care a provocat o
alterare parial.

6.5.2.1. Redundana intern i restabilirea informaiilor


Principiul redundanei interne const n organizarea structurilor de date astfel, nct
orice informaie s poat fi obinut prin cel puin dou ci distincte. Se reduce
astfel probabilitatea c distrugerea accidental a unei pri a informaiei va
conduce la pierderea iremediabil a coninutului fiierului.
Tehnicile frecvent utilizate n acest scop sunt urmtoarele:
pentru un fiier pstrat pe disc n blocuri nlnuite se va folosi nlnuirea dubl, se
va include n fiecare bloc un pointer la blocul, care conine descriptorul, sau
indicaia c blocul este liber,
se va include n descriptor numele simbolic al fiierului i un pointer la catalogul n
care se conine fiierul, o parte a descriptorului va fi dublat.

6.5.2.2. Salvare periodic


Se poate apriori conveni s fie salvate, la intervale regulate de timp, toate
informaiile coninute ntr-un SGF. Poate fi realizat salvarea doar a modificrilor,
care au avut loc pentru ultima perioad, concomitent cu lucrul normal al
sistemului.
188
6.5.3. Protecia fiierelor

Protecia fiierelor folosete principiul listelor de acces. O list de acces, asociat


unui fiier, conine drepturile fiecrui utilizator asupra fiierului, adic mulimea
operaiilor care i sunt permise. n practic, diferite convenii permit reducerea
listei. Este definit mai nti mulimea drepturilor atribuite implicit fiecrui
utilizator (mulime, care poate fi vid); lista de acces va conine doar utilizatorii,
drepturile crora difer de cele implicite. Convenii de grupare permit asocierea
unei mulimi de drepturi unui grup de utilizatori (membrii unui proiect, etc.),
ceea ce reduce i mai mult lista. Lista de acces servete la verificarea validitii
oricrei operaii asupra fiierului.

189
7. Alocarea resurselor
7.1. Noiuni generale
7.1.1. Definiii
7.1.2. Probleme n alocarea resurselor
7.1.3. Exemple de sisteme cu fire de ateptare
7.2. Modele pentru alocarea unei resurse unice
7.2.1. Alocarea procesorului
7.2.1.1. Introducere
7.2.1.2. Prim sosit, prim servit
7.2.1.3. Cererea cea mai scurt servit prima
7.2.1.4. Caruselul i modele derivate
7.2.2. Disc de paginare
7.3. Tratarea blocrilor
7.3.1. Enunul problemei
7.3.2. Algoritmi de prevenire
7.3.2.1. Algoritmi de profilaxie
7.3.2.2. Algoritmul bancherului
7.3.3. Algoritmi de detectare i tratare
7.4. Exerciii la capitolul 7

n acest capitol prezentm principiile de alocare a resurselor ntr-un sistem


informatic. Sunt abordate dou aspecte:
utilizarea rezultatelor teoriei firelor de ateptare pentru analiza ctorva modele simple ale sistemelor
informatice, n special pentru alocarea procesoarelor;
prezentarea unor metode de evitare a impasurilor (blocarea reciproc a mai multor procese rezultat din
alocarea eronat a unor resurse comune). 190
7.1. Noiuni generale
7.1.1. Definiii

Resurs - orice obiect, care poate fi utilizat de ctre un proces.


Unei resurse i sunt asociate proceduri de acces, care permit utilizarea resursei i
reguli de utilizare, care constituie modul de utilizare.
Nu exist vre-o diferen fundamental ntre noiunea de obiect i cea de resurs. Folosirea celor doi
termeni semnific mai mult o diferen de domeniu: se utilizeaz noiunea obiect atunci cnd ne
intereseaz specificarea i realizarea obiectului i a funciilor sale de acces, iar resurs pentru
problemele de alocare i partajare.

O resurs este alocat unui proces dac procesul poate utiliza resursa, folosind
procedurile ei de acces. Legarea unei resurse de un proces poate fi implicit sau
explicit. n primul caz, este suficient trecerea procesului ntr-o anumit stare
pentru ca el s devin candidat la utilizarea resursei; n cel de-al doilea caz,
solicitarea trebuie s fie formulat explicit sub forma unei cereri adresate unui
alocator al resursei.

Alocatoarele i cererile pot lua forme diverse: de exemplu, un alocator poate fi un


proces cruia cererile i sunt transmise prin emiterea unor mesaje; sau chiar un
monitor o procedur a cruia servete la emiterea unor mesaje.

Reacia unui alocator la o cerere poate de asemenea fi diferit: alocarea resursei


solicitate, refuz cu sau fr blocarea procesului solicitant. Terminarea utilizrii
unei resurse de ctre un proces poate la fel lua diferite forme: eliberarea
191
explicit sau implicit a resursei sau retragerea forat a resursei de ctre
alocator.
Exemplul 7.1. Procesorul. Procedurile de acces la procesor sunt
determinate de instruciuni i cuvntul de stare; alocarea procesorului unui
proces se face prin ncrcarea cuvntului su de stare. Nu exist cereri explicite:
pentru a fi n stare s depun o astfel de cerere, procesul ar trebui s posede
deja procesorul obiectul cererii! Un proces devine n mod implicit candidat la
utilizarea procesorului din momentul cnd trece n starea eligibil. Alocatorul
const din dou proceduri: planificatorul i dispecerul.

Exemplul 7.2. Memoria principal. Alocarea memoriei principale pune n


funcie dou mecanisme distincte:
Alocarea explicit: este mecanismul de obinere a unei zone de memorie fie de ctre
un program n curs de execuie, fie de ctre sistemul de operare naintea
ncrcrii unui program nou.
Alocarea implicit: pentru acest mod de alocare cererea este emis n momentul
executrii unei instruciuni, cnd adresa emis de procesor este adresa unui
amplasament nealocat procesorului. Acest mecanism st la baza realizrii
memoriei virtuale.

Exemplul 7.3. Memoria secundar. Memoria secundar este alocat prin


blocuri banalizate de lungime fix. Alocarea i eliberarea poate fi explicit sau
implicit (de exemplu, extinderea unui fiier provoac emiterea unei cereri
pentru un bloc suplimentar).

Exemplul 7.4. Linii de comunicaie. Dac mai multe procese partajeaz


serviciile unui dispozitiv de intrare-ieire comun (o imprimant sau o linie de
comunicaie, de exemplu), cererile sunt transmise sub form de mesaje unui 192
proces, numit server, care administreaz acest dispozitiv. Fiecare mesaj conine
7.1.2. Probleme n alocarea resurselor

Obiectivul unui sistem de alocare a resurselor este s satisfac cererile ntr-un mod
echitabil, asigurnd n acelai timp i performane acceptabile. Dac toate
procesele au aceeai prioritate, o alocare este echitabil, atunci cnd este
asigurat o tratare asemntoare fiecrui proces, de exemplu, ateptarea medie
este identic. Dac ntre procese exist prioriti, este dificil s se defineasc
noiunea de echitate n caz general, dar ea poate fi exprimat prin faptul, c
calitatea serviciului (msurat, de exemplu, prin valoarea invers a timpului
mediu de ateptare sau printr-o alt expresie semnificativ) este funcie
cresctoare de prioritate, dou procese de aceeai prioritate beneficiind de
aceeai tratare.

Unii algoritmi de alocare conin riscul de a face un proces s atepte la infinit -


privaiune.

Dac resursele sunt utilizate de mai multe procese pot avea loc dou fenomene
nedorite:
Blocarea - este stoparea a mai multor procese pentru un interval de timp
nedefinit, fiecare dintre procese fiind n ateptarea eliberrii resurselor alocate
altor procese.
Cderea o cerere excesiv a unui oarecare tip de resurse conduce la
degradarea performanelor sistemului.

193
Vom presupune, c alocarea se va face n mod centralizat, adic algoritmii utilizai
tiu situaia de alocare a mulimii resurselor la orice moment.
7.1.3. Sisteme cu fire de ateptare

Un sistem informatic este constituit din N instalaii identice, fiecare fiind descris de
modelul M/M/1, cu parametrii i (fig. 7.1a). Vom examina influena asupra
timpului de rspuns al acestui sistem a utilizrii comune a resurselor,
caracteristicile totale de tratare fiind constante.

Fig.7.1. Modelul unui sistem de servire n mas

Timpul mediu de rspuns pentru fiecare caz va fi:


tma = 1/[(1-)]
tmb = 1/+C(N,N)/[N(1-)]
tmc = 1/[N(1-)]

Aici avem tmc = tma/N i putem demonstra, calculnd C(N, N), c tma > tmb > tmc. De
194
exemplu, pentru N=2, =1 i =0,8 vom avea tma = 5, tmb = 2,8, tmc = 2,5.
7.2. Modele pentru alocarea unei resurse unice

7.2.1. Alocarea procesorului


7.2.1.1. Introducere
Algoritmii de alocare a procesorului pot fi clasificai n funcie de mai multe
caracteristici.
1) Algoritmi cu sau fr retragere
2) Cu prioritate

Prioritatea unui proces este o informaie, care permite clasificarea procesului n


cadrul altor procese, dac trebuie fcut o alegere.

Prioritatea poate fi definit prin mai multe moduri:


prioritate constant: definit apriori, funcie de timpul de servire cerut.
prioritate variabil n timp: funcie de timpul de ateptare scurs, de serviciul deja acordat,
etc.

Variabila principal, care prezint interes este timpul mediu de rspuns. Cererea este
caracterizat de repartiia intervalelor de sosire i de timpul de servire.

Din practic este cunoscut, c un utilizator suport cu att mai greu ateptarea
servirii unei cereri cu ct lucrul trimis de el este de durat mai mic; aceasta
este adevrat att pentru lucrul interactiv, ct i pentru cel de fond. Din aceste
considerente metodele de alocare a procesorului au drept scop reducerea
timpului mediu de ateptare a lucrrilor celor mai scurte.
195
Ele difer conform modului de estimare a duratei lucrrilor i n dependen de
7.2.1.2. Prim sosit, prim servit

Disciplina PSPS (FIFO) utilizeaz un fir unic, fr prioritate i fr retragere.


Procesul ales este executat pn la terminarea sa, iar cel care va urma este
procesul din topul firului de ateptare. Un proces nou intr n coada firului.

Timpul mediu de rspuns este dat de formula Pollaczek-Khintchine:


tm = tms[1+(1+C2ts)/2(1- )], C2ts= Var(ts)/(tms)2 (7.1)

tm

Var(ts
)

1 =ts
Fig.7.2. Timpul mediu de rspuns pentru
Variaia timpului mediu de rspuns f de ncrcarea sistemului i de variaia timpului
de servire.
Putem remarca:
creterea rapid a timpului mediu de rspuns, atunci cnd sistemul se apropie de
196
saturaie: un sistem este cu att mai sensibil la o variaie a arjei, cu ct este mai ridicat ,
influena dispersiei timpilor de servire asupra timpilor de rspuns.
7.2.1.3. Cererea cea mai scurt servit prima

n acest caz cererile sunt ordonate n cadrul firului de ateptare conform timpului lor
de servire, presupus apriori cunoscut, cererile cu durata de servire cea mai
scurt aflndu-se n top.
Timpul mediu de ateptare 2 tm funcie de timpul de t s servire ts este dat de formula
t m s (1 C t s )
2

(7.2): (t s ) tdB (t )
2[1 (t s )] 2
0
tm(ts) = cu (7.2)

Formulele de aproximare sunt


t m (1 C t )
2 2
s s
pentru valori mici ale ts, unde (ts) poate fi neglijat:
2
tm(ts) (7.3)

t m (1 C t )
2 2
s s

pentru valori mari ale


2(1 ts,unde
)2 (ts) este aproape de tms, fie :

tm(ts) (7.4)

197
CSSP are dou dezavantaje: ea prezint un risc de
privaiune pentru cererile lungi, dac rata de sosire a
cererilor scurte este ridicat i necesit cunoaterea tm
apriori exact a ts. CSSP

Evitarea riscului de privaiune - cererilor prioriti


care vor crete odat cu creterea timpului lor de FIFO
aflare n firul de ateptare, prioritatea iniial fiind
determinat de timpul de servire estimat.
Disciplinei HRN (Highest Response Ratio Next)
prioritatea unei cereri la un moment de timp ts
p(t) = [t()+ts)]/ts Fig.7.3. Dependena timpului mediu de rspuns d
(7.5) timpul de servire n cazul disciplinelor FIFO i
unde t() este timpul de aflare a unei cereri n firul de
ateptare (fie t()= s, aici s fiind momentul
sosirii cererii), iar ts timpul de servire estimat. Pentru
dou cereri cu acelai timp de ateptare, prioritate
are cererea mai scurt. n practic, prioritile sunt
recalculate n momente discrete de timp i firul de
Ideea directoare a acestui algoritm este de a partaja echitabil procesorul, ncercnd s
ateptare este reordonat la necesitate.
se menin o valoare constant a raportului k = t/t s, unde t este timpul total de
aflare a unei cereri n sistem. Dac aceasta se respect, totul se va petrece
pentru fiecare lucrare ca i cum ea ar dispune de un procesor de k ori mai slab
(mai puin rapid) dect procesorul real. Disciplina HRN privilegiaz lucrrile
scurte, ns penalizarea lucrrilor de lung durat este redus de efectul
prioritii variabile. 198
Algoritmii descrii mai jos vizeaz la fel partajarea echitabil a procesorului, dar nu
7.2.1.4. Caruselul i modele derivate
n modelul caruselului (round robin) procesorul este alocat succesiv proceselor
eligibile pentru o perioad constant de timp , numit cuant. Dac un proces
se termin sau se blocheaz nainte de sfritul cuantei, procesorul este imediat
alocat procesului urmtor. Aceast disciplin de servire este implementat
ordonnd procesele ntr-un fir de ateptare circular; un pointer de activare, care
avanseaz cu o poziie la fiecare realocare a procesorului, desemneaz procesul
ales (fig.7.4).

ieire
intrar
e
f_eligibil proc_ale
s
Fig.7.4. Alocarea procesorului: metoda
caruselului

Caruselul este un exemplu de disciplin cu retragere. Ea poate fi considerat o


aproximare a disciplinei cel mai scurt primul pentru cazul cnd durata
execuiei lucrrilor nu este cunoscut anticipat. Este utilizat n sistemele
interactive; valoarea cuantei este aleas astfel ca majoritatea cererilor
interactive s poat fi executate n timpul unei cuante. Evident, valoarea199
cuantei
trebuie s fie net mai mare dect durata comutrii procesorului.
Analiza este mai simpl n cazul limit ( 0, iar timpul de comutare a procesorului
neglijat)
- procesor partajat (PP), totul are loc ca i cum fiecare proces dispune imediat de un
procesor viteza de procesare a cruia este cea a procesorului real, divizat la
numrul curent al proceselor servite:
ta(ts) = ts/(1-),
iar timpul de rspuns este
t(ts) = ts/(1-).

Modelul procesorului partajat realizeaz o alocare echitabil, n care timpul de aflare


a unui proces n sistem este proporional cu durata serviciului cerut.

O mbuntire a modelului caruselului, chemat s reduc timpul de servire a


lucrrilor de scurt durat, este caruselul multinivel.

Acest model conine n fire de ateptare F0, F1,..., Fn-1. Fiecrui fir Fi i este asociat o
cuant proprie i, valoarea creia crete odat cu i. O lucrare din Fi este servit
doar dac firele de numr inferior lui i sunt vide.
Dac o lucrare din Fi i-a epuizat cuanta sa fr a se termina, ea intr n firul Fi+1;
lucrrile din Fn-1 se ntorc tot aici. Lucrrile noi intr n F0 (fig. 7.5).

200
t(ts) t(ts)
CM PP CM
PP
CSSP

CSSP

ts ts
FIFO prim sosit prim servit PP procesor partajat
intrare procesor ieire CSSP cerere scurt servit prima CM carusel
multinivel
Fig. 7.5. Carusel cu mai multe niveluri Fig. 7.6. Compararea disciplinelor de alocare a procesorului

201
7.3. Tratarea blocrilor

7.3.1. Enunul problemei


Un exemplu de blocare reciproc a fost prezentat n capitolul 4, cnd dou seciuni
critice, corespunztoare la dou resurse distincte, sunt imbricate eronat,
existnd un risc de blocare pentru o perioad de timp nedefinit.

O atare situaie poate fi generalizat pentru un numr oarecare de procese i


resurse, dac sunt ndeplinite urmtoarele condiii:
1) resursele sunt utilizate n excludere mutual,
2) fiecare proces trebuie s utilizeze simultan mai multe resurse, i acapareaz
fiecare resurs pe msura necesitilor sale, fr a le elibera pe cele pe care le
posed deja,
3) cererile de resurse sunt blocante i resursele nu pot fi retrase,
4) exist o mulime de procese {p0,..., pn}, astfel nct p0 cere o resurs ocupat de
p1, p1 cere o resurs ocupat de p2, ..., pn cere o resurs ocupat de p0.

Problema impasului poate fi soluionat n dou moduri:


prin prevenire: algoritmul de alocare a resurselor garanteaz, c o situaie de
blocare nu se poate produce,
prin detectare i tratare: nu sunt luate msuri preventive; blocarea este
detectat doar dac are loc, iar tratarea i nsntoirea const n aducerea
sistemului ntr-o stare, n care procesele sunt deblocate, n caz general, cu o
pierdere de informaii.
202
8. ADMINISTRAREA MEMORIEI
8.1. Concepte de baz
8.1.1. Memorie virtual
8.1.2. Probleme de alocare a memoriei
8.1.3. Alocarea dinamic a memoriei
8.2. Comportamentul programului
8.2.1. Comportamentul ntr-o memorie virtual liniar
8.2.2. Comportamentul programelor segmentate
8.3. Partiionarea memoriei fr reamplasare
8.3.1. Metoda du-te vino simpl
8.3.2. Partiionarea memoriei
8.4. Alocarea dinamic a zonelor de memorie
8.4.1. Mecanisme de reamplasare dinamic
8.4.2. Algoritmi de alocare
8.5. Principiile i mecanismele de baz ale paginaiei
8.5.1. Paginarea unei memorii liniare
8.5.2. Paginarea unei memorii segmentate
8.5.3. Implementarea paginrii
8.6. Gestiunea memoriei virtuale paginate
8.6.1. Parametrii unei discipline de alocare
8.6.2. Algoritmi de reamplsare cu partiie fix
8.6.3. Algoritmi cu partiie variabil. Reglarea arjei
8.7. Gestiunea unei memorii cu mai multe nivele ierarhice
8.7.1. Memorii ierarhice
8.7.2. Administrarea transferurilor
8.8. Resurse tehnice de administrare a memoriei n procesoarele Intel 203
Separarea conceptual a problemelor de desemnare i de legare, pe de o parte, i a
problemelor de alocare a memoriei, pe de alta, este prezentat schematic mai
jos.

obiecte memorie memoria


nume virtual fizic
desemnare alocarea
legare memoriei

Memoria virtual este mulimea locaiunilor desemnate de adresele generate de


procesor.

Dou metode de organizare:

1) Memoria virtual liniar sau plat. Memoria virtual este o suit de


amplasamente identice, organizate secvenial i desemnate de valori ntregi
consecutive, numite adrese virtuale. Un obiect este reprezentat de una sau mai
multe locaiuni consecutive i este desemnat de adresa virtual a primului
amplasament.

2) Memorie virtual segmentat. Memoria virtual const dintr-o mulime de


segmente. Un segment ocup o suit de amplasamente consecutive i poate
avea o lungime variabil. O adres virtual n acest caz este un cuplu (numrul
segmentului, deplasarea cuvntului n cadrul segmentului), numit 204 adres
segmentat. Un obiect, care poate ocupa segmentul parial sau n ntregime,
8.1.2. Probleme de alocare a memoriei

Alocarea memoriei trebuie s permit unui proces s acceseze un obiect definit n


memoria virtual, aducnd n timp acceptabil acest obiect n memoria principal,
unica care este direct adresabil. Ca rezultat, o disciplin de alocare a memoriei
trebuie s soluioneze urmtoarelor dou probleme:
a) stabilirea corespondenei ntre adresele virtuale i adresele fizice,
b) realizarea gestiunii memoriei fizice (alocarea locaiunilor, transferul
informaiilor).
Dac informaiile aparin mai multor utilizatori apar dou restricii suplimentare:
c) realizarea partajrii informaiilor ntre mai muli utilizatori,
d) asigurarea proteciei reciproce a informaiilor, care aparin unor utilizatori
memoria fizic
distinci.
Exemplul 8.1. Reacoperire (overlay). programuln acest exemplu:

arbore de
reacoperire

configuraia 1

configuraia 2
Fig.8.1. Execuie cu reacoperire


205
decuparea n segmente este realizat explicit de ctre programator, care specific arborele de
reacoperire,
1. Alocare static corespondena virtual-fizic stabilit odat pentru totdeauna

un singur program n memorie


partajarea memoriei ntre mai multe programe

2. Alocare dinamic - corespondena virtual-fizic variabil n timp


Alocarea memoriei fizice
pe zone (de lungime variabil)
pe pagini (de lungime fix)

Scopul unei discipline de alocare dinamic a memoriei este s asigure, c la orice


instan de timp informaia necesar pentru execuia instruciunii curente este
accesibil procesorului imediat, adic se afl n memoria principal. O disciplin
de alocare trebuie s specifice urmtoarele momente:
Cnd va fi ncrcat un obiect n memoria principal?
atunci cnd este necesar (ncrcare la cerere),
nainte de a fi necesar (prencrcare).
Unde va fi ncrcat acest obiect?
dac exist spaiu liber suficient, n care amplasamente (problema amplasrii),
n caz contrar, care obiecte s fie ntoarse n memoria secundar (problema
reamplasrii).

Criterii pentru evaluarea i compararea algoritmilor de alocare a memoriei:


legate de utilizarea memoriei, msurat, de exemplu, prin rata spaiului
neutilizat,
legate de accesarea informaiei, cum ar fi timpul mediu de acces sau rata206
paginilor absente,
8.2.1. Comportamentul ntr-o memorie virtual liniar

Considerm un program, executat ntr-o memorie virtual liniar, care conine toate
instruciunile i datele. Precizri:

Trecerea timpului este reperat prin execuia unor instruciuni consecutive:


executarea unei instruciuni definete o unitate de timp. Acest timp se numete
virtual, deoarece el este asociat unei execuii fictive a programului n ipoteza c
el dispune de toate resursele necesare (memorie i procesor). n cazul partajrii
resurselor, putem considera c programele sunt independente.

Cererea de memorie este evaluat mprind memoria virtual n pagini adiacente de


lungime fix, care conin un numr ntreg np de amplasamente. Accesarea unui
amplasament dintr-un bloc se numete referire a acestui bloc. Blocurile sunt
numerotate cu valori ntregi consecutive, care permit etichetarea referinelor.
Modificnd valoarea lui np, putem examina comportamentul programului la
diferite nivele de detaliere. La nivelul cel mai fin (np=1) putem urmri referinele
instruciune cu instruciune.

Comportamentul programului, la nivelul de detaliere ales, este definit de secvena


numerelor de pagini, care au fost obiectul referinelor succesive n timpul
execuiei.

Aceast secven este numit lan de referine pentru programul considerat i


lungimea aleas a paginii. 207
8.2.1.1. Proprietile lanurilor de referine

Experiena arat, c lanurile de referine posed caracteristici comune, care pot fi


descrise calitativ astfel:

Neuniformitate. Fie ni numrul total de referine la pagina pi. Repartiia valorilor ni


este neuniform: o parte mic a paginilor totalizeaz o parte important a
numrului total de referine. Pentru exemplificare: se constat frecvent c un
numr de peste 75% de referine sunt generate de mai puin de 25% de pagini.

Localizare. Pentru o perioad suficient de mic de observare, repartiia referinelor


prezint o oarecare stabilitate: la un moment de timp dat, referinele observate
ntr-un trecut apropiat sunt o bun estimare a referinelor viitoare.

Aceast ultim proprietate poate fi exprimat ntr-un mod mai precis cu ajutorul unui
model al comportamentului programelor. n acest model, care este doar o
reprezentare simplificat a realitii, derularea unui program este definit ca o
succesiune de faze, separate de tranziii. O faz i este caracterizat printr-o
mulime de pagini Si i un interval de timp (virtual) Ti. Cnd programul intr n
faza i, el rmne aici o perioad de timp Ti i concentreaz referinele sale la
paginile care aparin lui Si. Apoi are loc o tranziie, n cursul creia referinele la
pagini sunt dispersate, naintea intrrii n faza i+1.

Fazele constituie, deci, perioade de comportament stabil i relativ previzibil, n timp


ce tranziiile au un comportament mai greu de stpnit. 208
Noiunea de mulime de lucru (working
set) este utilizat n egal msur
pentru caracterizarea
comportamentului unor programe,
ct i pentru a ncerca s prognozm
acest comportament dup observri.
La orice moment de timp t, mulimea de
lucru a ferestrei T, notat prin
W(t,T), este mulimea paginilor, care
au fost obiectul a unei referine cel
puin n perioada t-T i t (timp
virtual). Proprietatea de localizare
este exprimat prin faptul, c
paginile care aparin la W(t, T) au o
probabilitate mai ridicat, n
comparaie cu alte pagini, s fie
obiectul unei viitoare referine la
momentul de timp t, cu condiia c
lungimea T a ferestrei este aleas
corect.
209
Fig.8.2. Referinele unui program n memoria
8.2.1.2. Comportamentul ntr-o memorie cu capacitate limitat
Un alt mod de caracterizare a comportamentului unui program este de a studia
performanele sale n funcie de volumul de memorie alocat programului. Iniial
programul se afl n memoria secundar; la un moment dat de timp, doar o
submulime a paginilor sale sunt prezente n memoria operativ. Dac referina
urmtoare este fcut unei pagini absente, are loc evenimentul, numit pagin
lips, i pagina absent este ncrcat n memoria principal. Dac nu exist
spaiu disponibil suficient, pagina ncrcat trebuie s ia locul unei pagini deja
prezente - algoritm de reamplasare.
Comportamentul unui program ntr-o memorie cu capacitate limitat pentru un
algoritm de reamplasare dat, este caracterizat de o suit de evenimente pagin
lips. Experiena arat, c sunt observate proprieti comune pentru
majoritatea programelor i relativ independente de algoritmul de reamplasare
utilizat.
Proprietile observate sunt ilustrate de dou curbe, obinute executnd un program
pe memorii de lungime variabil.
Figura 8.3 reprezint intervalul mediu dintre dou absene succesive de pagini.
Aceast curb prezint o figur de forma lui S, partea de lng origine poate fi
Intervalul ntre
aproximat prin axk, cu 1,5<k<2,5 n dependen de program.
dou absene de
pagini

capacitatea memoriei
210
Fig.8.3. Intervalul mediu ntre dou absene de
pagini n funcie de capacitatea memoriei
8.3.2. Partiionarea memoriei
8.3.2.1. Partiionarea fix
ntr-un sistem cu partiionare fix memoria este mprit n mod static ntr-un
numr fix de zone. Capacitatea i limitele acestor zone sunt definite la generarea
sistemului.
Fiecare program poate ocupa doar un singur segment i este asociat n mod constant
unei zone de memorie. Programele sunt pstrate pe disc n cod absolut, iar
adresele prezente n fiecare program sunt adresele fizice, care corespund
adreselorsistemul
de implantarezona
din1zona atribuit
zona 2
memoria
fizic
A

C B
programe

1) Alocarea memoriei

A(1) B(2) C(1)


Unitatea programele
Activit central (zone)
Canalul ncrcare
i salvare
B(2) A(1) C(1) B(2)

2) Cronograma
Fig.8.6.activitilor
Sistem cu partiii fixe
211
Atunci cnd un program este transferat din sau spre zona sa, un alt program dintr-o
alt zon poate fi executat; bineneles este necesar un procesor de intrare-
8.3.2.2. Partiionarea variabil

ntr-un sistem cu partiionare variabil mprirea n zone nu este fixat odat pentru
totdeauna, ci este redefinit la terminarea execuiei unui program, spaiul de
memorie eliberat fiind repartizat altor programe. Drept consecin, ncrcarea
unui program (fixarea adreselor) poate fi fcut n ultimul moment, doar atunci
cnd spaiul respectiv i este atribuit.

Un program, odat ncrcat n memorie, rmne aici pn la terminarea execuiei


sale: nu este posibil, deci, reamplasarea dinamic. Multiprogramarea permite
meninerea unitii centrale n stare activ pentru perioada ncrcrii
programelor sau operaiilor de intrare-ieire. Acest mod de funcionare este
adaptat tratrii pe loturi pe un calculator, care nu dispune de un mecanism de
reamplasare dinamic.

212
8.4.1. Mecanisme de reamplasare dinamic

Alocarea dinamic a memoriei, divizate n zone de capaciti oarecare cere


utilizarea unor mecanisme de reamplasare dinamic a acestor zone:

Registre de baz. Amplasarea n memoria fizic a unui singur segment este definit
de o pereche de registre, numite registrul de baz i registrul limit. Registrul
de baz RB conine adresa fizic a originii segmentului; registrul limit RL
joac rol de protecie, interzicnd accesul accidental la locaiuni n afara
segmentului. Pentru o adres virtual (RB, RL, d), la fiecare accesare este
efectuat urmtorul calcul al adresei:

a := RB+d;
if a RL then
adr.fiz.:= a
else
<eroare> - deviere tratat de sistem
endif

213
Segmentare.
Segmentarea poate fi considerat o extensie a adresrii cu ajutorul registrelor de
baz, care evit problemele realocrii acestor registre, atunci cnd este
necesar schimbarea segmentului. Fiecrui segment i este asociat un
descriptor, care conine printre altele, adresa sa de origine i capacitatea;
descriptorii sunt aranjai ntr-un tabel, desemnat de un registru special. Calculul
adresei fizice corespunztoare adresei segmentate (s, d) este urmtorul:

desc := tab_desc[s];
if d < desc.capacitate then
adr.fiz.:= desc.orig+d
else
<eroare> - deviere tratat de sistem
endif

Orice accesare a memoriei cere o accesare suplimentar pentru citirea descriptorului.


Pentru sporirea eficienei acceselor este folosit un dispozitiv de accelerare,
constituit dintr-o memorie asociativ de capacitate mic (de obicei, cu 8 sau 16
intrri), n care sunt pstrai descriptorii segmentelor la care au fost fcute cele
mai recente referine, numerele acestor segmente servesc drept chei de
referin. La o accesare a memoriei, descriptorul segmentului este cutat mai
nti n memoria asociativ, tabelul segmentelor fiind consultat doar n cazul
unui eec.

Memoria asociativ funcioneaz ca o memorie cache pentru descriptori, proprietatea


de localizare asigurnd o rat nalt a succeselor. 214
Mecanismele de reamplasare dinamic, care vor fi descrise n continuare, permit
amplasarea unui segment ntr-o zon oarecare a memoriei principale i
deplasarea lui la un pre minim de gestiune (actualizarea descriptorului sau a
registrelor baz-limit). Segmentele pot fi, deci, utilizate ca uniti de alocare a
memoriei principale, care, la rndul lor, pot fi comandate de zone de capacitate
variabil. Prezentm mai jos metodele principale de alocare i implementarea lor
n cadrul unui sistem de operare.

8.4.2. Algoritmi de alocare

Specificarea unui algoritm de alocare dinamic a segmentelor trebuie s rspund la


ntrebrile generale, puse n 8.1.3. ncrcarea se face de obicei la cerere din
cauza costului ridicat al spaiului i timpilor de execuie, datorat unei
prencrcri eronate. Rmne de rezolvat problema amplasrii (alegerii unei
zone libere) i cea a reamplasrii (alegerea zonelor, care vor fi eliberate, dac
nici una din zonele libere nu convin).

8.4.2.1. Amplasarea i reamplasarea segmentelor

Algoritmii sunt clasificai conform modului de reprezentare a zonelor libere. Cel mai
frecvent sunt utilizate urmtoarele trei metode:
nlnuirea zonelor libere ntr-o list,
Divizarea blocurilor (buddy systems),
Zone de capaciti predefinite.

215
Zone libere nlnuite

Algoritmii cei mai frecveni utilizeaz nlnuirea.


Fiecrei zone libere i este asociat un descriptor,
care conine adresa de origine, capacitatea i
legturile de nlnuire. Acest descriptor este
plasat chiar n zona propriu-zis (fig.8.7).

Fie c este necesar s se gseasc o zon de


capacitatea t. Va fi consultat lista zonelor libere;
dac notm prin z zona curent, criteriile posibile
de alegere pot fi: capacitate legtur
Prima zon liber (first fit). Va fi aleas prima
zon z care verific proprietate capacitate(z) t.
n acest caz se urmrete scopul accelerrii cutrii.
Fig.8.7. Reprezentarea zonelor libere
Lista este circular i cutarea pleac de la ultima
nlnuite
zon alocat, pentru a se evita concentrarea de zone foarte mici n topul listei.

Ajustarea cea mai bun (best fit). Se va alege zona z, care va minimiza valoarea
reziduului (zona care rmne liber dup alocare); altfel, vom alege z pentru
care capacitate(z) t este minim, ceea ce impune parcurgerea ntregii liste sau
ordonarea listei conform capacitilor zonelor. Scopul urmrit n acest caz este
ameliorarea utilizrii globale a memoriei, existnd pericolul apariiei unor zone
mici, puin utilizabile.
216 t
Reziduul cel mai mare (worst fit). Va fi aleas zona z pentru care capacitate(z)
este maxim. Se ncearc n acest mod s se lupte cu problemele metodei
n toate cazurile, un bloc de capacitatea t este amplasat n zona z; reziduul,
dac exist, nlocuiete zona iniial i descriptorii sunt actualizai. n
scopul diminurii numrului total de zone adesea este fixat o limit
inferioar a capacitii reziduului.

Atunci cnd o zon este eliberat, ea este reinserat n list i fuzionat,


dac exist spaiu, cu zona sau zonele vecine. Aceast fuzionare este
facilitat, dac zonele sunt dublu nlnuite i ordonate n ordinea de
cretere a adreselor.

Cercetrile numeroase, efectuate asupra acestor algoritmi arat, c alegerea


ntre first fit i best fit depinde de caracteristicile cererii, first fit
fiind mai rapid, dac dispersia capacitilor cerute este mare, rata de
utilizare a memoriei fiind aproximativ aceeai.

Msurrile fcute pentru sistemele cu timp partajat au artat, c o majoritate


foarte mare de cereri, sunt legate de un numr mic de capaciti, n
general, sczute. Aceast remarc explic interesul pentru doi algoritmi,
prezentai mai departe

217
Alocare prin divizare (buddy systems)

n metoda alocrii prin divizare capacitile zonelor sunt cuantificate: ele sunt
exprimate n multiplii unei oarecare uniti de alocare i capacitile permise
sunt definite de o relaie de recuren. De obicei sunt utilizate dou sisteme:
sistemul binar (1, 2, 4, 8,...), Si+1 = 2Si,
Fibonacci (1, 2, 3, 5, 13,...) Si+1 = Si+ Si-1.

Atunci cnd lipsesc blocuri de capacitatea Si,


B1 B2 B3 B4
un bloc de capacitatea Si+1 este divizat,
conform relaiei de recuren. De exemplu,
n sistemul binar divizarea unui bloc de
capacitatea 8 creeaz dou blocuri de capacitate 4; B1 B3 B4
n caz general, divizarea unui bloc de capacitatea (dup eliberarea lui B2
Si+1 creeaz dou blocuri de capacitatea Si.
n sistemul Fibonacci, divizarea unui bloc de B1 B4
capacitatea Si+1 creeaz un bloc de capacitate (dup eliberarea lui B3
Si i unul Si-1. Algoritmul este aplicat n mod recursiv,
dac nu exist un bloc liber de capacitatea Si+1.
Fig.8.8. Alocarea memoriei prin divizarea binar a
blocurilora dou blocuri
Putem considera, c orice bloc de capacitatea s>1 este concatenarea
n care el poate fi divizat; aceste blocuri sunt numite companioni (n englez
buddies). Adresele de origine a blocurilor sunt definite din momentul n care
este cunoscut amplasarea zonei libere iniiale (fig.8.8).
218
Rezerve de blocuri de capacitate predefinit

Atunci cnd caracteristicile cererilor sunt bine cunoscute i marea majoritate a


cererilor vizeaz o mulime de capacitate bine definit, este recomandat un
algoritm ad-hoc.

De exemplu, msurrile efectuate pentru sistemul IBM VM/370 au artat c


aproximativ 95% din cereri aparin unei mulimi de 10 lungimi particulare.
Alocatorul utilizeaz 10 zone, fiecare avnd una din lungimi, evitndu-se astfel
parcurgerea nlnuirilor pentru majoritatea cazurilor.

Un algoritm first fit trateaz cazul cererilor diferite de cele 10 cereri tip. Memoria
este periodic reorganizat pentru realimentarea zonelor.

Pentru orice algoritm, mai devreme sau mai trziu spaiul liber poate deveni
insuficient. Pot fi recomandate mai multe remedii:

De ex. se va reorganiza n totalitate memoria prin defragmentare, deplasnd


blocurile ocupate astfel ca ele s devin adiacente. Spaiul liber obinut devine
de asemenea contiguu. Deplasarea informaiilor n memorie este o operaie de
lung durat, costul fiind proporional volumului de informaii deplasat.

Dac unele din blocurile alocate au devenit inaccesibile, acestea vor fi recuperate
prin tehnici speciale de nlturare a frmiturilor.

219
8.4.2.2. Utilizarea algoritmilor de alocare

ntr-un sistem de operare algoritmii liber liber


liber
de alocare a memoriei sunt utilizai
n dou maniere: Liber
Liber
De ctre sistemul de operare la liber
alocarea memoriei pentru lucrri, Baz Lungime
atunci cnd sunt create procese
sau cnd sunt formate zone-tampon Lucrri
Lucrri
de intrare-ieire, etc. Sistem Sistem
rezident rezident
De ctre utilizatori: sistemul puneBaz Limit
la dispoziie, sub forma unui apel
dup terminarea T2
supervizor, primitivele cerere memorie
i eliberare memorie. Aceste primitive Fig.8.9. Alocarea memoriei
sunt utilizate, de exemplu, de compilatoare lucrrilor
pentru gestiunea variabilelor dinamice.

ntr-un sistem cu partiionare variabil i reamplasare dinamic, o zon de memorie


este alocat de ctre sistem pentru a duce evidena fiecrei lucrri. n
conformitate cu modul de adresare utilizat, un cuplu de registre baz-limit sau
o intrare a tabelului segmentelor sunt asociate lucrrii.

n cazul registrelor, valoarea lor va face parte din contextul lucrrii i servete la
rencrcarea registrelor baz-limit atunci cnd lucrarea este activat (fig.8.9).
220
La unele calculatoare (de exemplu, DEC PDP-10), zonele cu programe (care nu pot fi
modificate) i cu date erau separate pentru fiecare lucrare cu ajutorul unui
registru de baz distinct pentru fiecare zon. Aceasta permitea s fie redus
lungimea zonelor alocate i cantitatea informaiilor transferate (deoarece zonele
cu programe nu trebuie salvate), i d posibilitatea partajrii programelor ntre
mai multe lucrri.

Unele sisteme (de exemplu, CDC, Univac) la terminarea fiecrei lucrri efectuau o
defragmentare a memoriei pentru a pstra un spaiu liber unic; imaginile
registrelor baz-limit sau tabelul segmentelor trebuie rennoite pentru lucrrile
deplasate (fig.8.10). liber

liber

Liber

Lucrri

Sistem Sistem
rezident rezident
Baz Limit

dup terminarea T2

Fig.8.10. Alocarea memoriei lucrrilor cu


defragmentare
221
8.4.2.3. Concluzii

Concluzionnd aceast scurt trecere n revist a metodelor de alocare a


memoriei pe zone insistm asupra faptului, c nu exist metode optimale,
oricare ar fi criteriul de optimalitate ales (utilizarea memoriei, timpi de
execuie, etc.), pentru toate situaiile i este necesar s se cunoasc,
mcar n linii generale, caracteristicile cererilor naintea alegerii unui
algoritm.

Limitele metodei alocrii pe zone rezult din restricia contiguitii zonelor


alocate. Drept rezultat, amplasamentele libere nu sunt resurse banalizate
deoarece, un segment logic nu poate fi ncrcat n dou zone libere, care
nu sunt vecine chiar dac spaiul total este suficient. Reorganizarea
memoriei rmne o operaie prea costisitoare pentru a putea fi practicat
frecvent.

Ideea, care a condus la introducerea paginaiei, este de a banaliza resursa


memorie, alocnd-o prin uniti de lungime fix i nu obligator contigue.
Rmne doar s rezolvm problema adresrii (este necesar echivalentul
registrului de baz pentru fiecare unitate de alocare) i s gsim un
compromis n alegerea lungimii acestei uniti.

222
8.5. Principiile i mecanismele de baz ale paginaiei
O memorie virtual paginat este divizat n blocuri de lungime fix, sau pagini, care
servesc drept uniti de alocare. Memoria fizic la fel este divizat n blocuri de
aceeai lungime, numite pagini de memorie fizic. Vom prezenta mai jos
mecanismele de paginaie a unei memorii virtuale liniare i a unei memorii
virtuale segmentate.

8.5.1. Paginarea unei memorii liniare


8.5.1.1. Paginare simpl npf
Funcie de
paginare
Figura 8.11 reprezint schema general a unei
memorii virtuale paginate. Rolul dreptunghiului pagin lips
marcat funcie de paginare este de a stabili o
coresponden ntre adresele paginilor memoriei
virtuale npv i adresele paginilor memoriei fizice
npv
npf, astfel nct o pagin virtual s fie pus
Memorie virtual Memorie fizic
ntr-o pagin fizic oarecare. Paginile fizice devin
resurse banalizate gestiunea crora este mult mai
simpl dect gestiunea zonelor de lungime variabil.Fig.8.11. Memorie virtual paginat

Fiind dat numrul unei pagini virtuale npv, funcia


de paginare permite s se determine, dac aceast pagin este deja n memoria
fizic i, dac da, s se gseasc numrul paginii fizice npf, care o conine.
Pentru sporirea eficienei aceast funcie poate fi realizat printr-un mecanism
hardware.
223
1) Memorie asociativ. O memorie asociativ, care are cte o intrare pentru fiecare
pagin fizic, conine pentru fiecare intrare numrul paginii virtuale, care este
amplasat n pagina fizic respectiv. Acest principiu a fost utilizat n primul
calculator cu paginaie (Atlas), care avea 32 pagini fizice (fig.8.12, a). Preul
foarte mare al acestei metode a defavorizat extinderea principiului pentru
memorii de capacitate mai mare. Totui, ideea utilizrii unor mici memorii
asociative a fost preluat n calitate de mecanism de accelerare.
adres virtual adres virtual
2) Registre topografice. O memorie npv npv
topografic este un ansamblu de
bit de prezen
registre, indexate cu numrul
prezent
paginii. Fiecare registru conine
un indicator de prezen (1 bit)
i un numr de pagin fizic,
care este semnificativ doar dac npf dep
npf npv npf npv npf
bitul este pus n 1 (fig.8.12, b). adres fizic
adres fizic
Calculatorul XDS Sigma 7
Npf-1
(cunoscut de asemenea sub Npv-1
denumirea CII 10070) ilustreaz pagin lips (n pagin lips
aceast tehnic cu p=8 i l=9 caz de eec) (dac prezent=0)
(256 pagini de 512 cuvinte). (a) memorie asociativ (b) registre topografice
Memoria topografic a mbuntit
cu doar 10% timpul de acces la Fig.8.12. Memorie virtual paginat
memorie, dac nu exist pagini lips.
224
1) Tabele de pagini n memorie. Necesitatea unei memorii virtuale de capacitate
mare (cu 24 sau chiar 32 bii de adres) face memoria topografic prea scump.
Realizarea cea mai curent pentru funcia de paginare utilizeaz un tabel de
pagini n memorie, indexat de un numr de pagin virtual (fig.8.13).
Intrarea cu numrul npv conine adres virtual
urmtoarele informaii: npv
un numr de pagin fizic npf
memorie asociativ
un indicator de prezen prezent (1 bit) Registrul baz al tabelului
succes
un indicator de modificare modif (1 bit) npv npf
modul autorizat de acces (protecia) prot.
eec
prezent
n timpul unei accesri a memoriei
corespondena dintre adresa virtual
i cea fizic este stabilit astfel: prot npf
prezent=1
npf
npv
adr.virt := (npv, dep); adres fizic
prezent=0 Tabel de pagini
if prezent[npv]=1 then prez. n mem.
adr.fiz := (npf[npv], dep) pagin absent
else pagina nu este n memorie Fig.8.13. Organizarea unui tabel de pagini
<tratarea evenimentului pagin lips>
endif

Dac pagina este prezent:


modif[np] indic dac pagina a fost modificat n timpul ct s-a aflat n memorie;
aceast informaie este utilizat de algoritmii de reamplasare,
prot[np] indic drepturile de acces la pagin; aceast informaie este utilizat225
de
mecanismele de protecie: o accesare neautorizat provoac o deviere de tip
8.5.1.2. Paginare la dou niveluri
Tendina sporirii capacitii memoriei virtuale aduce la apariia problemei creterii
volumului tabelelor de pagini, pstrate n memoria fizic. Paginarea n dou
niveluri vizeaz soluionarea acestei probleme.
n aceast schem,
adres virtual nhip
memoria virtual este npv
memorie asociativ
divizat n hiperpagini,
care la rndul lor sunt Reg.baz
mprite n pagini. O
nhip npv
adres virtual este de eroare de
Tabel de adresare
forma (nhip, npv, dep). hiperpagini
Numrul nhip al hiperpaginii
prezent
permite accesul la un tabel
de hiperpagini, in care fiecare Tabel de hiperpagini npf
intrare conine un pointer la adres fizic
(prezent=0)
tabelul de pagini ale hiperpaginii, pagin lips
care este limitat doar la paginile Tabelul paginilor
hiperpaginii nhip
efectiv utilizate. Un cmp
Fig.8.14. Paginaie la dou nivele
lungime permite controlul
acestei restricii.
Tabelele de pagini sunt utilizate ca i n paginaia simpl (fig.8.14). O memorie
asociativ, n care sunt pstrate cele mai recente triplete (nhip, npv, npf)
accelereaz consultarea.

Notm c memoria virtual rmne liniar: ultimul amplasament al hiperpaginii


226 i-1
are drept succesor primul amplasament al hiperpaginii i. Din acest motiv, prin
abuz de limbaj, aceast schem este adesea numit segmentare.
Mecanismul de deviere pagin lips

n afara traducerii propriu-zise a adreselor (corespondena npv npf), mecanismul de


accesare a unei memorii paginate realizeaz urmtoarele operaii:
actualizarea bitului de scriere i a bitului de utilizare, dac acetia exist,
detectarea lipsei paginii necesare (prezent[npv] = 0), care provoac o deviere.

Programul de tratare a devierii pagin lips trebuie:


a) s gseasc n memoria secundar pagina lips,
b) s gseasc n memoria principal o pagin fizic liber; dac aceasta nu exist,
va trebui
eliberat una, eliminnd din memoria principal n cea secundar pagina
virtual pe care o
conine,
c) s ncarce pagina virtual necesar n pagina fizic.

Etapa a) impune s avem pentru fiecare memorie virtual o descriere a implantrii.


Forma cea mai simpl a descrierii este un tabel care indic adresa n memoria
secundar a fiecrei pagini virtuale. O memorie segmentat conine un astfel de
tabel pentru fiecare segment.

O alt posibilitate de descriere combin memoria virtual i fiierele: unei zone a


memoriei virtuale i se asociaz coninutul unuia sau a mai multor fiiere.
Localizarea unei pagini virtuale n memoria secundar este, n acest caz
determinat consultnd tabelul de implantare a fiierului.
227
Etapa b) implementeaz un algoritm de reamplasare. Ea implic pstrarea unui tabel
Partajarea i protecia informaiei

Partajarea informaiilor ntre mai multe memorii virtuale genereaz apariia


urmtoarelor trei probleme:
notarea: cum vor fi adresate ntr-un mod uniform informaiile partajate,
partajarea fizic: cum s se garanteze c informaiile partajate exist ntr-un singur
exemplar,
protecia: cum s se garanteze respectarea regulilor de acces la informaiile
partajate.

1) Notarea informaiilor partajate


Vom face deosebire ntre o memorie virtual liniar i una segmentat.
Segmentarea pare o soluie simpl pentru problema partajrii: segmentul
constituie unitatea de partajare, numele segmentului partajat ar putea fi el
nsi partajat sau ales independent pentru fiecare proces.

n cazul unei memorii virtuale liniare numele unui obiect este adresa sa virtual.
Pot fi dou cazuri distincte, n dependen de prezena sau lipsa unui
mecanism de reamplasare n memoria virtual.
Dac da (cazul unei memorii virtuale cu registre de baz), un obiect
partajat poate fi amplasat la adrese diferite pentru fiecare memorie
virtual, deoarece registrele de baz sunt proprii fiecrei memorii.
Dac nu (cazul cel mai frecvent), ncrcarea unui obiect partajat fixeaz n
mod definitiv amplasarea sa, care trebuie s fie aceeai n toate
memoriile virtuale. Este necesar, deci, s fie rezervate n fiecare memorie
228
virtual adrese fixe, definite prin convenie pentru fiecare obiect partajat.
Acesta este cazul componentelor sistemului de operare, partajate de
Protecia informaiilor partajate

Dac unitatea de partajare este pagina, unei pagini partajate i pot fi atribuite
drepturi de acces distincte pentru fiecare memorie virtual n care aceasta
figureaz. Aceste drepturi sunt specificate la intrarea respectiv a fiecrui
tabel de pagini.

Dac unitatea de partajare este segmentul, protecia selectiv este aplicat


ntregului segment. Drepturile de accesare a unui segment de ctre un proces
figureaz n tabelul de segmente ale procesului.

Dac sunt specificate drepturi individuale de accesare a paginilor segmentului,


acestea sunt prezente n tabelul de pagini partajate de ctre procesele
utilizatoare i sunt, deci, partajate de ctre toate aceste procese. Ele trebuie
s fie n acest caz compatibile cu drepturile globale, asociate segmentului.

Cazul hiperpaginilor este identic cazului segmentelor.

229
Gestiunea memoriei virtuale paginate
Parametrii unei discipline de alocare

Disciplinele de alocare a unei memorii paginate pot fi clasificate n conformitate cu


mai multe criterii. Vom presupune c sistemul este multiprogramat, fiecare
dintre procese posednd memorie virtual proprie.

1) Partiie fix sau variabil


n cazul disciplinei de alocare cu partiie fix un numr fix de pagini fizice sunt atribuite
fiecrui proces; notm c acest numr este constant doar pentru perioadele n care
numrul proceselor multiprogramate este el nsui constant. Pentru o disciplin cu
partiie variabil, numrul de pagini fizice, atribuite fiecrui proces variaz n timp.
Paginile fizice fiind banalizate, anume numrul lor (i nu identitatea) este un parametru
semnificativ.

2) Paginare la cerere sau prencrcare


Paginaia la cerere a fost definit n 8.2.1.2: o pagin este ncrcat n memorie drept
rezultat a unei referine, care conduce la evenimentul pagin lips. Dac o pagin este
ncrcat n avans, nainte de orice referire la o informaie, care se conine aici, se
spune c are loc o prencrcare.

3) Reacoperire local sau global


Dac o pagin virtual este ncrcat ntr-o pagin fizic ocupat are loc o nlocuire a paginii
(pagina nlocuit este numit victima). Algoritmul de reacoperire este zis local sau
global conform principiului de alegere a victimei dintre paginile alocate procesului care
provoac nlocuirea sau din mulimea tuturor paginilor, prezente n memorie. 230
Criterii pentru compararea algoritmilor de reacoperire a paginilor

1) Pagini curate sau murdare

Este mai puin costisitor s fie reamplasat o pagin, care nu a fost modificat n
toat perioada ncrcrii sale (pagin curat), dect una care a suferit
modificri (pagin murdar). O pagin curat posed o copie n memoria
secundar i nu este necesar s fie salvat. Indicatorul modif[p], ntreinut n
mod automat, permite aplicarea acestui criteriu.

2) Pagini partajate

Este preferabil ca o pagin, utilizat de un singur utilizator s fie nlocuit cu o


pagin partajat ntre mai multe procese.

3) Pagini cu statut special

n unele cazuri este de dorit s se acorde temporar unei pagini un statut special,
care ar proteja-o de nlocuire. Acesta este cazul paginilor utilizate ca bufere
de intrare-ieire pe durata transferului.

231
Descrierea algoritmilor de reamplasare

Doi algoritmi, care descriu dou cazuri extreme: algoritmul optimal, care
presupune cunoaterea total a viitorului comportament al programului i
algoritmul neutru, care nu utilizeaz nici un fel de informaii iniiale.

Algoritmul optimal (MIN)

Pentru un lan de referine dat poate fi artat, c algoritmul urmtor minimizeaz


numrul total de pagini lips: atunci cnd o pagin este lips drept victim va
fi aleas o pagin, care nu va fi obiectul unei referine ulterioare sau, dac nu
este posibil, pagina care va fi obiectul celei mai trzii referine. Acest algoritm
presupune cunoaterea mulimii, care formeaz lanul de referine, din care
motiv este irealizabil n timp real. Permite evaluarea la limit a algoritmilor
(cazul cel mai favorabil, strategia optimist).

2) Alegere aleatoare

Victima este aleas la ntmplare (repartiie uniform) dintre mulimea paginilor,


prezente n memorie. Acest algoritm nu ine cont de comportamentul observat
sau previzibil al programului (cazul cel mai puin favorabil, strategia
pesimist).

232
Descrierea algoritmilor de reamplasare

Ali doi algoritmi situai undeva la mijloc:

3) Ordine cronologic de ncrcare (FIFO - PSPS)

Victim este pagina care a fost ncrcat cu cel mai mult timp n urm. Principalul
avantaj este simplicitatea realizrii: este suficient s se pstreze ntr-un fir
prim sosit prim servit numerele paginilor fizice n care sunt ncrcate
paginile logice succesive.

4) Ordine cronologic de utilizare (LRU sau Least recently Used)

Acest algoritm ncearc s aproximeze algoritmul optimal, utiliznd proprietatea


de localizare. Principiul folosit poate fi explicat n felul urmtor: deoarece
paginile utilizate recent posed o probabilitate mai mare de a fi utilizate ntr-
un viitor apropiat, o pagin neutilizat timp ndelungat are o probabilitate
mic de a fi folosit. Reieind din acest considerent, algoritmul alege drept
victim pagina, care a fost obiectul unei referiri cu cel mai mult timp n urm.

Realizarea algoritmului impune ordonarea paginilor fizice conform timpului ultimei referiri a
paginii pe care le conin. Pentru aceasta, fiecrei pagini fizice i se va asocia o
informaie, care va fi pus la zi la fiecare referire. Aceasta poate fi timpul cnd a avut
loc referirea. Mai puin costisitor poate fi utlizarea unui contor al referirilor. Necesitatea
de a pune periodic contoarele n zero (atunci cnd acestea ating capacitatea maxim) 233 a
condus la faptul c aceast soluie a fost utilizat doar pentru instalaii experimentale.
Algoritmul celei de-a doua anse sau FINUFO (First In Not Used, First O

Este o aproximare (foarte brutal) a LRU.


Fiecrei pagini fizice este asociat un bit de utilizare U, pus n 1 atunci cnd are loc
o referire a paginii logice pe care o conine.

Paginile fizice sunt ordonate ntr-un fir circular i un pointer ptr indic ultima
pagin fizic ncrcat. Algoritmul poate fi descris dup cum urmeaz:
ptr := urmtorul(ptr);
while U[ptr] 0 do
U[ptr] = 0;
ptr := urmtorul(ptr);
endwhile;
victima := ptr;

Pointerul se deplaseaz pn la prima pagin fizic cu bitul U zero, iar bitul U egal
cu 1 al paginilor ntlnite n drum este pus n 0.

Acest algoritm mai este numit algoritmul ceasului (Clock), deplasarea


pointerului fiind asemnat cu cea a acelor de ceasornic.

Punerea n 1 a bitului U atunci cnd are loc o referire poate fi realizat cu ajutorul
unui mecanism hardware sau software.

234
Algoritmi cu partiie variabil. Reglarea arjei

Rezultatele prezentate n continuare arat, c pare a fi preferabil s se ncerce


alocarea unui volum de memorie bine adaptat comportamentului fiecrui
program.

Aceasta poate fi realizat n dou moduri:


utiliznd un algoritm cu partiie variabil,
utiliznd un algoritm de reamplasare global, ceea ce ar nsemna s aplicm
mulimii programelor prezente unul dintre algoritmii studiai pentru
partiiile fixe.

n ambele cazuri trebuie s se defineasc politica, care va fi aplicat n caz de


suprasolicitare, adic atunci cnd cererea de memorie devine excesiv i
conduce la o degradare a performanelor. Anume din aceast cauz vom
ncepe cu studierea comportamentului unui sistem n condiii extreme.
Vom prezenta n continuare algoritmii cu partiie variabil bazai pe
msurri locale a comportamentului programelor, apoi algoritmii de
reglare, care utilizeaz criterii globale.

235
Instabilitatea i thrashing-ul unui sistem cu multiprogramare

n primele sisteme cu memorie virtual paginat s-a constatat, pornind de la o


anumit arj (msurat de exemplu, prin numrul de utilizatori interactivi), o
degradare brutal a performanelor: thrashing - cderea brusc a ratei de
utilizare a procesorului i o cretere puternic a schimbului de pagini. Timpul de
rspuns atinge valori inacceptabile.

Explicaie. Considerm un sistem cu memorie paginat, multiprogramat pentru o


mulime de procese fiecare dintre care corespunde unui utilizator interactiv.
Memoria fizic este partajat n mod echitabil ntre procese cu comportament n
medie identic. Aceast partajare este realizat de un algoritm cu reamplasare
global. ncepnd cu un anumit numr de procese numrul mediu de pagini fizice
alocate fiecrui proces cade pn sub nivelul corespunztor duratei de via.

Probabilitatea global a evenimentului pagin lips, invers proporional duratei de


via, crete extrem de rapid odat cu creterea numrului de procese.
Dac caracteristicile resurselor tehnice i ale arjei sunt date, gradul de
multiprogramare al sistemului devine un parametru determinant. Vom examina
n cele ce urmeaz dou posibiliti de ajustare dinamic a acestui parametru
pentru evitarea thrashing-ului sistemului:
implicit, asigurnd fiecrui proces prezent n memorie un numr anume de
pagini fizice, determinat de comportamentul observat al procesului: acesta
este obiectul algoritmilor de reamplasare cu partiii variabile,
explicit, intervenind direct asupra gradului de multiprogramare pornind de la
observaii globale asupra comportamentului sistemului: aceasta este236
reglarea arjei.
8.6.3.3. Reglarea arjei i echilibrarea unei configuraii

Reglarea global a arjei presupune modificarea gradului de multiprogramare pentru


meninerea performanelor sistemului n limite acceptabile. La arj joas sau
moderat multiprogramarea sporete rata de utilizare a procesorului folosind
timpul mort, datorat unor blocaje sau ateptri de pagini; la arj nalt invers.

Acest comportament sugereaz existena unei valori optimale a gradului de


multiprogramare, care maximizeaz rata utilizrii procesorului pentru o
configuraie dat a resurselor tehnice i o arj concret, ceea ce este confirmat
i de practic. Un algoritm ideal de reglare a arjei trebuie s menin gradul de
multiprogramare n vecintatea acestei valori optimale.

Au fost propuse dou formulri echivalente pentru criteriul de optimalitate:


regula celor 50%: rata de utilizare a canalului de paginaie este aproape de 0.5,
regula genunchiului: valoarea medie a duratei globale de via este cea care
corespunde
genunchiului curbei duratei de via (v.8.2.1.2).

n practic, numrul de evenimente pagin lips este periodic msurat i aceast


valoare este comparat cu valori stabilite empiric n rezultatul unor studieri ale
sistemului. Atunci cnd valoarea maxim admisibil este depit, gradul de
multiprogramare este diminuat cu 1: procesul cu cea mai mic prioritate sau cel
mai devreme ncrcat este nevoit s elibereze paginile fizice ocupate. Pentru
evitarea suprareglajelor se propune pstrarea unui anumit numr de pagini
fizice libere sau introducerea unei ntrzieri artificiale, determinate 237
experimental.
Resurse tehnice de administrare a memoriei n procesoarele Intel

Memoria virtual d posibilitatea s considerm lungimea maxim


admisibil a unui program dependent doar de capacitatea
memoriei secundare.
Flexibilitatea introdus de memoria virtual este convenabil:
productorilor de memorii - pot propune dispozitive, care difer doar prin
configurarea memoriei i nivelul productivitii,
programatorilor - pot pune n arja sistemului de operare manipularea i
pstrarea componentelor programelor evitnd scrierea programelor cu structuri
sofisticate,
utilizatorilor finali - pot utiliza i elabora aplicaii mari, fr a-i face probleme,
legate de capacitatea memoriei centrale.
Memoria virtual este realizat de SO, adesea o parte a funciilor
acestuia fiind realizate hard. Procesoarele Intel 80386, 80486
i Pentium din punct de vedere al administrrii memoriei
posed mecanisme hard de acelai tip, din care cauz mai
departe se va utiliza termenul procesorul i386; informaia
din paragraful dat este n egal msur valabil pentru toate
procesoarele Intel indicate mai sus.
238
Despre procesoarele i386
Procesorul i386 are dou moduri de lucru:
real - procesor 8086 accelerat, avnd un set de instruciuni de baz mai extins,
protejat - poate utiliza toate mecanismele de organizare a memoriei pe 32 bii, inclusiv
mecanismele de susinere a memoriei virtuale i mecanismele de comutare a lucrrilor. n
afar de aceasta, n modul protejat pentru fiecare lucrare procesorul i386 poate emula
procesoarele 8086 i 286, care se vor numi n acest caz procesoare virtuale. n aa fel, n
regimul multitasking modul protejat procesorul i386 lucreaz ca un set de procesoare
virtuale cu memorie comun.

Regimul procesorului virtual i86, care este numit V86, susine organizarea
paginat a memoriei i multitaskingul. Din aceast cauz lucrrile,
care sunt executate n modul V86 folosesc aceleai mijloace de
protecie reciproc a lucrrilor i a SO de lucrrile utilizatorului, ca i
lucrrile, executate n mod protejat i386.

Comutarea procesorului i386 din modul real n protejat i invers are loc
prin simpla executare a instruciunii MOV, care modific bitul de mod n
unul din registrele de control ale procesorului.
Comutarea n modul V86 are loc analogic modificnd valoarea unui
indicator anume ntr-un alt registru. 239
Despre procesoarele i386
Productivitate suficient pentru elaborarea i implementarea unor sisteme de calcul
sofisticate. n aceste sisteme problema principal const n depistarea i
eliminarea n timp minim a erorilor posibile, iar n cel mai pesimist caz s se
stabileasc modalitatea de minimizare a consecinelor acestor erori. Sistemele
de acest gen pot fi depanate n timp mai scurt, iar fiabilitatea poate fi mai mare,
atunci cnd sunt produse n serie i procesorul impus s controleze fiecare
instruciune dac respect criteriului de protecie.
Criteriul de protecie utilizat depinde de aplicaia concret. Sistemele mai simple, de
timp real, de exemplu, n care toate momentele pot fi cercetate la etapa de
elaborare i implementare, au un comportament relativ corect i fr utilizarea
mecanismelor speciale de protecie. ns n condiii de incertitudine, n lipsa
unor informaii preliminare, datorate contextului aleator al domeniului, utilizarea
mecanismelor speciale de protecie este obligatorie.
Procesoarele i386 permit soluionarea acestor probleme prin:
Partiionarea spaiilor de adrese ale aplicaiilor,
Utilizarea unor nivele de prioriti (inele de protecie, de la 0 la 3),
Utilizarea unor instruciuni privilegiate,
Clasificarea segmentelor pe tipuri (de exemplu, segmente de cod, segmente de
date),
Folosirea noiunii de drepturi de acces la segmente i pagini (RO, EO),
Controlul graniei unui segment. 240
Pentru pstrarea productivitii maxime toate controalele proteciei sunt ndeplinite
Mijloacele de susinere a segmentrii memoriei
Spaiul fizic de adrese a procesorului i386 este de 4 Go (magistrala de adrese pe 32
de bii).
Memoria fizic este liniar cu adrese de la 00000000 pn la FFFFFFFF n cod
hexazecimal.
Adresa virtual, utilizat n program este reprezentat de perechea (nr. seg., depl).
Deplasarea este dat de cmpul respectiv al instruciunii, iar numrul
segmentului n unul din cele 6 registre de segment ale procesorului (CS, SS,
DS, ES, FS i GS), fiecare fiind de 16 bii.
Mijloacele de segmentare formeaz nivelul superior al dispozitivului de administrare
a memoriei virtuale, iar dispozitivele de organizare a paginaiei nivelul inferior.
Mijloacele de paginaie pot fi active sau dezactivate i n dependen de aceasta
se modific sensul transformrii adresei virtuale, executate de mijloacele de
segmentaie.
Memoria virtual segmentat este recomandat pentru sisteme nu prea mari pe 16
bii n care capacitatea segmentului nu este mai mare de 64 Ko. Pot fi utilizate
segmente de 4 Go, ceea ce d posibilitatea organizrii paginrii acestora.
Productivitatea nalt n administrarea memoriei virtuale este asigurat de
folosirea unei memorii cash interne pentru pstrarea informaiilor virtual-fizic -
tamponul de localizare a translatrii, TLB - conine informaii despre adresele a
32 de pagini, cel mai recent utilizate. Paginile memoriei virtuale au capacitatea
241
de 4 Ko, ceea ce nseamn c TLB conine la fiecare moment de timp informaii
Dispozitivele de segmentare cu mijloacele de paginaie dezactivate
Deplasarea pe 32 bii determin
capacitatea unui segment virtual
de 232 = 4 Go, iar numrul de
segmente este determinat de
lungimea cmpului, rezervat n
registrul segmentelor pentru
numrul segmentului.
Procesorul i386 susine dou
tabele de descriptori global
(Global Descriptor Table, GDT) i
local (Local Descriptor Table,
LDT). Tabelul global este destinat
descrierii segmentelor sistemului
de operare i segmentelor
interaciunilor ntre lucrri, adic
segmentelor, care pot fi, n
principiu, folosite de toate
procesele, iar tabelul local este
pentru segmentele unor lucrri
separate. Tabelul GDT este unic,
iar LDT trebuie s fie tot attea
cte lucrri sunt n sistem. Doar
unul din tabelele locale va fi activ
la un moment de timp dat.
242
Aceast structur se numete
selector deoarece este
destinat pentru alegerea
descriptorului unui segment
din tabelul descriptorilor
segmentelor. Descriptorul
segmentului descrie toate
caracteristicile segmentului,
necesare pentru verificarea
corectitudinii accesrii lui i
localizrii n spaiul fizic de
adrese.
Selectorul conine trei
cmpuri cmpul pe 13 bii
al indicelui (numrul
segmentului) n tabelul GDT
i tabelele LDT, cmpul pe 1
bit al indicatorului tipului
tabelului utilizat al
descriptorilor i cmpul pe 2
bii al drepturilor curente de
acces ale lucrrii CPL.
Numrul maximal de
segmente globale i locale
ale lucrrii cte 8K (213)
segmente de fiecare tip, n
total 16 K. Lund n
consideraie lungimea
maxim a unui segment 4
Go fiecare lucrare este 243
executat ntr-un spaiu
virtual de adrese de 64 To
Proiectarea spaiului virtual pe spaiul fizic de 4 Go
n momentul n care o lucrare trebuie s acceseze o locaiune a memoriei fizice, pentru alegerea
descriptorului segmentului virtual este folosit selectorul, care se afl n registrul respectiv
al segmentelor (n dependen de instruciune i faza de ndeplinire a acesteia alegerea
codului unei instruciuni sau a datelor). Valoarea cmpului tipului tabelului indic care tabel
trebuie utilizat GDT sau LDT.
Pentru pstrarea tabelelor GDT i LDT este folosit memoria operativ. Pentru ca procesorul s
poat gsi n memoria fizic tabelul GDT, adresa complet pe 32 bii a acestuia (adresa
nceputului tabelului), plus lungimea lui (cmp pe 16 bii) sunt pstrate ntr-un registru
special al procesorului GDTR (fig.8.22, b). Fiecare descriptor din tabelele GDT i LDT are
lungimea de 8 octei (l. max. a tab.= 64 K (8*(8K desc.)).
Pentru extragerea descriptorului din tabel, procesorul adun la adresa baz a tabelului GDT din
registrul GDTR valoarea din cmpul indicelui din registrul segmentelor, deplasat n stnga
cu trei ranguri (nmulirea cu 8 n conformitate cu numrul de octei din elementul tabelului
GDT), obinnd adresa liniar fizic a descriptorului necesar din memoria fizic.
Tabelul GDT este tot timpul prezent n memoria operativ, procesorul extrage descriptorul
necesar al segmentului de la aceast adres i-l pune ntr-un registru intern al procesorului.
Descriptorul segmentului virtual (fig.8.22, c) conine cteva cmpuri, principalele fiind
cmpul bazei adresa fizic baz pe 32 bii a nceputului segmentului, cmpul lungimii
segmentului i cmpul drepturilor de acces la segment DPL (Descriptor Privilege Level).
Procesorul determin mai nti corectitudinea adresei, comparnd deplasarea cu lungimea
segmentului. Apoi sunt controlate drepturile de acces ale lucrrii la acest segment,
comparnd valorile cmpurilor CPL ale selectorului i DPL ale descriptorului segmentului. n
procesorul i386 este implementat metoda cunoscut i sub denumirea inele de protecie.
Aici exist patru nivele a drepturilor de acces, iar obiectele unui nivel oarecare au244acces la
toate obiectele de acelai nivel sau de nivele mai joase, dar nu pot accesa obiecte de
nivele superioare. Nivele sunt numerotate de la 0 la 3, 0 fiind cel mai nalt nivel. SO poate
9. Elaborarea unui sistem de operare

9.1. Decompoziia ierarhic i maini abstracte


9.1.1. Conceptul de descenden i structuri cu nivele
9.1.2. Noiunea de obiect
9.1.3. Interfee i specificri
9.2. Organizarea unui sistem mono-utilizator
9.2.1. Specificrile i organizarea general
9.2.1.1. Funciile sistemului. Limbajul de comand
9.2.1.2. Decompoziia sistemului. Interfee interne
9.2.2. Primitive de intrare-ieire
9.2.2.1. Intrri-ieiri pentru unitatea de disc
9.2.2.2. Introducere extragere caractere
9.2.3. Sistemul de gestionare a fiierelor
9.2.3.1. Organizarea logic
9.2.3.2. Organizarea fizic
9.2.3.3. Operaii cu fiierele
9.2.3.4. Intrri-ieiri logice i gestiunea fluxurilor
9.2.4. Interpretorul limbajului de comand
9.2.4.1. Schema general
9.2.4.2. Mediul de execuie
9.2.4.3. ncrcarea unui program
9.2.4.4. Tratarea erorilor de execuie
9.3. Partajarea unei maini: maini virtuale
9.4. Exemplu de elaborare a unui sistem de operare multitasking 245
Obiectivele acestui capitol sunt:

1) Introducerea unor principii de structurare a sistemelor soft: decompoziia


ierarhic, nivele de abstractizare, obiecte i interfee. Interesul pentru aceste
noiuni depete cadrul strict al softului de sistem; totui, aceste concepte au o
importan particular pentru sistemele de operare dat fiind complexitatea
acestora, dimensiunile adesea foarte mari i interaciunile caracteristice dintre
software i hardware.

2) Aplicarea acestor noiuni la descrierea schemelor de organizare i funcionare a


unui sistem de operare foarte simplu, ceea ce permite specificarea
componentelor sale principale i a interfeelor interne.

246
9.1. Decompoziia ierarhic i maini abstracte
9.1.1. Conceptul de descenden i structuri cu nivele
n afar de simplificare, eficiena acestei metode rezult din procesul de abstractizare,
care const n reducerea unei probleme la aspectele sale eseniale, concretizate
prin specificrile unei maini; alte aspecte fiind luate n consideraie doar la
momentul realizrii mainii specificate. Specificarea unei maini, din punctul de
vedere al utilizatorului, se reduce la specificarea interfeei mainii, adic a
obiectelor i operaiilor furnizate de aceast main.
Se va spune c maina Mi utilizeaz maina Mj sau c Mi depinde de Mj, dac la
realizarea mainii Mi este utilizat interfaa furnizat de maina Mj. Afirmnd c Mi
depinde de Mj vom subnelege c Mi depinde doar de interfaa lui Mj i nu de
detaliile realizrii interne ale acesteia. Structura unui atare sistem poate fi descris
cu ajutorul unui graf, vrfurile cruia reprezint mainile definite de decompoziie,
iar arcele - relaiile de dependen (fig. 9.1. a).

247
Aceast schem poate fi generalizat: dac vom admite c o main poate utiliza primitive
furnizate de orice main de nivel inferior vom obine schema (b), iar dac unica
restricie impus grafului de dependen este lipsa circuitelor, vom avea schema (c) n
care mainile sunt repartizate pe nivele de abstractizare: o main de nivel i (i>0)
utilizeaz doar maini inferioare nivelului i: maina de la nivelul 0 (de baz) nu utilizeaz
nici o alt main.

n practic, metoda conceptului de descenden nu este niciodat utilizat n mod absolut:


procesele conin iteraii, iar la definiia unor maini noi se va ine cont de experiena
celui care o elaboreaz ca i de existena mainilor deja realizate. Drept rezultat, pentru
o problem ct de ct serioas este practic imposibil de propus apriori specificaiile
detaliate ale interfeei: elaborarea specificaiilor finale se bazeaz pe rezultatele unor
experimentri cu prototipurile pariale ale lor.

Indiferent de maniera prin care se ajunge la noiunea de structur ierarhic, aceasta prezint
o serie de avantaje, care rezult din independena introdus de abstractizare:
Independena conceperii: comportamentul unei maini, pentru utilizatorii si, este
totalmente descris de specificrile interfeei sale.
Independena modificrii: modificrile unei maini nu genereaz nici un fel de modificri
pentru mainile care o utilizeaz, atta timp ct specificrile interfeei rmn
neschimbate.
Independena realizrii: interfaa odat specificat, o main M poate fi realizat
independent de cele care o utilizeaz i invers, interfaa lui M fiind corect realizat,
mainile care utilizeaz maina M pot fi puse la punct independent de M. 248
Noiunea de obiect

Decompoziia ierarhic n maini abstracte nu acoper toate aspectele structurrii sistemelor.


n particular, pot aprea probleme atunci cnd unele situaii sau elemente trebuiesc
create ori distruse n mod dinamic, sau cnd vrem s descriem elemente, care posed
proprieti comune.
Pentru a facilita luarea n consideraie a acestor aspecte este introdus instrumentul de
structurare obiect.
Un obiect este definit cu ajutorul urmtoarelor atribute:
un nume, care permite desemnarea obiectului i deosebirea lui de alte obiecte,
o stare, care este definit n orice moment de timp i poate evolua pe parcursul
timpului,
o mulime de operaii, funcii de acces sau metode, care permit:
- crearea i distrugerea obiectelor,
- consultarea i modificarea strii unui obiect,
- combinarea obiectelor.
Noiunea de clas permite gruparea obiectelor cu proprieti comune, fiind un instrument al
abstractizrii. Unei clase i sunt ataate o mulime de funcii de acces (metode),
aplicabile tuturor reprezentanilor clasei; fiecare obiect al clasei posed un nume i o
stare proprie. Orice obiect aparine unei clase; atunci cnd un obiect este creat, se va
specifica numele i starea sa iniial; metodele asociate clasei sale sunt n mod automat
motenite.
Un obiect, odat creat, poate fi accesat cu ajutorul funciilor de acces specificate de clas.
249
Programele acestor funcii sunt, de obicei, partajate ntre toate obiectele clasei, ns
fiecare obiect mai conine i date proprii.
Interfee i specificri

Vom introduce noiunea de interfa i tehnicile utilizate pentru specificarea interfeelor. Ne


vom limita aici la interfeele pentru care mecanismul de activare este apelarea.
O interfa este asociat unei maini abstracte sau unei clase de obiecte. Ea conine doar trei
tipuri de informaii, accesibile utilizatorului mainii sau obiectului:
- structuri de date,
- proceduri,
- o mulime de reguli de utilizare a datelor i a procedurilor.
Regulile de utilizare constituie un mod de ntrebuinare a structurilor de date i procedurilor.
Ele exprim restriciile utilizrii lor, i pot lua diverse forme:
- restricii de accesare a datelor (numai citire, de exemplu),
- restricii, legate de ordinea de execuie a procedurilor,
- restricii, care afecteaz execuia simultan a procedurilor sau accesarea simultan a
datelor.
Problema formulrii specificrilor unei interfee nu are nc o soluie general satisfctoare.
Doar o parte a specificrilor poate fi exprimat in mod formal i, deci, exist
posibilitatea unor validri automate: acestea sunt specificrile tipurilor variabilelor i a
parametrilor procedurilor. Pentru a specifica efectul unui apel de procedur sunt utilizate
dou tipuri de tehnici:
- mecanismul pre- i post-condiiilor,
- echivalena cu o alt expresie a algoritmului procedurii.
i n cazul exprimrii restriciilor de utilizare nu exist soluii universale. n multe cazuri este
posibil reprezentarea evoluiei unei maini cu ajutorul unui automat finit, trecerile 250dintr-
o stare n alta fiind asociate apelurilor succesive ale interfeei procedurilor.
9.2. Organizarea unui sistem mono-utilizator

Pentru a ilustra folosirea conceptului main ierarhic abstract vom elabora un sistem de
operare redus la forma cea mai primitiv (din considerente de simplitate). Trebuie
proiectat un sistem minim, destinat s administreze un microcalculator individual, folosit
de un singur utilizator (cum ar fi CP/M de la Digital Research).

9.2.1. Specificrile i organizarea general


9.2.1.1. Funciile sistemului. Limbajul de comand

Calculatorul administrat de sistemul nostru de operare const din:


- un procesor,
- o memorie operativ
- echipamente periferice:
un terminal (display i tastatur),
una sau dou uniti de dischet,
o imprimant.

Gestionarea perifericelor este asigurat de procesor (posibilitatea administrrii prin ADM este
propus ca exerciiu).

251
9.2.1. Specificrile i organizarea general
9.2.1.1. Funciile sistemului. Limbajul de comand

Sistemul trebuie s permit:


- salvarea i pstrarea informaiilor n fiiere pe dischet,
- transferarea informaiilor ntre fiiere i periferice,
- elaborarea, depanarea, salvarea i executarea programelor.

Este necesar ca structura sistemului de operare s permit adaptarea simpl la diferite


configuraii de calculatoare, n special, la diferite tipuri de memorie secundar i
echipamente periferice.

Interfaa utilizatorului, oferit de ctre sistemul de operare, este definit de un limbaj de


comand specificat astfel:

<comand> ::=<nume comand><list parametri>


<list parametri> ::=spaiu|<list parametri><parametru>
<parametru> ::=<nume fiier>

O comand este introdus de la tastatur i executat imediat.

Un fiier este un set de informaii desemnate printr-un nume i manipulate cu ajutorul unor
funcii de acces. Fiierele sunt pstrate n memoria secundar. Programele i datele
utilizatorului se afl n fiiere.
252
Comenzi predefinite

Un oarecare numr de comenzi de baz sunt predefinite n sistem. Orice program


executabil, creat de utilizator sub form de fiier poate fi executat ca i o
comand. Vom avea n acest caz:

<nume comand>::=<nume comand predefinit>|<nume fiier executabil>


Cu titlu de exemplu, o list de comenzi pentru crearea i depanarea n limbajul de asamblare:
1) editare fsurs -- editarea programului surs
s se asigure posibilitatea modificrii unui fiier fsurs care conine textul programului (sau
s se asigure posibilitatea crerii lui, dac acesta nu exist) cu ajutorul unor comenzi
interne, definite de un editor interactiv, furnizat de sistem, detaliile de funcionare ale
cruia nu sunt specificate aici.
2) asamblare fsurs fobiect -- asamblare
s se asambleze programul din fsurs i s se plaseze codul obiect n fobiect.
3) fobiect fdate frezultat -- executare
s se execute programul coninut n fiierul fobiect citind datele din fiierul fdate pasnd
rezultatele n fiierul frezultat.
4) depanare -- depanare interactiv
atunci cnd o eroare este detectat s se examineze starea variabilelor, s se modifice
aceast stare, s se stopeze sau s se reia executarea programului curent. Aceste
aciuni sunt comandate de instruciuni interne sistemului de depanare i nu le vom
specifica aici. 253
9.2.1.2. Decompoziia sistemului. Interfee interne

O prim versiune a sistemului de operare poate fi realizat utiliznd direct interfaa definit
de maina fizic. Vom arta mai jos modul n care un sistem fizic monolit poate fi pas cu
pas descompus pentru a ajunge la subansambluri logic coerente.
1) Gestionarea fiierelor i a fluxurilor
La prima etap este necesar s izolm componenta sistemului responsabil de administrarea
fiierelor. Pentru aceasta trebuie s precizm structura fiierelor i s specificm
funciile de acces.
Presupunem c un fiier este organizat sub forma unei secvene de nregistrri de lungime
fix. Citirea i scrierea se va face n mod secvenial: pentru fiecare fiier f este definit un
pointer ptr(f) de citire/scriere, o variabil boolean sfr(f) i un mod de acces (numai
citire sau citire/scriere). Funciile de acces sunt definite dup cum urmeaz:
Deschiderea unui fiier permite s-l declarm utilizabil i s iniializm indicatorii.
deschide(f):
if vid(f) then
sfr(f):=true
else
ptr(f):=<pointer la prima nregistrare>;
sfr(f):=false
endif

Primitiva schimbare_mod permite fixarea modului de accesare a fiierului (este adesea


inclus n deschiderea fiierului).

254
Accesul la nregistrri
Se face prin intermediul a dou primitive citire_secv i sriere_secv:
citire_secv(f,dest): -- dest semnific tamponul destinaie
if sfr(f) then
<eroare> -- nu avem ce citi
else
dest:=<nregistrare desemnat de ptr(f)>
deplasare(f)
endif
Efectul funciei deplasare(f) este de a-l impune pe ptr(f) s puncteze pe nregistrarea
urmtoare a fiierului. Dac ptr(f) desemna ultima nregistrare el va rmne neschimbat
i sfr(f) este pus n true.
scriere_secv(f,orig): -- orig semnific tamponul origine
if mod(f) = numai citire then <eroare>
else
if sfr(f) then
<adaug un amplsament la sfritul fiierului pentru o nregistrare>
deplasare(f)
endif;
<amplasamentul desemnat de ptr(f)>:=orig;
deplasare(f)
endif
Notm, c citirea i scrierea se produc plecnd de la poziia curent a pointerului ptr(f),
actualizndu-l.
Primitiva nchide(f) permite nchiderea fiierului f presupus deschis, procedurile de citire sau
scriere nu-i mai pot fi aplicate. 255
Primitiva creaz(f) permite crearea unui fiier cu numele f, care este iniial vid i nchis, iar cu
SO pe dou nivele

Sistemul de operare poate fi acuma descompus n dou nivele (sau dou


"maini"): sistemul de gestionare a fiierelor, definit mai sus (maina
SGF), construit pe maina fizic MF i interpretorul limbajului de
comand (maina ILC), care folosete funciile furnizate de interfaa SGF.
Maina ILC de asemenea utilizeaz direct maina MF pentru citirea comenzilor de la tastatur,
administrarea display-ului i imprimarea fiierelor. Daca se va solicita o structur strict
pe nivele va fi necesar s includem administrarea operaiilor de I-E n SGF.

Specificm mai jos funciile care trebuiesc realizate.

Noiunea de fiier este o realizare abstract a schimburilor de informaii cu memoria


secundar. Introducem un nivel echivalent de abstractizare pentru specificarea
schimburilor de informaii cu alte periferice.

Definim pentru aceasta dou "periferice logice" cu urmtoarele specificaii ale interfeei:
a) "terminalul logic", care const dintr-un display i o tastatur i care ofer urmtoarele
dou funcii:
citire_linie(tampon)
Cu ajutorul acestei funcii o linie de simboluri de la tastatur va fi introdus ntr-un tampon din
memorie. Se presupune c funcii elementare de editare, cum ar fi vizualizarea unui
simbol sau a unei linii, sunt furnizate.
afiare_linie(tampon)
Aceast funcie afieaz pe ecran coninutul unei linii de simboluri, plasat ntr-un tampon de
memorie. 256
Imprimanta logic

b) "imprimanta logic", care ofer funcia


imprimare_linie(tampon)
adic, s se imprime coninutul unei linii plasate ntr-un tampon de memorie.

Primul octet al parametrului tampon al funciilor de mai sus specific numrul de caractere
din linia origine sau destinaie, care vor fi transferate.

Introducerea conceptului de periferice logice prezint un dublu interes:


- n primul rnd, este posibil s se pun la dispoziia utilizatorului funcii mai sofisticate
i mai aproape de necesiti, dect cele ale organelor fizice de intrare-ieire,
- n al doilea rnd, se permite nlocuirea unui periferic fizic cu altul, pstrnd interfaa
utilizrii.

Pentru a realiza ultima posibilitate vom specifica o funcie


asociere(periferic_logic, periferic_fizic)
care permite modificarea asocierii, definit iniial n mod implicit, perifericelor logice i fizice,
respectnd compatibilitatea funciilor (imprimanta logic va fi asociat unui dispozitiv
care permite extragerea caracterelor, etc.).

Noiunea de periferic logic mai este ntlnit sub denumirea de flux de intrare-ieire.

257
2) Realizarea operaiilor de intrare-ieire

Realizarea mainii SGF, care administreaz fiierele i fluxurile, poate de asemenea fi


simplificat dac avem la dispoziie primitive de intrare-ieire mai evoluate dect cele
furnizate direct de maina fizic.

Vom defini o nou main, numit PIE (primitive intrri-ieiri), cu urmtoarea interfa:
a) Schimburi cu discul. Un disc este organizat n piste i sectoare, sectorul este unitatea
de transfer, iar o adres de disc are forma (nr. suport, nr. pist, nr. sector).

Interfaa are trei funcii:


alegere_suport(nr. suport): specific suportul curent;
citire_sector(nr_pist,nr_sect,destinaie): transfer un sector de disc n memorie
scriere_sector(nr_pist,nr_sect,origine): transfer un sector de memorie pe disc cu nr_pist,
nr_sect semnificnd numrul pistei i a sectorului, iar destinaie i origine desemneaz
tampoane de memorie de lungimea unui sector.

b) Schimburi cu alte periferice. Unitatea de transfer este un caracter. Vor fi definite trei
funcii:
citire_car(c) : citete un caracter de la tastatur (rezultatul c)
afiare_car(c) : afiaz un caracter pe display (originea c)
imprimare_car(c) : imprim un caracter la imprimant (originea c)

Pentru a permite utilizarea asistat de SGF a acestor funcii, ele sunt definite pentru
periferice logice.
Accesarea perifericelor fizice este realizat printr-o simpl redirecionare via un tabel de
258
coresponden.
SO pe trei nivele

Realizarea sistemului de gestionare a


fiierelor este astfel descompus n
dou probleme mai simple:
- s se realizeze maina SGF, care
pune la dispoziie interfaa descris n
p. 1, folosind funciile furnizate de
interfaa mainii PIE, descrise n p. 2,
- s se realizeze maina PIE care
folosete doar maina fizic MF.

Decompoziia de mai sus permite constatarea avantajului principal al structurrii pe nivele:


o modificare, chiar i esenial, a organizrii interne a mainilor PIE sau SGF nu
antreneaz nici un fel de modificri ale nivelelor superioare, dac interfaa
corespunztoare rmne neschimbat.

Aceast remarc evideniaz importana alegerii interfeelor n cauz. De exemplu, interfaa


PIE trebuie s permit simplificarea realizrii mainilor care o utilizeaz, rmnnd ea
nsi relativ simplu de realizat, ceea ce poate fi obinut doar n mod iterativ, fcnd n
egal msur apel la experien. n cursul acestui proces iterativ interfeele principale
sunt elaborate progresiv pn la varianta stabil. Costul modificaiei unei interfee crete
odat cu creterea numrului componentelor care o utilizeaz i este, ca rezultat, mai
ridicat pentru interfeele principale ale sistemului.
259
Interfaa extern a sistemului, care este cea a ILC, este definit de limbajul de comand.
Interfeele interne (ale PIE i SGF) sunt realizate prin apelri ale supervizorului.
9.2.2. Primitive de intrare-ieire

Driverele dispozitivelor periferice urmeaz schema sincron (v. 2.4.2.1). Vom descrie mai
nti administrarea unei uniti de disc, apoi intrrile-ieirile n mod caracter.

9.2.2.1. Intrri-ieiri pentru unitatea de disc

Exemplul care urmeaz este pentru un disc cu un format particular, dischet simpl densitate
cu o singur suprafa de lucru. Parametrizarea pentru formatare va fi examinat mai
trziu. Discheta are 77 piste de 27 sectoare; lungimea sectorului - 128 octei. Sectorul
este unitatea de transfer a informaiei.

Pentru accelerarea transferurilor secveniale acestea sunt realizate printr-o zon de memorie-
tampon. La o operaie de citire este recomandat s se citeasc o pist ntreag,
deoarece ntrzierea introdus de cutarea pistei intervine o singur dat pentru toat
mulimea sectoarelor. Din aceast cauz vor fi rezervate n permanen n zone-tampon
de lungimea unei piste (27 sectoare de 128 caractere). Valoarea lui n de ordinul ctorva
uniti va fi fixat la generarea sistemului.

Fie c este necesar s se citeasc un sector cu numrul nsect de pe pista np. Dac unul din
tampoane conine pista np, citirea se va face fr a accesa discheta, din sectorul
respectiv al zonei-tampon. n caz contrar, coninutul pistei np va trebui ncrcat n
prealabil de pe dischet n una din zonele-tampon. Alegerea zonei-tampon va fi tratat
mai departe.
260
Operaia de scriere

Este mai complicat. Pentru a minimiza numrul de transferuri, un tampon este recopiat pe
dischet ct mai trziu posibil. Atta timp ct el este n memoria operativ, tamponul
reflect starea curent a sectoarelor pistei i accesrile succesive ale unui sector nu
antreneaz vre-o accesare a dischetei. Fie c este necesar s scriem n sectorul nsect al
pistei np:
- dac pista np este prezent ntr-un tampon, sectorul corespunztor este modificat i
operaia se termin aici, cu excepia cazului "scriere imediat" **,
- dac pista np nu este prezent, ea trebuie n prealabil adus ntr-un tampon pentru a
ajunge la situaia din cazul precedent, cu excepia situaiei primei scrieri.

Un sector este copiat pe disc, n afara cazului de scriere imediat, n dou situaii:
- dac tamponul este realocat pentru a ncrca o nou pist n memorie, conform
algoritmului de realocare, care va fi prezentat mai jos,
- dac tamponul este vidat n mod forat din cauza nchiderii unui fiier sau la cererea de
eliminare a unui volum.

Algoritmul de realocare a tampoanelor se bazeaz pe proprietatea localitii de referine


(localizare): cu ct mai recent o informaie a fost utilizat cu att mai mare este
probabilitatea unei noi cereri de accesare. Din acest motiv tampoanele vor fi ordonate n
ordine cronologic a referirilor lor.
Atunci cnd un tampon este necesar, el va fi cutat :
1) un tampon liber (care nu a fost nc utilizat),
2) un tampon ocupat, dar nemodificat pe parcursul ncrcrii sale, 261
3) dintre ocupate, alegnd cel pentru care ultima referin este cea mai veche
Principiul programelor de gestionare a dischetelor

Vom avea un singur tampon (n=1) de lungimea unei piste, cruia i sunt asociai doi
indicatori:
pist_prezent : numrul pistei ncrcate n tampon (nil dac este vid)
modif : are valoarea TRUE dac coninutul zonei-tampon a fost modificat.

Interfaa controlerului furnizeaz urmtoarele funcii:


ALEGERE_SUPORT(sup) : alege suportul sup n calitate de suport curent
CUTARE_PISTA(np) : deplaseaz dispozitivul de citire-scriere la pista np
CITIRE_SECTOR(adr,nsect) : citete n 128 octei ncepnd cu adresa adr coninutul
sectorului nsect al pistei curente
SCRIERE_SECTOR(adr,nsect): scrie n nsect al pistei curente 128 octei, care ncep de la
adresa adr
TEST: permite consultarea indicatorilor preg, term, err din cuvntul de stare a
controlerului.

Interfaa furnizat de PIE pentru gestionarea dischetelor este compus din procedurile
ALEGERE_SUPORT(sup), CITIRE_SECTOR(adr,nsect) i SCRIERE_SECTOR(adr,nsect). Ultima
procedur, SCRIERE_SECTOR(adr,nsect), conine parametrul mod, care poate lua valorile
scriere_normal, scriere_imediat i scriere_prima.

Nu vom descrie aici procedura ALEGERE_SUPORT(sup), care este realizat de o funcie a


controlerului.
262
Schemele programelor

citire_sector(np,nsect,dest) scriere_sector(np,nsect,orig,mod)
if np <> p_p then if np<> p_p then
if modif then if modif then
transferare_pist(p_p,tampon,scriere) transferare_pist(p_p,tampon,scriere)
endif; endif;
transferare_pist(np,tampon,citire) if mod=scriere_prima i liber(np) then
endif; p_p=np
dest:=tampon[nsect] else
transferare_pist(np,tampon,citire)
endif
endif
tampon[nsect]:=orig;
if mod=scriere_imediat then
transferare_sector(orig,np,nsect,scriere)
else
modif:=TRUE
endif
n cazul unei prime scrieri se presupune c este posibil s se determine cu ajutorul indicatorului
liber(np), c ntreaga pist np este alocat pentru prima dat.

Procedurile de mai sus utilizeaz dou proceduri interne ale PIE: transferare_pist i
transferare_sector, care constituie driver-ul dischetei.
263
Transferare pist

procedura transferare_pist(np, tampon, procedura transferare_sector(adr,nsect,sens);


sens); nsect:=convertire(nsect); -- numrul sectorului
CUTARE_PIST(np) -- deplasarea braului fizic
nr_ncercri:=0;
test: TEST repetare: case sens of
if nonterm then go to test citire: CITIRE_SECTOR(adr,nsect);
endif; scriere: SCRIERE_SECTOR(adr,nsect);
for nsect:=0 to nbsect-1 do -- nbsect = 27 endcase
test: TEST-- control corectitudine transfer
transferare_sector(tampon[nsect],nsec if err then
t,sens) nr_ncercri:= nr_ncercri+1;
endfor; if nr_ncercri<nmax then
modif:=false; go to repetare
if sens=citire then else
pist_prezent:=np cauza:=eroare_fatal -- eec dup nmax
endif ncercri
<provocare deviere>
endif;
endif;
if nonterm then
go to test -- ateptare activ
endif;

264
9.2.2.2. Introducere extragere caractere

Schema sincron de comand, pe care o vom relua pentru cazul scrierii unui simbol. Pentru a
permite reasocierea perifericelor, adresa controlerului va fi specificat ca un parametru
al driverului.
procedura ieire_car(c,p);transmite caracterul c controlerului p
TEST(p);
if nonpreg then
<tratare eroare>
endif;
EXTRAGE(c,p);
test: TEST(p);
if err then
<tratare eroare>
endif;
if nonterm then
go to test
endif;
O procedur analogic intrare_car(c,p) este definit pentru citire.
Pentru realizarea schimburilor cu perifericele logice este definit un tabel de asociere cu trei
intrri:
tabel_perif[tastatur]=adresa controlerului asociat tastaturii logice
tabel_perif[display]=adresa controlerului asociat ecranului logic
tabel_perif[imprimant]=adresa controlerului asociat imprimantei logice.
Operaiile pe perifericele logice vor fi realizate astfel:
afiare_car(c) =>ieire_car(c,tabel_perif[display]) 265
imprimare_car(c) =>ieire_car(c,tabel_perif[imprimant])
9.2.3. Sistemul de gestiune a
fiierelor
9.2.3.1. Organizarea
logic
Pentru notarea unui fiier este utilizat o schem pe dou nivele, adic numele unui fiier
este de forma
<nume suport>:<identificator>.<tip>

Numele suportului identific suportul fizic al fiierului, adic unitatea de disc utilizat i este
definit, de obicei, n mod implicit.

n interiorul unei dischete schema de desemnare este plat; identificatorul tipului specific
natura fiierului (program translatabil, absolut, instruciuni, date, etc.).

Fiierele sunt organizate secvenial, sub forma unei suite de nregistri de lungime fix (128
octei).

Sistemul furnizeaz primitive de accesare secvenial a nregistrrilor. Orice funcie de acces


trebuie s fie construit plecnd de le aceste primitive.

266
9.2.3.2. Organizarea fizic

n calitate de unitate de alocare sau bloc vom considera un set de 8 sectoare consecutive.
Starea de alocare a dischetei este descris cu ajutorul unui tabel de ocupare, care
conine cte un bit pentru fiecare bloc (fie 250 bii; n realitate un pic mai puin, fiindc
primele dou piste ale dischetei sunt rezervate n permanen). Gsirea unui bloc liber
se reduce la gsirea primului bit egal cu 0 n acest tabel: numrul bitului este numrul
blocului cutat.

Datele despre un fiier sunt grupate ntr-un descriptor care conine urmtoarele informaii:
- numele fiierului (<identificator>.<tip>),
- lungimea fiierului (numrul de nregistrri),
- numrul nregistrrii viitoare la citire sau scriere,
- tabelul implantrii fiierului.
Tabelul implantrii fiierului const din 16 octei, care conin numerele blocurilor succesive n
care fiierul este implantat. Deci, pot fi utilizate pentru implantarea unui fiier 128 de
sectoare, adic 16 Ko. Fiierele de lungime mai mare, numite multisecionate, pot fi
implantate prin nlnuirea a mai multor descriptori, fiecare descriind un set de 16
uniti de alocare, numit seciune a fiierului. Numrul maxim de seciuni este 16, adic
256 Ko n total.
Pistele 0 i 1, rezervate sistemului de operare, conin, n particular, tabelul de ocupare a
dischetei i programul de ncrcare. Descriptorii tuturor fiierelor dischetei sunt ordonai
ntr-o zon rezervat, ncepnd cu pista cu numrul 2. Mulimea acestor descriptori
formeaz catalogul dischetei.

Pentru a facilita adaptarea sistemului la diferite tipuri de discuri, caracteristicile discurilor


267
sunt grupate ntr-un tabel, creat la generarea sistemului de operare i descris n 9.2.3.4;
9.2.3.3. Operaii cu fiierele

Deschiderea unui fiier cere ncrcarea descriptorului acestuia ntr-o zon a memoriei
centrale, rezervat n prealabil. Adresa acestui descriptor este transmis ca parametru
tuturor operaiilor ulterioare asupra fiierului.
La nchiderea unui fiier deschis, descriptorul din memorie este recopiat pe disc i locul lui
este eliberat ca i zona de memorie, ocupat de fiierul propriu-zis. Dac rmn
nregistrri modificate ale fiierului ntr-o zon-tampon de I-E, ele la fel vor fi recopiate
pe disc. Scrierea se face n mod imediat.

Crearea unui fiier const n alocarea unui descriptor (pe disc) acestui fiier; iniial fiierul
este vid i tabelul su de implantare conine doar zerouri.
La distrugerea unui fiier vor fi eliberate toate unitile de alocare ocupate de fiier, ca i
amplasamentul ocupat de ctre descriptorul acestuia. Catalogul i tabelul de ocupare a
discului sunt pui la zi.

Vom descrie principiile de organizare a programelor de citire i scriere secvenial a unei


nregistrri. Programele de creare, distrugere, deschidere i nchidere a unui fiier sunt
propuse ca exerciii.

Presupunem c un fiier f este deschis. Notm descriptorul n memorie a acestui fiier prin
descr, care are urmtoarele cmpuri:
- descr(f).ptr pointer de citire/scriere
- descr(f).sfr indicator de sfrit de fiier
- descr(f).lng numrul de nregistrri ale fiierului
- descr(f).imp tabelul de implantare a fiierului 268
Schemele programelor de accesare

procedura avansare(f);
if descr(f).ptr=descr(f).lng-1 then
descr(f).sfr:=TRUE
else
descr(f).ptr:=descr(f).ptr+1
endif

procedura citire_secv(f,dest);
if descr(f).sfr then
<eroare> -- citire imposibil, ne aflm la sfritul fiierului
else
calculare(f,np,nsect); -- calcularea adresei pist-sector
citire_sector(np,nsect,dest);
avansare(f);
endif

const l_unit_aloc=8; -- lungimea unitii de alocare este de 8 sectoare


max_unit_aloc=16 -- numrul maxim de uniti de alocare ntr-o seciune

269
9.2.4. Interpretorul limbajului de comand
9.2.4.1. Schema general
Schema general a interpretorului limbajului de comand poate fi reprezentat printr-o bucl
infinit:
iniializare_sistem
ciclu
iniializare_comand
citire comand
analizare comand
if comand corect then
interpretare comand:
preparare mediu de execuie
lansare execuie
else
diagnosticare eroare
endif
endciclu
Comanda este citit ntr-un tampon de memorie cu ajutorul terminalului logic: procedura
cititre_linie. Analiza comenzii: Primul cmp este numele comenzii, urmeaz parametrii
transmii programului responsabil de interpretare. Dac numele este unul din cele
rezervate comenzilor de sistem programul creia este rezident, poate ncepe
interpretarea. n caz contrar, fiierul care conine comanda trebuie n prealabil ncrcat
n memorie. Dac este cazul unui program executabil al utilizatorului, pregtit ntr-un
fiier i un astfel de fiier nu poate fi gsit, interpretorul va afia un mesaj de eroare i
va atepta comanda urmtoare.
Secvena iniializare_sistem reprezint ncrcarea iniial i poate fi declanat de un buton
270
de pornire sau printr-un apel al supervizorului.
9.2.4. Interpretorul limbajului de comand
9.2.4.1. Schema general
Schema general a interpretorului limbajului de comand poate fi reprezentat printr-o bucl
infinit:
iniializare_sistem
ciclu
iniializare_comand
citire comand
analizare comand
if comand corect then
interpretare comand:
preparare mediu de execuie
lansare execuie
else
diagnosticare eroare
endif
endciclu
Comanda este citit ntr-un tampon de memorie cu ajutorul terminalului logic: procedura
cititre_linie. Analiza comenzii: Primul cmp este numele comenzii, urmeaz parametrii
transmii programului responsabil de interpretare. Dac numele este unul din cele
rezervate comenzilor de sistem programul creia este rezident, poate ncepe
interpretarea. n caz contrar, fiierul care conine comanda trebuie n prealabil ncrcat
n memorie. Dac este cazul unui program executabil al utilizatorului, pregtit ntr-un
fiier i un astfel de fiier nu poate fi gsit, interpretorul va afia un mesaj de eroare i
va atepta comanda urmtoare.
Secvena iniializare_sistem reprezint ncrcarea iniial i poate fi declanat de un buton
271
de pornire sau printr-un apel al supervizorului.
9.2.4.2. Mediul de execuie

Prima sarcin a unui interpretor, nainte de lansarea sistem rezident


execuiei unei comenzi, este de a pregti mediul su,
adic mulimea obiectelor, care vor fi utilizate i stiva
informaiile, care vor permite accesarea obiectelor.
liber tampon
n cazul executrii unui program al utilizatorului acest intrare-ieire
mediu conine (v. fig. 9.3): segment date iniializate
- segmentele cu programul care trebuie executat i descriptor 1
descriptor 2
date, segment date
- stiva de execuie, pointeri
- o zon de lucru, numit pagin de gard, care segment procedur
conine:
pointeri, care puncteaz segmentele program pagin de gard (pagin de gard)
i date, precum i zona liber,
descriptorii fiierelor, specificate n comand, sistem rezident
un tampon destinat schimburilor cu fiierele.
Fig.9.3. Mediul de execuie

272
9.2.4.3. ncrcarea unui program

Operaia de ncrcare are drept efect pregtirea mediului. Ea urmeaz imediat operaiei de
analiz a comenzii. Vom descrie aceast operaie n cazul n care <nume comand> este
numele unui fiier, care conine un program executabil. Antetul unui asemenea fiier
descrie coninutul su: lungimea i poziia n cadrul fiierului a segmentelor de cod i de
date, adresa de debut a execuiei, adresele de implantare a acestor segmente pentru un
program absolut, informaii de reimplantare pentru un program translatabil. ncrcarea
presupune urmtoarele:
1) Deschiderea fiierului <nume comand> i citirea antetului acestuia ntr-un tampon
intern.
2) Determinarea dac capacitatea memoriei disponibile permite ncrcarea.
3) Crearea paginii de gard n amplasamentul rezervat acestui efect.
4) ncrcarea segmentelor de cod i de date n zonele indicate n antet; dac are loc
reimplantarea s se adauge adreselor realocate deplasarea necesar; s se pun la zi
informaiile, care descriu memoria disponibil.
5) Iniializarea stivei de execuie i plasarea n topul ei a unei adrese de retur n
interpretorul limbajului de comand.
6) Punerea la zi a pointerilor paginii de gard; ordonarea n tamponul situat n aceast
pagin a cozii de comenzi.
7) Deschiderea fiierelor (dac exist) numele crora sunt specificate n comand i
plasarea descriptorilor acestora n pagina de gard.
8) Executarea unei ramificaii spre punctul de intrare a segmentului de cod.
Aceste operaii sunt executate n mod slave, returul normal din programul executat n
interpretorul limbajului de comand utilizeaz returul procedurii. Acest retur poate fi
fcut i prin apelarea supervizorului sau ca i consecin a unei devieri provocate 273
de o
eroare.
9.2.4.4. Tratarea erorilor de execuie

Detectarea unei erori n cursul execuiei provoac un cod de eroare sau o deviere, chiar dac
ea a survenit sau nu n cursul executrii unei primitive realizate prin intermediul unui
apel al supervizorului.
Pot fi evideniate dou cazuri n dependen de gravitatea erorii:
- Eroare ntr-un program utilizator sau ntr-o component necritic a unui program de
sistem, cum ar fi interpretorul limbajului de comand. Exemplu: operaie aritmetic care
nu poate fi executat, memorie insuficient pentru ncrcarea unui program.
- Eroare n cursul unei operaii critice, adic care pune n pericol integritatea datelor.
Exemplu: eroare irecuperabil la un transfer pe disc.
Pentru oricare caz, principiul tratrii unei erori const n revenirea la o stare stabil a
sistemului din care executarea poate rencepe normal, reducnd la minimum cantitatea
de informaii pierdute. O clasificare conform acestui criteriu evideniaz urmtoarele
stri stabile:
1) Stare predecesoare executrii instruciunii eronate,
2) Ateptarea de ctre interpretor a unei comenzi,
3) Starea iniial a sistemului.
Returul n starea 1) sau 2) corespunde tratrii unei devieri ntr-un program utilizator. Aceast
tratare poate fi realizat ntr-un mod standard de sistem sau de un program de tratare,
elaborat de utilizator. Returul la starea 2), adesea numit restartare la cald (fr. reprise
chaud, eng. warm start), este realizat de secvena iniializare_comand. Lucrul efectuat
n cursul ultimei comenzi este, in genere, pierdut, ns datele permanente (fiierele) sunt
pstrate.
Revenirea la starea 3), adesea numit restartare rece (fr. reprise froid, eng. cold start), este
rezultatul unei erori grave, care provoac alterarea tabelelor interne ale sistemului 274
sau a
fiierelor pe disc. Returul este realizat de secvena iniializare_sistem. Pierderea de