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.INTRODUCERE
1.1. NOIUNI DE BAZ I CLASIFICRI

1.1.1.
1.1.2.
1.1.3.
1.1.4.

Noiuni i termeni din domeniul resurselor tehnice


Noiuni i termeni din domeniul sistemelor de operare
Tipuri de sisteme de operare, obiective i funcii
Exemple de sisteme de operare

1.1.4.1.
1.1.4.2.
1.1.4.3.
1.1.4.4.
1.1.4.5.

Cazul calculatoarelor personale


Gestionarea unor procese industriale
Sisteme de operare n timp real
Sisteme tranzacionale
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

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.

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.

Aplicaii

Software de sistem

Sisteme de
operare

Drivere de
dispozitiv

Programe
utilitare

Limbaje de
programare

Constau din
unul sau mai
multe
programe
Controleaz
echipamentele
hardware
Gestioneaz
toate celelalte
aplicaii
Sunt concepute
pentru a lucra
cu o anumit
arhitectura
hardware

Sunt
programe ce
ofer
calculatorului
informaii
specifice
privind un
anumit
echipament
hardware
Sunt utilizate
de SO pentru
comunicarea
cu
echipamentel

Majoritatea
utilitarelor
trateaz
operaiile de
stocare i
gestionare a
fiierelor
Unele
utilitare sunt
incluse ca
pri ale SO

Sunt utilizate
pentru a scrie
programe, ce
pot fi
executate apoi
de ctre
calculator
Permit
utilizatorilor
s introduc
instruciuni
mai inteligibile
dect limbajul
5
main

Fig. 1.2. Sistemul de operare-interfa ntre hardware i utilizator

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
8
alterrii intenionate sau accidentale a informaiei).

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.
9
Relaia dintre user, task, proces i spaiu de adrese (sau de adresare) este
prezentat n fig.1.4.

User

Creat de utilizator sau de


mediul integrat

Task

Creat de sistem
Ansamblul
Pas de task

. . . . .

Proces
Componente
standard ale
sistemului de
operare

Componente
definite de
utilizator

Pas de task

. . . . .

Proces

Regulator

Regulator I/O

Planificator

Planificator I/O

Sistem de fiiere

...

...

Sistem de fiiere

Program Main

Program de iniiere I/O

Subprogram A
Subprogram B

Bufere date

...

...

Spaiu de adresare (procesCPU)

Spaiu de adresare (proces I/O)

programelor
i datelor accesate n
timpul procesului,
formeaz spaiul de
adrese. Fig. conine
dou exemple de spaii
de adresare unul
pentru procesul de
intrare/ieire i altul
pentru procesul UC. Una
din destinaiile sistemului
de operare este de a
asigura proiectarea
spaiului de adresare
a unui proces n memoria
fizic. Pentru rezolvarea
acestei probleme sunt
utilizate att resurse tehnice
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
13
interpretate de sistem.

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

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
trebu
15

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
ateapt
terminarea
operaiei I/O

Ales (Exe)

Operaia de
I/O s-a
terminat

Eligibil
(Ready)

Blocat
(Wait)

Fig. 1.8. Ciclul de via a unui proces

21

Administrarea
memoriei
Administrarea
dispozitivelor

Expirarea
intervalului
de timp
Starea
procesorului

Administrarea
procesoarelor

Administrarea
procesoarelor

Eliberarea
memoriei

Eliberarea
procesorului

Eliberarea
dispozitivelor
Ales

Terminare

Administrarea
procesoarelor

Prezentare

Cerere de citire
informaii

Pstrare

Eligibil

Blocat
Gestiunea
informaiei

Administrarea
resurselor

Administrarea
procesoarelor

MO este accesibil?
Gestiunea
informaiei

Administrarea
memoriei

Toate
dispozitivele sunt
alocate?
Administrarea
dispozitivelor

Iniiere I/O
Administrarea
procesoarelor

Semnal

Administrarea
dispozitivelor
Creare proces I/O
Administrarea
procesoarelor

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


schimbri

22

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

Procesul 4

Programele
utilizatorului
(procese)

Sistemul de operare
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
goal

Programele
utilizatorului
(procese)

Funcii cheie ale


S.O.
Procesul 4

Alte funcii
ale S.O.

Procesul 3

Fig.1.11. Ilustrarea conceptului de main ierarhic,

25

Taskuri
Planificator de taskuri

Procesul 1

Procesul 2
Procesul 3

I/O de sistem

Procese I/O care


deservesc procesul 3
al utilizatorului

Proces creat
de utilizator
Proces I/O

Nivelul 5

Stratul 2

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.
2.
3.

Salvarea i restabilirea contextului la apelare i retur,


Transmiterea parametrilor ntre procedurile apelant i
apelat,
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
top
pointerul care indic primul amplasament
liber pentru a crea un nou
q
mediu. top
baza

baza

Stiv

Mediul procedurii

nainte de apelarea procedurii q de


ctre procedura p

Stiv
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
top:=baza
baza:=baza_veche

returul
ramificare *temp

ramificare indirect

segmentului
procedurii
n
curs
de
execuie
i
segmentele de date, zona
mediului curent din stiva de
32
execuie.

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
<cerere de I/E>
D:=1;
F:=0;

<test terminare I/E>


if F=1 then

programul supervizor
programul pentru I/E
ciclu
ciclu
if D=1 then
if DEX(i)=1 then
caut PES(i);
execut I/E;
DEX(i):=1;
<sincron>
FEX(i):=0;
FEX(i):=1;
endif
endif

endciclu
<test terminare execuie>
if FEX(i)=1 then
F:=1;
endif
endciclu

Comentarii:
1.
2.
3.

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.
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
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.
2.

trecerea cuvntului de stare ntr-un amplasament specificat al memoriei,


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:
37
<cuvnt de stare program>
:=stiva[ptr]
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:

Denumirea
mecanismului

Tabelul 2.1. Mecanisme de comutare a contextului


Cauza
Utilizarea

ntrerupere

Exterioar derulrii
instruciunii curente

Reacionare la un eveniment
asincron extern

Deviere

Legat de derularea
instruciunii curente

Tratarea unei erori sau situaii


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.

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

39

Armare

Dezarmat

ntrerupere

Declanare
programat

Dezarmare

Armat

[ Punct de ntrerupere ]
Ateptare
[ Nivel cu masca eliminat ]
[Nu exist nivel activ cu o prioritate mai mare]

Activ

Achitare

Fig.2.3. Strile unui nivel de ntrerupere

40

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
41
poate fi suspendat pentru a permite tratarea unei ntreruperi cu o prioritate mai nalt).

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>
<8-11>
<12>
<13>
<14>
<15>

masca ntreruperii
cheie de protecie
codul caracterelor
masca ntreruperii
1 - ateptare, 0 - activ
0 - stpn, 1 - sclav.

<16-31>
<32-33>
<34-35>
<36-39>
<40-63>

codul ntreruperii
lungimea instruciunii
codul condiiei
suprimarea devierii
contor ordinal

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 intrareieire, 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.

2.
3.
4.

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.
operatorul adr aplicat unui identificator de variabil sau de procedur,
desemneaz adresa amplasamentului unde se afl variabila sau prima
instruciune a procedurii,
notaia Mp[adr] desemneaz coninutul amplasamentului cu adresa adr.
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);
ncarc_csp(dev_vechi)

47

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
Msurare
Msurare
Msurare
Msurare
lucrri n regim de fond.
Fond

Realizarea prin program:

Fond

Fond

Fond

Iniializare

const q = 20000
-- 100ms/5s
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

100 ms

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.
2.

de un program al utilizatorului, care semnaleaz o anomalie sau cere achitarea


unui serviciu,
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
p

p
(a)

Cp

Cp

(b)

UC

UC
Magistral

(c)

Cp

Cp

Cp

UC
M
C
ADM
Cp
p

Fig. 2.5. Organizarea intrrilor-ieirilor

: unitate central
: memorie
: canal
: acces direct la memorie
: controler
: dispozitiv periferic

53

Un canal (sau unitate de schimb) este un procesor specializat n operaiile de intrareieire. 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
54
poate fi multiplexat pentru mai multe periferice cu debitul mai mic.

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
Controler
0

Canal

0
1

Canal

00
Controler
01, 10

0
1
0
1

010
100

011
101
110

11

p
1

001

0
Controler

Aceast
organizare
permite
ameliorarea
performanelor
i
disponibilitii sistemului. Existena
mai multor ci de acces la un periferic
diminueaz riscul unor indisponibiliti
din cauza saturaiei sau ieirii din
funciune a unui canal sau controler.

000

111

Fig.2.6. Adresarea perifericelor

55

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 intrareieire, 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 timpul
57
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
ntreruperii
term:=FALSE
SVC i:=0;
ieire
OUT(adr T[i], adr_perif);

<tratare paralel>

if term then

programul de tratare a
(la prsirea lui T[i])
save context;
TEST(adr_perif);
if err then
<tratare eroare>
else
if i<n-1 then
i:=i+1;
OUT(adr T[i], adr_perif)
else
58
term:=TRUE
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
de
trebuie relansat.
citire (nreg)
intrare

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
scriere (nreg)
ieire

Zon-tampon cu N locaiuni

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

tratare ntrerupere
if tamponul_nu este_vid then
lansare_transfer;
if ateptare then
reluare scriere
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

Variabile
L
Ncitire
nvcitire
citire_activ
tcitire, qcitire
suc()

Semnificaie
lungimea unei casete (nregistrri)
numrul de casete a zonei-tampon
numrul de casete vide
indicator al activitii perifericului de intrare
pointeri top i coad
pointer spre caseta urmtoare

tcitire

Valoare iniial
const.
const
Ncitire
false
0, 0

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
64
activitilor asincrone.

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

tm1

IF

tm2

(memorie)

td

(memorie)

(disc)
Fig.3.1. Gestionarea buferizat a unei imprimante

1)
2)
3)
4)

primitiva scriere_linie SL
scriere pe disc
citire de pe disc
CD
imprimare fizic
IF

(unitatea central)
SD
(canal 1)
(canal 2)
(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
SL
SD
SD
CD
CD
IF

Aciune
scriere n tm1
citire din tm1
scriere n td
citire din td
scriere n tm2
citire din tm2

Condiie
tm1 nu este plin
tm1 nu este vid
td nu este plin
td nu este vid
tm2 nu este plin
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.
2.

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.
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)
b)
c)

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.
Prioritate. Prioritatea proceselor permite ordonarea lor pentru alocarea procesorului.
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)

(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)
b)

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)
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
+------+---+
+----------+
+--+--+
b1
a1

a2
+----+------+
+-----+---------+
b2
a2

p (timp real, execuia 1)


q
76

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
77
sfrit(Ap) < nceput(Aq) sau sfrit(Aq) < nceput(Ap).
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.
var

sinc: monitor;
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
endif
toi_sosii.semnalizare
end

--nu au sosit toate procesele


-- a sosit i ultimul

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

end resurse

88

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:
aut(citire) : scr=false
(nu exist scrieri curente)

89

fich : monitor;
var scr
: boolean;
nc
: integer;
c_scr, c_cit : condiie;
procedura debut_citire;
begin
nc:=nc+1;
if scr then
c_cit.ateptare;
endif
end
procedura terminare_citire;
begin
nc:=nc-1;
if nc=0 then -- ultimul cititor a terminat
c_scr.semnalizare
endif
end
procedura debut_scriere;
begin
if scr or nc>0 then -- scriere sau citire n curs
c_scr.ateptare
endif;
scr:=true
end

procedura terminare_scriere;
begin
scr:=false;
if nc>0 then
-- prioritate
cititorilor care ateap
c_cit.semnalizare
else
c_scr.semnalizare
endif
end
begin
-- iniializare
scr:=false;
nc:=0
end
end fich
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;
var n
: 0..N;
non_plin, non_vid : condiie;
<declaraii ale procedurilor introducere i
extragere>
procedura depozitare(m:mesaj);
begin
if n=N then
non_plin.ateptare
endif;
n:=n+1;
introducere(m);
non_vid.semnalizare
end
procedura preluare(var m:mesaj);
begin
if n=0 then
non_vid.ateptare
endif;
extragere(m);
n:=n-1;
non_plin.semnalizare
end;
begin
-- iniializare
n:=0;
end
end tampon

Procedurile introducere(m) i
extragere(m) definesc politica de
gestionare a tamponului i
reprezentarea intern a mesajelor.
type mesaj : <descrierea formatului
mesajelor>
pt
: 0..N-1;
var fa : array[pt] of mesaj;
top, coad: ptr;
procedura introducere(m:mesaj);
begin
fa[coad]:=m;
coad:=coad+1 mod N
end;
procedura extragere(var m:mesaj);
begin
m:= fa[top];
top:=top+1 mod N
end;
<iniializarea se va completa cu top:=0;
coad:=0;>
Schema poate fi extins pentru mai
muli productori i consumatori.
92
Drept efect, procedurile
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>
procedura intrare(l:linie);
tm1[coad] := l;
coad := coad+1 mod N1

<pentru tm 2>
procedura intrare(l:linie);
tm2[coad] := l;
coad := coad+1 mod N2

procedura ieire(var l:linie);


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

procedura ieire(var l:linie);


l := tm2[top];
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);
disc.scriere(l,td[coad]);
coad := coad+1 mod N

procedura ieire(var l:linie);


disc.scriere(l,td[top]);
disctop := top+1 mod Ndisc

96

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
4.4.4. Obinerea informaiilor despre procese

100

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
<restul programului>

103

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:
nf(mutex) 1+nv(mutex)

108

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,
111
pe care le vom prezenta nainte de a descrie o realizare concret.

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
ales
eligibil
eligibile, algoritmul de alocare poate fi definit
(2)

(ready)

cu ajutorul algoritmului de inserare


n firul proceselor eligibile sau
cu ajutorul algoritmului care
determin retragerea procesoarelor fizice.

(4)

(exe)

(3)

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
asigurarea coerenei informaiilor aceste
programul
nucleului
programe trebuie executate n excludere
mutual. Executarea unui program al
nucleului se termin n toate cazurile
periferice,
prin realocarea procesorului sau
ceasul
procesoarelor, adic prin apelarea
lansare
ntreruperi
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:
prolog;
p:=<proces apelant>;
intrare(p, M.c.fir);
stare[p]:=blocat;
eliberare_disp(M);
alocare_procesor;

c.semnalizare:
prolog;
p:=<proces apelant>;
if non_vid(M.c.fir) then
ieire(q, M.c.fir);
cerere_disp(M, p);
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
123
<sosirea unei ntreruperi asociate lui M.c>
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)
endfor;

126

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

Csp
Reg
Prio=6
p1

Registre

Csp
Reg
5

p2

Procesor

p3

p4

c.fiier

(a) nceputul executrii c.ateptare

p5

p6
Cuvnt de stare
proc_al

f_eligibil

Registre
Procesor

6
p1

5
p3

p2

c.fiier

(b) sfritul executrii c.ateptare

5
p5

2
p4

1
p6

Fig.4.5. Alocarea procesorului

129

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
..
.
identificator
..
.

obiect/reper

Ri
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.
139
externe i parametrii sunt obiecte libere dup compilare). Pentru un obiect
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 ntrun 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
140
proprie procesului.

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,
141
partajarea obiectelor ntre mai muli utilizatori cu drepturi sau proceduri de accesare
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.
142
Vom numi mediu mulimea format dintr-o lexic i informaiile (programe, date,
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.

lexica

context

reguli de
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 (ntrun 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
148
obiectelor acestui context.

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
coloan
fiecare
Oj (notm, c
1 pentrufiierul
2 obiect
periferic
D1 domeniile,
D2 fiind obiecte
D3
apar de <citire,
asemenea
i n coloane).
drepturile
pe
Dparticulare,
<citire, scriere,
scriere,
<alocare, Caseta
<> (i, j) conine
<apelare>
<schimbare
1
care leexecutare>
are un proces, executare>
care se execut
n domeniul Di, asupra unui obiect
Oj.
retragere>
drepturi>

D2
D3

<citire, scriere,
executare>
<citire, scriere,
executare>

<citire, scriere,
executare>
<citire, scriere,
executare>

<cerere,
eliberare>
<>

<apelare>

<>

<apelare>

<nil>

<apelare>

<>

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 150
produce
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 local desemneaz un
nume externe locale este realizat
nume localprin nlnuire:
numeun
intern
descriptor local, care la rndul su, direct sau indirect, repereaz descriptorul
descriptor local
unic (Cataloage)
al fiierului.
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

fiier

program

...

test

...

...

...

doc

Christy

doc

Fig. 5.5. Organizarea fiierelor pe niveluri

program

Eugen

...
doc

program

152
fiier

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.
nil

(a) pn la asociere

descriptor
de flux

fiier

tampon

descriptor
de fiier

procedur
de acces

(b) dup asociere la un fiier


Fig.5.7. Asocierea unui flux de intrare-ieire

perif

tampon

descriptor
de periferic

procedur
de acces

(c) dup asociere la un periferic


153

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

translator

program obiect
(adrese relative)

ncrctor
date

program obiect
(adrese absolute)

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
155
fiecrui identificator. Aceste adrese sunt transformate n adrese absolute;
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
157
acestuia: fiecare adres relativ este incrementat cu adr_ncrcare. Poziia
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
158
6.6.3. Funcionarea i utilizarea

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
de acces
(un atare
nume
desemneaz o nregistrare sau un cmp al acesteia),

traducerea adreselor logice n adrese fizice


desemnarea nregistrrii

adres logic

Fig.6.1. Adresare logic ntr-un fiier

adres fizic
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
i locale

Interfaa
utilizatorului

legarea numelor
Interpretarea numelor
locale

Interpretarea numelor
externe

Nume
interne

Realizarea
funciilor de acces
logic

Adrese
logice

Realizarea
funciilor de acces
fizic

Adrese
fizice

Alocarea
memoriei
secundare

Interfee interne la SGF

Realizarea
I-E
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)>;
f.rest:=f.rest-primul(f.rest)

166

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
169
utilizrii fiierului:

probabilitatea unor valori diferite ale cheii,

f(cheie2)= f(cheie3)

articol 2

al2=f(cheie2)

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
indice distinct pentru fiecare
cheie. Fiecare intrare a
tabelului indicilor, asociat unei
chei concrete, care corespunde
unei valori distincte a acestei
chei, puncteaz topul unei liste
n care sunt toate nregistrrile
pentru care cheia considerat
posed valoarea dat. Pentru
realizarea acestor liste fiecare

n afara tabelului indicilor referinelor au mai fost


introduse un tabel al autorilor i unul al
editorilor. Fiecare intrare a tabelului indicilor
autorilor este topul unei liste, care grupeaz
toate
nregistrrile
pentru
care
valoarea
cmpului autor este aceeai. Pointerii acestor
liste sunt adrese logice. Este simplu de gsit
toate lucrrile unui autor publicate la una i
aceeai editur. Pot fi obinute combinaii pentru
172
aceste cereri cu ajutorul operaiei intersecie.

Este posibil comprimarea reprezentrii


fiierului, utiliznd liste circulare, care
includ intrrile corespunztoare ale
tabelelor indicilor (lista lucrrilor
scrise de Paul, de exemplu, se nchide
la intrarea Paul din tabelul indicilor
autorilor). Cmpurile autor i editor
ale prii info a reprezentrii
nregistrrilor pot fi suprimate pentru
c ele pot fi determinate din listele
respective. Dezvoltnd aceast idee,
se poate crea cte un indice distinct
pentru fiecare cmp; reprezentarea
nregistrrilor va conine doar pointeri
i toat informaia se conine doar n
tabelele indicilor. Un fiier reprezentat
n acest mod se numete inversat.
Aceast reprezentare permite un
rspuns imediat la cereri legate de
combinaii ale cmpurilor i poate fi
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
schematic prezentat n figura 6.6.

tabelul
indicilor
referinelo
r

adres
logic

tabelul
indicilor
autorilor

nregistrr
i

tabelul
indicilor
editorilor
tabelul
indicilor
anilor
Fig.6.6. Organizarea unui fiier inversat

173

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

Fig.6.9. Tabel de implantare cu dou


nivele

178

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.
180

Informaii despre utilizrile precedente. Aceste informaii pot fi de natur


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
lungimea
starea iniial

(opional)
(opional)
(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
183
singur cale de acces. Aceast soluie este utilizat, de exemplu, n sistemul
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,
184
alocarea eventual a memoriei pentru zonele tampon de intrare-ieire.
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
192
comunicaie, de exemplu), cererile sunt transmise sub form de mesaje unui
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.
2
2 tm funcie de timpul de
Timpul mediu de ateptare
t s servire ts este dat de formula
t m s (1 C t s )
(7.2):
(t s ) tdB (t )
2

2[1 (t s )]

tm(ts) =

cu

(7.2)

Formulele de aproximare sunt

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

tm(ts)

(7.3)

2
2
t m (1 C t )
pentru valori mari ale
(ts) este aproape de tms, fie :
2(1 ts,unde
)2
s

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)
ts
prioritatea unei cereri la un moment de timp
Fig.7.3.
Dependena timpului mediu de rspuns d
p(t) = [t()+ts)]/ts
timpul de servire n cazul disciplinelor FIFO i
(7.5)
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
198
prioritii variabile.
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
proc_ale
f_eligibil
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

intrare

procesor
Fig. 7.5. Carusel cu mai multe niveluri

ieire

ts
ts
FIFO prim sosit prim servit PP procesor partajat
CSSP cerere scurt servit prima CM carusel
multinivel
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
nume

desemnare
legare

memorie
virtual

alocarea
memoriei

memoria
fizic

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

Fig.8.3.
Intervalul mediu ntre dou absene de
pagini n funcie de capacitatea memoriei

210

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
zona 2
adreselorsistemul
de implantarezona
din1zona atribuit

memoria
fizic

A
C

programe

1) Alocarea memoriei
A(1)

Unitatea
Activit central
Canalul
i

B(2)

B(2)

A(1)

C(1)

C(1)

B(2)

programele
(zone)
ncrcare
salvare

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
214
de localizare asigurnd o rat nalt a succeselor.

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
capacitate legtur
de alegere pot fi:
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
un bloc de capacitatea Si+1 este divizat,
conform relaiei de recuren. De exemplu,
n sistemul binar divizarea unui bloc de
B1
capacitatea 8 creeaz dou blocuri de capacitate 4;
n caz general, divizarea unui bloc de capacitatea
Si+1 creeaz dou blocuri de capacitatea Si.
B1
n sistemul Fibonacci, divizarea unui bloc de
capacitatea Si+1 creeaz un bloc de capacitate
Si i unul Si-1. Algoritmul este aplicat n mod recursiv,
dac nu exist un bloc liber de capacitatea Si+1.

B2

B3

B4

B3

B4

(dup eliberarea lui B2


B4

(dup eliberarea lui B3

Fig.8.8. Alocarea memoriei prin divizarea binar a


Putem considera, c orice bloc de capacitatea s>1 este concatenarea
blocurilora dou blocuri
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
de alocare a memoriei sunt utilizai
n dou maniere:

De ctre sistemul de operare la


alocarea memoriei pentru lucrri,
atunci cnd sunt create procese
sau cnd sunt formate zone-tampon
de intrare-ieire, etc.

liber

liber
liber
Liber

Liber

liber
Baz Lungime
Lucrri

De ctre utilizatori: sistemul puneBaz Limit


la dispoziie, sub forma unui apel
supervizor, primitivele cerere memorie
i eliberare memorie. Aceste primitive
sunt utilizate, de exemplu, de compilatoare
pentru gestiunea variabilelor dinamice.

Lucrri
Sistem
rezident

Sistem
rezident

dup terminarea T2

Fig.8.9. Alocarea memoriei


lucrrilor

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
rezident

Sistem
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

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
npv
virtuale npv i adresele paginilor memoriei fizice
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

npf

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
npv
npf
npf
npv
npf
bitul este pus n 1 (fig.8.12, b).
adres fizic
adres fizic
Calculatorul XDS Sigma 7
Npf-1
Npv-1
(cunoscut de asemenea sub
denumirea CII 10070) ilustreaz
pagin lips (n
pagin lips
caz de eec)
aceast tehnic cu p=8 i l=9
(dac prezent=0)
(256 pagini de 512 cuvinte).
(b) registre topografice
(a) memorie asociativ
Memoria topografic a mbuntit
Fig.8.12. Memorie virtual paginat
cu doar 10% timpul de acces la
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
npf
npv
un indicator de modificare modif (1 bit)
modul autorizat de acces (protecia) prot.
prezent

eec

n timpul unei accesri a memoriei


corespondena dintre adresa virtual
prezent=1
i cea fizic este stabilit astfel:
prot
npf
npv
adr.virt := (npv, dep);
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

npf
adres fizic

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
npv
memoria virtual este
memorie asociativ
divizat n hiperpagini,
care la rndul lor sunt
Reg.baz
mprite n pagini. O
nhip
npv
eroare de
adres virtual este de
Tabel de
adresare
forma (nhip, npv, dep).
hiperpagini
Numrul nhip al hiperpaginii
prezent
permite accesul la un tabel
npf
de hiperpagini, in care fiecare
Tabel de hiperpagini
intrare conine un pointer la
adres fizic
(prezent=0)
tabelul de pagini ale hiperpaginii,
pagin lips
Tabelul paginilor
care este limitat doar la paginile
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 ntrun 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
237
fizice libere sau introducerea unei ntrzieri artificiale, determinate
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
executat ntr-un spaiu
virtual de adrese de 64 To

243

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 au244
acces 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.
9.2.3.2.
9.2.3.3.
9.2.3.4.

Organizarea logic
Organizarea fizic
Operaii cu fiierele
Intrri-ieiri logice i gestiunea fluxurilor

9.2.4. Interpretorul limbajului de comand


9.2.4.1.
9.2.4.2.
9.2.4.3.
9.2.4.4.

Schema general
Mediul de execuie
ncrcarea unui program
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
250dintro 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>
<list parametri>
<parametru>

::=<nume comand><list parametri>


::=spaiu|<list parametri><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
253
specifica aici.

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
255
scriere nu-i mai pot fi aplicate.
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
256
memorie.

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 memorietampon. 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,
3) dintre ocupate, alegnd cel pentru care ultima referin este cea mai veche

261

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,
sens);
CUTARE_PIST(np) -- deplasarea braului
test: TEST
if nonterm then go to test
endif;
for nsect:=0 to nbsect-1 do -- nbsect = 27
transferare_sector(tampon[nsect],nsec
t,sens)
endfor;
modif:=false;
if sens=citire then
pist_prezent:=np
endif

procedura transferare_sector(adr,nsect,sens);
nsect:=convertire(nsect); -- numrul sectorului
fizic
nr_ncercri:=0;
repetare: case sens of
citire:
CITIRE_SECTOR(adr,nsect);
scriere: SCRIERE_SECTOR(adr,nsect);
endcase
test: TEST-- control corectitudine transfer
if err then
nr_ncercri:= nr_ncercri+1;
if nr_ncercri<nmax then
go to repetare
else
cauza:=eroare_fatal
-- eec dup nmax
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
execuiei unei comenzi, este de a pregti mediul su,
adic mulimea obiectelor, care vor fi utilizate i
informaiile, care vor permite accesarea obiectelor.
n cazul executrii unui program al utilizatorului acest
mediu conine (v. fig. 9.3):
- segmentele cu programul care trebuie executat i
date,
- stiva de execuie,
- o zon de lucru, numit pagin de gard, care
conine:
pointeri, care puncteaz segmentele program
i date, precum i zona liber,
descriptorii fiierelor, specificate n comand,
un tampon destinat schimburilor cu fiierele.

sistem rezident
stiva
liber
segment date iniializate
segment date

tampon
intrare-ieire
descriptor 1
descriptor 2
pointeri

segment procedur
pagin de gard

(pagin de gard)

sistem rezident
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
274
rezultatul unei erori grave, care provoac alterarea tabelelor interne ale sistemului
sau a
fiierelor pe disc. Returul este realizat de secvena iniializare_sistem. Pierderea de