You are on page 1of 329

Sisteme de operare 3

Capitolul 1
INTRODUCERE
Informatica este o tiin recent i nu a avut nc timp s se
structureze pe capitole strict delimitate i bine definite. Dezvoltarea
exploziv din ultimele dou decenii a fcut ca ordonarea materialului s
urmreasc cu greu abundena de noi informaii att n domeniul tehnicii de
calcul ct i n privina numeroaselor probleme n rezolvarea crora aceasta
poate fi utilizat.
Nu exist o teorie unic a informaticii ci multe teorii care se
suprapun parial: arhitectura ordinatoarelor i evaluarea performanelor lor,
conceperea i verificarea circuitelor, algoritmic i analiza algoritmilor,
concepia i semantica limbajelor de programare, structuri i baze de date,
principiile sistemelor de operare, limbaje formale i compilare, calcul
formal, coduri i criptografie, demonstraie automatic, verificarea i
validarea programelor, timp real i logici temporale, tratarea imaginilor,
sinteza imaginilor, robotica etc. Fiecare dintre aceste domenii are
problemele sale deschise, unele celebre, de exemplu gsirea unei semantici
pentru limbajele de programare obiectual.
Pe plan didactic, ns, s-au conturat anumite discipline care s
asigure studenilor posibilitatea de a accede la problematica vast a
informaticii. Printre altele se studiaz i SISTEMELE DE OPERARE care
intervin ntr-un sistem de calcul.

1.1 SISTEME DE OPERARE. DEFINIIE


Un sistem de operare (SO) este un set de programe care are dou
roluri primordiale:
-asigur o interfa ntre utilizator i sistemul de calcul, extinznd
dar i simplificnd setul de operaii disponibile;
Sorin Adrian Ciureanu 4
-asigur gestionarea resurselor fizice (procesor, memorie intern,
echipamente periferice) i logice (procese, fiiere, proceduri, semafoare),
implementnd algoritmi destinai s optimizeze performanele.
De exemplu, cele dou componente ale definiiei pot fi:
publicitatea (interfaa) i valoarea produsului (gestionarea resurselor).
Exemple de SO sunt sistemele MS-DOS, WINDOWS , UNIX,
RSX, MACH, DIGITAL, SOLARIS, LINUX, OS/2 etc.
1.2. LOCUL SISTEMULUI DE OPERARE NTR-UN
SISTEM DE CALCUL
Componentele unui sistem de calcul sunt:
1.-Hardware - care furnizeaz resursele de baz (UC, memorie,
dispozitive I/O).
2.-Sistem de operare - care controleaz i coordoneaz utilizarea
hardware-ului pentru diferite programe de aplicaii i diferii utilizatori.
3.-Programe de aplicaie - care definesc cile prin care resursele
sistemului sunt utilizate pentru a rezolva problemele de calcul ale
utilizatorilor (compilare, sisteme de baze de date, jocuri video, programe
business etc.).
4.-Utilizatori care pot fi persoane, maini, alte calculatoare etc.
Fig.1.1. Schema componentelor unui sistem de calcul.
Acum zece ani, un sistem de operare era doar o pies de baz a
softului care rula pe o main i permitea manipularea fiierelor, conversa
Utilizator 1 Utilizator 2 Utilizator 3 Utilizator n
compilator asamblor editor texte sistem
de baze
de date
Programe sistem de aplicaie
Sistem de operare
Hardware
calculator
Sisteme de operare 5
cu orice periferic i lansa programe. Acum sistemele de operare au devenit
mai complexe, funcionnd ca intermediari ntre utilizator i hardware,
realiznd executarea programelor utilizator cu mai mare uurin i utiliznd
eficient hardware-l calculatorului.
n concepia lui A. Tanenbaum, un calculator este organizat pe mai
multe niveluri. Trecerea de pe un nivel pe altul se poate face prin
interpretare sau prin traducere.
Dac avem dou limbaje de programare L
i
i L
i+1
, se poate trece
din L
i+1
n L
i
prin interpretare sau prin traducere.
Interpretare. Programul scris n L
i+1
este executat pas cu pas, n
sensul c instruciunile din L
i+1
se execut pe rnd, fiecare instruciune din
L
i+1
fiind o dat de intrare pentru L
i
. Instruciunea din L
i+1
are o secven
echivalent de instruciuni care se execut n L
i
. Nu se genereaz un nou
program n L
i
.Traducere. ntreg programul din L
i+1
se nlocuiete cu un
v nou program n L
i
, generat prin nlocuirea fiecrei instruciuni din L
i+1
cu
o secven echivalent n L
i
.
Considernd un sistem de calcul cu 6 niveluri, SO se plaseaz ca n
schema din figura 1.2.
Nivel 5 NIVELUL LIMBAJULUI ORIENTAT PE
PROBLEM
Traducere (compilator)
Nivel 4 NIVELUL LIMBAJULUI DE ASAMBLARE
Traducere(asamblor)
Nivel 3 NIVELUL SISTEMULUI DE OPERARE
Interpretare parial
Nivel 2 NIVELUL ARHITECTURII SETULUI DE
INSTRUCIUNI (ISA)
Interpretare(microprogram) sau executare direct
Nivel 1 NIVELUL MICROARHITECTURII
Hard
Nivel 0 NIVELUL LOGIC DIGITAL
Fig.1.2. Nivelele unui sistem de calcul.
Dup Tanenbaum, calculatorul este foarte flexibil iar hardul i
softul sunt echivalente sau, aa cum spunea Lenz, hardul este soft
Sorin Adrian Ciureanu 6
pietrificat. n schema de mai sus, numai nivelul 0 (nivelul circuitelor) este
hard pur. Celelalte niveluri pot fi implementate hard sau soft n funcie de
optimul planificat.
Observm c, n schem, SO este pe nivelul 3. SO conine toate
instruciunile ISA (Instructions Set Architecture),de pe nivelul 2, plus
apelurile sistem (system calls). Un apel sistem invoc un serviciu predefinit
al SO, de fapt una din instruciunile acestuia.
Noile faciliti (apelurile sistem) adugate pe nivelul 3 sunt
realizate de un interpretor care le execut pe nivelul 2 i care, din motive
istorice, se numete SO. Instruciunile de pe nivelul 3 care sunt identice cu
cele de pe nivelul 2 sunt executate direct de microprogram. Spunem c
nivelul 3 este un nivel hibrid deoarece unele instruciuni de pe nivelul 3
sunt interpretate de SO (apelurile sistem) iar altele sunt interpretate direct de
microprogram.
1.3. SARCINILE SISTEMULUI DE OPERARE
Pornind de la definiia unui SO, se pot identifica responsabilitile
sale, prezentate n continuare.
1.3.1. Asigurarea interfeei cu utilizatorul
Trebuie precizat c interfaa SO utilizator este constituit din
orice instrument care permite comunicarea ntre un SO i un operator
(utilizator), indiferent dac este hard sau soft. n cvasitotalitate, interfeele n
SO sunt soft i pot lua diferite forme.
1.3.1.1. Monitoare
Unele calculatoare conin, stocat ntr-o memorie ROM intern, un
program numit monitor care se lanseaz automat la pornirea calculatorului
i i permite operatorului s efectueze operaii simple asupra sistemului de
calcul, cum ar fi: inspectarea i modificarea registrelor procesorului,
vizualizarea coninutului memoriei etc.
De obicei, monitorul este un complementar al SO, n sensul c
pornete cnd nu a putut fi ncrcat SO. Este specific sistemelor de calcul
mai vechi, actualmente existnd puine sisteme de calcul care nglobeaz un
monitor. Denumirea de monitor se utilizeaz i pentru un obiect de
sincronizare i pentru ecranul calculatorului.
Sisteme de operare 7
1.3.1.2. I nterfee n linie de comand (interfee text)
Interfeele n linie de comand sunt reprezentate, n general, de un
program numit interpretor de comenzi, care afieaz pe ecran un prompter,
primete comanda introdus de operator i o execut. Comenzile se scriu
folosind tastatura i pot fi nsoite de parametri. Aproape toate sistemele de
operare includ o interfa n linie de comand, unele foarte bine puse la
punct (UNIX) iar altele destul de primitive (MSDOS, WINDOWS).
1.3.1.3 I nterfee grafice
Interfeele grafice sunt cele mai populare. Se prezint sub forma unui
set de obiecte grafice (de regul suprafee rectangulare) prin intermediul
crora operatorul poate comunica cu SO, lansnd operaii, setnd diferite
opiuni contextuale etc.
Vom prezenta, comparativ, caracteristicile celor dou tipuri de
interfee cu calculatorul.
Interfa n linie de comand.
Avantaje:
-Permite scrierea clar i explicit a comenzilor, cu toi
parametrii bine definii.
-Ofer flexibilitate n utilizare.
-Comunicarea cu SO se face mai rapid i eficient.
Dezavantaje:
-Operatorul trebuie s cunoasc bine comenzile i
efectele lor.
-Este mai greu de utilizat de ctre neprofesioniti.
Interfa grafic
Avantaje:
-Este intuitiv i uor de folosit.
-Poate fi utilizat de neprofesioniti.
-Creeaz un mediu de lucru ordonat.
-Permite crearea i utilizarea unor aplicaii complexe,
precum i integrarea acestora n medii de lucru unitare.
Dezavantaje:
-Anumite operaii legate, de exemplu, de configuraia
sistemului pot s nu fie accesibile din meniurile i
ferestrele interfeei.
-Interfaa ascunde anumite detalii legate de preluarea
Sorin Adrian Ciureanu 8
i execuia comenzilor.
-Folosete mai multe resurse i este mai puin flexibil.
In general, exist dou componente principale:
-comenzi, care sunt introduse de utilizator i prelucrate de
interpretorul de comenzi nainte de a ajunge la SO;
-apeluri sistem, care sunt folosite direct de ctre programatorii de
sistem i indirect de ctre programatorii de aplicaii, apar n programe i se
declaneaz n timpul execuiei acestor programe, fiind asemntoare cu
procedurile.
Apelurile sistem definesc propriu zis arhitectura unui SO, adic
aparena sa ctre exterior, aspectul funcional al sistemului. Se poate
considera c ele ndeplinesc acelai rol pentru SO ca i lista de instruciuni
pentru procesor.
Un aspect care devine tot mai important este acela al standardizrii
interfeelor unui SO. Asigurarea unei interfee uniforme ( att la nivel de
comenzi ct i la apeluri sistem) ar permite portabilitatea aplicaiilor, adic
posibilitatea de a trece un program de aplicaii de sub un SO sub altul, fr
modificri.
1.3.2. Gestiunea proceselor i a procesoarelor
Un program n execuie sub controlul unui SO este un proces. Pentru
a-i ndeplini sarcinile, procesele au nevoie de resurse, cum ar fi: timpul de
lucru al UC (unitatea central), memorii, fiiere, dispozitive I/O. Apare
evident necesitatea ca resursele s fie utilizate n comun. O serie de
mecanisme speciale au fost introduse n SO pentru a servi la gestionarea
proceselor la diferite niveluri de detaliu. In practic exist o legtur strns
i cu nivelul de ntrerupere al calculatorului. Gestiunea procesorului este
privit ca o parte component a gestionrii proceselor.
1.3.3. Gestionarea memoriei
Acest modul controleaz, n primul rnd, utilizarea memoriei interne.
ntotdeauna o poriune a acestei memorii este necesar pentru nsui SO, iar
restul este necesar pentru programele utilizator. Frecvent, mai multe
programe utilizator se afl simultan n memorie, ceea ce presupune
rezolvarea unor probleme de protecie a lor, de cooperare intre aceste
programe sau ntre programe i SO, precum i a unor probleme de mprire
a memoriei disponibile ntre programele solicitante. Memoria extern este
Sisteme de operare 9
implicat n activitatea modulului de gestionare a memoriei. Mecanismele
swapping i de memorie virtual folosesc memorie extern pentru a extinde
capacitatea memoriei interne.
1.3.4. Gestionarea perifericelor
Modul de gestionare a perifericelor cuprinde toate aspectele
operaiilor de introducere i extragere a informaiei: pregtirea operaiei,
lansarea cererilor de transfer de informaie, controlul transferului propriu
zis, tratarea erorilor.
La majoritatea echipamentelor periferice actuale transferurile de
intrare/ieire (I/O=input/output) se desfoar indiferent de procesor, rolul
SO fiind acela de a asigura aceste transferuri cu ajutorul sistemului de
ntreruperi.
1.3.5. Gestionarea fiierelor
Fiierul este entitatea de baz a unui SO, cea care pstreaz
informaia. Toate operaiile legate de fiiere (creare, tergere, atribute,
copiere, colecie de fiiere, securitatea informaiei) sunt coordonate de SO
cruia i revine un rol important n acest caz.
1.3.6. Tratarea erorilor
Sistemul de operare este acela care trateaz erorile aprute att la
nivel hard ct i la nivel soft. Tratarea unei erori nseamn mai nti
detectarea ei, apoi modul de revenire din eroare pentru continuarea lucrului,
mod care depinde de cauza erorii i de complexitatea sistemului de operare..
Unele erori sunt transparente utilizatorului, altele trebuiesc neaprat
semnalate. De asemenea unele erori sunt fatale i duc la oprirea sistemului
de operare.
Mecanismul principal de tratare a erorilor este ca sistemul de
operare s repete de un numr definit de ori operaia euat pn la
desfurarea ei cu succes sau pn la apariia erorii fatale.
La ora actual sistemele de operare moderne acord un rol foarte
important conceptului de siguran n funcionare i de protecie a
informaiei., de unde atenia ce se d operaiilor de detectare i tratare a
erorilor.
Sorin Adrian Ciureanu 10
1.4. CARACTERISTICILE SISTEMELOR DE OPERARE
1.4.1. Modul de introducere a programelor n
sistem
Din acest punct de vedere sistemele de operare pot fi:
-SO seriale, n care se accept introducerea lucrrilor de la un singur
dispozitiv de intrare;
-SO paralele, n care introducerea lucrrilor se face de la mai multe
dispozitive de intrare;
-SO cu introducerea lucrrilor la distan.
De exemplu, sistemele UNIX i WINDOWS sunt paralele i cu
introducere la distan, pe cnd sistemul MS-DOS este serial.
1.4.2. Modul de planificare a lucrrilor pentru
execuie
Dup modul de planificare a lucrrilor pentru execuie, sistemele de
operare pot fi:
-SO orientate pe lucrri, care admit ca unitate de planificare
lucrarea, alctuit din unul sau mai multe programe succesive ale aceluiai
utilizator;
-SO orientate pe proces, care admit ca unitate de planificare
procesul.
SO moderne sunt orientate pe proces.
1.4.3. Numrul de programe prezente simultan
n memorie
Dup numrul de programe prezente simultan n memorie sistemele
de operare pot fi:
-SO cu monoprogramare (cu un singur program n memoria
principal);
-SO cu multiprogramare (cu mai multe programe existente, la un
moment dat, n memoria principal). De exemplu, sistemele UNIX i
WINDOWS sunt cu multiprogramare. Sistemul MS-DOS este ceva ntre
monoprogramare i multiprogramare.
Sisteme de operare 11
1.4.4. Gradul de comunicare a proceselor n
multiprogramare
Sistemele de operare cu multiprogramare pot fi:
-SO monotasking, n care programele existente n memorie nu au un
obiectiv comun, nu comunic i nu-i pot sincroniza activitile;
SO multitasking, n care programele existente n memorie au un
obiectiv comun i i sincronizeaz activitile.
UNIX i WINSOWS sunt multitasking. MS-DOS este un hibrid;
prin operaiile de redirectare i indirectare MS-DOS nu este monotasking
pur (redirectare - sort<date.txt ; indirectare -
dir|sort|more ).
1.4.5. Numrul de utilizatori simultani ai SO
-SO monouser ( cu un singur utilizator) ;
-SO multiuser (cu mai muli utilizatori).
UNIX i WINDOWS sunt multiuser, MS-DOS este monouser.
1.4.6. Modul de utilizare a resurselor
Dup modul se utilizare a resurselor, sistemele de operare pot fi :
-SO cu resurse alocate (resursele alocate proceselor sunt alocate
acestora pe toat desfurarea execuiei) ;
-SO n timp real (permit controlul executrii proceselor n interiorul
unui interval de timp specificat);
-SO cu resurse partajate (resursele necesare proceselor sunt afectate
acestora periodic, pe durata unor cuante de timp).
Dac resursa partajat este timpul unitii centrale, SO devine
partajat.
SO n timp real sunt utilizate pentru conducerea direct, interactiv,
a unui proces tehnologic sau a altei aplicaii. Procesul va transmite ctre SO
n timp real parametrii procesului iar SO va transmite ctre proces deciziile
luate.
Informaiile despre proces sunt luate n considerare n momentul
comunicrii lor iar rspunsul sistemului trebuie s fie extrem de rapid, deci
timpii de execuie a programelor trebuie s fie mici.
Sorin Adrian Ciureanu 12
Accesul la resursele sistemului poate fi :
-direct (caz particular SO n timp real, cnd se cere o valoare
partajabil maxim a timpului de rspuns) ;
-multiplu (acces la resursele sistemului pentru un mare numr de
utilizatori) ;
-time sharing (alocarea timpului se face pe o cuant de timp) ;
-la distan (prelucrarea se face asupra unor date distribuite i
dispersate geografic).
1.4.7. SO pentru arhitecturi paralele
SO paralele, folosite n multiprocesoare.
SO distribuite , folosite n multicalculatoare.
1.5. COMPONENTELE SISTEMELOR DE
OPERARE
Majoritatea sistemelor de operare, pentru a rspunde rolului de
interfa cu utilizatorii, sunt organizate pe dou niveluri:
-nivelul fizic, care este mai apropiat de partea hardware a sistemului
de calcul, interfernd cu aceasta printr-un sistem de ntreruperi;
-nivelul logic, care este mai apropiat de utilizator, interfernd cu
acesta prin intermediul unor comenzi, limbaje de programare, utilitare tec.
Potrivit acestor dou niveluri, sistemele de operare cuprind n
principal dou categorii de programe:
-programe de control i comand, cu rolul de coordonare i control al
tuturor funciilor sistemelor de operare, cum ar fi procese de intrare ieire,
execuia ntreruperilor, comunicaia hardware-utilizator tec.;
-programe de servicii (prelucrri), care sunt executate sub
supravegherea programelor de comand i control, fiind utilizate de
programator pentru dezvoltarea programelor sale de aplicaie.
In general, putem considera c un SO este format din dou pri:
partea de control i partea de serviciu.
1.5.1. Partea de control
Partea de control realizeaz interfaa direct cu hardul. Ea conine
proceduri pentru:
Sisteme de operare 13
-gestiunea ntreruperilor;
-gestiunea proceselor;
-gestiunea memoriei;
-gestiunea operaiilor de intrare/ieire;
-gestiunea fiierelor;
-planificarea lucrrilor i alocarea resurselor.
1.5.2. Partea de serviciu
Partea de serviciu conine instrumente de lucru aflate la dispoziia
utilizatorului. Ea exploateaz partea de control, dar transparent pentru
utilizator.
Partea de serviciu cuprinde soft aplicativ. Dup destinaia lor,
serviciile pot fi de :
-birotic ;
-baze de date ;
-dezvoltare de aplicaii/programe ;
-reele de calculatoare ;
-produse soft pentru prelucrarea informaiilor din diverse domenii.
1.6. STRUCTURA SISTEMELOR DE OPERARE
n sistemele de operare apar, n general, dou aspecte structurale:
-kernel (nucleu);
i
-user (utilizator).
Nucleul (kernel) are urmtoarele principale funcii:
-asigurarea unui mecanism pentru crearea i distrugerea proceselor;
-realizarea gestionrii proceselor, procesoarelor, memoriei i
perifericelor;
-furnizarea unor instrumente pentru mecanismele de sincronizare a
proceselor;
-furnizarea unor instrumente de comunicaie care s permit
proceselor s i transmit informaii.
Trebuie fcut diferena ntre:
procesele sistem, care au privilegii mari, i
procesele utilizator, cu un grad de privilegii mult mai mic.
Dup structura lor, sistemele de operare se clasific n:
-SO modulare , formate din entiti cu roluri bine definite ;
Sorin Adrian Ciureanu 14
-SO ierarhizate, n care o entitate poate folosi componente de nivel
inferior (de exemplu, partea de serviciu poate folosi partea de control);
-SO portabile, pentru care efortul de a trece SO de pe un calculator
pe altul este mic, mai mic dect cel de a-l rescrie .
Sistemele UNIX i WINDOWS sunt portabile. Cele mai vechi, de
exemplu RSX, nu erau portabile.
Sisteme de operare 15
Capitolul 2
PLANIFICAREA
PROCESOARELOR (UC)
Multiprogramarea reprezint cel mai important concept folosit n
cadrul sistemelor de operare moderne. Existena n memorie a mai multor
procese face posibil ca, printr-un mecanism de planificare a unitii centrale
(UC), s se mbunteasc eficiena global a sistemului de calcul,
realizndu-se o cantitate mai mare de lucru ntr-un timp mai scurt.
Exist procese:
-limitate UC, cnd procesul are componente cu timp majoritar de
desfurare n I/O;
-limitate I/O, cnd procesul are componente cu timp majoritar de
desfurare n UC.
2.1. SCHEMA GENERAL DE PLANIFICARE
A PROCESOARELOR
Procesele stau n memorie grupate ntr-un ir de ateptare n vederea
alocrii n UC. Implementarea acestui ir, numit coad de ateptare, se
realizeaz de obicei sub forma unei liste nlnuite.
Planificatorul pe termen lung (planificator de joburi) stabilete care
sunt procesele ce vor fi ncrcate n memorie. El controleaz gradul de
multiprogramare. Frecvena sa este mic.
Dispecerul realizeaz efectiv transferarea controlului UC asupra
procesului selectat de planificatorul UC. Trebuie s fie rapid pentru a putea
realiza eficient operaiile necesare: ncrcarea registrelor, comutarea n mod
utilizator etc.
Planificatorul pe termen scurt (planificator UC) selecteaz unul din
procesele gata de execuie, aflate deja n memoria intern, i l aloc UC.
Are o frecven de execuie foarte mare i trebuie proiectat foarte rapid.
Sorin Adrian Ciureanu 16
Fig. 2.1. Schema general de planificare a proceselor.
2.2. CRITERII DE PERFORMAN A
PLANIFICRII UC
Cnd se dorete un algoritm de planificare, se pot lua n considerare
mai multe criterii :
-gradul de utilizare UC (aproximativ 40% pentru un sistem cu grad
de ncrcare redus, 90% pentru un sistem cu grad mare de ncrcare ) ;
-throughput (numrul de procese executate ntr-un interval de timp
precizat);
-turnaround time (durata total a execuiei unui proces) reprezint
timpul scurs intre momentul introducerii procesului n memorie i
momentul ncheierii execuiei sale; se exprim ca suma perioadelor de timp
de ateptare pentru a intra n memorie, de ateptare n irul READY, de
execuie (n UC) i de realizare a operaiilor I/O ;
-durata de ateptare ( algoritmul de ateptare influeneaz numai
durata de ateptare n irul READY i nu afecteaz durata de execuie a
procesului sau timpul destinat operaiilor I/O) ;
-durata de rspuns (timpul scurs ntre formularea unei cereri i
iniierea rspunsului corespunztor).
Prin alegerea unui algoritm de planificare se urmrete optimizarea
criteriului luat n consideraie i anume maximizare pentru primele dou i
minimizare pentru ultimele trei.
P1 P2 P3.Pn
UC
P1 P2 P3..Pn
I/O
Planifiare
de
perspectiv Sir READY
RREADY
Planifiare
imediat
Dispecer
ncheierea execuiei
Sir de ateptare I/O
Sisteme de operare 17
2.3. ALGORITMI DE PLANIFICARE UC
n prezentarea algoritmilor de planificare UC performanele sunt
apreciate cu ajutorul mrimii DMA (durata medie de ateptare).
2.3.1. Algoritmul FCFS (First Come
First Served)
irul READY este de tip FIFO (First Input First Output= Primul
Intrat Primul Ieit).
Exemplu:
Proces Durata
UC

Durata de
ateptare
1 10 0
2 29 10
3 3 39
4 7 42
5 12 49
Durata medie de ateptare va fi :
DMA=(0+10+39+42+47)/5=140/5 =28
Dezavantaje : DMA nu este minimal i poate varia n limite foarte
largi n funcie de caracteristicile procesului. n plus DMA depinde de
ordinea proceselor.
2.3.2. Algoritmul SJF (Shortest Job First)
Aa cum arat denumirea, se execut mai nti cel mai scurt job. La
egalitate, se aplic regula FCFS (First Come First Served).
Exemplu:
Proces Durata
UC

Proces Durata
UC
Durata
de
ateptare
1 10 3 3 0
2 29 4 7 3
3 3 1 10 10
4 7 5 12 20
5 12 2 29 32
Sorin Adrian Ciureanu 18
Durata medie de ateptare va fi :
DMA =(3+10+20+32)/5=65/5=13
Dac se cunosc cu precizie ciclurile UC (ca timp), SJF este optimal.
Problema principal este cunoaterea duratei ciclului UC.
2.3.3. Algoritmi bazai pe prioritate
n cadrul unui astfel de algoritm, fiecrui proces i se asociaz o
prioritate, UC fiind alocat procesului cu cea mai mare prioritate din irul
READY. Se poate defini o prioritate intern i o prioritate extern.
Prioritatea intern se calculeaz pe baza unei entiti msurabile :
-limita de timp ;
-necesarul de memorie ;
-numrul fiierelor deschise ;
-raportul dintre numrul de cicluri rafal I/O i numrul de
cicluri rafal UC.
Pentru prioritatea extern, criteriile folosite sunt din afara sistemului
de operare :
-departamentul care sponsorizeaz lucrrile ;
-factori politici ;
-factori financiari.
Principala problem a algoritmilor bazai pe prioriti este
posibilitatea blocrii la infinit ( a nfometrii) proceselor care sunt gata de
execuie, dar deoarece au prioritate redus, nu reuesc s obin accesul la
UC. O astfel de situaie poate s apar ntr-un sistem cu ncrcare mare, n
care se execut un numr considerabil de procese cu prioritate ridicat ;
acestea vor obine accesul la UC n detrimentul proceselor cu prioritate
redus care pot s nu fie executate niciodat. O soluie a acestei probleme
este mbtrnirea proceselor, o tehnic prin care se mrete treptat
prioritatea proceselor remanente timp ndelungat n sistem.
2.3.4. Algoritmi preemptivi
Un algoritm preemptiv permite ntreruperea execuiei unui proces n
momentul cnd n irul READY apare un alt proces cu drept prioritar de
execuie. Dintre algoritmii prezentai anterior :
-FCFS este prin definiie nepreemptiv ;
-SJF poate fi realizat preemptiv; dac n irul READY sosete un
proces al crui ciclu rafal UC urmtor este mai scurt dect ce a mai rmas
Sisteme de operare 19
de executat din ciclul curent, se ntrerupe execuia ciclului curent i se aloc
UC noului proces;
-algoritmii bazai pe prioritate, de asemenea, pot fi realizai
preemptiv ; la fel ca la SJF, timpul rmas poate fi nlocuit cu mrimea
prioritii.
Exemplu:
Proces Momentul sosirii n
irul READY
Durata ciclului
rafal
1 0 12
2 3 3
3 4 6
n SJF fr preempie :
Ordine Ateptare
P1(12) 0
P2(3) 9
P3(6) 8+3
DMA = (9+8+3 )/3=6,67
n SJF cu preempie :
Ordine Ateptare
P1 3 P1 ateapt 3+6=9
P2 3 P2 ateapt 0
P3 6 P3 ateapt 3-1
P1 9
DMA = (9+0+2)/3 =3,67
2.3.5. Algoritmul Round-Robin
Este un algoritm de tip time-sharing. Fiecrui proces i se aloc
numai o cuant de timp (10ms 100ms) iar irul READY se trateaz ca
FIFO circular.
Exemplu:
Proces Durata ciclului rafal
1 10 P1 ateapt
2 29
3 3
4 7
5 12
Dac cuanta de timp este de 10 ms, atunci ordinea n UC este
urmtoarea:
Sorin Adrian Ciureanu 20
P1(0) P2(19) P3(0) P4(0) P5(2) P2(9) P5(0) P2(0)
n parantez este dat timpul care a mai rmas.
Observaii :
-planificatorul aloc UC fiecrui proces pe durata a cel mult o
cuant ; dac durata procesului este mai mic dect aceast cuant, procesul
elibereaz UC prin comunicarea ncheierii execuiei ;
-mrime cuantei afecteaz performanele algoritmului Round-
Robin ; dac cuanta este foarte mare, comportarea este asemntoare FCFS ;
dac cuanta este foarte mic, frecvena comutrii se mrete foarte mult i
performanele scad deoarece se consum mult timp pentru salvare/restaurare
registre ;
-se poate spune c algoritmul Round-Robin este un algoritm
preemptiv care asigur un timp aproape egal de ateptare pentru toate
procesele din sistem.
2.3.6. Ali algoritmi de planificare
Exist unii algoritmi cu iruri de procese multinivel. irul READY
este format din mai multe subiruri. Fiecare susbir are propriul algoritm de
planificare. n schema de planificare apar iruri READY multiple :

Fig 2.2 Schema de planificare a algoritmilor cu mai multe iruri


READY

P1 P2..Pn
P1

P2

..Pn

P1
(n)
P2
(n)
Pn
(n)
(
..Pn
UC
Sisteme de operare 21
Capitolul 3
GESTIUNEA PROCESELOR
3.1. NOIUNI GENERALE DE PROCESE I THREADURI
3.1.1. Definiia procesului
ntr-un sistem de calcul, un proces este un program n execuie; este
deci o entitate activ (dinamic) a sistemului de operare i constituie
unitatea de lucru a sistemului.
nelegerea diferenei ntre un program i un proces este important.
Andrew Tannenbaum, al crui tratat este baza documentrii pentru
specialitii n SO, folosete o analogie pentru sesizarea acestei diferene. S
considerm un savant care coace un tort pentru aniversarea fiicei sale. Are
reeta tortului i o buctrie utilat i aprovizionat cu tot ce trebuie s intre
n tort: ou, zahr, vanilie etc.
n aceast analogie, savantul este procesorul (CPU=Central
Processing Unit), reeta este programul ( ex. un algoritm exprimat ntr-o
notaie potrivit), ingredientele sunt datele de intrare. Procesul este
activitatea savantului de a citi reeta, de a introduce ingredientele , de a
coace tortul.
S ne nchipuim acum c fiul savantului vine plngnd c l-a nepat
o albin. Savantul ntrerupe coacerea tortului nregistrnd repede unde a
ajuns n reet (starea procesului curent este salvat), caut o carte de prim
ajutor (trece la un proces prioritar cu alt program) i aplic instruciunile
gsite n ea. Cnd primul ajutor a fost dat, savantul se ntoarce la coacerea
tortului i o continu de unde a ntrerupt-o.
Ideea este c un proces este o activitate de un anumit fel, cu un
program, intrare, ieire, stare etc. Este posibil ca un singur procesor s fie
mprit la mai multe procese, cu ajutorul unui algoritm care s determine
cnd s fie oprit procesul curent i s fie derulat altul.
Sorin Adrian Ciureanu 22
Un proces este instana de execuie a unui cod. Se utilizeaz i
denumirea englez de task (sarcin).
Spaiul de adres a unui proces cuprinde:
-segmentul de cod care conine imaginea executabil a programului
i este de tip RO (Read Only) i partajat de mai multe procese;
-segmentul de date care conine date alocate dinamic sau static de
ctre proces; nu este partajat i nici accesibil altor procese; const din:
-zona de date
-zona de rezervri (date neiniializate)
-zona de alocare dinamic;
-segmentul de stiv care nu este partajat i crete antrenat n
momentul epuizrii cantitii de memorie pe care o are la dispoziie.
Threadul, numit i fir de execuie, este o subunitate a procesului,
utilizat n unele SO.
3.1.2. Starea procesului
ntr-un sistem de calcul, un proces poate fi n diferite stri: pregtit,
rulare, blocat, terminat
Fig. 3.1. Diagrama strilor unui proces.
n sistem
Pregtit
Planificatorul pe
termen lung
Blocat Rulare
Terminat
Planificatorul pe
termen scurt (UC)
1
2
3
5
4
6
Sisteme de operare 23
Cnd procesul este introdus n calculator, este n SISTEM (de obicei
fiier sau un grup de fiiere pe un disc). Apoi planificatorul pe termen lung
l ia i-l introduce n coada de ateptare READY i atunci procesul este
PREGTIT.
Planificatorul pe termen scurt UC, conform unui algoritm de
planificare , l introduce n UC. Procesul este n RULARE. De aici, exist
trei posibiliti:
-procesul s-a sfrit i, dup rularea n UC, trece n starea
TERMINAT;
-dac algoritmul folosit este preemptiv (de exemplu time-sharing =
cu timp partajat), dac dup o cuant de timp el mai are de rulat, este trecut
din nou n coada de ateptare READY n starea PREGTIT;
-dac n timpul rulrii are nevoie de o resurs extern (de obicei I/O),
procesul este trecut n starea BLOCAT. Dup ce i s-a alocat resursa, trece
din nou n starea PREGTIT.
Dac un proces este blocat temporar, el va trebui repornit mai trziu
din exact aceeai stare n care se gsea cnd a fost oprit. n acest scop, toate
informaiile despre proces trebuiesc salvate.
Unui proces i se asociaz de obicei o structur numit BCP (Bloc
Control Proces), un descriptor de proces.
Fig 3.2. Structura BCP a unui proces.
Identificator al procesului (PID)
Program Counter
Stack Pointer
Registri UC
Prioritate
Zon pentru salvarea strii la prelevarea resursei procesor
Pointer spre lista procselor aflate n aceeai stare
HARD
Sorin Adrian Ciureanu 24
n mod frecvent, descriptorii tuturor proceselor aflate n aceeai stare
sunt nlnuii n cte o list. Vom avea o list de procese n starea
PREGTIT, una n starea BLOCAT etc.
3.1.3. Comutarea proceselor
Tranziia ntre dou procese active ntr-un SO multitasking se
numete comutarea proceselor (proces switch) i are loc ca rspuns la un
eveniment din sistem. Comutarea proceselor implic un cost (overhead)
important datorit frecvenei cu care are loc n sistem i poate influena
performanele acestuia.
Fig.3.3 Schem de comutare a proceselor.
Eficiena operaiei de comutare a proceselor poate fi crescut prin
prevederea unor faciliti hard (seturi de registre multiple) sau printr-o
modalitate de structurare a procesului (thread). Un thread (fir de execuie)
este o subunitate a procesului, o diviziunea a sa. Fiecare thread reprezint un
Mod de comutare
Spaiu utilizator
Execuie proces Px
Eveniment ce
duce la comutare
Salvarea strii hard n BCPx i
actualizarea strii procesului Px n BCPx
[ SCRIEREA EVENIMENTULUI ]
Planificarea urmtorului proces, Py .
Restaurarea strii hard din BCPy .
Execuie proces Py
Mod de comutare
Sisteme de operare 25
flux separat de execuie i este caracterizat prin propria sa stiv i prin stri
hard (registre, flaguri).
Scopul principal al crerii threadului este reducerea costului de
comutare a proceselor. De vreme ce toate celelalte resurse, cu excepia
procesorului, sunt gestionate de procesul care le nglobeaz, comutarea
ntre threadurile care aparin aceluiai proces implic doar salvarea strii
hard i restaurarea stivei. Bineneles, comutarea ntre threadurile care
aparin unor procese diferite implic acelai cost de comutare.
Threadurile sunt un mecanism eficient de exploatare a concurenei
programelor.
Un program poate fi mprit n mai multe pri.
3.1.4. Crearea i terminarea proceselor
n marea majoritate a sistemelor de operare un proces poate fi creat,
n mod dinamic, de ctre alt proces. De obicei un proces printe creeaz un
proces fiu. n aceast modalitate de creare, exist mai multe posibiliti n
dualitatea printe-fiu:
-cele dou procese execut, n mod independent, nesincronizat,
acelai cod, avnd aceeai stiv i acelai segment de date;
-fiul execut alt segment de cod dect cel al printelui, nesincronizat;
-printele i fiul i sincronizeaz activitatea n sensul ei ori se
execut nti printele i apoi fiul sau invers.
3.2. PROCESE I THREADURI N UNIX
3.2.1. Procese n UNIX
n sistemul de operare UNIX fiecare proces are un identificator
numeric, numit identificator de proces PID. Acest identificator este folosit
atunci cnd se face referire la procesul respectiv, din interiorul programelor
sau prin intermediul interpretorului de comenzi.
Dou apeluri simple permit aflarea PID-ului procesului curent i al
printelui acestuia:
getpid(void) pentru procesul curent;
getppid(void) pentru procesul printe.
Crearea unui proces se face prin apelul sistem:
fork()
Sorin Adrian Ciureanu 26
Prin aceast funcie sistem, procesul apelant, numit printe, creeaz
un nou proces, numit fiu, care va fi o copie fidel a printelui. Procesul fiu
va avea:
-propria lui zon de date,
-propria lui stiv,
-propriul su cod executabil,
toate fiind copiate de la printe, n cele mai mici detalii.
O modalitate de utilizare a apelului fork() este de a mpri
codul unui proces n dou sau mai multe procese care se vor executa n
paralel. Acest lucru este utilizat n proiectarea i rularea proceselor i
programelor paralele.
Exemplul 1.
Proces printe
i
1
i
2
i
3
.
.
i
k
momentul
apelului fork() Proces fiu
i
k+1
i
k+1
i
k+2
i
k+2
. .
. .
i
n
i
n
Exemplul 2
Se d urmtoarea secven de program:
fork();printf(A\n);
fork();printf(B\n);
fork();printf(C\n);
Presupunnd c toate apelurile funciei fork() se execut cu
succes, se cere:
-Cte procese sunt create ?
-S se traseze arborele printe - fiu al proceselor create.
-Cte linii de text vor fi afiate la ieirea standard ?
-Este posibil ca linia cu textul B s fie afiat naintea liniei cu
textul A ?
Sisteme de operare 27
Sunt create 7 procese, plus procesul iniial, vor fi 8 procese. Cifrele
arat dup al ctelea fork() au fost create. Dup primul fork()se
creeaz procesul cu cifra 1. Se va scrie A att n procesul iniial ct i n cel
final. Dup al doilea fork(), se creeaz procesul fiu notat cu cifra 2,
adic fiecare proces creat pn acum va avea cte un fiu, notat cu 2. Dup al
treilea fork(), fiecare proces creat pn acum va crea cte un nou fiu,
notat cu 3. n general dup n fork() ,se produc 2
n-1
fii.
A
B
C
A B
B C C
C
B C C
C
C
Fig.3.4. Structura arborescent a proceselor.
Fiecare proces afieaz liniile de text care urmeaz momentului
crerii sale:
linia care scrie A este afiat de 2
1
ori;
linia care scrie B este afiat de 2
2
ori;
linia care scrie C este afiat de 2
3
ori.
Numrul total de linii afiate este 2
1
+2
2
+2
3
=14
n ceea ce privete ordinea de afiare a celor 14 linii, intervine
nedeterminarea provenit din faptul c nu se tie cine va fi executat primul,
printele sau noul fiu creat. Valoarea returnat de fork() este:
-1, eroare, operaia nu s-a putut executa;
0, n codul fiului;
pidf, n codul printelui, unde pidf este identificatorul de
proces al fiului nou creat.
Proces
iniial
1 2 3
2 3 3
3
Sorin Adrian Ciureanu 28
Pn acum am vzut c prin simplul apel al funciei fork() se
creeaz un proces identic cu procesul printe. Pentru a crea un nou proces
care s ruleze un program diferit de cel al printelui, se vor folosi funciile
de tipul exec(), execl(), execlp(), execv(), execvp(),
execll(), execvl(). Toate aceste funcii primesc ca parametru un
nume de fiier care reprezint un program executabil i recicleaz lansarea
n execuie a programului. Programul va fi lansat astfel nct se va
suprascrie codul, datele i stiva procesului care apeleaz exec(), aa ca,
imediat dup acest apel, programul iniial s nu mai existe n memorie.
Procesul va rmne, ns, identificat prin acelai PID i va moteni toate
eventualele redirectri fcute n prealabil asupra descriptorilor de fiier.
n concluzie, lansarea ntr-un proces separat a unui program se face
apelnd fork()pentru crearea noului proces, dup care, n poriunea de
cod executat de fiu, se va apela una din funciile exec().
n UNIX un proces se poate termina n mod normal sau anormal.
Terminarea normal poate fi realizat prin:
-revenire natural;
-apelul sistem de tip exit().
Terminarea anormal se produce cnd:
-se apeleaz abort();
-procesul primete un semnal.
n marea majoritate a versiunilor UNIX, exist dou apeluri de
terminare normal: exit(), _exit().Principalul rol al apelului
exit() este s asigure la terminarea procesului tratarea corespunztoare a
operaiilor de introducere /extragere , golirea tampoanelor utilizate pentru
acest proces i nchiderea tuturor fiierelor deschise. _exit() produce
direct revenirea n nucleu, fr operaiile de la funcia exit().
Din cele prezentate pn acum, nu se poate spune nimic despre
sincronizarea printe-fiu, adic despre cine termin primul sau cine se
execut primul. Apelurile wait() i waitpid() vin n
ntmpinarea acestui neajuns. wait() este folosit pentru ateptarea de
ctre printe a fiului, deci se execut mai nti fiul i apoi printele.
waitpid() este folosit pentru ateptarea unui proces oarecare.
n UNIX procesele au un caracter dinamic. Ele se nasc, evolueaz n
sistem putnd da natere altor sisteme, i dispar. n felul acesta se creeaz o
ierarhie dinamic de procese n sistem, care ncepe cu procesul 0 (swapper),
continu cu procesul 1 (init), proces ce d natere unor procese fiu. Procesul
cu identificatorul 2, proces sistem, apare la unele implementri sub
denumirea de pagedaemon i este responsabil de suportul pentru memorie
Sisteme de operare 29
virtual. Terminarea forat a execuiei unui proces se realizeaz cu
comanda kill(opiuni)(pid).
n general, n execuia printe fiu, exist dou situaii:
-a) fiul se termin naintea printelui;
-b) printele se termin naintea fiului.
n primul caz, ntre momentul n care se termin fiul i momentul n
care el este distrus, procesul fiu este n starea zombie. De obicei, dup
terminarea execuiei fiului, printele execut un wait() i scoate fiul din
starea zombie.
n al doilea caz, n momentul terminrii printelui, nucleul SO este
acela care examineaz dac printele a avut copii. Dac da, printele nou al
acestor fii va fi procesul init(), nelsnd fiii n starea zombie.
Revenind la strile unui proces, sistemul de operare UNIX distruge
urmtoarele stri de baz:
-execuie n mod utilizator (USER);
-execuie n mod nucleu (KERNEL);
-gata de execuie (READY);
-n ateptare (BLOCAT)
-zombie.
3.2.2. Threaduri n UNIX
n UNIX-ul tradiional nu sunt definite threadurile. Ele au aprut
odat cu standardul POSIX care asigur portabilitatea ntre platforme hard
diferite. Iat o comparaie ntre procesele UNIX i threadurile POSIX
(pthread):
Caracteristica Procese UNIX Pthreaduri POSIX
portabilitate fork()standard interfa standard
portabilitate
Cost de creare Mare Relativ mic
Cost de comutare Mare Foarte mic
Spaiu de aches Separat Partajat
Memorie partajat Partajare explicit Partajare implicit
Obiecte de excludere
mutual
Semafoare, mutexuri
UNIX
Semafoare, mutexuri
POSIX
Fiiere i stringuri de I/O Tabele de fiiere separate Tabele de fiiere unice
Un pthread se creeaz cu ajutorul funciei
int pthread create (list de parametri).
Sorin Adrian Ciureanu 30
3.3. PROCESE I THREADURI N WINDOWS
n sistemele WINDOWS, entitatea de alocare a timpului
procesoarelor este threadul. Fiecare proces conine cel puin un thread de
execuie, numit i threadul principal, i poate crea threaduri noi. Un proces
WINDOWS are o dualitate de identificare i anume are dou entiti de
identificare:
-handle, care este o intrare n tabelul de resurse al sistemului;
-identificator (id), un numr unic atribuit unui proces (asemntor
PID-ului din UNIX).
Aceast dualitate de identificare ngreuneaz lucrul cu procesele
WINDOWS, n sensul c unele funcii cer ca parametru handle-ul
procesului , altele identificatorul acestuia.
3.3.1. Procese n WINDOWS
Accesul programatorului la funciile SO este posibil prin intermediul
unei interfee, numit API (Aplication Programming Interface) care conine
definiia tipurilor de date i funciile de apel ale sistemului.
Un proces tat creeaz un proces fiu prin intermediul apelului
funciei bool create process(lista parametri). Se poate
considera c, n mare, aceast funcie are funcionalitatea combinaiei de
apeluri fork exec din UNIX. Se creeaz un proces nou, mpreun
cu threadul primar, care execut un segment de cod specificat prin numele
fiierului ce conine acest segment. Valoarea returnat de funcia
createprocess este de tip booleean i nseamn TRUE (succes) i
FALSE (eroare).
Crearea threadurilor WINDOWS. Crearea unui thread nou ntr-un
proces necesit definirea unei funcii pe care threadul s o execute, urmat
de apelul unei funcii createthread cu sintaxa handle create
thread (lista de parametri). Aceast funcie returneaz
handle-ul threadului nou creat.
Sisteme de operare 31
Capitolul 4
COMUNICAIA I SINCRONIZAREA
NTRE PROCESE
Procesele dintr-un SO pot fi:
-a) procese independente;
-b) procese cooperante.
a) Dac execuia unui proces nu poate afecta sau nu este afectat de
ctre execuia altor procese din sistem, atunci procesul este independent.
Procesele independente au urmtoarele caracteristici:
-pot fi oprite i repornite fr a genera efecte nedorite;
-sunt deterministe, adic rezultatele depind numai de starea de
intrare;
-nu se afl niciodat n aceeai stare ca i alte procese din sistem;
-nu folosesc date, variabile, n comun cu alte procese;
-sunt reproductibile, rezultatele sunt aceleai pentru aceleai condiii
de intrare.
b) n caz contrar, procesele sunt cooperante; au toate caracteristicile
de mai sus negate.
4.1. PROBLEMA SECIUNII CRITICE I A
EXCLUDERII MUTUALE
Cazul cel mai frecvent n care mai multe procese comunic ntre ele
este acela prin intermediul variabilelor partajate. Dar accesul nerestricionat
a dou sau mai multe procese la resurse partajate poate produce erori de
execuie.
Exemplu:
Un proces execut o operaie de incrementare a variabilei partajate x
dup secvena cod:
LOAD R x /ncrcarea lui x n registrul R;
Sorin Adrian Ciureanu 32
INC R /incrementarea lui R;
STORE x R /memorarea valorii n X.
Presupunem c arhitectura calculatorului este cea de
load/store, specific procesoarelor de mare vitez cum sunt i cele din
arhitectura RISC.
Variabila local x, n arhitecturi paralele, se numete temporar
inconsistent, ntre variabila local i variabila global corespunztoare.
Acest tip de inconsisten temporar este frecvent ntlnit n execuia
programelor la arhitecturi secveniale (Neumann), dar nu prezint nici un
pericol pentru execuia programelor secveniale normale ale cror variabile
nu sunt partajate ntre procese concurente.
Este important de observat c inconsistena temporar ntre o
variabil global i copia ei local reprezint una din principalele cauze care
produce erori atunci cnd o astfel de variabil este accesat concurent de
procese concurente.
Din acest exemplu reies dou condiii necesare pentru eliminarea
erorilor datorate execuiei concurente a mai multor procese:
1) Secvena de instruciuni din care este alctuit operaia de
actualizare a unei variabile partajate trebuie s fie executat de un proces ca
o operaie atomic, nentreruptibil de ctre alte procese sau chiar de SO.
2) Operaia de actualizare a unei variabile partajate executat de un
proces trebuie s inhibe execuia unei alte operaii asupra aceleai variabile
executate de alt proces. Este deci necesar serializarea operaiilor asupra
variabilelor partajate, serializare care se obine prin excludere mutual a
acceselor la variabila partajat.
n acest sens actualizarea unei variabile partajate poate fi privit ca o
seciune critic. O seciune critic este o secven de instruciuni care
actualizeaz n siguran una sau mai multe variabile partajate. Cnd un
proces intr ntr-o seciune critic, el trebuie s execute complet toate
instruciunile seciunii critice, nainte ca alt proces s o poat accesa. Numai
procesului care execut o seciune critic i este permis accesul la variabila
partajat, n timp ce tuturor celorlalte procese le este interzis accesul. Acest
mecanism est denumit excludere mutual , deoarece un proces exclude
temporar accesul altor procese la o variabil partajat.
Soluionarea problemei excluderii mutuale trebuie s ndeplineasc
urmtoarele cerine:
-s nu presupun nici o condiie privind viteza de execuie sau
prioritatea proceselor care acceseaz resursa partajat;
-atunci cnd unul sau mai multe procese doresc s intre ntr-o
seciune critic, unul din ele trebuie s obin accesul n timp finit.
Sisteme de operare 33
-s asigure c terminarea sau blocarea unui proces n afara seciunii
critice nu afecteaz n nici un fel toate celelalte procese care acceseaz
resursa partajat corespunztoare seciunii critice respective;
Mecanismul de baz pe care-l urmrete un proces este:
-protocol de negociere / nvingtorul continu execuia;
-seciune critic / utilizarea exclusiv a resursei;
-protocol de cedare / proprietarul se deconecteaz.
Soluionarea corect a excluderii mutuale nu este o problem
trivial. Primul care a soluionat aceast problem a fost matematicianul
olandez Decker. Soluia lui, ns, nu este valabil dect pentru dou procese.
Soluii de excludere mutual au mai dat Peterson i Lampert, soluii pur
soft, dar a cror eficien este discutabil cci nu rezolv n ntregime toate
cerinele.
Implementarea eficient a excluderii mutuale se poate realiza prin
suport hard (validare/invalidare de ntreruperi sau instruciuni Test and Set).
Aceste faciliti hard sunt utilizate pentru implementarea unor mecanisme
de sincronizare (obiecte de sincronizare) ca semafoare, mutexuri, bariere,
monitoare etc.
4.1.1. Suportul hardware pentru implementarea
excluderii mutuale
4.1.1.1. Invalidarea / validarea ntreruperilor
Instruciunile de invalidare/validare a ntreruperilor (DI/EI) sunt
disponibile n toate procesoarele.
Secvena care asigur accesul exclusiv al unui singur proces la o
resurs este:
DI / invalidare ntreruperi;
Seciune critic;
EI / validare ntreruperi.
Prin invalidarea ntreruperilor se ajunge la blocarea celorlalte
procese. Este un mecanism prea dur, un model pesimist de control al
concurenei, cu urmtoarele dezavantaje:
-se blocheaz i activitatea altor procese (numite victime inocente)
care nu au nici o legtur cu seciunea critic respectiv;
-dac se execut de ctre useri, se poate bloca sistemul iar dac sunt
executate din kernel, apare un cost de timp suplimentar (overhead) de
comutare a modului de execuie kernel/user.
Sorin Adrian Ciureanu 34
4.1.1.2. I nstruciunea Test and Set (TS)
n principiu, instruciunea TS are ca operand adresa unei variabile de
control i execut urmtorii pai:
-compar valoarea operandului cu o valoare constant (de exemplu
0 pentru BUSY) i seteaz flagurile de condiie ale procesorului;
-seteaz operandul la valoarea BUSY .
Aceti pai sunt executai ca o operaiune unic, indivizibil, numit
operaie atomic.
Subinstruciunea cod, TS, poate fi scris astfel:
LOAD R, operand
CMP R, BUSY flag ZERO=1 dac R=BUSSY
STORE operand,BUSY
4.1.1.3. Protocoale de ateptare n excluderea mutual
Avem dou tipuri de protocoale:
a) (busy-wait)
b) (sleep-wait)
a) BUSY-WAIT (ateptare ocupat)
Folosind instruciunea TS acest model are urmtoarea implementare:
ADRL TS (acces)
JZ ADRL/ateptare ct variabila acces=BUSY
BUSY-WAIT este simplu de implementat dar are dezavantajul unei
eficiene sczute, datorit faptului c se consum timp de execuie al
procesorului de ctre un proces care nu avanseaz.
b) SLEEP-WAIT (ateptare dormant)
n acest tip de protocol, procesul care nu are resurs disponibil este
suspendat (adormit) i introdus ntr-o coad de ateptare. Apoi este trezit,
cnd resursa devine disponibil.
n sistemul uniprocesor este folosit totdeauna SLEEP-WAIT,
deoarece nu se consum timp procesor inutil.
n sistemul multiprocesor se folosesc amndou protocoalele i chiar
o combinaie ntre ele.
4.1.1.4. Mecanisme de sincronizare ntre procese
(obiecte de sincronizare)
a) Semafoare.
Semafoarele sunt obiectele de sincronizare cele mai des folosite.
Sisteme de operare 35
Ele au fost introduse de Dijkstra n 1968.
Un semafor este de fapt o variabil partajat care poate primi numai
valori nenegative. Asupra unui semafor se pot executa dou operaii de
baz:
-decrementarea variabilei semafor cu 1 (DOWN);
-incrementarea variabilei semafor cu 1 (UP).
Dac o operaie DOWN este efectuat asupra unui semafor care este
mai mare dect zero, semaforul este decrementat cu 1 i procesul care l-a
apelat poate continua. Dac, din contra, semaforul este zero, operaia
DOWN nu poate fi efectuat i spunem c procesul ateapt la semafor, ntr-
o coad de ateptare, pn cnd un alt proces efectueaz operaia UP asupra
semaforului, incrementndu-l.
Exemplu.
Avem un complex cu terenuri de handbal i 20 echipe care joac 10
meciuri. 1meci = 1proces. ntr-un co mare (semafor) exist 7 mingi.
Semaforul ia valori ntre 0-7. Fiecare 2 echipe iau cte o minge din co,
efectund 7 operaii DOWN. Semaforul este 0 ( nu mai sunt mingi n co)
i celelalte 6 echipe ateapt o minge n co, deci o operaie UP.
Pentru implementare, operaiile DOWN i UP vor fi nlocuite cu
dou primitive wait(s) i signal(s) , n felul urmtor:
wait(s) - ncearc s decrementeze valoarea variabilei
semafor s cu 1 i dac variabila este 0 procesul rmne n ateptare pn
cnd s = 0.
signal(s) incrementeaz cu 1 semaforul s.
Implementarea semafoarelor n protocolul BUSY-WAIT
wait(s)
{while (s==0);
s--;}
signal(s)
{s++;}
Operaia signal(s) este atomic (indivizibil).
Operaia wait(s) are dou regimuri:
atomic, dac s = 0;
neatomic, dac s=0.
Este normal ca, dac semaforul este ocupat (s=0), operaia
wait(s) s nu fie atomic; n caz contrar ar mpiedica alte operaii,
Sorin Adrian Ciureanu 36
inclusiv signal(s), executate de un alt proces care s acceseze variabila
s pentru a o elibera.
Implementarea cu BUSY-WAIT a semafoarelor are dezavantajul
unui consum de timp procesor de ctre procesele aflate n ateptare. Un alt
dezavantaj este posibilitatea ca un proces s fie amnat un timp nedefinit
(indefinit, postponement) n obinerea unui semafor, datorit faptului c nu
este nici o ordonare ntre procesele care ateapt la semafor. Astfel exist
posibilitatea ca un proces s fie mpiedicat un timp nedefinit de a obine un
semafor datorit aglomerrii provocate de alte procese. Un astfel de
fenomen de blocare se numete livelock iar procesul afectat este numit
strivit (starved).
Implementarea semafoarelor n protocolul SLEEP-WAIT
Procesele care ateapt la semafor stau ntr-o coad de ateptare
(FIFO).
wait(s)
{if(s==0) procesul trece ]n starea suspendat;
else s--;}
signal(s)
{if(coada nu este goal) planific un proces
din coad ;
else s++ ;}
n loc s intre n ateptare ocupat, atunci cnd semaforul este
ocupat, procesul apelant este suspendat i trecut ntr-o coad de ateptare
asociat semaforului apelat. Trebuie ns ca i procesul dormant (suspendat)
s afle cnd semaforul a devenit liber. Acest lucru se realizeaz prin
intermediul operaiei signal. Aceast operaie ncearc mai nti s
trezeasc un proces din coada de ateptare i s-l treac n starea de execuie
(suspendatrun). Numai dac coada de ateptare este goal, incrementaz
semaforul.
b) Mutex-uri
Denumirea MUTEX vine de la mutual exclusion. Mutex-ul este un
caz particular de semafor i este utilizat pentru accesul mai multor procese
la o singur resurs partajat. Operaiile care se execut asupra unui mutex
sunt :
-operaia de acces i obinere a mutex-ului, notat cu ocupare
(mutex) sau lock(mutex) ;
-operaia de eliberare a mutex-ului, notat cu eliberare (mutex) sau
unlock(mutex).
c) Evenimente (semnale.)Unul dintre primele mecanisme de
comunicare ntre procese este reprezentat de semnale sau evenimente. n
Sisteme de operare 37
UNIX se numesc semnale iar n WINDOWS se numesc evenimente. Ele
anun apariia unui eveniment i pot fi trimise de un proces altui proces, de
un proces aceluiai proces sau pot fi trimise de kernel. Momentul apariiei
unui semnal este neprecizat, el aprnd asincron.
Semnale UNIX
n sistemul de operare UNIX, semnalele pot proveni de la nucleu
sistemului, prin care se notific evenimente hardware, sau pot fi generate
soft, de unele procese, pentru a notifica un eveniment asincron. Un semnal
este reprezentat printr-un numr i un nume. n UNIX semnalele dintre
procese au denumiri simbolice, SIGUSR 1 i SIGUSR 2.
Un proces care primete un semnal poate s acioneze n mai multe
moduri:
-s ignore semnalul;
-s blocheze semnalul; n acest caz semnalul este trecut ntr-o coad
de ateptare pn cnd este deblocat;
-s recepioneze efectiv semnalul.
Procesul stabilete ce semnale sunt blocate, folosind o mas de
semnale, n care fiecare bit corespunde unui numr de semnal. n standardul
POSIX exist numere ntre 33 i 64, deci 31 semnale. Un semnal poate s
apar n urmtoarele cazuri:
-la acionarea unei taste a terminalului;
-la apariia unei ntreruperi hardware (mprire prin zero, adres
inexistent etc);
-atunci cnd un proces trimite un semnal altui proces sau thread,
folosind funciile:
a)sigqueue() se transmite un semnal unui proces;
b)kill() se transmite un semnal de terminare a unui proces;
c)pthread se transmite semnal de terminare a unui thread.
Evenimente WINDOWS
n SO WINDOWS, un eveniment este un obiect de sincronizare care
poate fi semnalat sau nesemnalat.
Exist dou tipuri de evenimente:
-evenimente cu resetare manual (evenimente care trecute n stare
semnalat rmn n aceast stare pn cnd sunt trecute n mod explicit n
starea nesemnalat);
-evenimente cu autoresetare.
n WINDOWS un proces poate crea un eveniment folosind funcia
CREATE EVENT.
Sorin Adrian Ciureanu 38
Un proces n ateptarea unui eveniment poate executa una din
funciile de ateptare WAIT FOR SINGLE OBJECT sau WAIT FOR
MULTIPLE OBJECT.
Evenimentele sunt utilizate pentru notificarea unui proces sau thread
despre apariia unui alt eveniment.
Evenimentele creeaz puncte de sincronizare ntre procese sau
threaduri.
d) Monitoare.
Monitoarele sunt mecanisme de sincronizare ntre procese
concurente care pot suporta abstractizarea datelor.
Prin apariia monitoarelor (HOARE, 1976), se reuete s se acopere
unul din neajunsurile principale ale celor mai utilizate mecanisme de
sincronizare, semafoarele, care nu suport abstractizarea datelor.
Sintaxa monitorului este asemntoare cu cea a unei clase, cuvntul
CLASS fiind nlocuit cu MONITOR.
Este de remarcat faptul c ntr-un monitor se asigur excluderea
mutual, astfel c la un moment dat un singur proces poate fi activ.
Un monitor este bazat pe modularitate i ncapsulare.
Fig. 4.1.Structura unui monitor.
Structura unui monitor const n trei pri:
-n prima parte se declar numele monitorului i variabilele locale;
-n a doua parte se declar toate procedurile;
-n cea de a treia parte se iniializeaz toate variabilele acestui
monitor.
Date accesate n comun
Proceduri
Proc 1
Proc 2
Proc n
Variabile
partajate
P1 P2 Pn
Coad de intrare n monitor
Sisteme de operare 39
n general, procedurile unui monitor sunt constituite din principalele
funcii care se ntlnesc ntr-un sistem de operare. De exemplu, o procedur
tipic este intrarea ntr-o seciune critic.
4.2. INTERBLOCAREA (DEADLOCK)
Alturi de problema seciunii critice, interblocarea reprezint una din
principalele probleme ce trebuiesc soluionate n funcionarea unui SO.
Mecanismul principal al interbocrii const n faptul c o resurs cerut de
un proces este deinut de alt proces. Pn cnd procesul care deine resursa
o va elibera, apare o situaie tipic de interblocare.
Deoarece interblocarea este strns legat de resursele sistemului de
operare, vom prezenta, mai nti, cteva noiuni referitoare la aceste resurse.
4.2.1. Resurse
4.2.1.1. Clasificarea resurselor din punct de vedere al interblocrii
Cea mai important clasificare din punct de vedere al interblocrii
este:
a) resurse partajabile ;
b) resurse nepartajabile.
O resurs partajabil poate fi utilizat n comun de mai muli
utilizatori. Un exemplu clasic n acest sens este citirea unui fiier de ctre
mai muli utilizatori.
O resurs nepartajabil nu poate fi folosit n acelai timp de ctre
mai muli utilizatori. Un exemplu este imprimanta. Evident, mai muli
utilizatori nu pot tipri n acelai timp pe aceeai imprimant.
Numai resursele nepartajabile conduc la situaii de interblocare; cele
partajabile nu pun probleme din acest punct de vedere. Sistemul de operare,
n procesul de control al interblocrii, trebuie s aib o gestiune doar a
resurselor nepartajabile.
O alt clasificare a resurselor, important pentru interblocare, este:
a) resurse cu un singur element;
b) resurse cu mai multe elemente.
Pentru situaii diferite de interblocare, aceast clasificare este foarte
important, ea ducnd la decizii diferite. Un exemplu tipic unde intervine
aceast clasificare este graful de alocare a resurselor.
Sorin Adrian Ciureanu 40
4.2.1.2. Etapele parcurse de un proces pentru utilizarea unei
resurse
n vederea utilizrii unei resurse, un proces trebuie s execute
urmtoarele etape:
a)Cererea de acces la resurs. Procesul formuleaz o cerere de acces
la resursa respectiv. Dac nu i este repartizat imediat, intr ntr-o coad
de ateptare i va atepta pn cnd poate dobndi resursa.
b)Utilizarea resursei. Este etapa n care procesul a primit
permisiunea de utilizare a resursei, iese din coada de ateptare i utilizeaz
efectiv resursa.
c)Eliberarea resursei. Se elibereaz resursa i se ncheie utilizarea
resursei de ctre proces.
Pentru implementarea de ctre SO a acestei operaii, exist tabele
ale SO n care fiecrei resurse i este asociat procesul ce o utilizeaz i, de
asemenea, fiecare resurs are asociat o coad de ateptare cu toate
procesele care au fcut cerere de utilizare a resursei. De obicei, sistemele de
operare implementeaz, pentru fiecare din etapele de mai sus, apeluri sistem
sau semafoare.
4.2.2. Condiii necesare pentru apariia
interblocrii
n anul 1971, Cofman a identificat patru condiii necesare care, dac
sunt ndeplinite simultan, pot conduce la apariia interblocrii. Aceste
condiii sunt:
a)Excluderea mutual. Existena excluderii mutuale presupune c un
proces a obinut resursa i exist o coad de ateptare a altor procese la
aceeai resurs.
b)Ocupare i ateptare. Exist cel puin un proces care a obinut
resursa dar care ateapt i alte resurse suplimentare care, la rndul lor, sunt
ocupate de alte resurse.
c)Imposibilitatea achiziionrii forate. Un proces nu poate
achiziiona forat o resurs aferent altui proces dect dup eliberarea
resursei de ctre acel proces.
d)Ateptare circular. Exist un ir de procese P1, P2, Pn, toate n
ateptare, n aa fel nct P1 ateapt eliberarea resurse de ctre P2, P2
ateapt eliberarea resursei de ctre P3.Pn ateapt eliberarea resursei
de ctre P1.
Sisteme de operare 41
P
1
P
2
P
3
P
n-1
P
n
4.2.3. Graful de alocare a resurselor
Pentru descrierea strii de interblocare este folosit un graf orientat,
numit graful de alocare a resurselor. Nodurile grafului sunt alctuite din
procese i resurse. Vom nota procesele cu P i resursele cu R.
Resursa cu indice i :
Procesul cu indice j :
Arcele grafului sunt orientate i sunt de dou feluri:
a) arce cerere, care reprezint faptul c procesul P
j
fcut o cerere
de alocare a resursei R
i
i ateapt dobndirea ei;
c) arce alocare, care reprezint faptul c procesului P
j
i-a fost
alocat resursa R
i
.
Cea mai important aplicaie a acestui graf este legat de detecia
strii de interblocare. Pentru un graf alctuit numai din resurse simple,
existena unei bucle n graf nseamn c n sistem a aprut o interblocare.
De exemplu, n graful urmtor.
Fig.4.2. Graf de resurse.
Ri
P
j
P
j
Ri
P
j
Ri
P1
R1 R2
P2
2
2
Sorin Adrian Ciureanu 42
n graful de mai sus, procesului P
1
i este alocat resursa R
1
i
procesului P
2
resursa R
2
. Procesul P
1
a fcut o cerere de alocare a resursei
R
2
deinut de P
2
iar P
2
a fcut o cerere de alocare a resursei R
1
deinut de
P
1
. Este o situaie clar de interblocare. n graful din figura 4.2. aceast
interblocare este vizibil prin existena buclei.
De menionat c pentru grafurile cu resurse multiple existena buclei
nu nseamn o situaie de interblocare.
De exemplu, n cazul din figura 4.3., existena buclei nu nseamn
interblocare.
Fig. 4.3. Graf fr situaie de interblocare.
4.2.4. Rezolvarea problemei interblocrii
Exist dou tipuri de metode pentru rezolvarea interblocrii:
a) metod n care nu i se permite niciodat sistemului de
operare s intre n interblocare; se face prevenirea sau evitarea
interblocrii.
b) metod n care se permite sistemului de operare s intre n
interblocare i apoi se ncearc scoaterea sa din aceast stare; se utilizeaz
un mecanism de detecie a interblocrii i revenire din aceast stare.
4.2.4.1. Prevenirea interblocrii
Pentru a putea preveni interblocarea este suficient ca una din
condiiile de apariie a acesteia s nu fie ndeplinit. S vedem cum poate fi
mpiedecat ndeplinirea fiecrei din cele patru condiii.
a) Excluderea mutual
Pentru o resurs nepartajabil nu este posibil prevenirea
interblocrii prin nendeplinirea condiiei de excludere mutual.
P1

R1

R2

P2
2 2
Sisteme de operare 43
b) Ocupare i ateptare
Pentru nendeplinirea condiiei de ocupare i ateptare sunt posibile
dou protocoale:
-un protocol n care fiecare proces i poate ncepe execuia numai
dup ce i-a achiziionat toate resursele necesare;
-un protocol n care unui proces nu i se permite s achiziioneze
dect o resurs, achiziionarea resurselor suplimentare fcndu-se cu
eliberarea resurselor deja angajate.
Dei prin ambele protocoale se asigur nendeplinirea condiiei de
ateptare i ateptare, totui ele prezint dou mari dezavantaje:
-utilizarea resurselor este destul de redus, n sensul c timpul ct o
resurs este alocat unui proces i neutilizat este foarte mare;
-apare un proces de nfometare, deoarece un proces nu poate s
atepte la infinit alocarea unei resurse.
c) Imposibilitatea achiziionrii forate
Nendeplinirea acestei condiii nseamn de fapt ca un proces s
poat lua o resurs alocat altui proces n orice moment. Desigur, aceast
achiziionare forat a resurselor unui alt proces nu trebuie fcut haotic, ci
n cadrul unui protocol de achiziionare forat. Un exemplu de astfel de
protocol este urmtorul : un proces care i achiziioneaz resurse n vederea
execuiei va putea lua forat resurse de la alt proces numai dac procesul
respectiv este n ateptare. Acest protocol se aplic frecvent n cazul
resurselor a cror stare poate fi uor salvat i refcut (ex. registrele
procesorului, spaiul de memorie).
d) Ateptare circular
Un algoritm simplu pentru eliminarea ateptrii circulare este dat n
continuare.
Se creeaz o coresponden biunivoc ntre toate resursele
nepartajabile ale sistemului i mulimea numerelor naturale, astfel nct
fiecare resurs este identificat printr-un numr natural. De exemplu:
hard disc .1
CD ROM.2
imprimant..3
MODEM.4
scaner..5
Apoi, un proces poate cere resursa cu numr de ordine k , cu condiia
ca s elibereze toate resursele cu indice mai mare dect k, adic k+1,
k+2,.n. n felul acesta se elimin posibilitatea de ateptare circular.
n concluzie, pentru prevenirea interblocrii se utilizeaz algoritmi
care impun ca cel puin una din condiiile necesare s nu fie ndeplinite.
Sorin Adrian Ciureanu 44
Aceti algoritmi acioneaz prin stabilirea unor restricii asupra modului n
care se pot formula cererile de acces. Principalele dezavantaje ale acestei
metode sunt gradul redus de utilizare a resurselor i timpul mare de ateptare
a unui proces pentru o resurs.
4.2.4.2. Evitarea interblocrii
Dac pentru prevenirea interblocrii se folosesc restricii asupra
modurilor de formulare a cererilor pentru resurse, n evitarea interblocrii se
utilizeaz informaii suplimentare referitoare la modul n care se face
cererea de acces. Algoritmii de evitare difer prin tipul i cantitatea acestor
informaii.
Se definesc dou noiuni: stare sigur i secven sigur.
n cazul acestor algoritmi, fiecare proces trebuie s declare numrul
maxim de resurse de fiecare tip de care ar putea avea nevoie. Algoritmul
examineaz mereu starea alocrii resurselor pentru a avea certitudinea c nu
va exista ateptare circular.
Secven sigur
Fie un ir de procese P
1
, P
2
, ..P
n
exact n aceast ordine.
Spunem c aceast secven este sigur dac pentru orice proces P
i
cu (1 i
n) s-ar cere numrul maxim de resurse, declarat iniial, atunci diferena
intre numrul maxim de resurse i numrul de resurse al procesului n acel
moment nu depete numrul resurselor obinute din nsumarea resurselor
disponibile cu resursele eliberate de procesele P
j
cu j Zi. Dac nu se
ndeplinete aceast condiie, atunci secvena este nesigur.
Stare sigur
Sistemul este ntr-o stare sigur dac conine cel puin o secven
sigur. De exemplu, fie secvena de procese:
P
1
P
2
P
3
P
4
P
5
P
1
P
2
P
3
P
4
P
5
Maxim resurse cerute 10 15 20 25 30
Cerere iniial 5 5 10 10 20
Total resurse = 60
Resurse disponibile = 60-5-5-10-10-20 = 10
S analizm secvena P
1
P
2
P
3
P
4
P
5
.
P
1
la cerere maxim de resurse ar avea nevoie de
10-5 = 5 resurse < 10 resurse disponibile
P
2
15-5 = 10 resurse < 5(eliberate de P
1
) + 10(disponibile)
P
3
20-10=10 resurse < 5(P
1
) + 5(P
2
) +10(disponibile)
P
4
25-10=15 resurse < 5(P
1
) + 5(P
2
) + 10(P
3
) + 10 (disponibile)
Sisteme de operare 45
P
5
30-20=10 resurse < 5(P
1
)+5(P
2
)+10(P
3
)+10(P
4
)+10(dispon.)
Deci aceast secven este sigur.
S analizm secvena P
4
P
5
P
1
P
2
P
3
.
P
4
25-10 = 15 > 10 (resurse disponibile) secven nesigur.
a) Algoritmul bancherului
Un algoritm clasic de evitare a interblocrii, bazat pe noiunea de
secven sigur, este algoritmul bancherului. Se numete aa deoarece poate
fi folosit n sistemul bancar la plata unor sume ctre diferii clieni ai bncii,
plat care trebuie s lase mereu banii ntr-o stare sigur.
Pentru a putea aplica acest algoritm trebuie s se cunoasc de la
nceput numrul maxim de resurse cerute de fiecare proces. Apoi, la fiecare
cerere a unor resurse noi, se aplic algoritmul pentru a vedea dac aceast
cerere duce la o stare sigur sau nesigur. Dac e sigur, cererea este
acceptat, dac nu e sigur, cererea nu este acceptat i procesul rmne n
ateptare.
Structurile de date folosite de algoritm sunt:
n - numrul de procese din sistem
m - numrul de tipuri resurs
-disponibil[m] un vector care indic numrul de resurse
disponibile pentru fiecare tip n parte;
-maxim [n][m] o matrice care arat numrul maxim de cereri
ce pot fi formulate de ctre fiecare proces;
-alocare[n][m]- o matrice care arat numrul de resurse din
fiecare tip de resurse care este alocat fiecrui proces;
-necesar[n][m] o matrice care arat numrul de resurse
care ar mai putea fi necesare fiecrui proces.
Dac necesar[i][j] = t , atunci procesul P
i
ar mai avea nevoie de
t elemente din resursa r
j
.
Avem relaia:
necesar[i][j] = maxim[i][j] alocare[i][j]
-cerere[n][m]matricea cererilor formulate de un proces
Dac cerere[i][j]= t, atunci procesul P
i
dorete t elemente din
resursa r
j
.
Algoritmul banchetului are urmtorii pai:
Pas 1
Procesul P
i
formuleaz o cerere de resurse. Dac linia i din matricea cerere
este mai mare dect linia i din matricea necesar, atunci este eroare, deci nu
se trece la pasul 2.
Sorin Adrian Ciureanu 46
Precizm c V
1
[n] < V
2
[n], dac V
1
[i] < V
2
[i] pentru oricare
i=1.n
if cerere[i][x]<=necesar[i][x] x= m ........ 1 , Pas2
else eroare
Pas 2
if cerere[i][x]<=disponibil[x] se trece la pas 3
else wait (resursele nu sunt disponibile)
Pas 3
Se simuleaz alocarea resurselor cerute de procesul P
i
, strile modificndu-
se astfel:
disponibil[x]=disponibil[x]cerere]i][x];
alocare[i][x]=alocare[i][x]+cerere[i][x]; x=1.m
necesar[i][x]=necesar[i][x]-cerere[i][x];
Pas 4
n acest moment se testeaz dac noua stare este sigur sau nu. n acest scop
se mai utilizeaz doi vectori:
lucru[m]
terminat[n]
Subpasul 1
Se iniializeaz aceti vectori astfel:
lucru[i]=disponibil[i];
terminat[i]=fals
pentru i=1,2,3..n
Subpasul 2
Se caut o valoare i astfel nct:
terminat[i]=fals;
necesar[i][x]<=lucru[x];
Dac nu exist, se trece la subpasul 4.
Subpasul 3
Se simuleaz ncheierea execuiei procesului, deci se execut:
lucru[x]=lucru[x]+alocare[i][x]
terminat = true;
Se trece la subpasul 2.
Subpasul 4
Dac:
terminat[i]=true pentru i=1n ,
Atunci sistemul este ntr-o stare sigur.
Algoritmul bancherului poate fi utilizat n orice sistem de alocare a
resurselor, pentru determinarea strilor sigure, avnd un mare grad de
Sisteme de operare 47
generalitate. Principalul su dezavantaj este numrul mare de operaii pe
care l cere.
b) Folosirea grafului de alocare a resurselor
O alt metod pentru determinarea unei stri sigure este folosirea
grafului de alocare a resurselor. Fa de graful prezentat anterior, elementul
nou este arcul revendicare. Acest arc arat c este posibil ca procesul P
i
s
revendice n viitor resursa R
j
. Ca mod grafic de reprezentare , el este trasat
cu linie ntrerupt. Cnd procesul P
i
cere resursa R
j
, arcul revendicare (P
i
R
j
)
se transform n arc cerere (P
i
R
j
). Cnd resursa R
j
este eliberat de procesul
P
j
,arcul alocare (P
i
R
j
) este transformat n arc revendicare (P
i
R
j
). Pentru a
determina strile nesigure, se caut n graf bucle n care intr arcuri
revendicare. O astfel de bucl reprezint o stare nesigur. Exemplu:
Fig. 4.4. Graf de alocare cu arcuri revendicative.
n graful de mai sus, procesului P
1
i este alocat resursa R
1
, iar
procesului P
2
i este alocat resursa R
2
. n acelai timp procesul P
1
poate s
cear n viitor resursa R
2
ceea ce n graf se concretizeaz prin arcul
revendicare (P
1
R
2
). La fel, Procesul P
2
poate revendica resursa R
1
prin arcul
(P
2
R
1
). Se observ c exist o bucl (P
1
R
2
P
2
R
1
), ceea ce face ca aceste
revendicri s conduc la o stare nesigur.
4.2.4.3.Detectarea interblocrii i revenirea din ea
Atunci cnd, din diverse motive, nu se pot aplica algoritmii de
prevenire i evitare a interblocrii, se intr n aceast stare. n acest caz
trebuie s se execute alte dou tipuri de algoritmi:
-algoritmi de detecie care s informeze sistemul asupra momentului
n care s-a ajuns la aceast stare;
-algoritmi de revenire din starea de interblocare.
c)Detecia interblocrii
n acest scop se folosesc doi algoritmi:
P1
R1
R2
P2
2 2
Sorin Adrian Ciureanu 48
-un algoritm foarte asemntor cu algoritmul bancherului;
-un graf de alocare a resurselor de tip WAIT FOR.
Deoarece algoritmul bancherului a fost discutat n amnunt, ne vom
ocupa doar de graful WAIT FOR. Acest graf se obine din graful de alocare
a resurselor prin eliminarea nodurilor de tip resurs (R
j
) i contopirea arcelor
corespunztoare. n acest caz, un arc (P
i
P
j
) arat c P
i
ateapt ca P
j
s
elibereze resursa care i este necesar.
Fig. 4.5.Graf de alocare a resurselor.
n acest caz, existena buclei nu nseamn interblocare.
Fig.4.6. Graf WAIT FOR.
Algoritmul WAIT FOR se poate aplica numai pentru resurse simple.
Se observ c bucla existent n graful de alocare a resurselor este
mai bine pus n eviden n graful WAIT FOR. Dar avantajul principal al
utilizrii grafului WAIT FOR const n costurile mai mici pentru detecia
unei bucle, deci a interblocrii.
Indiferent de tipul algoritmului de detecie a interblocrii, se pune
problema ct de des trebuie s fie acesta apelat. Exist, n general, dou
modaliti de apelare:
a)apelarea algoritmului ori de cte ori se formuleaz o cerere de
resurse;
b)apelarea algoritmului la intervale regulate de timp.
P1
2
2
P2
2
2
P3
2
2
P4
2
2
P5
2
2
R1 R2 R3 R4 R5
P1
2
2
P2
2
2
P3
2
2
P4
2
2
P5
2
2
Sisteme de operare 49
Prima modalitate detecteaz rapid interblocarea dar presupune un
substanial consum suplimentar de timp de calcul.
n a doua modalitate , se alege un interval de timp la care se apeleaz
algoritmul de detectare. Desigur, un interval scurt va introduce costuri
suplimentare iar la un interval lung este posibil ca starea de interblocare s
fie detectat foarte trziu, cu consecine nedorite n funcionarea sistemului.
d) Revenirea din interblocare
Revenirea din interblocare se poate face n dou moduri:
-manual, fcut de ctre operatorul sistemului;
-automat, executat de anumite programe ale sistemului de operare.
n general, exist dou metode de revenire din starea de interblocare:
1)-Prin dispariia ateptrii circulare; n acest caz se foreaz
terminarea unor procese.
2)-Prin negarea achiziiei forate; n acest caz procesele pot s
achiziioneze resurse de la alte procese.
1)Folosirea metodei de dispariie a ateptrii circulare are dou
forme:
-ncheierea forat a tuturor proceselor interblocate; n acest fel se
revine sigur din starea de interblocare dar se pierd toate rezultatele fiecrui
proces implicat n interblocare.
-ncheierea forat a cte unui singur proces implicat n interblocare;
n acest caz se ncheie forat un proces i apoi se apeleaz algoritmul de
detecie a interblocrii pentru a vedea dac mai persist starea de
interblocare; dac da, se ncheie forat alt proces i se apeleaz din nou
algoritmul de detecie, operaia continund pn la dispariia strii de
interblocare.
Avantajul fa de prima metod este c nu se pierd rezultatele de la
toate procesele. Dezavantajul const n timpul suplimentar, pentru c, dup
terminarea forat a unui proces, trebuie apelat algoritmul de detecie.
O alt problem a acestei metode este determinarea procesului sau
proceselor care trebuiesc terminate forat. Pot intra n discuie mai muli
factori:
-prioritatea procesului;
-numrul resurselor care ar mai fi necesare procesului
pentru a-i ncheia normal execuia;
-numrul resurselor care au fost deja folosite de un proces;
-timpul necesar pn la terminarea normal a procesului.
Din enumerarea acestor factori, se observ c este necesar un
algoritm pentru alegerea procesului sau proceselor care vor fi terminate
forat.
Sorin Adrian Ciureanu 50
De obicei se alege factorul ce necesit un timp minim. Cel mai
frecvent se utilizeaz alegerea dup prioritate, cu att mai mult cu ct
prioritatea proceselor este deja calculat din algoritmii de planificare a
procesorului.
2)Permiterea achiziionrii forate a resurselor de la procese este a
doua metod de revenire din interblocare. Problemele care apar n acest caz
sunt:
-alegerea victimelor, ceea ce nseamn i selectarea resurselor care
vor fi achiziionate forat;
-continuarea procesului cruia i s-au preluat forat resursele;
-prevenirea nfometrii, adic evitarea faptului ca un acelai
proces s fie ales mereu victim.
4.2.4.4. Rezolvarea interblocrii n practic
De obicei, n mod practic, interblocarea poate fi tratat n dou
moduri:
a)-prin ignorarea ei;
b)-printr-o metod mixt de tratare.
Ignorarea se aplic, de exemplu, sistemelor de operare instalate pe
PC-uri. Att WINDOWS-ul ct i UNIX-ul ignor interblocarea, neavnd
programe pentru rezolvarea ei.
Exist sisteme de operare n care interblocarea ar duce la perturbaii
grave n funcionare, de exemplu, n unele sisteme de operare funcionnd n
timp real. Acestor sisteme li se aplic metode mixte de tratare a
interblocrii.
O metod mixt clasic are la baz mprirea resurselor n clase de
resurse ordonate ierarhic, aa cum am prezentat la prevenirea interblocrii
pentru a mpiedica ateptarea circular. n acest mod, o eventual
interblocare ar putea aprea doar n interiorul unei clase.
n interiorul clasei se pot aplica metodele prezentate de prevenire,
evitare, detecie i revenire din interblocare.
4.3. COMUNICAREA NTRE PROCESE
COOPERANTE
ntre dou sau mai multe procese pot exista dou tipuri de
comunicare:
a) prin memorie partajat;
Sisteme de operare 51
b) prin sistem de mesaje.
a) n sistemele cu memorie partajat exist o memorie comun
pentru toi utilizatorii iar procesele pot comunica ntre ele prin intermediul
variabilelor partajate din memoria comun. Mecanismul de comunicare este
simplu: un proces actualizeaz o variabil partajat iar alt proces va citi
aceast variabil. Aceast metod este tipic pentru sistemele
multicalculatoare, cu memorie partajat. Sistemul de operare nu este
responsabil pentru acest tip de comunicare. ntreaga rspundere revine
programatorului de aplicaie. De aceea un sistem de operare pentru
multicalculatoare nu difer foarte mult de un sistem de operare pentru un
monoprocesor.
b)n acest caz, al comunicrii prin mesaje, procesele pot comunica
ntre ele doar prin dou operaii:
-send (mesaj);
-receive (mesaj)
Deci, prin aceste dou primitive de transmisie, un proces poate
comunica cu altul doar transmind sau recepionnd un mesaj.
Acest tip de comunicaie este specific multicalculatoarelor. ntreaga
responsabilitate a comunicrii prin mesaje i revine sistemului de operare.
De aceea, aceste sisteme de operare sunt mult mai complicate i greu de
proiectat i realizat. Ele mai poart numele de sisteme de operare
distribuite.
n acest capitol vom analiza modul de transmisie prin mesaje, acest
lucru fiind indiferent dac folosim mono sau multiprocesoare.
Pentru a exista o comunicare ntre procese trebuie s existe o linie de
comunicaie. Problemele legate de implementarea acestei linii sunt:
-modul n care se stabilesc liniile de comunicaie ntre procese;
-numrul de procese asociate unei linii de comunicaie;
-numrul de legturi care pot exista ntre o pereche de procese;
-capacitatea unei linii de comunicaie;
-tipul liniei de comunicaie (unidirecional sau bidirecional);
-dimensiunea mesajelor care poate fi fix sau variabil.
Modalitile folosite pentru implementarea logic a liniei de
comunicaie i a operaiilor send i receive sunt:
-comunicaie direct sau indirect;
-comunicaie simetric sau asimetric;
-buffering implicit sau explicit ( prin buffering se nelege stocarea
mesajului ntr-o zon tampon de unde este preluat ulterior de ctre
destinatar);
-trimiterea mesajului prin copie sau referin.
Sorin Adrian Ciureanu 52
4.3.1. Comunicaie direct i indirect
4.3.1.1. Comunicaie direct
n comunicaia direct, procesele care trimit sau recepioneaz
mesaje trebuie s menioneze numele procesului care trimite, respectiv care
recepioneaz mesajul.
Primitivele send i receive au urmtoarea form simetric:
send(proces1,mesaj)
(se trimite un mesaj ctre procesul 1)
receive(proces2,mesaj)
(se recepioneaz un mesaj de la procesul 2)
Pot avea i o form asimetric. n acest caz cele dou primitive se
definesc astfel:
send(proces,mesaj)
(se trimite un mesaj ctre proces)
receive(identificator,mesaj)
( se recepioneaz un mesaj de la un proces)
Linia de comunicaie are urmtoarele caracteristici:
-linia de comunicaie ntre dou mesaje este bidirecional;
-ntre procesul care, fie vrea s transmit fie vrea s recepioneze un
mesaj, i cellalt proces partener se stabilete o singur legtur de
comunicaie.
4.3.1.2. Comunicaie indirect
n acest mod de comunicaie mesajele sunt trimise i recepionate
prin intermediul cutiilor potale (mail boxes) care se mai numesc i porturi.
Primitivele de comunicare au urmtoarea form:
send(port1,mesaj)
(se transmite un mesaj portului 1)
receive(port2,mesaj)
(se recepioneaz un mesaj de la portul 2)
Cutia potal sau portul poate avea doi proprietari:
a) procesul;
b) sistemul de operare.
a) La un moment dat, o cutie potal are un singur proprietar i astfel
se cunoate precis care este numele procesului ce va primi mesajele trimise.
Sisteme de operare 53
Pentru ca un proces s devin proprietarul unei cutii potale, se poate
utiliza una din urmtoarele dou metode :
-procesul poate declara o variabil de tip cutie potal;
-se definete mai nti o cutie potal i apoi se declar cine este
procesul care o are n proprietate.
Cnd procesul proprietar al cutiei potale i ncheie execuia, trebuie
s execute dou lucruri: distrugerea cutiei potale i anunarea celorlalte
procese despre distrugerea cutiei potale.
b) n cazul n care sistemul de operare este proprietarul cutiei
potale, atunci aceasta are o existen de sine stttoare i nu depinde de
proces. Mecanismul creat de sistemul de operare cuprinde urmtoarele
operaii:
-crearea unei cutii potale noi;
-trimiterea i recepionarea mesajelor prin cutia potal;
-distrugerea cutiei potale.
4.3.2. Linii de comunicaii i tipuri de mesaje
4.3.2.1. Linii de comunicaii
Cea mai important proprietate a liniei de comunicaie este
capacitatea care arat dac i n ce fel pot fi stocate mesajele. Exist
capacitate zero, capacitate limitat i capacitate nelimitat.
-Capacitate zero. n acest caz nu exist modalitate de stocare a
mesajului. Procesul emitent va rmne n ateptare pn cnd destinatarul va
primi mesajul transmis. Trebuie s existe o sincronizare a proceselor care se
mai numete i rendezvous.
-Capacitate limitat. n acest tip de transmisie exist un buffer care
poate stoca n mesaje.
-Capacitate nelimitat. n acest tip de transmisie exist un buffer de
capacitate infinit, teoretic, care nu duce niciodat la situaia ca procesul
emitor s atepte.
La fel ca n transmisia de date este necesar i aici, n unele cazuri, ca
procesul emitent s tie dac mesajul emis a ajuns la destinaie. Dac n
transmisia de date exist un pachet de tip ACK, aici exist ceva asemntor,
un mesaj confirmare. De exemplu, cnd procesul P
1
transmite un mesaj
procesului P
2
, atunci urmtoarea secven de mesaje face ca P
1
s tie c
mesajul su a fost transmis:
Sorin Adrian Ciureanu 54
send(p2, mesaj) procesul P1
receive(p1,mesaj) procesul P2
send(p1,confirmare) procesul P2
receive(p2,mesaj) procesul P1
4.3.2.2. Tipuri de mesaje
Din punct de vedere al dimensiunii, mesajele pot fi:
-cu dimensiuni fixe;
-cu dimensiuni variabile;
-mesaje tip.
Mesajele cu dimensiune fix necesit o implementare simpl dar o
programare mai dificil.
Mesajele cu dimensiune variabil necesit o implementare fizic
dificil dar o programare mai simpl.
Mesajele tip se folosesc numai n comunicaia indirect.
4.3.3. Excepii n comunicarea ntre procese
Dac n sistemele cu memorie partajat apariia unei erori duce la
ntreruperea funcionrii sistemului , n sistemele cu transmisie de mesaje
apariia unei erori nu este aa de grav. Erorile posibile trebuiesc cunoscute
pentru a le putea trata corespunztor.
Cele mai frecvente erori sunt: terminarea unui proces nainte de
primirea mesajelor, pierderea mesajelor, alterarea mesajelor i amestecarea
lor.
a)Terminarea unui proces nainte de primirea mesajelor. n unele
cazuri, un proces, emitent sau destinatar, i poate ncheia execuia nainte ca
mesajul s fi fost prelucrat. Astfel, pot aprea situaii n care unele mesaje
nu vor ajunge niciodat la destinaie sau situaii n care un proces va atepta
un mesaj ce nu va mai ajunge niciodat. Dac un proces P
1
, destinatar,
ateapt un mesaj de la un proces emitent P
2
, care i-a terminat execuia,
atunci P
1
va rmne n starea blocat. Pentru ca P
1
s nu se blocheze exist
dou posibiliti:
-sistemul de operare termin forat procesul P
1
;
-sistemul de operare comunic procesului P
1
c procesul P
2
s-a
ncheiat.
Dac un proces P
1
este emitent trimind un mesaj unui proces P
2
care i-a ncheiat execuia, exist urmtoarele posibiliti:
Sisteme de operare 55
-dac linia de comunicaie este limitat sau nelimitat, nu se
ntmpl nimic; procesul P
1
i continu execuia;
-dac linia de comunicaie este de capacitate zero, atunci P
1
se
blocheaz; pentru ca P
1
s nu se blocheze se procedeaz ca n cazul anterior.
b)Pierderea mesajelor. Pierderea unui mesaj se poate produce atunci
cnd este o defeciune n linia de comunicaie. Pentru remedierea acestui
lucru se pot folosi urmtoarele metode:
-detectarea evenimentului i retransmiterea mesajului de ctre
sistemul de operare;
-detectarea evenimentului i retransmiterea mesajului de ctre
procesul emitent;
-detectarea evenimentului de ctre sistemul de operare care
comunic procesului emitent pierderea mesajului; procesul emitent decide
dac retransmite sau nu mesajul.
c)Alterarea i amestecarea (scrambling) mesajelor. Este situaia n
care un mesaj ajunge alterat la receptor, n sensul unei alterri a informaiei
din coninutul su. Pentru rezolvarea acestei situaii se folosesc metode
clasice, din teoria transmiterii informaiei, de detectare i corectare a
erorilor:
-folosirea polinomului de detecie i eventual de corecie a erorilor
(aa numitele CRC-uri sau LRC-uri, folosite ,de exemplu, la hard disc);
-folosirea checksums-urilor, care sunt sume ale biilor mesajelor;
exist dou chechsums-uri, unul calculat cnd se transmite mesajul i altul
care se calculeaz din biii mesajului recepionat. La neegalitatea celor dou
chechsums-uri, se consider eroare;
-folosirea paritii n transmiterea i recepionarea mesajului.
4.3.4. Aplicaii ale IPC-urilor (Intercomunicare ntre
Procese)
n sistemul de operare UNIX, ale crui aplicaii vor fi prezentate n
capitolele urmtoare, exist urmtoarele aplicaii ale IPC-urilor:
-pipe-uri;
-cozi de mesaje (n SystemV);
-semafoare;
-zone de memorie partajat (n System V);
-semnale.
Sorin Adrian Ciureanu 56
De asemenea, n subcapitolul urmtor, de procese clasice, se prezint
procesul productor consumator rezolvat i prin metoda sistemelor de
mesaje (Message Passing).
4.4. PROBLEME CLASICE DE COORDONARE i
SINCRONIZARE A PROCESELOR
Exist o serie de exemple clasice de coordonare i sincronizare a
proceselor n care se regsesc principalele probleme ce apar n astfel de
situaii. Multe din aceste probleme se afl n structura oricrui sistem se
operare. Totodat aceste probleme clasice se regsesc i n programarea
concurent. Le vom aborda ncercnd s le soluionm cu mijloacele
specifice prezentate anterior.
4.4.1. Problema productor-consumator
Fie o serie de procese concurente care produc date (procese
PRODUCTOR). Aceste date sunt consumate de alte procese (procese
CONSUMATOR). Datele sunt consumate n ordinea n care au fost
produse. Este posibil ca viteza de producere s difere mult de viteza de
consum.
Aceast problem s-ar rezolva uor dac ar exista un buffer de
dimensiuni foarte mari, teoretic infinit, care ar permite operarea la viteze
diferite ale productorilor i consumatorilor. Cum o astfel de soluie este
practic imposibil, vom considera cazul practic al unui buffer finit.
Principalele probleme care apar n acest caz sunt:
-buffer gol (consumatorii nu pot consuma date i trebuie s atepte);
-buffer plin (productorii nu pot nscrie date n buffer i trebuie s
atepte).
Indiferent de soluiile alese, vor trebui rezolvate situaiile de citire
din buffer-ul gol i de nscriere n buffer-ul plin.
4.4.1.1. Rezolvarea problemei productor consumator cu ajutorul
semafoarelor.
Fie un buffer de dimensiune n organizat dup structura coad
circular. Bufferul are n locaii pe care le-am notat cu tampon[n].
Variabilele cu care se scrie i se citete n buffer au fost notate cu
scriere i citire. Ele asigur accesul proceselor la poziia unde
se dorete operaia de scriere sau citire, n ordinea n care au venit.
Sisteme de operare 57
Semafoarele semscriere i semcitire au rolul de a asigura
excluderea mutual ntre procesele productor i consumator. Semaforul
semscriere conine numrul de poziii libere din buffer iar semaforul
semcitire conine numrul de poziii pline. semscriere se
iniializeaz cu n i semcitire cu 0. Cnd semscriere =0 sau
semcitire=n , se va semnala situaia de buffer plin respectiv buffer gol
i procesele vor fi blocate. Se intr ntr-o excludere mutual cu protocolul
bussy-wait i procesele vor fi deblocate atunci cnd semscriere= n sau
semcitire= 0.
Mutexurile mutexscriere i mutexcitire folosesc
pentru excluderea mutual ntre dou procese de acelai tip.
mutexscriere pentru procesele de tip productor i mutexcitire
pentru procesele de tip consumator.
Procesele productor vor citi numere ntregi la tastatur iar
procesele consumator vor consuma aceste numere.
Iat o implementare a problemei productor/consumator, scris n
limbajul C:
//declaraii de variabile, semafoare, mutexuri
i iniializatori
typedef int semafor; typedef int mutex;
#define n 1000;
int tampon[n];
int scriere=0, citire=0;
semafor semscriere=n, semcitire=0;
mutex mutexscriere, mutexcitire;
//Procese productor
int valoare, tastatura;
while(1)
{ valoare=scanf(%d,&tastatura);
wait(semscriere) ;
lock(mutexscriere) ;
tampon[scriere]=valoare ;
scriere=(scriere+1)%n ;
unlock(mutexscriere) ;
signal(semcitire) ;}
Sorin Adrian Ciureanu 58
//Procese Consumator
int valoare;
while(1)
{wait(semcitire);
lock(mutexcitire);
valoare=tampon[citire];
citire=(citire+1)%n;
unlock(mutexcitire);
signal(semscriere);}
Procesele productor funcioneaz n felul urmtor:
Se consider o bucl while din care practic nu se iese. Se citete
un numr ntreg de la tastatur n variabila valoare. Prin
wait(semscriere) se asigur excluderea mutual a procesului
respectiv productor fa de alte eventuale procese consumator. Prin
lock(mutexscriere) se asigur excluderea mutual a procesului
respectiv productor fa de alte procese productoare. Prin
tampon[scriere]=valoare se scrie efectiv valoarea n buffer. Prin
scriere=(scriere+1)%n se actualizeaz poziia de scriere n
buffer. Prin unlock(mutexscriere) se elibereaz mutexul de
scriere, permind altor productori s foloseasc bufferul. Prin
signal(semcitire) se contorizeaz semaforul de citire cu 1,
semnalnd c, dup ce procesul productor a nscris o valoare n buffer,
numrul de poziii din buffer pentru procesele consumatoare s-a mrit cu 1.
Procesele consumator funcioneaz n mod asemntor.
4.4.1.2. Rezolvarea problemei productor/consumator prin
transmitere de mesaje
Am studiat n subcapitolul precedent tehnica de transmitere prin
mesaje. Prezentm acum o aplicaie a acestei tehnici la problema
productor/consumator.
Pentru aceasta s considerm o linie de transmisie cu capacitate
limitat care folosete un buffer cu n poziii.
Modul de comunicaie ales pentru implementare este cel direct, deci
fr mailboxuri.
Algoritmul este simplu. Consumatorul trimite mai nti mesaje goale
productorului. Ori de cte ori productorul are de dat un produs
consumatorului, va lua un mesaj gol si va transmite consumatorului un
Sisteme de operare 59
mesaj plin. Prin aceasta numrul de mesaje din sistem rmne constant n
timp, nedepind capacitatea limitat a bufferului de comunicaie.
Bufferul de comunicaie este plin atunci cnd productorul lucreaz
mai repede dect consumatorul i toate mesajele sunt pline. n acest moment
productorul se blocheaz, ateptnd ca un mesaj gol s se ntoarc.
Bufferul de comunicaie este gol atunci cnd consumatorul lucreaz
mai repede dect productorul. Toate mesajele vor fi golite ateptnd ca
productorul s le umple. Consumatorul este blocat ateptnd pentru
deblocare un mesaj plin.
Iat mai jos o implementare a problemei productor/consumator prin
transfer de mesaje.
# define n 10000
{int val;
void productor()
message m; /*este mesajul transmis
de productor*/
while(1)
{val=produce element(); /*o funcie care produce
mesajul transmis de
productor*/
receive(consumator,&m); /*ateapt un mesaj gol*/
construieste
mesaj(&m,val);
/*o funcie care
construiete mesajul
transmis*/
send(consumator,&m);}} /*se transmite efectiv
mesajul consumatorului*/
void consumator()
{int i,val;
message m;
for(i=1;i<=n;i++) /*se transmit spre
productor cele n mesaje
goale*/
send(productor,&m);
while(1){
receive(productor,&m); /*se primete mesajul de
la productor*/
val=extrageremesaj(&m); /*se extrage mesajul
pentru a putea fi
prelucrat*/
Sorin Adrian Ciureanu 60
send(productor,&m); /*se trimite o replic la
mesajul gol*/
consuma element(val);}} /*o funcie care are
rolul de a utiliza
mesajul transmis de
productor*/
Se observ n implementarea aleas c parametrul mesaj este un
parametru referin.
4.4.2. Problema brbierului somnoros
Enun
Prvlia unui brbier este format din dou camere, una la strad,
folosit ca sal de ateptare, i una n spate, n care se gsete scaunul pe
care se aeaz clienii pentru a fi servii. Dac nu are clieni, brbierul
somnoros se culc. S se simuleze activitile care se desfoar n prvlia
brbierului.
Rezolvare
Aceast problem este o reformulare a problemei
productor/consumator, n care locul bufferului de obiecte este luat de
scaunul brbierului iar consumatorul este brbierul care i servete
(consum) clienii.
n sala de ateptare sunt n scaune pe care se aeaz clienii; fiecare
scaun este pentru un client. Dac nu sunt clieni, brbierul doarme n
scaunul de frizerie. Cnd vine primul client l trezete pe brbier i brbierul
l servete pe client, aezndu-l n scaunul de frizerie. Dac n acest timp
sosesc i ali clieni, ei vor atepta pe cele n scaune. Cnd toate scaunele
sunt ocupate i mai vine nc un client, acesta prsete prvlia.
Problema const n a programa aceste activiti n aa fel nct s nu
se ajung la aa numitele condiii de curs. Este o problem clasic cu multe
aplicaii, mai ales n cele de help desk.
Pentru implementarea soluiei vom utiliza dou semafoare i un
mutex:
clieni un semafor ce contorizeaz clienii ce ateapt;
brbier un semafor care arat dac brbierul este ocupat sau nu;
el are dou valori, 0 dac brbierul este ocupat i 1 dac este liber;
mutexc un mutex folosit pentru excludere mutual; arat dac
scaunul de frizerie este ocupat sau nu.
De asemenea mai folosim o variabil:
Sisteme de operare 61
clieninateptare care, aa cum arat i numele,
numr clienii care ateapt. Aceast variabil trebuie introdus
deoarece nu exist o cale de a citi valoarea curent a semafoarelor i
de aceea un client care intr n prvlie trebuie s numere clienii
care ateapt. Dac sunt mai puini dect scaunele, se aeaz i el i
ateapt; dac nu, prsete frizeria.
S descriem algoritmul . Cnd brbierul intr dimineaa n prvlie,
el execut funcia brbier(), blocnd semaforul clieni care este
iniial pe zero. Apoi se culc i doarme pn vine primul client. Cnd acesta
sosete, el execut funcia clieni() i ocup mutexul care arat c
scaunul de frizerie este ocupat. Dac intr un alt client n acest timp, el nu
va putea fi servit deoarece mutexul este ocupat. Va numra clienii care
ateapt i, dac numrul lor e mai mic dect numrul scaunelor, va rmne,
dac nu, va prsi prvlia. Rmnnd, va incrementa variabila
clieninateptare. Cnd clientul care este servit a fost brbierit,
el elibereaz mutexul, trezind clienii care ateapt i unul din ei va ocupa
mutexul, fiind servit la rndul su.
Iat mai jos implementarea acestui algoritm.
#define scaune 20 /*se definete numrul
de scaune*/
type def int semafor;
type def int mutex ;
semafor clienti=0; /*declaraii i
iniializri*/
semafor brbier=0;
mutexc=1;
int clientiinasteptare=0;
void brbier()
{while(1){
wait(clienti);
wait(mutexc);
clientiinasteptare--;
signal(brbier);
signal(mutexc);
tunde();
}
void clienti()
{wait(mutexc);
Sorin Adrian Ciureanu 62
if(clientiinasteptare<scaune)
{clientiinasteptare++;
signal(clienti);
signal(mutexc);
clienttuns();
}
else
signal(mutexc);}}
4.4.3. Problema cititori/scriitori
Problema a fost enunat de Coutois, Heymans i Parnas n 1971.
Un obiect (care poate fi o resurs, de exemplu un fiier sau o zon de
memorie) este partajat de mai multe procese concurente. Dintre aceste
procese, unele doar vor citi coninutul obiectului partajat i aceste procese
poart numele de cititori iar celelalte vor scrie n coninutul obiectului
partajat, purtnd numele de scriitori.
Cerina este ca scriitorii s aib acces exclusiv la obiectul partajat, n
timp ce cititorii s poat accesa obiectul n mod concurent (neexclusiv).
Exist mai multe posibiliti de a soluiona aceast problem. Vom
aminti dou variante.
Varianta 1
Nici un cititor nu va fi inut n ateptare, dect dac un scriitor a
obinut deja permisiunea de acces la obiectul partajat.
La un acces simultan la obiectul partajat, att al scriitorilor ct i al
cititorilor, cititorii au prioritate.
Varianta 2
Cnd un scriitor este gata de scriere, el va executa scrierea ct mai
curnd posibil.
La un acces simultan, scriitorii sunt prioritari.
Oricum, n ambele cazuri, problema principal ce trebuie rezolvat
este nfometarea, adic ateptarea la infinit a obinerii dreptului de acces.
S implementm un program pentru prima variant, folosind
urmtoarele semafoare, mutexuri i variabile:
scrie un semafor cu mai multe roluri; el asigur excluderea
mutual a scriitorilor; este folosit de ctre primul cititor care intr n propria
seciune critic; de remarcat c acest semafor nu este utilizat de cititorii care
intr sau ies din seciunea critic n timp ce ali cititori se afl n propria
seciune critic;
Sisteme de operare 63
contorcitire o variabil care are rolul de a ine evidena
numrului de procese existente n cursul citirii;
semcontor un semafor care asigur excluderea mutual cnd
este actualizat variabila contorcitire.
Dac un scriitor este n seciunea critic i n cititori ateapt, atunci
un cititor ateapt la semaforul scriere iar ceilali n-1 ateapt la
semcontor.
La signal(scrie), se poate relua fie execuia unui singur
scriitor, fie a cititorilor aflai n ateptare, decizia fiind luat de planificator.
Iat implementarea programului pentru prima variant:
typedef int semafor; /*declaraii i
initializri*/
int contorcitire=0;
semafor scrie=1,semcontor=1 ;
void scriitor()
{wait(scrie) ;
scriereobiect() ;
signal(scrie) ;}
void cititor()
{wait(semcontor) ;
contor citire++;
if(contorcitire==1)wait(scrie);/*primul
cititor*/
signal(semcontor);
citireobiect();
wait(semcontor);
contor citire--;
if(contorcitire==0)signal(scrie);/*ultimul
cititor*/
signal(semcontor);}
4.4.4. Problema cinei filozofilor chinezi
Cinci filozofi chinezi i petrec viaa gndind i mncnd n jurul
unei mese circulare nconjurat de cinci scaune, fiecare filozof ocupnd un
scaun. n centrul mesei este un platou cu orez i n dreptul fiecrui filozof se
afl o farfurie. n stnga i n dreapta farfuriei cte un beior. Deci, n total,
cinci farfurii i cinci beioare. Un filozof poate efectua dou operaii:
Sorin Adrian Ciureanu 64
gndete sau mnnc. Pentru a putea mnca, un filozof are nevoie de dou
beioare, unul din dreapta i unul din stnga. Dar un filozof poate ridica un
singur beior odat. Problema cere o soluie pentru aceast cin.
2
1
3
3
5
4
4
Fig. 4.7. Problema filozofilor chinezi.
Trebuie rezolvate dou probleme majore:
-Interblocarea care poate s apar. De exemplu, dac fiecare filozof
ridic beiorul din dreapta sa, nimeni nu mai poate s-l ridice i pe cel din
stnga i apare o situaie clar de ateptare circular, deci de interblocare.
-Problema nfometrii unui filozof care nu apuc s ridice niciodat
cele dou beioare.
Aceast problem a fost enunat i rezolvat de ctre Dijkstra n
1965.
Exist multe soluii ale acestei probleme, marea majoritate utiliznd
excluderea mutual.
Pentru a nu aprea interblocarea se folosesc, n general, soluii de
prevenire a acesteia adic se impun unele restricii n ceea ce privete
aciunile filozofilor, cum ar fi:
-unui filozof i se permite s ia un beior numai atunci cnd ambele
beioare, din dreapta i din stnga sa, sunt disponibile;
-se creeaz o coresponden biunivoc ntre mulimea numerelor
naturale i filozofi, fiecare filozof avnd un numr natural; o soluie
asimetric impune filozofilor cu numr impar s apuce mai nti beiorul
din stnga i apoi pe cel din dreapta, iar filozofilor cu numr par s ia mai
nti beiorul din dreapta i apoi pe cel din stnga.
Sisteme de operare 65
Vom prezenta, n continuare, o soluie clasic a acestei probleme,
care rezolv i situaia interblocrii i pe cea a nfometrii. n acest algoritm,
se poate generaliza problema pentru n filozofi. Se urmrete n ce stare
poate fi un filozof, existnd trei stri posibile: mnnc, gndete i este
nfometat.
Unui filozof i se permite s intre n starea mnnc numai dac cel
puin unul din vecinii si nu este n aceast stare. Prin aceast restricie se
previne interblocarea.
Pentru implementare, se utilizeaz urmtoarele structuri:
stare[n] un vector n-dimensional, n care pe poziia
i se gsete starea filozofului la un moment dat; aceasta poate fi:
0 pentru starea gndete
1 pentru starea nfometat
2 pentru starea mnnc
sem[n] un vector n-dimensional, n care sem[i] este un
semafor pentru filozoful i;
mutexfil un mutex pentru excludere mutual;
funcia filozof(i) este funcia principal care coordoneaz
toate celelalte funcii i care se refer la filozoful i;
funcia ridicbeior(i) este funcia care asigur pentru
filozoful i ridicarea ambelor beioare;
funcia punebeior i este funcia care asigur pentru
fiecare filozof i punerea ambelor beioare pe mas;
funcia test(i) este funcia care testeaz n ce stare este
filozoful i.
Implementarea este:
#define n 5 /*am definit numrul
de filozofi*/
#define stang(i+n-1)%n /*numrul vecinului
din stnga filozofului
i*/
#define drept(i+1)%n /*numrul vecinului
din stnga filozofului
i*/
#define gandeste 0
#defineinfometat 1
#define mananca 2
Sorin Adrian Ciureanu 66
typedef int semafor;
typedef int mutex;
int stare[n];
mutex mutexfil=1
semafor sem[n];
void filozof(int i)
while(i) {
gandeste(); /*filozoful i
gndete*/
ridicabetisor(i); /*filozoful i ridic
cele dou beioare*/
mananca(); /*filozoful i
mnnc*/
punebetisor(i); /*filozoful i pune pe
mas dou beioare*/
void ridicabetisor(int i)
{wait(mutexfil); /*se intr n regiunea
critic*/
stare[i]=infometat; /*filozoful i este n
starea nfometat*/
test(i); /*ncearc s
acapareze cele dou
beioare*/
signal(mutexfil); /*se iese din regiunea
critic*/
wait(sem[i]);} /*procesul se
blocheaz dac nu se
pot lua cele dou
beioare*/
void punebetisor(int i)
{wait(mutexfil); /*se intr n regiunea
critic*/
stare [i]=gandeste; /*filozoful i a
terminat de gndit*/
test(stang); /*se testeaz dac
vecinul din stnga
Sisteme de operare 67
filozofului i
mnnc*/
test(drept); /*se testeaz dac
vecinul din
dreaptafilozofului i
mnnc*/
signal(mutexfil); /*se iese din regiunea
critic*/
}
void test(int i);
{if stare [i]==
infometat&&stare[stang]!=
mananca&&stare[drept]!=
mananca)
{stare[i]=mananca;
signal(sem[i]);}}
4.4.5. Probleme propuse pentru implementare
4.4.5.1. Problema rezervrii biletelor
Enun
Fiecare terminal al unei reele de calculatoare este plasat ntr-un
punct de vnzare a biletelor pentru transportul feroviar. Se cere s se
gseasc o modalitate de a simula vnzarea biletelor, fr a vinde dou sau
mai multe bilete pentru acelai loc.
Rezolvare
Este cazul n care mai multe procese (vnztoarele de bilete)
ncearc s utilizeze n mod concurent o resurs nepartajabil, care este o
resurs critic (locul din tren).
Problema se rezolv utiliznd excluderea mutual iar pentru
implementarea ei cea mai simpl metod este folosirea semafoarelor.
4.4.5.2. Problema grdinii ornamentale
Enun Intrarea n grdinile ornamentale ale unui ora oriental se face
prin n pri.
Sorin Adrian Ciureanu 68
S se in evidena persoanelor care au intrat n grdin.
Rezolvare
Fiecare poart de intrare n grdin este o resurs care trebuie
accesat exclusiv de un proces ( o persoan care intr n grdin) .
Dac, la un moment dat, pe una din pori intr o persoan, atunci, n
acel moment, pe nici o alt poart nu mai intr vreo persoan n grdin.
Aceast problem face parte din problema excluderii reciproce.
4.4.5.3. Problema emitor-receptor
Enun
Un emitor emite succesiv mesaje, fiecare dintre ele trebuind s fie
recepionate de toi receptorii, nainte ca emitorul s emit mesajul
urmtor.
Soluie
Este o aplicaie de tipul client-server. n acest tip de aplicaii, un
proces server este un proces ce ofer servicii altor procese din sistem iar un
proces client este unul care solicit servicii de la server i le consum.
Dac procesele client i server nu sunt pe acelai calculator, atunci
aceast aplicaie este distribuit. Implementarea ei, cel mai adesea utilizat
n sistemele multicalculator, se face prin transmisie de mesaje.
Sisteme de operare 69
Capitolul 5
GESTIONAREA MEMORIEI
Sistemele de operare actuale folosesc multiprogramarea ceea ce
nseamn c, la un moment dat, n memorie se pot afla mai multe programe.
Problema esenial pe care trebuie s o rezolve un sistem de operare
este ca un program, pentru a putea fi executat, s aib codul executabil i
datele rezidente n memorie. SO trebuie s partiioneze memoria, ca s
permit utilizarea ei simultan de ctre mai multe programe. De asemenea
trebuie s asigure mecanisme de protecie pentru ca programele s poat
coexista n memorie n bune condiiuni. ntre hardul pe care l pune la
dispoziie un sistem de calcul i sarcinile sistemului de operare exist o
grani foarte flexibil n ceea ce privete gestiunea memoriei . De-a lungul
anilor, hardul a nglobat n componena sa multe din funciile pe care le avea
sistemul de operare. n capitolul de fa, vom prezenta sarcinile principale
ale SO, preciznd totui ce faciliti ofer hardul actual.
5.1. IERARHII DE MEMORIE
Principalele elemente hard care intr ntr-un sistem de memorie
sunt:
-registrele generale ale procesorului;
-memoria CACHE;
-memoria principal;
-memoria secundar.
n memoria intern a unui computer intr memoria principal i
memoria CACHE iar memoria extern este format din memoria
secundar ( hard disk, flopy disk, CD-ROM etc).
Parametrii principali ai unei memorii sunt:
- timpul de acces la memorie (timp necesar pentru operaia
de citire a memoriei);
- capacitatea memoriei.
Sorin Adrian Ciureanu 70
Fig.5.1. Schema principal hard a unui sistem de memorie.
La ora actual, exist urmtoarele categorii de memorie:
- memorii rapide;
- memorii lente;
- memorii foarte lente.
Memoriile rapide au un timp de acces foarte mic; din punct de
vedere tehnologic sunt memorii statice i cu un cost ridicat pe unitatea de
memorie. Se utilizeaz pentru registrele generale ale unitii centrale i
pentru memoria CACHE.
Memoriile lente au un timp de acces mai mare, din punct de vedere
tehnologic sunt realizate ca memorii dinamice i au un cost pe unitatea de
memorie mult mai mic dect al memoriilor rapide. Se utilizeaz pentru
memoria principal.
Memoriile foarte lente au timp de acces foarte mare n comparaie cu
celelalte tipuri, i, bineneles, un cost mult mai mic pe unitatea de
memorie. Este cazul hard discurilor.
O ierarhie de memorie este un mecanism, transparent pentru
utilizator, prin care SO acioneaz aa fel nct, cu o cantitate ct mai mic
de memorie rapid i cu o cantitate ct mai mare de memorie lent i foarte
lent, s lucreze ca i cum ar avea o cantitate ct mai mare de memorie
rapid. Partea din SO care gestioneaz ierarhia de memorie are ca sarcin s
urmreasc ce pri de memorie sunt n uz i ce pri nu sunt folosite, s
aloce memorie proceselor care au nevoie i s o dealoce cnd nu mai este
necesar, s coordoneze schimbul ntre memoria principal i disc cnd
memoria principal este prea mic pentru a conine toate procesele.
Procesor registre
generale
Memorie
principal
(RAM)
Memorie
secundar
(hard disc)
Memoria
cache
Sisteme de operare 71
5.2. OPTIMIZRI N NCRCAREA I EXECUIA
UNUI PROGRAM N MEMORIE
Exist unele optimizri ale sistemelor de operare, legate de
ncrcarea i execuia unui program n memorie :
-ncrcarea dinamic;
-suprapuneri (overlay-uri);
-legarea dinamic (.dll n WINDOWS, .so n UNIX).
5.2.1. ncrcarea dinamic
ncrcarea dinamic este ncrcarea rutinelor n memoria principal
numai atunci cnd este nevoie de ele. n acest mod sunt aduse n memorie
numai rutinele apelate, rutinele neutilizate nu vor fi ncrcate niciodat. Un
astfel de exemplu este un program de dimensiune foarte mare care conine
multe rutine de tratare a erorilor, (rutine foarte mari), erorile tratate fiind
foarte rare. Desigur aceste rutine nu vor fi ncrcate n memorie.
Trebuie remarcat c mecanismul de ncrcare dinamic nu este
implementat n SO, el fiind o sarcin a utilizatorului.
5.2.2. Overlay-uri
Overlay-urile furnizeaz un mod de scriere a programelor care
necesit mai mult memorie dect memoria fizic, cu alte cuvinte a
programelor de mari dimensiuni. La fel ca i n cazul ncrcrii dinamice, nu
este o sarcin a sistemului de operare ci a utilizatorului. Acesta trebuie s
partiioneze programul n buci mai mici i s ncarce aceste partiii n
memorie aa fel ca programul s nu aib de suferit n execuie. Desigur o
astfel de programare este complex, dificil. Ea se utiliza n SO mai vechi.
5.2.3. Legarea dinamic
Legarea dinamic este utilizat n sistemele de operare de tip
WINDOWS sau OS/2 , pentru fiierele cu extensia dll sau n UNIX , n
bibliotecile cu extensia so. Conform acestui mecanism rutinele nu sunt
incluse n programul obiect generat de computer, legarea subrutinelor fiind
amnat pn n momentul execuiei programelor. Ca tehnic, se folosete
un stub care, apelat, este nlocuit cu rutina respectiv ce se i execut.
Sorin Adrian Ciureanu 72
Rolul sistemului de operare este s vad dac rutina este n memorie
i dac nu s o ncarce. In acest mod se realizeaz o bun partajare a
codului. Trebuie menionat c:
-programul nu funcioneaz dac dll-urile necesare nu sunt prezente
n sistem;
-programul depinde de versiunea dll-urilor.
5.3. ALOCAREA MEMORIEI
Alocarea memoriei este efectuat de ctre alocatorul de memorie
care ine contabilitatea zonelor libere i ocupate din memorie, satisface
cererea pentru noi zone i reutilizeaz zonele eliberate. Alocarea memoriei
se face ierarhic; la baza acestei ierarhii se afl sistemul de operare care
furnizeaz utilizatorilor poriuni de memorie iar utilizatorul, la rndul su,
gestioneaz poriunea primit de la SO dup necesitile sale.
5.3.1. Alocarea de memorie n limbaje
de programare
Exist o clasificare a limbajelor de programare din punctul de vedere
al alocrii de memorie:
1)-Limbaje care nu pot aloca memorie. Este cazul limbajelor mai
vechi (Fortran, Cobol). In aceste limbaje, utilizatorul nu poate aloca dinamic
memorie n momentul execuiei ci naintea execuiei programului.
2)-Limbaje cu alocare i delocare explicit. Aceste limbaje permit
utilizatorului s cear, pe parcursul execuiei, noi zone de memorie i s
returneze memoria utilizat. Este cazul funciilor new i free n
PASCAL i new i delete sau malloc i free din C i C++.
3)-Limbaje cu colectoare de gunoaie (garbage collection). In aceste
limbaje, utilizatorul nu specific niciodat cnd vrea s elibereze o zon de
memorie. Compilatorul i o serie de funcii care se execut simultan cu
programul deduc singure care dintre zone nu sunt necesare i le recupereaz.
Avantajele acestui limbaj sunt:
-utilizatorul este scutit de pericolul de a folosi zone de memorie
nealocate, prevenind astfel apariia unor bug-uri ;
-exist sigurana c n orice moment, o zon de memorie utilizat nu
este dealocat.
Dezavantajele limbajului:
-alocarea este impredictibil n timp;
Sisteme de operare 73
-nu se poate ti dac zona de memorie utilizat va fi sau nu utilizat
n viitor, deci este posibil ca un program s pstreze alocate zone de
memorie care-i sunt inutile. Aceast tehnic de alocare este ntlnit n
limbajele Lisp i Java. Menionm c majoritatea alocatoarelor din nucleele
sistemelor de operare comerciale sunt de tipul 1) i 2). Exist i nuclee ale
sistemelor de operare cu alocatoare de tipul 3), cum ar fi sistemele Mach sau
Digital.
5.3.2. Caracteristici ale alocatoarelor
Vom prezenta cteva caracteristici ale alocatoarelor dup care se
poate evalua calitatea acestora.
1)-Timp de operaie. Este timpul necesar unei operaii de
alocare/dealocare. Acest timp depinde de tipul alocatorului, fiecare alocator
trebuind s execute un numr de operaii pentru fiecare funcie. Cu ct
memoria disponibil este mai mare cu att timpul de execuie a unui apel
este mai mare.
2)-Fragmentarea. O problem cu care se confrunt alocatoarele este
faptul c aproape niciodat ele nu pot folosi ntreaga memorie disponibil,
pentru c mici fragmente de memorie rmn neutilizate. Aceste pierderi
apar n urma mpririi spaiului disponibil de memorie n fragmente
neocupate n totalitate de programe. Fragmentarea poate fi : fragmentare
extern i fragmentare intern.
Fragmentarea extern apare ori de cte ori exist o partiie de
memorie disponibil, dar nici un program nu ncape n ea.
Se demonstreaz c atunci cnd avem de-a face cu alocri de blocuri
de mrimi diferite, fragmentarea extern este inevitabil. Singurul mod de a
reduce fragmentarea extern este compactarea spaiului liber din memorie
prin mutarea blocurilor dintr-o zon n alta.
Fragmentarea intern este dat de cantitatea de memorie neutilizat
ntr-o partiie blocat ( ocupat parial de un program). Pentru a nu avea
fragmentare intern ideal ar fi ca fiecare program s aib exact dimensiunea
partiiei de memorie n care este ncrcat, lucru aproape imposibil.
3)-Concuren. Aceast caracteristic se refer la gradul de acces
concurent la memorie. Este cazul mai ales la sistemele cu multiprocesor, cu
memorie partajat. Un alocator bine scris va permite un grad mai ridicat de
concuren, pentru a exploata mai bine resursele sistemului.
4)-Grad de utilizare. Pe lng faptul c memoria este fragmentat,
alocatorul nsui menine propriile structuri de date pentru gestiune. Aceste
structuri ocup un loc n memorie, reducnd utilizarea ei efectiv.
Sorin Adrian Ciureanu 74
5.3.3. Tipuri de alocare a memoriei
n sistemul de gestiune a memoriei exist dou tipuri de adrese:
-adrese fizice;
-adrese logice.
Adresele fizice sunt adresele efective ale memoriei fizice. Se tie c
pentru a adresa o memorie fizic cu o capacitate de n octei este necesar un
numr de adrese egal cu log
2
n .
Adresele logice, sau virtuale, sunt adresele din cadrul programului
ncrcat.
De obicei, n marea majoritate a alocatoarelor, n momentul
ncrcrii unui program sau chiar al compilrii lui, adresele fizice coincid cu
cele logice. n momentul execuiei acestea nu mai coincid. Translatarea
adreselor logice n adrese fizice este executat de ctre hardware-ul de
mapare al memoriei.
Alocarea memoriei se poate face n dou feluri:
-alocare contigu;
-alocare necontigu.
Alocarea contigu nseamn alocarea, pentru un proces, a unei
singure poriuni de memorie fizic, poriune continu; (elemente contigue
nseamn elemente care se ating spaial sau temporal).
Alocarea necontigu nseamn alocarea, pentru un proces, a mai
multor poriuni separate din memoria fizic.
Alocarea memoriei se mai face n funcie de cum este privit
memoria. Exist dou tipuri de memorie: memorie real i memorie
virtual.
Memoria real const numai n memoria intern a sistemului i este
limitat de capacitatea ei.
Memoria virtual vede ca un tot unitar memoria intern i cea
extern i permite execuia unui proces chiar dac acesta nu se afl integral
n memoria intern.
5.3.4. Scheme de alocare a memoriei
Exist mai multe scheme de alocare de la foarte simple la foarte
complexe. n general, sunt de dou categorii:
-sisteme care transport procesele, nainte i napoi, ntre memoria
principal i disc (swapping i paging);
- sisteme care nu fac acest lucru ( fr swapping i paging).
Sisteme de operare 75
a)-Pentru sistemele cu alocare contigu, exist schemele:
-alocare unic;
-alocare cu partiii fixe ( alocare static);
-alocaii cu partiii variabile (alocare dinamic);
-alocare cu swapping.
b)Pentru sistemele cu alocare necontigu:
-alocare paginat (simpl sau la cerere);
-alocare segmentat (simpl sau la cerere);
-alocare segmentat-paginat (simpl sau la cerere).
5.3.4.1.Alocare unic
a) Alocare unic cu o singur partiie
Este un tip de alocare folosit n primele sisteme de operare care
lucrau monouser. Este cea mai simpl schem n care toat memoria intern
este destinat sistemului de operare, fr nici o schem de administrare a
memoriei. Desigur, ea ine de domeniul istoriei.
b) Alocare unic cu dou partiii
n acest tip de alocare exist dou partiii;
-partiie pentru sistemul de operare (nucleul);
-partiie pentru utilizator.
Este cazul sistemului de operare MS-DOS. Principalul dezavantaj
const n faptul c nu se ofer soluii pentru multiprogramare.
5.3.4.2. Alocare cu partiii fixe (alocare static)
Memoria este mprit static n mai multe partiii, nu neaprat de
dimensiuni egale. n fiecare partiie poate rula cel mult un proces, gradul de
multiprogramare fiind dat de numrul partiiilor.
De obicei, mprirea n partiii i dimensionarea acestora se face la
nceput de ctre operator. Programele sunt ncrcate n memorie prin nite
cozi de intrare. Este posibil ca s existe o singur coad de intrare in
memorie sau diferite cozi la diferitele partiii. Din coada de intrare un
program intr n cea mai mic partiie destul de mare, ins, pentru a-l primi.
Spaiul neocupat de program n aceast partiie rmne pierdut i n acest
fapt const dezavantajul schemei. Exista att fragmentare intern ct i
fragmentare extern.
Acest tip de alocare a fost utilizat de sistemul de operare SIRIS V, in
sistemele de calcul FELIX C-256/1024, sisteme care au existat i la noi n
ar, n toate centrele de calcul.
Sorin Adrian Ciureanu 76
n aceast alocare aprea pentru prima dat i un mecanism de
protecie a memoriei care era asigurat de sistemul de chei de protecie i
chei de acces.
Sistemul de memorie era mprit n pagini de 2KO i fiecare pagin
avea o cheie de protecie. Aceasta era pus printr-o instruciune cod-main
a calculatorului. Pentru ca un program s fie rulat ntr-o zon a memoriei,
trebuia s fie prezentate cheile de acces pentru fiecare pagin utilizat. La
identitatea cheii de acces cu cea de protecie, se permitea accesul n pagina
respectiv. Existau i chei de acces care deschideau orice cheie de protecie
(de exemplu cheia de acces zero), precum i chei de protecie deschise de
orice cheie de acces.
5.3.4.3. Alocare cu partiii variabile
n aceast alocare numrul, locaia i dimensiunea partiiilor variaz
dinamic. Ne mai fiind fixat dimensiunea partiiilor, care pot fi ori prea mari
ori prea mici fa de program, crete mult gradul de utilizare al memoriei. n
schimb se complic alocarea i dealocarea memoriei i urmrirea acestor
operaii.
Cnd se ncarc un proces n memorie, i se aloc exact spaiul de
memorie necesar, din memoria liber crendu-se dinamic o partiie. Cnd
se termin un proces, partiia n care a fost procesul devine memorie liber,
ea unificndu-se cu spaiul de memorie liber existent pn atunci.
Pentru gestionarea unei astfel de alocri, sistemul de operare trebuie
s aib dou tabele:
-tabela partiiilor ocupate;
-tabela partiiilor libere.
Principala problem este alegerea unui spaiu liber; aceast alegere
trebuie fcut cu minimizarea fragmentrii interne i externe. Exist anumii
algoritmi de alegere a spaiului liber.
-FFA (First Fit Algoritm), prima potrivire. Se parcurge lista spaiilor
libere care este ordonat cresctor dup adresa de nceput i se alege primul
spaiu de dimensiune suficient. Acest algoritm este folosit n sistemul SO
MINIX, creat de Tannenbaum.
-BFA (Best Fit Algoritm) , cea mai bun potrivire. Se parcurge lista
spaiilor libere i se alege spaiul cu dimensiunea cea mai mic n care
ncape programul. n acest fel se minimizeaz fragmentarea intern. n cazul
n care lista spaiului liber este ordonat cresctor dup dimensiunea
spaiilor libere, se alege evident primul spaiu liber. n acest caz FFA i BFA
coincid. BFA este utilizat n SO MS-DOS.
Sisteme de operare 77
-WFA (Worst Fit Algoritm) , cea mai proast potrivire. Se parcurge
lista spaiilor libere ordonat cresctor dup dimensiune i se alege ultimul
spaiu din list. Din punct de vedere al vitezei i al gradului de utilizare al
memoriei, FFA i BFA sunt superioare strategiei WFA.
5.3.4.4. Alocarea prin swapping
n acest tip de alocare, un proces, n majoritatea cazurilor n stare
de ateptare, este evacuat temporar pe disc, elibernd memoria principal.
Reluarea execuiei procesului se face prin rencrcarea sa de pe disc n
memoria principal. Swap nseamn a face schimb i, ntr-adevr, este vorba
de o schimbare de pe memoria principal pe una extern i napoi .
Problema principal n swapping este: ce procese sunt evacuate din memorie
pe disc ? Exist un algoritm bazat pe prioriti, numit Rollout-Rollin,
conform cruia, la apariia unui proces cu prioritate ridicat, vor fi evacuate
procesele sau procesul cu prioritatea cea mai sczut. O alt problem este:
la ce adres din memorie va fi readus procesul evacuat. De obicei, dac
alocarea este static, procesul va fi readus n aceeai partiie din care a
plecat. n cazul alocrii dinamice, procesul va fi adus n orice loc al
memoriei. Pentru ca alocarea prin swapping s aib eficien, este necesar
ca memoria extern (hard discul) s aib dou caracteristici: o capacitate
suficient de mare i un timp de acces foarte mic. Capacitatea mare este
necesar deoarece pe disc trebuie s se evacueze toate imaginile proceselor,
numrul lor putnd ajunge, la un moment dat, foarte mare. Timpul de acces
trebuie s fie foarte mic. n caz contrar, costul swappingului
memorie disc poate deveni inconvenabil. O condiie esenial pentru
micorarea costului este ca timpul de execuie al procesului s fie mult mai
mare dect timpul de swapping. Cnd un proces necesit date noi n timpul
execuiei i, implicit, zone suplimentare de memorie. Este situaia aa
numitelor procese cu dimensiune variabil n timpul execuiei.
Dac, datorit cererii suplimentare de memorie, se depete zona de
memorie afectat procesului, atunci sistemul de operare trebuie s intervin.
Exist urmtoarele posibiliti:
- s ncheie forat procesul care a formulat cerere de suplimentare a
memoriei i s considere aceast cerere ca o eroare de execuie;
-s returneze decizia procesului, n sensul c acesta va decide dac
i va ncheia activitatea sau o va continua strict n zona de memorie care i-a
fost impus;
-n cazul alocrii dinamice, s evacueze procesul pe disc, i s
atepte eliberarea unei zone de memorie satisfctoare pentru proces.
Sorin Adrian Ciureanu 78
Trebuie menionat c nc suntem n modul de alocare contiguu, deci
spaiul de adresare al unui proces nu poate depi capacitatea memoriei
interne.
(evacuare)
Fig.5.2. Mecanismul swapping.
n concluzie, putem spune c principalul avantaj al alocrii prin
swapping este faptul c se simuleaz o memorie mai mare dect cea fizic
existent. Principalul dezavantaj este costul swappingului care uneori poate
fi destul de mare. Mecanismul de swapping este redat n Fig.5.2.
5.4. PAGINAREA MEMORIEI
Paginarea este un tip de alocare necontiguu, aceasta nsemnnd c
unui proces i poate fi alocat memorie oriunde, att n memoria intern ct
i n cea extern, iar memoria alocat poate fi format din buci de
memorie.
5.4.1. Suportul hardware
Memoria fizic este mprit n blocuri de lungime fix, numite
cadre de pagin (frames) sau pagini fizice. Lungimea unui cadru este o
P
1
P
2
P
n
P
1
P
2
P
n
Imaginea lui P
1
Imaginea lui P
2
Imaginea lui P
n
Swapout
(evacuare)
MEMORIE PRINCIPAL MEMORIE SECUNDAR
Sisteme de operare 79
putere a lui doi i este constant pentru fiecare arhitectur de sistem n parte.
Pentru Intel lungimea unui cadru este 4KO.
Memoria logic a unui proces este mprit n pagini logice sau
pagini virtuale care sunt plasate n memoria secundar, pe hard disc.
Pentru execuia unui proces, paginile sale logice trebuie ncrcate n
cadrele libere ale memoriei fizice, intr-un mod necontiguu.
Evidena cadrelor libere este inut de sistemul de operare.
Bineneles, dac procesul are nevoie de n pagini logice, trebuie s se
gseasc n cadre libere.
Att adresele fizice ct i cele logice sunt implementate n hard i ele
conin:
-adresa fizic=numr de cadru(f)+deplasament n cadru(d)
-adresa logic=numr de pagini logice(l)+deplasament n
pagina logic
Prin mapare se nelege translatarea adresei logice n adres fizic.
Aceast sarcin i revine sistemului de operare prin utilizarea tabelei de
pagini. Fiecare proces are o tabel de pagini n care n care fiecare pagin
logic are adresa de baz a cadrului asociat ei. Pentru translatare se folosete
numrul de pagin drept index n tabela de pagini. n schema din figura 5.3.
se vede corespondena ntre adresa logic i cea fizic prin intermediul
tabelei de pagini.
Adresa logic Adresa fizic
l f
Tabel de pagini Memoria fizic
Fig.5.3. Corespondena dintre adresa logic i cea fizic.
l d d f
d
f
Sorin Adrian Ciureanu 80
5.4.2. Implementarea tabelei de pagini
Pstrarea tabelelor de pagini se face n :
a)-registrele hard;
b)-memoria principal;
c)-memoria hard special, de tip asociat.
a) Soluia de implementare a tabelelor de pagini n registrele unitii
centrale este , desigur , foarte rapid dar i foarte scump, mai ales pentru un
numr foarte mare de tabele. n plus accesul la registre se face n mod
privilegiat ceea ce, la un moment dat, poate constitui un impediment.
b) Soluia de implementare a tabelei de pagini n memoria principal
presupune un cost mult mai sczut i de aceea este soluia cea mai des
ntlnit. Ea impune accese multiple la memorie; mai nti trebuie accesat
tabela de pagini pentru aflarea adresei fizice asociat adresei logice dorite;
apoi se acceseaz memoria fizic la adresa aflat pe baza translatrii. n
acest tip de translatare se folosete un Registru de Baz al Tabelei de
Pagin (RBTP). Atunci cnd se dorete s se lucreze cu alt tabel de
pagin dect cea curent, se ncarc RBTP cu noua valoare de pagin,
reducndu-se n acest fel timpul de comutare.
c) O alt soluie de implementare este aceea n care se utilizeaz o
memorie asociativ hardware, de mic dimensiune. Aceasta folosete un set
de registre asociative. Fiecare registru are dou componente:
-cheie, n care se memoreaz numrul paginii logice;
-valoare, n care se memoreaz numrul cadrului asociat.
Cutarea ntr-o astfel de memorie asociativ se face n felul urmtor:
un element care trebuie gsit este comparat simultan cu toate cheile i unde
se gsete coinciden se extrage cmpul valoare corespunztor.
n scopul utilizrii unei astfel de memorii asociative pentru tabela de
pagin, se face urmtoarea coresponden:
-n cheie se memoreaz numrul paginii logice;
-n valoare se memoreaz numrul cadrului asociat.
Atunci cnd procesorul genereaz o adres logic, dac numrul de
pagin logic coincide cu una din chei, numrul de cadru devine imediat
disponibil i este utilizat pentru a accesa memoria. Dac numrul de pagin
nu coincide cu nici una dintre chei, atunci, pentru aflarea numrului cadrului
asociat, se face un acces la tabela de pagini din memoria intern. Informaia
astfel obinut este utilizat pentru accesarea memoriei utilizator, ct i
pentru a fi adugat n cadrul registrelor asociative, mpreun cu numrul de
pagini asociat, ca s poat fi regsit rapid n cadrul unei referiri ulterioare.
Sisteme de operare 81
Alte mbuntiri ale implementrii tabelei de pagini folosesc:
a)-tabele de pagini pe nivele multiple;
b)-tabele de pagini inverse.
a) Pentru un spaiu de adresare foarte mare, tabelele de pagini pot
avea dimensiuni mari. De exemplu, pentru o memorie principal de 4 GO
(2
32
octei), dac pagina are 4KO, atunci o tabel de pagini are 1 milion de
intrri. Una din tehnicile de reducere a dimensiunilor tabelei de pagini este
utilizarea unei tabele de pagini pe nivele multiple. Aceasta echivaleaz cu
mprirea tabelei de pagin n altele care s aib dimensiuni mai mici i
unde cutarea s se fac ntr-un timp mai scurt.
Pornind de la exemplul precedent, cu memoria principal de 2
32
octei, o adres logic arat astfel:
Fiecare tabel de pagin are un milion de intrri. Dac partionm
tabelul de pagin n 4 seciuni, fiecare seciune are 256 K intrri iar o adres
logic pentru o seciune arat astfel:
b) O alt modalitate de reducere a dimensiunii tabelelor de pagini
este folosirea tabelei de pagini invers. n loc de a avea o intrare n tabel
pentru fiecare pagin virtual, avem cte o intrare pentru fiecare cadru fizic.
Deci n loc s se fac corespondena:
-pagin virtual cadru fizic
se face o coresponden invers:
-cadru fizic pagin virtual.
Cnd se translateaz o adres logic, se caut n tabela de pagini
invers numrul paginii logice i se returneaz cadrul fizic corespunztor. n
acest mod se face o reducere a numrului de intrri n pagin dar cutarea
are o vitez mai mic, deoarece trebuie cutat ntreaga tabel.
5.4.3. Concluzii privind paginarea
Principalul avantaj al paginrii este eliminarea complet a
fragmentrii externe. Nu dispare ns i fragmentarea intern, deoarece
numrul de pagin
20 bii
deplasament
12 bii
numrul de seciune
2 bii
numrul de pagin
18 bii
deplasament
12 bii
Sorin Adrian Ciureanu 82
poate rmne un spaiu nefolosit dar alocat proceselor, fiindc dimensiunea
proceselor nu este un multiplu exact al lungimii paginilor.
Un alt avantaj al paginrii este posibilitatea de partajare a memoriei.
Dou sau mai multe pagini pot vedea aceeai zon de memorie ncrcnd
paginile logice n acelai cadru fizic. Singura soluie este ca n acel cadru
fizic s fie memorat cod reentrant, adic un cod care nu se mai poate
automodifica n timpul execuiei. Datorit proprietii de reentran , este
posibil ca dou sau mai multe procese s execute simultan acelai cod,
fiecare proces pstrnd o copie a registrelor i a datelor proprii.
n memoria fizic este necesar s se pstreze o singur copie a
codului comun, fiecare tabel de pagin indic spre acelai cadru, n timp
ce paginile corespunztoare datelor proceselor sunt memorate n cadre
diferite.
Un dezavantaj al paginrii este faptul c fiecare acces la memorie
presupune un acces suplimentar la tabela de pagini pentru calculul de
adres.
5.4.4. Segmentarea memoriei
Segmentarea reprezint o privire a memoriei din punctul de vedere al
utilizatorului care percepe memoria nu ca pe o succesiune de cuvinte, aa
cum este n realitate, ci ca pe o mulime de buci de memorie de diverse
dimensiuni. Aceste segmente pot cuprinde: programul principal, proceduri,
funcii, stive, vectori, matrici etc.
Segmentarea este o schem de administrare a memoriei n care
programul este divizat n mai multe pri funcionale. Spaiul logic de
adresare al programului este i el mprit n segmente. Fiecrui segment de
memorie i corespunde o unitate funcional a programului.
Program Memorie
Program principal
Segment 1
Funcia 1
Segment 2
Funcia 2
Segment 3
Procedura
Segment 4
Matrice 1
Segment 5
Matrice 2
Segment 6
Vector
Segment 7
Fig. 5.4. Principiul segmentrii.
Sisteme de operare 83
Fiecare segment are un nume i o dimensiune, deci:
-un nume
-un deplasament.
Programatorul vede spaiul virtual de adresare al programului ca un
spaiu bidimensional, nu un spaiu unidimensional ca la programare.
5.4.5. Segmentare paginat
A fost introdus de sistemul de operare MULTICS al lui
Tannenbaum i ncearc s mbine avantajele celor dou metode, de
paginare i de segmentare.
Fiecare segment este mprit n pagini. Fiecare proces are o tabel
de segmente, iar fiecare segment are o tabel de mapare a paginilor.
Adresa virtual se formeaz din: segment, pagin i deplasament.
Adresa fizic se formeaz din cadru de pagin i deplasament.
n segmentarea paginat se elimin dou dezavantaje ale segmentrii
pure: alocarea contigu a segmentului i fragmentarea extern.
5.4.6. Memorie virtual
Alocarea prin memorie virtual are capacitatea de a aloca un spaiu
de memorie mai mare dect memoria intern disponibil. Pentru aceasta se
utilizeaz paginarea sau segmentarea combinate cu swappingul.
Memoria virtual este o tehnic ce permite execuia proceselor chiar
dac acestea nu se afl integral n memorie.
Metoda funcioneaz datorit localitii referinelor la memorie.
Numai un subset din codul, respectiv datele, unui program sunt necesare la
un moment arbitrar de timp.
Problema const n faptul c sistemul de operare trebuie s prevad
care este subsetul dintr-un moment urmtor. Pentru aceasta se apeleaz la
principiul localitii (vecintii), enunat de J.P.Denning n 1968. Acest
principiu are dou componente:
-localitate temporar tendina de a accesa n viitor locaii accesate
deja n timp;
-localitate spaial tendina de a accesa n viitor locaii cu adrese
apropiate de cele accesate deja.
Alocrile cele mai des utilizate n memoria virtual sunt:
-alocarea de tip paginare la cerere;
-alocarea de tip segmentare la cerere.
Sorin Adrian Ciureanu 84
5.4.6.1. Paginare la cerere
Paginarea la cerere mbin tehnica de paginare cu tehnica swapping.
n acest fel, paginile de pe harddisc sunt aduse n memorie numai cnd sunt
referite, cnd este nevoie de ele. In acest mod se elimin restricia ca
programul s fie n ntregime n memorie.
n figura 5.5. se d o organigram a paginrii la cerere.
Aa cum se observ din organigram, dac referirea unei pagini este
valid, adic dac adresa ei este corect, atunci primul lucru care se testeaz
este bitul valid/nevalid. Acesta este implementat n tabelul de mapare a
paginilor i dac este 1 nseamn c pagina se afl n memorie, dac este 0
pagina este pe hard disc i trebuie adus n memorie. Dac este zero, se
declaneaz eroare de pagin, se genereaz o ntrerupere de pagin ( PFI =
Page Fault Interrupt), de tip sincron, transparent pentru utilizator, cu o
prioritate superioar.
Fig. 5.6. Organigrama paginrii la cerere.
Referire pagin memorie
referin
valid
Eroare de
accesare
Bit valid =1
Pagin prezent n
memorie i se acceseaz
Eroare pagin
Se execut PFI=
Page Fault Interrupt
Rutin de tratare a ntreruperii
NU(BIT VALID=0)
NU DA
DA
Sisteme de operare 85
n acest moment se va ntrerupe execuia programului n curs iar
sistemul de operare va lansa rutina de tratare a ntreruperii de pagin.
Aceasta va cuta un spaiu liber i, dac exist, va plasa pagina n el. Dac
nu, va trebui s aleag o rutin, adic un cadru ce va fi nlocuit.
Fig.5.7. Rutina de tratare a ntreruperii de pagin.
Se testeaz, n continuare, bitul de tranzit al paginii rutin i dac
este 1 se abandoneaz aceast pagin victim i se trece la alt victim.
Regula este ca n alegerea victimei s se evite o pagin n curs de ncrcare.
Apoi se testeaz bitul dirty. Acesta este pus la 0 iniial la ncrcare i este
Exist cadru liber
Se plaseaz
pagina adus de
pe disc n cadrul
liber din memorie
Se alege un cadru
victim = cadrux
Bit tranzit=1
Pagina e n curs de ncrcare i se
alege alt cadru victim
Bit dirty
cadrux=1
Pagina a fost modificat i
trebuie salvat pe harddisc
Pagina nu a fost modificat i nu trebuie
salvat pe harddisc
Se alege un algoritm de nlocuire a paginilor:
LRUINRU, FIFO
Politica de plasare n memorie: WFA, FFA,
BFA, Buddy-System
NU (bit dirty=0) DA
NU
NU
DA
DA
Sorin Adrian Ciureanu 86
setat la 1 ori de cte ori se face o modificare n pagin. Deci acest bit arat
dac pagina a fost modificat sau nu la nivel de memorie. Dac nu a fost
modificat, atunci nu are rost salvarea ei pe hard disc, unde exist deja
aceast pagin. Dac a fost modificat, atunci ea trebuie salvat pe hard
disc. Alegerea victimei se face conform unui algoritm de nlocuire iar
plasarea n memorie conform unei anumite politici de plasare .
5.4.7. Algoritmi de nlocuire a paginii
Algoritmii de nlocuire a paginii au drept scop alegerea celei mai
bune victime. Criteriul dup care se face aceast alegere este minimizarea
ratei erorilor de pagin.
Teoretic, cel mai bun algoritm ar fi acela care alege victime dintre
paginile care vor fi solicitate cel mai trziu. Acest lucru este greu de realizat
deoarece evoluia unui program nu este previzibil i de aceea rspunsul nu
poate fi prevzut uor. Au existat ncercri de determinare a paginilor care
vor fi utilizate cel mai trziu. n 1966, L.A.Belady a creat un algoritm
statistic care ncerca, pe baze probabilistice, s rezolve aceast problem dar
rezultatul algoritmului nu a fost dintre cele mai bune. n continuare vom
prezenta cei mai cunoscui astfel de algoritmi practici.
5.4.7.1. Algoritmul FIFO
Este unul dintre cei mai simpli algoritmi, att ca idee ct i ca
implementare. Fiecrei pagini i se asociaz momentul de timp cnd a fost
adus n memorie.
Se realizeaz o structur de coad la care printr-un capt vor fi aduse
noile pagini n memorie, n ordinea strict a sosirii lor, iar cellalt capt va fi
pentru paginile victim.
S lum un exemplu. Fie o situaie cu numrul de pagini virtuale 5.
Secvena de alocare a paginilor 543254154321
Rata erorilor de pagin este, pentru folosirea a trei cadre, de:
r
3
= % 75 %
12
9
=
iar pentru folosirea a patru cadre :
r
4
= % 83
12
10
=
Sisteme de operare 87
Secvena 5 4 3 2 5 4 1 5 4 3 2 1
r
3
=75%
3 cadre 5 4 3 2 5 4 1 1 1 3 2 2
- 5 4 3 2 5 4 4 4 1 3 3
- - 5 4 3 2 5 5 5 4 1 1
Situaii de
nenlocuire a
paginilor
* * *
4 cadre 5 4 3 2 2 2 1 5 4 3 2 1
r
4
=83%
- 5 4 3 3 3 2 1 5 4 3 2
- - 5 4 4 4 3 2 1 5 4 3
- - - 5 5 5 4 3 2 1 5 4
Situaii de
nenlocuire a
paginilor
**
n aceste dou cazuri se observ c pentru utilizarea a 3 cadre rata
erorilor de pagin este 75% iar cnd sunt 4 cadre rata erorilor crete, fiind
83%. Ne-am fi ateptat ca, odat cu creterea numrului de cadre rata
erorilor de pagin s scad nu s creasc. Acest fapt este cunoscut ca
anomalia lui Belady i constituie unul din dezavantajele algoritmului FIFO.
Un alt dezavantaj al acestui algoritm este faptul c o pagin frecvent
utilizat va fi foarte des evacuat pe disc i rencrcat n memorie.
5.4.7.2. Algoritmul LRU (Least Recently Used)
Algoritmul LRU alege victima dintre paginile cele mai puin
utilizate n ultimul timp. Algoritmul se bazeaz pe presupunerea c pagina
care a fost accesat mai puin ntr-un interval de timp va fi la fel de accesat
i n continuare. Ideea este de a folosi localitatea temporar a programului.
Pentru implementare este necesar s se in evidena utilizatorilor
paginilor i s se ordoneze paginile dup timpul celei mai recente referine
la ele. Teoretic, implementarea s-ar putea face cu o coad FIFO n care o
pagin accesat este scoas din coad i mutat la nceputul ei. Totui
aceast implementare este destul de costisitoare. Principalul avantaj al
algoritmului LRU este faptul c el nu mai prezint anomalia lui Belady.
S lum exemplul anterior, folosit la algoritmul FIFO.
Se observ c odat cu creterea numrului de cadre scade rata
erorilor de pagin, deci anomalia Belady nu mai apare. De asemenea este
corectat i cellalt dezavantaj al algoritmului FIFO i anume la LRU sunt
avantajate paginile frecvent utilizate, care sunt pstrate n memorie, ne mai
fiind necesar evacuarea pe disc.
Sorin Adrian Ciureanu 88
Exist mai multe feluri de implementare a algoritmului LRU:
a) LRU cu contor de accese
b) LRU cu stiv
c) LRU cu matrice de referine.
Secvena 5 4 3 2 5 4 1 5 4 3 2 1
r
3
=
12
10
=
83%
3 cadre 5 4 3 2 5 4 1 5 4 3 2 1
- 5 4 3 2 5 4 1 5 4 3 2
- - 5 4 3 2 5 4 1 5 4 3
Situaii de
nenlocuire a
paginilor
* *
4 cadre 5 4 3 2 5 4 1 5 3 3 2 1
r
4
=
12
7
=
58%
- 5 4 3 2 5 4 1 5 4 3 2
- - 5 4 3 2 5 4 1 1 5 3
- - - 5 4 3 2 2 4 4 1 5
Situaii de
nenlocuire a
paginilor
* * * * *
a) LRU cu contor de accese se implementeaz hard. Se utilizeaz un
registru general al unitii centrale pe post de contor. La fiecare acces la
memorie, contorul va fi incrementat. La fiecare acces la o pagin, contorul
este memorat n spaiul corespunztor acelei pagini n tabela de pagini.
Alegerea victimei const n cutarea n tabela de pagini o pagin
cu cea mai mic valoare a contorului.
b) LRU cu stiv utilizeaz o stiv n care sunt pstrate numerele
paginilor virtuale. Cnd este referit o pagin, este trecut n vrful stivei. n
felul acesta vom gsi victima la baza stivei.
c) LRU cu matrice de referine utilizeaz o matrice ptratic n-
dimensional, binar (cu elemente 0 i 1), unde n este numrul de pagini
fizice. Iniial matricea are toate elementele 0. n momentul n care se face o
referin la pagina k, se pune 1 peste tot n linia k, apoi 0 peste tot n
coloana k. Numrul de uniti (de 1) de pe o linie arat ordinea de referire a
paginii. Alegerea victimei se face n matrice; indicele liniei cu cele mai
puine cifre de 1, este numrul paginii fizice aleas ca victim.
5.4.7.3. Algoritmul LFU ( Least Frequently Used)
Victima va fi pagina cel mai puin utilizat.
Ca mod de implementare se folosete un contor de accese care se
incrementeaz la fiecare acces de pagin dar care nu este resetat periodic ca
Sisteme de operare 89
la LRU. Victima va fi pagina cu cel mai mic contor. Principalul
dezavantaj al acestei metode apare n situaia n care o pagin este utilizat
des n faza iniial i apoi nu mai este utilizat de loc; ea rmne n memorie
deoarece are un contor foarte mare.
5.4.7.4.Algoritmul real Paged Daemon
De obicei, sistemele de operare desemneaz un proces sistem
responsabil cu implementarea i realizarea politicii de nlocuire a paginilor
pentru memoria virtual. Un astfel de proces autonom care st n fundal i
execut periodic o anumit sarcin se numete demon (daemon).
Demonul de paginare poart numele de paged daemon. Acesta
pregtete sistemul pentru evacuarea de pagini nainte ca evacuarea s fie
necesar. Obinuit el este ntr-o stare dormant, fiind trezit de sistemul de
operare atunci cnd numrul cadrelor libere devine foarte mic. Dintre
principalele sale sarcini amintim:
-salveaz pe disc paginile cu bitul dirty pe 1, efectund aa numita
operaie de curire a paginilor;
-utiliznd un algoritm sau o combinaie de algoritmi de nlocuire a
paginilor, alctuiete o list ordonat pentru paginile ce vor fi victime;
-decide ct memorie s aloce pentru memoria virtual.
5.4.7.5. Fenomenul de trashing
Atunci cnd procesele folosesc mai mult timp pentru activitatea de
paginare dect pentru execuia propriu zis se spune c are loc fenomenul de
trashing.
Un exemplu tipic este acela cnd un proces are alocat un numr mai
mic de cadre dect i este necesar. Aceasta este o condiie necesar pentru
apariia trashingului. Deoarece toate paginile sunt necesare pentru rularea
programului, procesul va ncerca s aduc din memoria extern i restul
paginilor necesare. Dac nu sunt cadre libere, este posibil ca victimele s fie
chiar pagini ale procesului. Pentru acestea se vor genera din nou cereri de
aduceri n memorie i astfel se poate intra la un moment dat ntr-un cerc
vicios, cnd procesul va face numai cereri de paginare, i nu va mai execut
nimic din programul su. Acesta este, de fapt, trashingul.
Exist mai multe modaliti de a evita trashingul. Se alege un
algoritm de paginare care poate fi global sau local.
Algoritmii globali permit procesului s aleag pentru nlocuire orice
cadru, chiar dac acesta este alocat altui proces.
Sorin Adrian Ciureanu 90
Algoritmii locali impun fiecrui proces s foloseasc pentru selecie
numai cadre din propriul set, numrul cadrelor asociate procesului rmnnd
acelai. Dac se utilizeaz un algoritm local, fenomenul de trashing dispare,
deoarece setul de pagini asociat unui proces n memorie este influenat
numai de activitatea de paginare a procesului respectiv.
5.4.7.6. Concluzii privind paginarea la cerere
Principalele avantaje ale paginrii la cerere sunt:
- programul este prezent doar parial n memorie;
-se execut mai puine operaii de intrare ieire;
-la un moment dat, este necesar o cantitate mai mic de memorie;
-crete mult gradul de multiprogramare;
-n programarea la cerere nu mai este nevoie ca programatorul s
scrie overlayurile, sarcina aceasta revenind sistemului de operare.
Principalul dezavantaj este c mecanismul de gestiune a memoriei,
att hard ct i soft, are o complexitate deosebit.
5.5. ALOCAREA SPAIULUI LIBER. TIPURI DE
ALOCATOARE
5.5.1. Alocatorul cu hri de resurse
Acest alocator folosete un vector de structuri care descriu fiecare
bloc liber.
Iat un exemplu ce utilizeaz o hart a resurselor.
Harta resurselor
Adresa de nceput a
blocului
(hexa)
Lungime
(baii)
Situaia blocului
0 100 Ocupat
64 50 Liber
96 200 Ocupat
16 E 400 Ocupat
3FE 100 Liber
482 50 Ocupat
Fig. 5. 8. Harta resurselor n alocatorul cu hart de resurse.
Sisteme de operare 91
Harta
memoriei
0
64
96
16E
3FE
482
(a)
16E 5B4
100
(b)
Fig. 5.9. Hri de memorie n alocatorul cu hri de resurse.
ntr-un alt mod de reprezentare, fiecare bloc liber conine lungimea
blocului liber i adresa urmtorului bloc liber. Astfel, blocurile libere sunt
inute ntr-o structur de list simplu nlnuit. Cnd alocatorul vrea s
gseasc un bloc liber, pleac de la adresa primului bloc liber i parcurge
lista de blocuri libere pn gsete unul de dimensiune corespunztoare.
Pentru exemplul anterior, harta memoriei arat ca in figura 5.9.(b).
Acest tip de alocare, cu hri de resurse, este simplu dar destul de
ineficient. Din cauza fragmentrii, complexitatea operaiilor este mare. Este
posibil ca, dup un anumit timp, lista de blocuri s conin foarte multe
blocuri mici a cror traversare s fie inutil i foarte costisitoare.
5.5.2. Alocatorul cu puteri ale lui 2
La alocatorul prezentat anterior, cel cu hri de resurse, principalul
dezavantaj este dat de cutarea unui bloc de dimensiune potrivit printre
blocurile libere. Pentru a contracara acest lucru, o soluie este de a crea
blocuri de dimensiuni diferite, cresctoare ca lungime, care s prezinte o
Sorin Adrian Ciureanu 92
ofert mai bun n cutare. n acest sens se poate impune ca dimensiunea
unui bloc s fie o putere a lui 2, deci ca un bloc s aib 2
k
octei.
Tehnica de alocare este urmtoarea: dac dimensiunea unei cereri de
alocare nu este o putere a lui 2, atunci se aloc o zon a crei dimensiune
este puterea imediat superioar a lui 2, cu alte cuvinte, dac cererea de
alocare are dimensiunea cuprins ntre 2
k
i 2
k+1
, se alege zona cu
dimensiunea 2
k+1
. Metoda se mai numete i metoda njumtirii, pentru c,
practic, dac exist o cerere de alocare de dimensiunea 2
k
i aceasta nu
exist, atunci se alege o zon liber de dimensiune 2
k+1
, mai mare (dubl),
care este mprit n dou pri egale. Dup un numr finit de astfel de
operaii se obine o zon cu dimensiunea dorit i alocarea este satisfcut.
Implementarea acestei metode este asemntoare cu cea precedent cu
meniunea c pentru alocatorul cu puteri ale lui 2 exist liste separate pentru
fiecare dimensiune 2
k
pentru care exist cel puin o zon liber. Mai trebuie
menionat faptul c, atunci cnd dou zone nvecinate de dimensiune 2
k
devin libere, ele sunt regrupate pentru a forma o singur zon liber de
dimensiune 2
k+1
. De aici i numele de metoda camarazilor.
5.5.3. Alocatorul Fibonacci
Acest alocator este asemntor cu alocatorul cu puteri ale lui 2, dar
n loc s divizeze o zon liber n dou subzone egale, o mparte n alte
dou de dimensiuni diferite. La fel ca n irul lui Fibonacci, o zon a
i
este:
a
i
= a
i-1
+ a
i-2
Cnd un proces i termin execuia ntr-o zon ocupat, aceasta
devine liber i pot aprea urmtoarele situaii:
-zona eliberat se afl ntre dou zone libere i atunci cele trei zone
se regrupeaz ntr-o singur zon liber;
-zona eliberat se afl ntre o zon liber i una ocupat i atunci se
unesc cele dou zone libere;
-zona eliberat se afl ntre dou zone ocupate i atunci zona
eliberat este adugat listelor zonelor disponibile.
5.5.4. Alocatorul Karels Mckusick
Acest alocator a fost construit n 1988 i este o variant mbuntit
a alocatorului cu puteri ale lui 2. Metoda are avantajul c elimin risipa
pentru cazul blocurilor care au dimensiuni exact puteri ale lui 2. Exist dou
mbuntiri majore.
Sisteme de operare 93
a) Blocurile ocupate i reprezint lungimea ntr-un vector mare de
numere v[k]=t , ceea ce nseamn c pagina k are blocuri de dimensiunea t,
unde t este o putere a lui 2. De exemplu :
vectorul v
16 1024 512 32 16 64
n acest exemplu, pagina 3 are blocuri de 512 octei, pagina 6 are
blocuri de 64 octei etc.
b) O alt mbuntire este modul de calcul al rotunjirii unei puteri a
lui 2. Se utilizeaz operatorul condiional din C (expresie 1; expresie 2;
expresie 3;). Nu se folosesc instruciuni ci numai operatori i n felul acesta
crete viteza de execuie.
Acest alocator a fost utilizat pentru BDS UNIX.
5.5.5. Alocatorul slab
Alocatorul slab este inspirat din limbajele orientate pe obiecte.
Are zone de memorie diferite pentru obiecte diferite, formnd un fel de
mozaic, de unde i numele slab care n englez nseamn lespede.
Iat cteva particulariti ale acestui alocator:
- alocatorul ncearc, cnd caut zone noi, s nu acceseze prea multe
adrese de memorie pentru a nu umple cache-ul microprocesorului cu date
inutile; spunem c alocatorul este de tip small foot print (urm mic).
- alocatorul ncearc s aloce obiecte n memorie astfel nct dou
obiecte s nu fie n aceeai linie n cache-ul de date;
-alocatorul ncearc s reduc numrul de operaii de iniializare
asupra noilor obiecte alocate.
Alocatorul slab const dintr-o rutin central care creeaz
alocatoare pentru fiecare obiect. Rutina primete ca parametri numele
obiectului, mrimea obiectului, constrngerile de aliniere i pointere pentru
o funcie construit i o funcie destinatar.
Fiecare alocator are propria lui zon de memorie n care exist numai
obiecte de acelai tip. Astfel exist o zon de pagini numai cu fiiere, o zon
de pagini numai cu date, etc. Toate obiectele dintr-o zon au aceeai
dimensiune.
Fiecare alocator are o list de obiecte care au fost de curnd
dealocate i le refolosete atunci cnd i se cer noi obiecte. Deoarece
obiectele au fost dealocate, nu mai trebuie iniializate din nou.
Atunci cnd un alocator nu mai are memorie la dispoziie, el cere o
nou pagin n care scrie obiecte noi. Pentru c obiectele nu au fost
Sorin Adrian Ciureanu 94
niciodat iniializate , alocatorul cheam constructorul pentru a iniializa un
nou obiect.
liber obiect fiier
alocat
liber Pagina 0 cu obiecte
fiier
liber liber Pagina 1 cu obiecte
fiier
Fig 5.10. Alocatorul slab.
Fiecare obiect are propriul lui alocator care are n paginile sale
obiecte alocate i libere. n fiecare pagin, primul obiect alocat ncepe la alt
adres, pentru a ncrca uniform liniile din cache-ul microprocesorului.
Fiecare pagin mai posed anumite structuri de date, folosite n acest scop,
ca ,de exemplu, lista dublu nlnuit a tuturor paginilor pentru un anumit
obiect. Fiecare alocator folosete propriile lui pagini la fel ca alocatorul cu
puteri ale lui 2. La sfritul unei pagini alocatorul rezerv o zon pentru o
structur de date care descrie cum este acea pagin ocupat. Primul obiect
din pagin este plasat la o distan aleatoare de marginea paginii; acest
plasament are efectul de a pune obiecte din pagini diferite la adrese diferite.
Alocatorul slab poate returna sistemului de paginare paginile total
nefolosite. El are o urm mic deoarece majoritatea cererilor acceseaz o
singur pagin. Acest tip de alocator risipete ceva resurse datorit modului
de plasare n pagin i pentru c are zone diferite pentru fiecare tip de
obiect. Alocatorul slab este utilizat n sistemul de operare Solaris 2.4.
5.6. GESTIUNEA MEMORIEI N UNELE SISTEME
DE OPERARE
5.6.1. Gestiunea memoriei n Linux
n UNIX gestiunea memoriei a cunoscut diferite variante n funcie
de versiunea cu care se lucra. n primele versiuni, nainte de versiunea
Alocatorul
de fiiere
Alocatorul
de noduri
Sisteme de operare 95
3BSD (Berkeley System Distribution), gestiunea memoriei se baza pe
swapping.
Transferul din memorie pe hard disc este pornit n momentul n care
nucleul rmne fr memorie datorit urmtoarelor evenimente:
-crearea unui proces prin apelul fork();
-mrirea segmentului de date;
-epuizarea spaiului unei stive.
Victima este aleas dintre procesele n starea blocat sau, dac
acestea nu exist, dintre procesele cu un timp rezident n memorie foarte
mare.
Swapperul intr n funciune la fiecare cteva secunde. Exist dou
feluri de schimbri: uoare i grele. Un schimb uor este un schimb n care
exist suficient memorie liber i nu se evacueaz nici un proces din
memorie nspre disc. Un schimb greu este un schimb n care nu exist
suficient memorie liber i trebuie evacuate procese.
Pentru a preveni un swapping cu o rat prea mare se impune ca un
proces s petreac obligatoriu n memorie un timp de cteva secunde.
n ceea ce privete implementarea swappingului, blocurile libere din
memorie sunt inute ntr-o list dublu nlnuit iar algoritmul de cutare
este de prim potrivire (first fit).
ncepnd cu versiunea 4BSD, s-a implementat gestiunea de memorie
bazat pe paginare. Demonul care se ocup cu paginarea este procesul 2
(procesul 0 este swappingul iar procesul 1 este INIT) i este lansat periodic.
Principala sa sarcin este de a vedea cte pagini libere exist la un moment
dat. Dac acest numr este prea mic, el pornete o aciune de eliberare a
paginilor.
Memoria este format din trei pri:
-nucleul, rezident n memorie i niciodat eliminat;
-punerea n coresponden principal, rezident n memorie i
niciodat eliminat;
-cadre de pagin, coninnd cod, date, stiv, tabel de pagini, lista
paginilor libere etc.
Punerea n coresponden principal conine informaii despre
coninutul cadrelor de pagini. Intrarea 0 descrie cadrul de pagin 0, intrarea
1 descrie cadrul de pagin 1 .a.m.d. Dac se utilizeaz cadre de 1KB i
intrarea de 16 octei atunci se folosesc n jur de 2% din memorie pentru
punerea n coresponden principal.
Primele dou cmpuri (figura 5.11) sunt utilizate numai cnd cadrul
de pagin corespunztor se afl pe lista cadrelor libere. Urmtoarele trei
cmpuri sunt utilizate n momentul n care cadrul de pagin conine
Sorin Adrian Ciureanu 96
informaii. Deoarece fiecare pagin din memorie are o adres de disc unde
va fi stocat n momentul n care este eliminat, aceste cmpuri sunt
folosite pentru a localiza aceast adres. Urmtoarele trei cmpuri sunt
utilizate n tabela de procese, pentru procesul care deine pagina i anume
indic n ce segment este i unde este localizat n cadrul acelui segment.
Ultimul cmp reprezint civa dintre indicatorii folosii de algoritmul de
paginare.
Fig. 5.11. Punerea n coresponden principal la versiunea 4 BSD
UNIX.
Cnd un proces este lansat, dac una din paginile utilizate la proces
nu se afl n memorie, se declaneaz rutina de defect de pagin. Aceasta
selecteaz primul cadru de pagin din lista de cadre libere. Dac lista de
cadre libere este goal, atunci procesul este suspendat pn cnd demonul de
pagin elibereaz un cadru.
Algoritmul de nlocuire a paginilor este rulat de demonul de
pagin la fiecare 250 ms. Demonul verific dac numrul de cadre libere
Cadru de pagin n
bnpagin
Cadru de pagin 2
bnpagin
Cadru de pagin 1
bnpagin
Nucleu
Indexul urmtoarei nregistrri
Indexul nregistrrii precedente
Numrul blocului pe disc
Numrul dispozitivului disc
Rezumatul blocului
Index n tabloul de procese
Cod / Date / Stiv
Ofset n cadrul segmentului
L
i
b
e
r
D
a
t
e

n

t
r
a
n
z
i
t
B
i
t
u
l

d
e

f
i
x
a
r
e

n

m
e
m
o
r
i
e
Memorie principal nregistrarea din maparea principal
U
t
i
l
i
z
a
t
e


p
e
n
t
r
u
c
a
d
r
e

l
i
b
e
r
e
nregistrri n
maparea principal
(cte una pentru
fiecare cadru de
pagin)
Sisteme de operare 97
este cel puin egal cu un parametru, numit lotsfree, care de obicei este setat
la un sfert din capacitatea memoriei. Dac nu sunt suficiente pagini libere,
atunci demonul ncepe activitatea de transfer a paginilor pe disc. n primele
versiuni UNIX se utiliza algoritmul ceasului precum i o variant
mbuntit a acestuia, algoritmul ceasului cu dou brae.
Algoritmul ceasului funcioneaz scannd cadrele de pagini ca i
cum s-ar afla pe circumferina unui ceas. Se fac dou trieri. La prima triere
se seteaz un bit pentru fiecare pagin iar la a doua triere se verific paginile
care au fost accesate ntre prima i a doua triere. Paginile ce nu au fost
accesate sunt evacuate pe disc. Dac au fost scrise ct au stat n memorie
sunt salvate integral iar dac nu, nu sunt salvate, locaia pe disc fiind
cunoscut.
Algoritmul ceasului cu dou brae. Algoritmul ceasului, care este de
fapt un algoritm al eliminrii paginii celei mai puin utilizate, are
dezavantajul c, pentru memorii de mari dimensiuni, consum mult timp.
De aceea s-a trecut la un algoritm modificat, numit algoritmul ceasului cu
dou brae. Exist dou brae care se rotesc n acelai timp, ntre brae
existnd un unghi constant. Primul bra va reseta bitul de acces iar al doilea
bra l va citi. Astfel se va micora timpul consumat. ns dac unghiul
dintre cele dou brae este prea mic, se vor elimina multe procese iar dac
este prea mare, se ajunge la algoritmul ceasului simplu.
De remarcat c algoritmul ceasului este un algoritm global, adic nu
se ia n consideraie pagina crui proces este eliminat. Deoarece exist
posibilitatea eliminrii paginilor aceluiai proces, numrul de pagini alocate
unui proces variaz n timp.
Atunci cnd apare fenomenul de trashing sau cnd rata de paginare
este foarte ridicat, este trezit demonul pentru a elimina din memorie
procese care s concureze la cadre de pagin. n varianta 4BSD, orice proces
care a stat inactiv mai mult de 20 secunde este evacuat pe disc. Astfel 4
procese cu timpul cel mai mare de inactivitate sunt eliminate din memorie.
n varianta System V exist dou diferene fa de variantele
anterioare:
-se utilizeaz algoritmul ceasului cu un singur bra dar eliminarea nu
se face dup a doua trecere ci cup n treceri consecutive;
-exist dou valori pentru lotsfree, lotsfree
min
i lotsfree
max
; demonul
este pornit atunci cnd numrul de pagini libere este mai mic dect
lotsfree
min
i i nceteaz activitatea cnd acest numr este mai mare dect
lotsfree
max
; n acest fel se creeaz o rezerv de pagini libere destul de mare,
nefiind nevoie ca demonul s ruleze din nou un timp destul de ndelungat.
Sorin Adrian Ciureanu 98
n ceea ce privete procesele care sunt aduse de pe disc n memorie,
se utilizeaz planificatorul de lung durat, cu un algoritm n care fiecrui
proces i este asociat o valoare asociat unei funcii. Aceast funcie este
construit aa fel nct s fie favorizate procesele care au stat cel mai mult
pe disc dar care nu au o dimensiune foarte mare.
5.6.2. Gestiunea memoriei n LINUX
In Linux se aloc i se elibereaz pagini fizice, grupuri de pagini,
blocuri mici de memorie. n ceea ce privete administrarea memoriei fizice,
alocatorul de pagini poate aloca la cerere intervale contigue de pagini fizice.
Politica de alocare este cea bazat pe puteri ale lui 2, metoda camarazilor.
Pentru administrarea memoriei virtuale, nucleul Linux rezerv o
zon de lungime constant din spaiul de adresare al fiecrui proces pentru
propriul su uz intern. Aceast zon conine dou seciuni:
- o seciune static care conine tabela de pagini cu referire la fiecare
pagin fiic disponibil n sistem, astfel nct s existe o translaie simpl de
la adresele fizice la adresele virtuale atunci cnd se ruleaz codul nucleului;
- o seciune care nu este rezervat pentru ceva anume.
LINUX ul utilizeaz un tablou de pagini pe trei nivele. (Figura
5.12) Acest model a fost utilizat pentru prima dat n microprocesorul
ALPHA creat de firma DEC (Digital Equipement Corporation ) i a fost
preluat n majoritatea versiunilor de LINUX actuale.
Fig. 5.12. Model de paginare LINUX.
Director
global
Director de
mijloc de pagin
Tabel de
pagini Pagini
DIRECTOR MIJLOC PAGIN OFFSET
Adres virtual
Cuvnt
selectat
Sisteme de operare 99
O adres virtual conine patru cmpuri:
-director;
-mijloc;
-pagin;
-offset.
Cmpul director este folosit ca index n catalogul global, existnd un
catalog global pentru fiecare proces. Valoarea gsit este un pointer ctre
tablourile de pagini de mijloc. Aici se pointeaz din nou ctre un tabel de
pagini. Apoi nregistrarea se mai pointeaz odat spre pagina dorit.
Alocatorul utilizat este alocatorul cu puteri ale lui doi (metoda
camarazilor), descris anterior, care are avantajul c se poate oricnd obine o
regiune de memorie cu mrime arbitrar. Principalul su dezavantaj este o
fragmentare intern destul de consistent. Pentru a contracara acest
dezavantaj, LINUX ul mai utilizeaz alte dou alocatoare, derivate din
algoritmul camarazilor. Al doilea alocator preia fragmente de memorie i
apoi gestioneaz separat fragmentele mici rezultate n urma algoritmului
camarazilor. Al treilea alocator este disponibil ori de cte ori este necesar ca
memoria cerut s fie continu (este vorba de memoria virtual nu de cea
fizic). De remarcat c toate aceste alocatoare sunt derivate din System V.
LINUX ul folosete un sistem de paginare la comand cu prepaginare.
Codul i fiierele puse n coresponden sunt pagini pe disc. Orice altceva
este stocat n urmtoarele dou forme:
-partiie de paginare;
-fiier de paginare de lungime fix.
Paginarea pe o partiie este mai eficient dect paginarea cu fiier din
urmtoarele motive:
-corespondena dintre blocuri de fiier i blocuri disc nu este
necesar;
-scrierea fizic poate fi de orice dimensiune, nu numai de mrimea
blocului fizic;
-o pagin este scris continuu pe disc.
O pagin nu este alocat pn cnd nu este necesar. Exist un
dispozitiv, tip hart de bii, care contorizeaz paginile libere din memorie.
Cnd trebuie eliminat o pagin din memorie, se alege fiierul sau partiia
cu cea mai mare prioritate care are un spaiu disponibil.
nlocuirea paginilor este gestionat de demonul KSWapd, cel ce
gestioneaz memoria n LINUX. Acesta este pornit de ctre sistemul de
operare o dat pe secund. Demonul verific dac sunt suficiente pagini
libere. Dac sunt, se inactiveaz o secund. Codul demonului de paginare
este format dintr-u ciclu care se execut de 6 ori. n corpul ciclului se fac
Sorin Adrian Ciureanu 100
apeluri la trei proceduri, fiecare dintre ele ncercnd s recupereze diferite
feluri de pagini. Un parametru care exprim urgena este transmis procedurii
i arat ct de mare efort trebuie s depun pentru a recupera pagina.
Algoritmul ncearc nti paginile uoare din fiecare categorie i apoi
paginile grele.
Prima procedur ncearc s recupereze pagina care nu a fost referit
recent, folosind un algoritm asemntor cu cel al ceasului. A doua procedur
ncearc s recupereze paginile pe care un utilizator nu le-a folosit prea
mult. A treia procedur ncearc s utilizeze pagini normale.
Mai nti este realizat un ciclu n care se vede care proces are cele
mai multe pagini n memorie. Toate structurile sunt scanate i toate paginile
sunt inspectate, n ordinea adreselor virtuale, de unde s-a plecat ultima dat.
Pagina este srit cnd este: invalid, absent din memorie, fixat n
memorie sau utilizat de DMA (Direct Memory Acces). Dac pagina are
bitul de referin setat, de asemenea este srit. Dac acesta este resetat,
pagina este eliminat din memorie.
Apoi se testeaz bitul dirty . Dac e murdar ( adic dac pagina a
fost scris) i are un spaiu de stocare pe disc, atunci pagina este programat
pentru o scriere pe disc. Dac pagina nu are spaiu de stocare pe disc, este
dus n memoria intermediar de paginare.
n LINUX mai exist un al doilea demon de paginare, numit bdflush,
care este trezit periodic cu scopul de a verifica dac exist n memorie un
numr mare de pagini murdare. Dac exist, atunci el face scrierea acestora
pe disc.
5.6.3. Gestiunea memoriei n SO WINDOWS
Gestiunea memoriei n sistemul de operare WINDOWS este mai
complex dect la UNIX. Administrarea memoriei este asigurat de o parte
a executivului i de ctre ase fire de execuie din nucleu, dedicate. Se
utilizeaz paginarea la cerere, cu pagini de dimensiune fix, maximum de 64
Kb (la Pentium se utilizeaz o pagin de 4Kb).
O pagin din memoria virtual se poate afla n urmtoarele stri:
-liber;
-rezervat;
-angajat.
O pagin liber un este utilizat momentan iar un acces la ea
provoac un defect de pagin. Cnd un proces este lansat n execuie, toate
paginile sunt libere pn cnd codul i datele sunt puse n coresponden n
propriul spaiu de adrese.
Sisteme de operare 101
O pagin este angajat n momentul n care sunt puse ntr-o pagin
liber cod i date.
O pagin este rezervat atunci cnd nu este disponibil pentru a fi
pus n coresponden pn cnd rezervarea nu este explicit nlturat.
Paginile libere i cele rezervate au pagini shadow pe disc, iar accesul
la ele provoac ntotdeauna eroare de pagin.
Cele ase fire de execuie, (pe post de demoni ca n LINUX), care
gestioneaz memoria n WINDOWS sunt:
-gestionarul ncrcrii spaiilor de lucru;
-gestionarul spaiilor de lucru;
-firul de execuie pentru interschimbul de memorie (swapper thread);
-scriitorul paginilor puse n coresponden;
-scriitorul paginilor modificate;
-firul de execuie pentru iniializarea paginilor cu zerouri.
-Gestionarul ncrcrii spaiilor de lucru verific dac exist
destule pagini libere. Dac nu exist suficiente pagini libere, se pornete
thread-ul denumit gestionarul spaiilor de lucru.
-Gestionarul spaiilor de lucru are dou sarcini:
-examineaz spaiile de lucru;
-recupereaz alte pagini.
Se determin nti ordinea n care se vor examina procesele.
Procesele mari, care sunt inactive de mult timp, sunt examinate naintea
proceselor mici i active. Procesul care rula n acel moment este examinat
ultimul.
Apoi se inspecteaz procesele n ordinea aleas. Un proces este
pstrat numai dac spaiul su este mai mic dect minimul su sau dac a
cauzat un numr mare de defecte de pagin. n caz contrar se elimin pagini.
-Firul de execuie pentru interschimbul de memorie (swapper
thread) are rolul de a cuta procesele ale cror fire de execuie au fost
inactive un anumit timp. n momentul n care se gsete un asemenea
proces, stivele nucleu sunt dealocate iar paginile procesului sunt mutate n
lista de pagini n ateptare.
-Scriitorul paginilor puse n coresponden i scriitorul paginilor
modificate sunt demoni trezii periodic pentru a verifica dac sunt destule
pagini nemodificate. Dac nu exist, firele de execuie iau pagini din capul
listei de pagini modificate, le scriu pe disc i apoi le mut n lista de pagini
n ateptare. Primul demon scrie n fiierele puse n coresponden, al doilea
scrie n fiierele de paginare.
Motivul existenei a dou fire de execuie este acela c un fiier pus
n coresponden poate fi nevoit s creasc dup o operaie de scriere i
Sorin Adrian Ciureanu 102
creterea n dimensiune se face prin acces la structurile de date de pe disc,
pentru alocarea unui bloc de disc liber. Dac nu exist spaiu n memorie la
scrierea paginii, poate aprea interblocare. Cellalt fir de execuie poate
rezolva problema scriind pe disc pagini ntr-un fiier de paginare care nu
crete niciodat.
-Firul de execuie pentru iniializarea paginilor cu zerouri este un
demon ce lucreaz cu prioritate minim i se execut deoarece regulile de
securitate cer ca o pagin liber s conin numai zerouri. El pune pe o
pagin liber zerouri , mutnd n acelai timp pagina de la lista cu pagini
libere la lista cu pagini cu zerouri.
Sisteme de operare 103
Capitolul 6
GESTIUNEA SISTEMULUI DE
INTRARE/IEIRE
6.1. DEFINIREA SISTEMULUI DE
INTRARE/IEIRE
Toate computerele au dispozitive fizice pentru acceptarea intrrilor
i producerea ieirilor. Exist multe astfel de dispozitive: monitoare,
tastaturi, mausuri, imprimante, scanere, hard discuri, compact discuri,
floppy discuri, benzi magnetice, modemuri, ceasuri de timp real etc. Ele se
numesc dispozitive periferice, deoarece sunt exterioare unitii centrale.
O funcie important a sistemului de operare este gestionarea
dispozitivelor periferice ale unui calculator. Fiecare SO are un subsistem
pentru gestionarea lor, sistemul intrare/ieire (I/O, input/output). Parte din
softul I/O este independent de construcia dispozitivelor, adic se aplic
multora dintre ele. Alt parte , cum ar fi driverele dispozitivelor, sunt
specifice fiecruia.
Principalele funcii pe care trebuie s le genereze SO n acest scop
sunt:
- generarea comenzilor ctre dispozitivelor periferice;
- tratarea ntreruperilor specifice de intrare/ieire;
- tratarea eventualelor erori de intrare/ieire;
- furnizarea unei interfee utilizator ct mai standardizat i
ct mai flexibil.
Gestiunea sistemului de intrare/ieire este o sarcin destul de dificil
iar generalizrile sunt greu de fcut, din diferite motive printre care:
- viteze de acces foarte diferite pentru diferitele periferice;
- unitatea de transfer difer de la un periferic la altul ea putnd fi:
octet, caracter, cuvnt, bloc, nregistrare;
- datele de transfer pot fi codificate n diverse feluri, depinznd de
mediul de nregistrare al dispozitivului de intrare/ieire;
Sorin Adrian Ciureanu 104
- tratarea erorilor se face n mod diferit, n funcie de periferic,
deoarece i cauzele erorilor sunt foarte diferite;
- este greu de realizat operaii comune pentru mai multe periferice
dat fiind tipul lor diferit dar i datorit operaiilor diferite, specifice fiecrui
dispozitiv.
Atunci cnd se proiecteaz un SO, pentru gestiunea sistemului de
intrare/ieire se pot avea n vedere urmtoarele obiective:
a) Independena fa de codul de caractere. n acest sens, sistemul de
I/O ar trebui s furnizeze utilizatorului date ntr-un format standard i s
recunoasc diversele coduri utilizate de periferice.
b) Independena fa de periferice. Se urmrete ca programele
pentru periferice s fie comune pentru o gam ct mai larg din aceste
dispozitive.
De exemplu, o operaie de scriere ntr-un dispozitiv periferic ar
trebui s utilizeze un program comun pentru ct mai multe tipuri de
periferice.
Desigur, apelarea perifericelor ntr-un mod uniform face parte din
acest context. Astfel n UNIX i WINDOWS aceast problem este
rezolvat prin asocierea la fiecare dispozitiv a unui fiier, dispozitivele fiind
apelate prin intermediul numelui fiierului.
c) Eficiena operaiilor. Pot aprea deseori aa numitele erori de ritm,
datorate vitezei diferite de prelucrare a datelor de ctre unitatea central, pe
de o parte, i de ctre periferic, pe de alt parte. Revine ca sarcin sistemului
de operare s fluidizeze traficul.
Un exemplu de eficientizarea unei operaii de intrare /ieire este
sistemul cache oferit de SO. Prin utilizarea mai multor tampoane cache, SO
reuete s mbunteasc, de multe ori, transferul de date, s-i mreasc
viteza.
6.2. CLASIFICAREA DISPOZTIVELOR
PERIFERICE
Exist mai multe criterii dup care se pot clasifica perifericele.
a) Din punct de vedere funcional
-Periferice de intrare/ieire, utilizate pentru schimbul de informaii
cu mediul extern, cum ar fi: imprimanta , tastatura , monitorul.
-Periferice de stocare, utilizate pentru pstrarea nevolatil a
informaiei, cum ar fi hard discul, compact discul, floppy discul, banda
magnetic.
Sisteme de operare 105
Perifericele de stocare, la rndul lor, pot fi clasificate dup variaia
timpului de acces, astfel
-Periferice cu acces secvenial, la care timpul de
acces are variaii foarte mari, cazul tipic fiind banda
magnetic.
-Perifericele cu acces complet direct, la care timpul
de acces este constant, exemplul tipic fiind o
memorie RAM.
-Periferice cu acces direct, la care timpul de acces
are variaii foarte mici, exemplul tipic fiind hard
discul.
b) Din punctul de vedere al modului de operare, de servire a
cererilor
-Periferice dedicate, care pot deservi un singur proces la un moment
dat, de exemplu imprimanta.
-Periferice distribuite, care pot deservi mai multe procese la un
moment dat, cum ar fi hard discul.
c) Din punctul de vedere al modului de transfer i de memorare a
informaiei
-Periferice bloc, care memoreaz informaia n blocuri de lungime
fix. Blocul este unitatea de transfer ntre periferic i memorie, fiecare bloc
putnd fi citit sau scris independent de celelalte blocuri. Structura unui bloc
este format din partea de date propriu zis i din informaiile de control al
corectitudinii datelor ( paritate, checksum, polinom etc). Din aceast
categorie fac parte hard discul, compact discul, banda magnetic.
-Periferice caracter, care utilizeaz iruri de caractere crora nu le
confer structur de blocuri. Octeii din aceste iruri nu sunt adresabili i
deci nu pot fi accesai prin operaia de cutare. Fiecare octet este disponibil
ca un caracter curent, pn la apariia urmtorului caracter. Din aceast
categorie fac parte imprimanta, monitorul, tastatura.
-Periferice care nu sunt nici bloc nici caracter. Exist i periferice
care nu pot fi ncadrate n nici una din aceste dou categorii. Un exemplu
este ceasul de timp real, cel care are rolul de a genera ntreruperi la intervale
de timp bine determinate.
6.3. STRUCTURA HARD A SISTEMELOR DE
INTRARE/IEIRE
Prile hard componente ale unui sistem de intrare ieire, a crui
schem este dat n fig. 6.1., sunt:
Sorin Adrian Ciureanu 106
-controllerul;
-perifericul propriu zis.
Controllerul este alctuit dintr-o serie de registre de comenzi i de
date. Pentru un periferic simplu, ca tastatura sau imprimanta, exist un
singur registru de comenzi i unul de date. Pentru hard disc exist mai multe
registre de comenzi i unul de date. Lungimea registrelor este funcie de
arhitectura calculatorului, obinuit sunt pe 16 bii.
Fig. 6.1. Schema bloc a unui sistem intrare/ieire.
Secvena de lucru pentru o operaie de intrare/ieire este urmtoarea:
Cnd UC detecteaz o operaie de intrare/ieire, transmite principalii
parametri ai operaiei pe care i depune prin intermediul busului n registrele
de comenzi i date. n continuare, controllerul, pe baza datelor din registre,
va sintetiza comenzi pentru echipamentul periferic, comenzi pe care le pune
n interfaa controller/periferic. Dac este o operaie de scriere, va pune i
informaiile pe liniile de date. Perifericul, pe baza acestor comenzi, execut
operaia i returneaz pe interfaa cu controlerul rspunsurile la aceast
operaie i eventualele erori . Controlerul le va prelua i le va pune n
registrele de comenzi i date i le va transmite la UC. Cel mai simplu
registru de comenzi arat astfel:
1 6 7
GO IE RDY
Bitul 1, de obicei bitul de GO, are rolul de a porni efectiv operaia. Bitul 6,
IE (interruption enable), are rolul de a masca sau nu ntreruperea de
Registru comenzi 1
Registru comenzi 2
Registru comenzi n
Registru de date
Dispozitiv
de
comand
CONTROLER PERIFERIC
UC/
UM
UC
Sisteme de operare 107
intrare/ieire. Bitul 7, RDY, este bitul de READY, care arat dac
perifericul este n stare liber de a primi alte comenzi.
6.4. STRUCTURA SOFT A SISTEMELOR DE
INTRARE/IEIRE
Pe suportul hard prezentat, sistemul de operare furnizeaz i
controleaz programe care s citeasc i s scrie date i comenzi n registrele
controllerului i sincronizeaz aceste operaii. Sincronizarea se efectueaz,
de obicei, cu ajutorul ntreruperilor de intrare ieire. Pentru a realiza aceste
sarcini, softul sistemului de intrare/ieire are patru componente:
-rutinele de tratare a ntreruperilor;
-driverele, asociate dispozitivelor periferice;
-programe independente de dispozitivele periferice;
-primitivele utilizator.
6.4.1. Rutine de tratare a ntreruperilor
Un proces, care are ncorporat o operaie intrare/ieire, este blocat
n urma unei operaii de wait la semafor. Se iniiaz operaia de
intrare/ieire iar cnd operaia este terminat, procesul este trezit printr-o
operaie signal, cu ajutorul rutinei de tratare a ntreruperilor. n acest fel,
procesul va fi deblocat i va trece n starea ready.
Fig.6.2. Rutina de tratare a ntreruperilor.
proces Iniiere
operaie
I/E
Rutina de
tratare a
ntreruperilor
Periferic
wait ready
signal
Sorin Adrian Ciureanu 108
Fig.6.3. Reprezentarea rutinei de ntrerupere.
Se observ c sarcinile principale ale rutinei de tratare a
ntreruperilor sunt:
- rutina identific dispozitivul periferic care a generat o ntrerupere;
- rutina reiniializeaz linia de ntrerupere pe care a utilizat-o
perifericul;
- memoreaz ntr-o stiv starea dispozitivului periferic;
- are rolul de a trezi procesul care a iniiat operaia de I/E printr-o
operaie signal.
n acest mod procesul va fi deblocat i trecut n starea ready.
n realitate lucrurile nu sunt aa de simple, SO avnd o mare
cantitate de lucru n acest scop. Etapele parcurse n acest proces n care
intervin ntreruperile sunt:
- salvarea tuturor registrelor (i PSW);
- pornirea procedurii de ntreruperi;
- iniializarea stivei;
- pornirea controlorului de ntreruperi;
- copierea din registrele unde au fost salvate ntreruperile n tabelul
procesului;
- rularea procedurii de ntrerupere care va citi informaia din registre;
- alegerea procesului care urmeaz; dac ntreruperea a fost cauzat
de un proces de nalt prioritate, acesta va trebui s ruleze din nou;
-ncrcarea registrelor noului proces (inclusiv PSW);
Rutina identific sursa ntreruperii.
Reiniializeaz linia de ntrerupere.
Memoreaz starea perifericului.
Trezete procesul cnd operaia de
I/E este gata.
periferic
Linia de
ntrerupere
signal Proces
ready
Sisteme de operare 109
-pornirea rulrii noului proces.
6.4.2. Drivere
Driverul este partea component a SO care depinde de dispozitivul
periferic cruia i este asociat. Rolul su este de a transpune n comenzi la
nivelul registrelor controllerului ceea ce primete de la nivelul soft superior.
Din punct de vedere structural, driverul este un fiier care conine diferite
comenzi specifice unui dispozitiv periferic.
O prim problem care se pune este: unde ar trebui instalate aceste
drivere, n nucleu (kernel) sau n spaiul utilizator (user) ? Prezena
driverelor n user ar avea avantajul unei degrevri a kernelului de anumite
solicitri i al unei mai bune izolri a driverelor ntre ele. De asemenea, la o
eroare necontrolat provenit din driver, nu ar mai ceda sistemul de operare
aa uor.
Totui, majoritatea sistemelor de operare ncarc driverele n kernel
i asta pentru o mai mare flexibilitate i o mai bun comunicare, n special
pentru driverele nou instalate.
Operaiile efectuate de un driver, a crui schem este dat n figura
6.4, sunt:
- verificarea parametrilor de intrare dac sunt valizi, n caz contrar
semnalarea erorii;
- translaia de la termeni abstraci la termeni concrei, aceasta
nsemnnd, de exemplu, la un hard disc:
numr bloc adresa

tor
cilindru
cap
sec
- verificarea strii dispozitivului ( ready sau nu);
- lansarea operaiei efective pentru dispozitivul periferic, de
exemplu, o citire a unui sector al hard discului;
- blocarea driverului pn cnd operaia lansat s-a terminat (printr-
un wait la semafor);
- trezirea driverului (prin operaia signal);
- semnalarea ctre nivelul soft superior a disponibilitii datelor (n
cazul unei operaii de citire de la periferice) sau a posibilitii de
reutilizare a zonei de memorie implicate n transferul de date (pentru
o operaie de scriere ntr-un periferic);
- preluarea unei noi cereri aflate n coada de ateptare.
Sorin Adrian Ciureanu 110
Fig. 6.4. Schema de funcionare a unui driver.
C1 C2 Cn-1 Cn
Desfacerea
parametrilor
Parametri
valizi
eroare
Translaie
Termeni abstracitermeni
concrei
Ready
dispozitiv
periferic
Lansarea operaiei efective
Blocare
driver
(wait)
Trezire
driver
(signal)
Citire/scriere
Zona de memorie disponibil Date disponibile
Preluarea cererii urmtoare
Coad de ateptare
DA
DA NU
NU
Dispozitiv
periferic
Dispozitiv
periferic
Operaie terminat
Citire Scriere
Sisteme de operare 111
Schema de funcionare a unui driver, pentru o comand de citire a
unui bloc logic de pe hard discul C, este dat n figura 6.5.
6.5. Schema funcionrii unui driver pentru o comand de citire a unui
bloc logic.
cerere citirea blocului 1123 de pe hard discul C
adresa hard disc C
numr bloc 1123
operaie citire date
translaie
bloc 1123

3 sec , 40 , 2
2 sec , 40 , 2
tor cilindru cap
tor cilindru cap
poziionare pe
cap 2, cilindru 40, sector 2 i sector 3
citire date
trezire
driver
(signal)
Blocare
driver
(wait)
date disponibile
preluarea cererii urmtoare
Dispozitiv periferic
Dispozitiv periferic
Citire date de pe sect. 2 i
3, cap2, cilindru 40.
memorie
Sorin Adrian Ciureanu 112
6.4.3. Programe-sistem independente
de dispozitive
Sarcinile ce revin acestui nivel soft sunt:
- asigurarea unei interfee uniforme pentru toate driverele;
- realizarea corespondenei dintre numele simbolice
ale perifericelor i driverele respective; n UNIX, de exemplu, un fiier este
asociat unui dispozitiv periferic;
- utilizarea unor tampoane sistem, puse la dispoziie de SO, pentru a
prentmpina vitezele diferite ale dispozitivelor periferice;
- raportarea erorilor de intrare/ieire n conjuncie cu aceste operaii
de intrare/ieire; de obicei erorile sunt reperate i generate de drivere, rolul
acestui nivel soft fiind acela de a raporta o eroare ce nu a fost raportat.
6.4.4. Primitive de nivel utilizator
Cea mai mare parte a sistemului de intrare/ieire este nglobat n
sistemul de operare dar mai exist nite proceduri, numite primitive de nivel
utilizator, ce sunt incluse n anumite biblioteci. Aceste proceduri au rolul de
a transfera parametrii apelurilor sistem pe care le iniiaz. Aceste primitive
pot lucra n dou moduri: sincron i asincron. O primitiv sincron
returneaz parametrii numai dup ce operaia de intrare/ieire a fost realizat
efectiv. Se utilizeaz pentru operaii de intrare/ieire cu o durat ce trebuie
estimat sau cu o durat foarte mic. O primitiv asincron are rolul numai
de iniiere a operaiei de intrare/ieire, procesul putnd continua n paralel cu
operaia. Procesul poate testa mereu evoluia operaiei iar momentul
terminrii ei este marcat de o procedur, definit de utilizator, numit
notificare. Problemele primitivelor asincrone sunt legate de utilizarea
bufferului de date. Procesul iniiator trebuie s evite citirea/scrierea n buffer
att timp ct operaia nu este terminat, sarcina aceasta revenindu-i
programatorului. Primitivele asincrone sunt utilizate n cazul operaiilor cu o
durat mare sau greu de estimat.
6.4.5. Model de interaciune componentelor soft I/E
n figura 6.6 este dat interaciunea celor 4 subsisteme soft, cnd se
lanseaz o operaie I/E.
Sisteme de operare 113
Fig. 6.6. Model de interaciune a componentelor soft I/E.
Semnificaiile mrimilor din figura 6.6. sunt:
OPIE operaia I/E care se lanseaz;
PACHET I/E pachet de intrare/ieire care definete tipul i
parametrii operaiei de I/E; pachetul este de fapt o structur de date creat pe
baza parametrilor operaiei de I/E;
Cerere de ateptare
Cerere servit 3 semafoare utilizate pentru sincronizare;
Operaie terminat
fd descriptor de fiier asociat unui periferic;
buffer dimensiunea (n octei) a zonei tampon;
buf adresa din memorie a zonei tampon.
6.5. MBUNTIREA OPERAIILOR DE
INTRARE/IEIRE
Problema esenial, la ora actual, n ceea ce privete o operaie de
intrare/ieire, este timpul de acces la hard disc, principalul dispozitiv
periferic de memorare a informaiei. nc exist o diferen foarte mare ntre
timpii n care se desfoar o operaie n unitatea central i o operaie pe
hard disc. Desigur , odat cu noile tehnologii, aceti timpi s-au mbuntit
i exist premize de micorare a lor n viitor, totui decalajul de timp intre
PRIMITIVE DE
NIVEL UTILIZATOR
PROGRAME SISTEM
INDEPENDENTE DE
DISPOZITIV DRIVERE
RUTINE DE
TRATARE A
NTRERUPERILOR
OP IE
Parametrii primitivei
de I/E
(buf, buffer, fd)
-citire stare dispozitiv;
-reiniializare
ntrerupere;
signal (operaie
teminat)
wait(cerere n
ateptare);
-preia PACHETE I/E
din coad;
-copiaz date din
memorie n bufferul
perifericului;
-iniiaz operaia I/E;
wait (operaie
terminat);
signal (cerere servit);
-terge PACHE I/E;
-Identificare dispozitiv
-Asamblare PACHET
I/E;
-Plasare PACHET I/E
n lista de cereri
asociat dispozitivului;
-signal (cerere n
ateptare);
wait(cerere servit);
exit
Sorin Adrian Ciureanu 114
operaiile din UC i cele de intrare/ieire este nc foarte mare. Rolul SO
este de ncerca, prin diferii algoritmi, s mbunteasc, adic s
micoreze, timpul unei operaii de intrare/ieire. Multe din soluiile adoptate
au fost apoi implementate n hard, n soluiile constructive ale hard discului.
Dou exemple sunt edificatoare n acest sens:
-factorul de ntreesere;
-cache-ul de hard disc.
6.5.1. Factorul de ntreesere.
La apariia discurilor magnetice, se consuma foarte mult timp pentru
citirea continu a sectoarelor, unul dup altul. Astfel pentru un disc cu 80
sectoare pe pist, pentru citirea unei piste erau necesare 80 rotaii ale
platanului. Aceasta deoarece, dup citirea unui sector, era necesar un timp
pentru transferul datelor spre memorie iar n acest timp capul respectiv se
poziiona pe alt sector. Deci, pentru citirea sector cu sector, era necesar o
rotaie pentru citirea unui sector. O idee simpl, venit din partea de SO, a
fost de a calcula timpul de transmitere a datelor spre memorie, de a vedea
pe ce sector a ajuns capul dup aceast transmisie i de a renumerota
sectoarele. Exemplu:
Fie un disc cu 8 sectoare, numerotate n ordine , ca n figura 6.6.
1
2
3
4 5
6
7
8
Fig. 6.6. Hard disc cu 8 sectoare.
Dac acest disc are un factor de ntreesere egal cu 2, aceasta
nseamn c, dup ce capul a mai parcurs dou sectoare, datele au fost
transmise n memorie. La o rotaie se citesc trei sectoare. La prima rotaie,
sectoarele 1,2,3, la a doua rotaie, sectoarele 4,5,6, la a treia rotaie
sectoarele 7 i 8. Pentru un factor de ntreesere 2 noua numerotare a
sectoarelor va fi ca n figura 6.7.
Sisteme de operare 115
1
4
7
2 5
8
3
6
Fig. 6.7. Hard discul dup trei rotaii.
Se observ c, prin introducerea factorului de ntreesere, nu mai
sunt necesare 8 rotaii pentru citirea unei piste ci numai trei. Aceast soluie
a fost introdus nti n SO, mai apoi fiind preluat n hardware de ctre
disc, unde factorul de ntreesere era un parametru lowlevel al hard discului.
Datorit progresului tehnologic, de la factori de ntreesere de 3 sau
4 s-a ajuns la un factor de valoare 1, deci la o rotaie se citete ntreaga pist.
6.5.2. Cache-ul de hard disc
Folosirea tampoanelor de date, pentru transferul de date ntre hard
disc i memoria sistemului, a fost preluat hardware de ctre disc. Astfel s-a
implementat o memorie cache la nivel de hard disc, memorie alctuita pe
acelai principiu ca i memoria cache RAM.
6.5.3. Crearea unui hard disc cu performane
superioare de ctre SO
n general, timpul total de acces pentru un hard disc este dat de
urmtoarele componente:
- timpul de cutare (seek time) care este timpul necesar pentru
micarea mecanic a capului de scriere/citire pn la pista specificat;
- latena de rotaie ( rotational latency) care este timpul de ateptare
necesar pentru ca sectorul specificat s ajung sub capul de scriere/citire;
- timpul de transfer ( transfer time) care este timpul necesar pentru a
citi informaia de pe sectorul specificat;
Planificarea accesului la disc are n vedere dou lucruri:
- reorganizarea cererilor la disc pentru a minimiza timpul de cutare;
- un mod de plasare a informaiilor pe disc care s minimizeze
latena de rotaie.
Sorin Adrian Ciureanu 116
Exist algoritmi de plasare n care ideea principal este de a schimba
ordinea de servire a cererilor venite de la procese, astfel nct s se pstreze
ordinea cererilor fiecrui proces.
Dintre algoritmii care minimizeaz timpii de acces amintim:
a) FCFS (First Come First Served) ;
b) SSTF ( Shortest Seek Time Firs);
c) SCAN, C SCAN ;
d) LOOK, C LOOK.
a) FCFS ( First Come First Served =primul venit , primul
servit). Cererile sunt servite n ordinea sosirii.
b) SSTF (Shortest Seek Time First=cel cu cel mai scurt timp de
cutare, primul) . Conform acestui algoritm, capul de scriere/citire se va
deplasa de la cilindrul unde este pozionat spre cilindrul cel mai apropiat.
Este mai eficient dect FCFS, dar poate duce la ntrzierea unor cereri i la
nfometare.
c) SCAN i C SCAN. n SCAN, capul de scriere /citire se
deplaseaz de pe primul cilindru spre unul din capete i apoi baleiaz discul
pn la capt i napoi, deservind cererile. n C SCAN , se ncepe de la
cilindrul 0 iar cnd se ajunge la sfrit, se reia baleierea tot de la cilindrul 0.
Practic, n SCAN baleierea se face n ambele sensuri, n timp ce n C SCAN
ntr-un singur sens, de la cilindrul 0 la ultimul. Prin analogie, algoritmul
SCAN poate fi reprezentat de o list dublu nlnuit, iar C SCAN de o list
simplu nlnuit.
d) LOOK, C LOOK. n acest algoritm, capul de scriere/citire se
deplaseaz pn la ultima cerere, dup care inverseaz sensul de micare,
imediat, fr s mearg pn la captul discului.
n continuare, s lum un exemplu i s vedem care este timpul de
cutare pentru fiecare algoritm.
Fie un hard disc cu 250 cilindri, cu braul cu capete poziionat iniial
pe cilindrul 50. Fie urmtoarea coad a cererilor se acces:
50, 200, 100, 25, 250, 150, 144, 143
S calculm, pentru exemplul dat, timpii de cutare pentru fiecare algoritm,
timpi exprimai n numrul cilindrilor parcuri.
FCFS-Ordinea deservirii (n ordinea cererii de acces):
50,200,100,25,250,150,144,143.
-Numrul cilindrilor parcuri:
(200-50)+(200-100)+(100-25)+(250-25)+(250-150)+(150-
44)+(144-143)==150+100+75+225+100+6+1=657
Sisteme de operare 117
SSTF-Ordinea deservirii (ctre cel mai apropiat cilindru):
50,25,100,143,144,150,200,250.
-Numrul cilindrilor parcuri =(50-25)+(100-25)+(143-100)+(144-
143)+(150-144)+(200-150)+(250-200)=
25+75+43+1+6+50+50=250
SCAN-Ordinea deservirii: 50,0,25,100,143,144,150,200,250
-Numrul cilindrilor parcuri = 50+25+75+43+1+6+50+50=300
C SCAN-Ordinea deservirii: 50,100,143,144,150,200,250,0,25.
- Numrul cilindrilor parcuri = 50+43+1+56+50+50+250+25=475
0
20
40
60
80
100
120
140
0 25 50 75 100 125 150 175 200 225 250
timpul de cutare (numr de cilindri parcuri)
(a)
s
p
a

i
u
l

p
a
r
c
u
r
s

(
u
n
i
t

i
c
o
n
v
e
n

i
o
n
a
l
e
)
0
20
40
60
80
100
120
0 25 50 75 100 125 150 175 200 225 250
timpul de cutare (numr de cilindri parcuri) (b)
s
p
a

i
u
l

p
a
r
c
u
r
s

(
u
n
i
t

i
c
o
n
v
e
n

i
o
n
a
l
e
)
Sorin Adrian Ciureanu 118
0
20
40
60
80
100
120
0 25 50 75 100 125 150 175 200 225 250
timpul de cutare (numr de cilindri parcuri)
(c)
s
p
a

u
l

p
a
r
c
u
r
s

(
u
n
i
t

i

c
o
n
v
e
n

i
o
n
a
l
e
)
0
50
100
150
200
250
0 25 50 75 100 125 150 175 200 225 250
timpul de cutare (numr de cilindri parcuri)
(d)
s
p
a

i
u
l

p
a
r
c
u
r
s

(
u
n
i
t

i

c
o
n
v
e
n

i
o
n
a
l
e
)
Fig.6.8. Reprezentarea micrii capului magnetic n diferii algoritmi
(a)FCFS=n ordinea sosirii ; (b) SSTF=spre cel mai apropiat cilindru ; (c)
SCAN ; (d) C SCAN
Se constat c cel mai scurt timp de cutare ofer algoritmul SSTF,
aa cum se observ i din graficul (b). Este frecvent utilizat, n ciuda
faptului c poate duce la nfometare.
Algoritmii SCAN i C SCAN se comport mai bine pentru sistemele
care au ncrcare mare a discului, adic multe operaii de intrare/ieire.
Sisteme de operare 119
La algoritmul SSTF, cei mai favorizai din punct de vedere al
timpului de acces, sunt cilindrii aflai la mijloc. De aceea, n aceti cilindri
sunt alocate fiiere cu frecvena ridicat de utilizare, cum ar fi structura de
directoare.
Exist i algoritmi mai pretenioi n care se urmrete i
minimizarea latenei de rotaie.
6.5.4. Construirea unui hard disc prin tehnica RAID
(Redundant Arrays of Independent Discks)
Ideea RAID este de a folosi mai multe discuri simultan la aceeai
magistral i de a scrie informaiile n felii (stripes)care acoper toate
discurile. Aceste felii sunt de fapt blocuri. Discul este vzut ca un ntreg dar
blocurile alterneaz n toate discurile. Pentru un ansamblu de trei discuri,
blocul 1 va fi pe discul 1, blocul 2 pe discul 2, blocul 3 pe discul 3 i apoi
blocul 4 pe discul 1, blocul 5 pe discul 2 s.a.m.d. Pentru un subansamblu de
n discuri, blocul m va fi pe discul m modulo n.
n Raid, aceast tehnic a stripingului se combin cu ideea de
redundan, de unde i denumirea Redundant Arrays of Independent Discks
adic o mulime redundant de discuri independente. Redundana const n
alocarea, n caz de defect, a unui disc pentru refacerea informaiei pe
celelalte discuri.
Tehnica de refacere cea mai des utilizat este paritatea dar se pot utiliza i
checksum-uri sau, mai rar, polinoame de control.
Cea mai simpl schem RAID este cea cu dou discuri, care menin
informaii identice, tehnic care se mai numete mirrored discks.
n tehnica actual RAID, exist 7 nivele:
-nivelul 0: striping fr redundan;
-nivelul 1: discuri oglindite (mirrored discks);
-nivelul 2: coduri Hamning detectoare de erori:
-nivelul 3: un disc de paritate la fiecare grup,
bit-interleaved;
-nivelul 4: scrieri/citiri independente, block-interleaved;
-nivelul 5: informaia de paritate este mprtiat pe toate discurile;
-nivelul 6: nivelul n care de detecteaz i se corecteaz mai mult de
o eroare pe disc.
Principalul dezavantaj al discurilor RAID const n aa numitele
scrieri mici. Acest lucru se produce atunci cnd se face o scriere ntr-un
singur disc i toate celelalte discuri trebuie accesate pentru a se recalcula
paritatea, generndu-se astfel un trafic destul de mare. Acest dezavantaj
Sorin Adrian Ciureanu 120
poate fi contracarat prin implementarea unei cache de disc, cu o capacitate
foarte mare, ceea ce face ca ocul scrierilor mici s fie absorbit de cache,
utilizatorii netrebuind s atepte calculul paritii.
6.6. GESTIUNEA SISTEMULUI I/E N UNELE
SISTEME DE OPERARE
6.6.1. Gestiunea sistemului I/E n UNIX
Sistemul I/E n UNIX are un principiu simplu: fiecare dispozitiv de
I/E are ataat un fiier. Accesul la dispozitiv se face prin apeluri sau funcii
specifice de fiiere, cum ar fi apelurile read i write.
Fiierele ataate unui dispozitiv de intrare/ieire sunt fiiere speciale
i sunt de dou categorii:
-fiier special de tip bloc;
-fiier special de tip caracter.
Un fiier special de tip bloc este format dintr-un ir de blocuri
numerotate, la fiecare bloc existnd un acces secvenial.
Un fiier special de tip caracter este utilizat pentru dispozitive
periferice care utilizeaz fluxuri de caractere.
Fiecrui fiier special i este asociat un driver de dispozitiv pentru a
crui identificare se utilizeaz : un numr major de dispozitiv i un numr
minor de dispozitiv. Cu ajutorul unui numr major de dispozitiv se identific
un periferic simplu (tastatura, imprimanta). Cu ajutorul unui numr minor
de dispozitiv se identific un dispozitiv dintr-un periferic multiplu (discuri
dure, CD-ROM uri ).
Rolul unui driver de dispozitiv este s izoleze sistemul de
nesincronizrile hardului.
Cnd un utilizator acceseaz un fiier special, sistemul de fiiere
determin numerele major i minor ale dispozitivului. Numrul major este
utilizat ca index ntr-unul din cele dou tablouri de structuri, numite bdesw,
pentru fiiere speciale bloc i cdesw , pentru fiiere speciale caracter.
Structura astfel gsit conine pointeri pentru operaii cu dispozitivul.
Numrul minor de dispozitiv este transmis ca parametru. n UNIX, a
aduga un periferic nseamn de fapt a aduga un element ntr-unul din
tablouri i a pune la dispoziie funciile corespunztoare care s se ocupe de
diversele operaii asupra dispozitivului.
Fiecare driver are dou componente:
Sisteme de operare 121
-partea superioar, care ruleaz n contextul apelantului i are
interfee cu restul sistemului de operare;
-partea inferioar, care ruleaz n contextul nucleului i
interacioneaz cu perifericul.
Driverele apeleaz proceduri ale nucleului aflate n Driver Kernel
Interface.
6.6.1.1.Fiiere speciale de tip bloc
Scopul acestor fiiere este de a micora efectiv numrul de
transferuri. Pentru acesta se utilizeaz o memorie tampon soft situat ntre
driver i sistemul de fiiere. Memoria tampon este de obicei organizat ca o
list simplu nlnuit de blocuri. Regula de gestionare a blocurilor din list
este:
-un bloc accesat trece n capul listei;
-se elimin un bloc de pe ultima poziie a listei, dup regula blocului
celui mai puin renet utilizat.
Blocurile murdare sunt scrise pe disc la un interval de 30 secunde.
6.6.1.2. Fiiere speciale de tip caracter
n aceste fiiere se lucreaz cu fluxuri de caractere. Exist dou
soluii pentru a structura i modulariza driverele de tip caracter.
Soluie BSD, bazat pe structuri de date numite C-list. Acestea sunt
blocuri de pn la 64 caractere, un contor i un pointer la blocul urmtor. Pe
msur ce caracterele ajung de la dispozitivul periferic tip caracter sunt puse
ntr-un lan de astfel de blocuri.
Caracterele pot ajunge la procesor n dou moduri: mod prelucrat
sau mod neprelucrat.
n modul prelucrat, atunci cnd sunt citite caractere, ele nu sunt
transmise direct din C-list procesului ci trec printr-o seciune cod a
nucleului, numit line discipline. Aceasta se comport ca un filtru. Ea
primete fluxul de caractere neprelucrate de la driverul terminal, l
prelucreaz i apoi produce i trimite spre proces aa numitul flux de
caractere pregtit (cooked character stream). Pregtirea unui flux
nseamn eliminarea caracterelor i liniilor terse i transformarea lui
carriage return n line feed.
n modul neprelucrat nu se mai trece prin line discipline. Modul
neprelucrat este util n mod special atunci cnd se trimit date binare ctre alt
calculator, pe o linie scurt, unde nu este nevoie de conversie.
Sorin Adrian Ciureanu 122
Soluie System V, bazat pe nirarea modulelor de procesare n flux,
n mod dinamic, n timpul execuiei. Pn la un anumit punct, un flux este
analogul din nucleu al liniilor de conducte din spaiul utilizator.
Fig. 6.9. Exemplu de fluxuri n System V.
Un flux are ntotdeauna un antet de flux deasupra i se conecteaz la
un driver dedesubt. ntre acestea pot fi introduse module, cte sunt necesare.
Procesarea poate fi bidirecional, deci fiecare modul poate avea un flux de
scriere i unul de citire.
Atunci cnd un proces utilizator scrie ntr-un flux de caractere, codul
din antet interpreteaz apelul de sistem i pune datele n zonele tampon ale
fluxului care sunt transmise din modul n modul, n jos, fiecare modul
opernd transformarea dorit. Fiecare modul are o coad de scriere i una de
citire, tampoanele fiind procesate n ordinea corect. Modulele au interfee
bine definite iar modulele fr legtur pot fi legate ntre ele. n exemplul
din figur s-a utilizat un protocol INTERNET TCP pe reaea local
ETHERNET.
n figur apare un aspect important al fluxurilor i anume
multiplexarea. Un modul multiplexat poate prelua un flux, l poate despri
n mai multe fluxuri i le poate uni ntr-un singur flux. Modulul IP
realizeaz ambele lucruri.
Sistem de calcul
Mod utilizator
Mod nucleu
PROCES
ANTET DE FLUX
TCP
IP
CONTROLER ETHERNET
DRIVER ETHERNET
Sisteme de operare 123
6.6.2. Gestiunea sistemului I/E n LINUX
Ceea ce aduce nou Linux ul este noiunea de module ncrcabile.
Un modul ncrcabil este o poriune de cod ce poate fi ncrcat n nucleu n
timp ce sistemul funcioneaz. n mod normal acestea sunt drivere dispozitiv
tip bloc sau caracter dar pot fi i fiiere, protocoale de reea, programe de
monitorizare a performanelor etc.
Cnd un modul este ncrcat se petrec urmtoarele operaii:
-modulul este realocat dinamic n timpul ncrcrii;
-sistemul verific dac resursele de care are nevoie sunt disponibile;
-se seteaz toi vectorii de ntrerupere afereni;
-se actualizeaz tabloul de drivere pentru a putea trata un nou
dispozitiv major;
-se ruleaz driverul pentru a putea realiza orice iniializare specific
dispozitivului;
-n final, dup toate aceste operaii, driverul este instalat ca orice
driver ncrcat static.
Prin acest procedeu de ncrcare dinamic a driverului, LINUX ul
se deosebete fundamental de toate variantele UNIX clasice care ncarc
driverele n mod static i care la orice ncrcare a unui driver nou trebuie s
recompileze nucleul.
6.6.3. Gestiunea sistemului I/E n WINDOWS
Principalul scop urmrit n gestiunea I/E de SO WINDOWS este
acela de a avea un cadru, n care s opereze diferitele dispozitive de I/E,
constnd dintr-un set de proceduri independente de dispozitive care se ocup
de anumite aspecte legate de evenimentele de I/E. La acestea se adaug un
set de drivere de dispozitiv, ncrcate, care se ocup de comunicarea cu
dispozitivele.
6.6.3.1. Structura general a sistemului de I/E n SO WI NDOWS
ncepnd cu SO WINDOWS NT, sistemul de I/E este de tipul
packet driver. Aceasta nseamn c pentru fiecare cerere de I/E sistemul
asambleaz un pachet numit I/O Request Packet (IRP) care descrie complet
operaia de I/E. IPR este utilizat de diferitele componente ale sistemului de
I/E n decursul operaiei.
Sorin Adrian Ciureanu 124
IRP IRP
Fig.6.10. Componente ale sistemului I/E n SO WINDOWS NT.
Figura 6.10 arat schematic interaciunea dintre diferitele
componente ale sistemului de I/E i operaiile aferente.
1 Un proces care dorete s iniieze o operaie de I/E apeleaz o
funcie de bibliotec care genereaz un apel sistem. Acest apel va fi preluat
de ctre nucleu, component servicii sistem, transfernd controlul unui modul
ce realizeaz o gestiune de resurse n funcie de natura operaiei de I/E.
2 Modulul de gestiune I/E trimite ctre driver pachetul IRP care
conine informaii despre codul operaiei, parametrii specifici operaiei i
contextului de execuie.
3 Driverul pornete IRP ul i apoi genereaz comenzile ctre
periferic.
4 Cnd se termin operaia de I/E, controlerul genereaz o
ntrerupere care va fi tratat n dou etape:
-n prima etap se execut numai operaiile ce necesit utilizarea
unui nivel de privilegiu ridicat; acestea sunt executate de ISR (Interrupt
Service Routine), o rutin care ia n considerare numai acele ntreruperi de
I/E.
SERVICII SISTEM
Modul de gestiune I/E
DRIVER
Controler + Periferic Sistemul de tratare a ntreruperilor
3
4
2 5
1 6
Sisteme de operare 125
-n a doua etap se execut de ctre driver o rutin, denumit DPC
(Deferred Procedure Call). Aceast rutin ruleaz n modul supervizor i
ndeplinete diferite funcii sistem. Cuvntul deferred (amnat) se refer la
faptul c execuia este amnat pn cnd ntreruperea coboar la un nivel
destul de sczut. Acest tip de rutin este utilizat de nucleu pentru procesarea
ntreruperilor de I/E dar i pentru evenimente legate de ceasul de timp real.
5 Driverul iniiaz o finalizare a cererii de I/E, operaie executat
de modulul de gestiune I/E prin intermediul unei rutine APC
(Asynchronous Procedure Call). Aceasta transfer datele din zona sistem n
spaiul de adresare asociat firului de execuie care a iniiat cererea de I/E.
6 Se terge IPR i se returneaz controlul.
6.6.3.2. Drivere n WINDOWS
Driverele din WINDOWS ar trebui s ndeplineasc un standard e
cuprinde urmtoarele cerine:
-s trateze cererile de I/E primite care respect un anumit format
standard;
-driverul s fie scris ntr-un limbaj orientat pe obiecte, aa cum este
n totalitate SO WINDOWS (ncepnd de la WINDOWS 2000);
-s permit dispozitivelor plug-and-play s fie adugate sau
nlturate dinamic; aceasta nseamn c dac un dispozitiv gestionat de un
driver este adugat sau eliminat din sistem, driverul trebuie s fie pregtit s
primeasc aceast informaie i s acioneze corespunztor;
-s prezinte gestiunea consumului de putere unde este cazul;
-driverul s fie configurabil, cu privire la resursele utilizate; nu
trebuie s se fac nici o presupunere prealabil despre liniile de ntrerupere
sau porturile de I/E pe care dispozitivele le utilizeaz;
-driverul s fie reentrant pentru a putea fi utilizat pe un sistem
multiprocesor; aceasta nseamn c toate structurile de date ale driverului s
fie accesibile numai din interiorul regiunilor critice;
- s fie compatibil cu versiunile mai vechi, ncepnd cu WINDOWS
98; s-ar putea s fie necesar recompilarea driverului pentru fiecare sistem i
utilizarea directivelor de preprocesare din C, care sunt permise.
Sorin Adrian Ciureanu 126
Capitolul 7
GESTIUNEA RESURSELOR LOGICE.
SISTEMUL DE FIIERE
7.1. NOIUNI INTRODUCTIVE
Pentru aplicaiile soft sunt necesare dou condiii eseniale:
- stocarea informaiei;
- regsirea informaiei.
Pn acum, singura entitate pe care am studiat-o a fost procesul.
Acesta, ns, nu beneficiaz de aceste dou condiii, un proces neputnd fi
stocat ntr-un mediu de memorare extern i, implicit, nu se poate apela la
informaiile deinute de el dup o anumit perioad. De aceea se impunea
introducerea unei noi entiti care s satisfac cele dou condiii. Aceast
entitate a fost denumit fiier iar sistemul ce gestioneaz fiierele se
numete sistemul de fiiere.
Fiierul este o resurs logic a sistemului de operare i este memorat
ntr-un mediu extern de memorare. Prin definiie, fiierul este:
-unitatea logic de stocare a informaiei;
-o colecie de informaii definit de creatorul ei;
-o colecie de informaii mapate pe perifericile fizice.
Pentru a furniza un mod de pstrare a fiierelor, multe sisteme de
operare au i conceptul de director ca o cale de a grupa mai multe fiiere.
Sistemul de fiiere dintr-un SO trebuie s realizeze urmtoarele
operaii:
-Crearea i tergerea fiierelor/directoarelor.
-Denumirea i manipularea fiierelor; fiecare fiier ar trebui s aib
un nume care s fie reprezentativ pentru coninutul su; manipularea
fiierelor const n operaiile ce se pot efectua cu ele, ca scriere , citire,
cutare.
-Asigurarea persistenei datelor. Acest lucru nseamn satisfacerea
condiiei de regsire a datelor stocate, chiar i dup perioade de timp foarte
Sisteme de operare 127
mari. De asemenea trebuie s existe posibilitatea de refacere a coninutului
unui fiier n caz de accident, posibilitate pe care sistemul de fiiere trebuie
s o pun la dispoziie.
-Asigurarea mecanismelor de acces concurent al proceselor din
sistem la informaiile stocate n fiier.
7.2. CLASIFICAREA FIIERELOR
7.2.1. Clasificarea fiierelor dup structur
7.2.1.1. Secvene de octei
Fiierul este alctuit dintr-un ir de octei. Interpretarea lor este
fcut de ctre programele utilizator, conferindu-se astfel acestui tip de
structur o maxim flexibilitate. Marea majoritatea a sistemelor de operare
actuale, printre care UNIX i WINDOWS, prezint acest tip de structur.
7.2.1.2. Secvene de nregistrri
Un fiier este alctuit dintr-o secven de nregistrri, de obicei
specific unui anumit dispozitiv periferic. Astfel, pentru imprimant, era
linia de tiprit format din 132 de caractere, pentru lectorul de cartele era o
coloan .a.m.d. Acest tip de structur ine deja de domeniul istoriei.
7.2.1.3. Structur arborescent
Structura intern a unui fiier este organizat ca un arbore de cutare.
Un arbore de cutare este un arbore binar ale crui noduri au o cheie de
identificare. Cheia asociat unui anumit no este mai mare dect cheia
asociat unui nod din sub-arborele drept. Cheia asociat unui anumit nod
este mai mic dect cheia asociat uni nod din sub-arborele stng. O astfel
de structur este utilizat n calculatoarele de mare capacitate.
7.2.2. Clasificarea fiierelor dup tip
7.2.2.1. Fiiere normale
Aceste fiiere conin informaie utilizator i pot fi de dou feluri:
-fiiere text;
Sorin Adrian Ciureanu 128
-fiiere binare.
Fiierul text este format din linii de text; fiecare linie este terminat
cu caracterele CR (carriage return) sau LF (line feed).
Fiierul binar este organizat ca secvene de octei dar sistemul de
operare i poate asocia o anumit structur intern, cazul tipic fiind al
fiierelor executabile.
7.2.2.2. Directoare (Cataloage)
Sunt nite fiiere sistem destinate gestionrii structurii sistemului de
fiiere. Modul obinuit de organizare a fiierelor on-line la un sistem de
operare modern este gruparea lor n directoare (cataloage). Fiecare catalog
este tot un fiier i poate fi inclus n alt catalog, ceea ce duce la apariia unui
arbore de cataloage.
7.2.2.3. Fiiere speciale de tip caracter/bloc
Sunt destinate utilizrii n conjuncie cu dispozitivele periferice.
Un fiier special de tip bloc este format dintr-un ir de blocuri
numerotate, la fiecare bloc existnd un acces secvenial.
Un fiier special de tip caracter este utilizat pentru dispozitive
periferice care utilizeaz fluxuri de caractere.
7.2.3. Clasificarea fiierelor dup suportul pe
care sunt rezidente
Din acest punct de vedere fiierele pot fi:
-fiiere pe disc magnetic; -fiiere pe band magnetic;
-fiiere pe imprimant;
-fiiere pe ecran;
-fiiere pe tastatur.
7.2.4. Clasificarea fiierelor dup acces
7.2.4.1. Fiiere cu acces secvenial
n aceste fiiere, pentru a ajunge la informaie, trebuie mai nti s se
parcurg nite structuri. Este cazul tipic al benzii magnetice. n accesul
secvenial nu se pot face citiri i scrieri n acelai timp.
Sisteme de operare 129
7.2.4.2. Fiiere cu acces direct
Accesul se face direct ntr-o structur dat, existnd posibiliti de a
se face citiri i scrieri n acelai timp. Este cazul tipic al hard discului.
7.2.4.3. Fiiere cu acces indexat
Se face acces direct prin coninut, folosind o serie de tehnici ca
fiiere de index, fiiere multi list, arbori binari, hashing etc.
7.3. ATRIBUTE I OPERAII CU FIIERE
7.3.1. Atribute
Nume - numele fiierului este, pentru toate sistemele de operaii,
pstrat n form uman inteligibil.
Tip - acest atribut este absolut necesar deoarece SO cuprinde mai
multe tipuri de fiiere(binar, text..).
Locaie este un pointer la locaia fiierului pe perifericul de
stocare.
Protecie n legtur cu protecia fiierului, cele mai multe atribute
se refer la posesorul su i la drepturile de acces ale utilizatorilor si.
Timp, data i identificatorul de utilizator informaii pentru
protecia, securitatea i monitorizarea utilizrii.
7.3.2. Operaii cu fiiere
Prezentm, n continuare, principalele operaii cu fiiere .
-Crearea unui fiier, creat().
-Citirea unui fiier; read();se citesc din fiier un numr specificat
de octei de la o poziie curent.
-Scrierea ntr-un fiier, write(); se scrie ntr-un fiier un numr
specificat de octei, ncepnd de la poziia curent.
-Deschiderea unui fiier, open(); cutarea n structura de
directoare de pe disc a intrrii fiierului i copierea coninutului intrrii n
memorie.
Sorin Adrian Ciureanu 130
-Descriptorul de fiier, fd; n urma operaiei de deschidere a unui
fiier, se returneaz un ntreg, numit descriptor de fiier, care va fi utilizat de
procesul care a iniiat operaia open() pentru toate operaiile ulterioare
asupra fiierului respectiv. Descriptorul de fiier este folosit de SO ca un
index ntr-o tabel de descriptori asociat fiecrui proces, n care se regsesc
i ali descriptori asociai altor fiiere folosite de procesul respectiv.
-tergerea unui fiier, delete(), unlink().
-Trunchierea unui fiier, trunc(), nseamn tergerea unei zone
contigue, de obicei la nceputul sau sfritul fiierului.
-nchiderea unui fiier, close(), este mutarea coninutului unui
fiier din memorie n structura de directoare de pe disc.
-Adugarea de date la sfritul unui fiier, append().
-Setarea poziiei n fiier, seek().
-Repoziioanrea n fiier, lseek().
-Redenumirea unui fiier, rename().
-Operaia de setare i citire a atributelor unui
fiier,setattributes().
Aceste operaii prezentate au echivalent n funciile bibliotec pe
care utilizatorul le poate apela din program. La rndul lor, aceste funcii
iniiaz apeluri sistem. n sistemele de operare actuale accesarea unui fiier
se face aleatoriu i nu secvenial ca n sistemele mai vechi. Aceasta
nseamn c se pot face operaii de scriere/citire n orice poziie din cadrul
fiierului, adic orice octet din fiier este adresabil.
Fig. 7.1. Fiier cu secven de octei.
7.4. IMPLEMENTAREA SISTEMULUI DE FIIERE
7.4.1. Alocarea fiierelor pe disc
Un SO lucreaz la nivel logic cu blocuri. Un bloc este format din
dou sau mai multe sectoare fizice. Una din problemele eseniale ale
implementrii sistemului de fiiere este modul n care blocurile din disc sunt
alocate pentru fiiere. Exist, la ora actual, trei posibiliti de alocare:
Marker de accesare a uui octet
Octet
1
Octet
2
Octet
3
Octet
k
Octet
n
Sisteme de operare 131
-alocare contigu;
-alocare nlnuit;
-alocare secvenial.
7.4.1.1. Alocare contigu
n acest mod de alocare fiecare fiier ocup o mulime contigu de
blocuri pe disc, adic o mulime n care elementele se ating.
Avantajele acestei alocri sunt:
- simplicitatea, fiind necesare doar numrul blocului de nceput i
numrul de blocuri ale fiierului; de exemplu, un fiier cu 8 blocuri , cu
adresa blocului de nceput 1234, va fi reprezentat pe disc astfel:
Bloc
1234 1235 1236 1237 1238 1239 1240 1241
Fig. 7.2. Reprezentarea unui fiier cu 8 blocuri.
- faptul c sunt permise accese directe.
Dezavantaje:
-exist o risip de spaiu foarte mare, adic o mare fragmentare a
discului datorat condiiei de contiguitate a blocurilor din fiier;
-fiierele nu pot crete n dimensiune ceea ce constituie un
impediment important.
Alocarea contigu a fost folosit n primele sisteme de operare, n
prezent aproape nu mai este utilizat.
7.4.1.2. Alocarea nlnuit
Fiecare fiier este o list liniar nlnuit de blocuri pe disc.
Fiecare bloc conine partea de informaie, care este blocul propriu
zis, i o legtur spre blocul urmtor, de tip pointer.
n figura 7.3. este dat o astfel de reprezentare pentru un fiier
format din 4 blocuri.
Avantaje:
-blocurile unui fiier pot fi mprtiate oriunde n disc cci nu mai
exist condiia de contiguitate;
-fiierul poate crete n dimensiuni pentru c oricnd i se pot aloca
blocuri libere de pe disc;
-accesul secvenial se face relativ uor.
Sorin Adrian Ciureanu 132
Dezavantaje:
- accesul direct se face destul de greu, datorit numeroaselor legturi
ce pot s apar la un moment dat;
- o corupere a lanului de pointere, duce la distrugerea fiierului sau
chiar a ntregului sistem de fiiere.
Acest tip de alocare este specific sistemelor de operare ce folosesc
tabela FAT (File Alocation Table). n tabela FAT un fiier este reprezentat
ca n exemplul din figura 7.4.
Fig. 7.3. Reprezentarea unui fiier cu 4 blocuri. Alocare nlnuit.
Nume fiier Nr. bloc nceput Nr. bloc sfrit
test 29 1234
Fig. 7.4. Reprezentarea unui fiier n tabele FAT.
Sisteme de operare ce utilizeaz alocarea nlnuit, deci tabela FAT,
sunt: MS DOS, WINDOWS 95, WINDOWS 98, OS/2(versiunea 1 i 2).
7.4.1.3. Alocarea indexat
n acest tip de alocare se pun la un loc toi pointerii, ntr-un bloc de
index. Alocarea indexat grupeaz referinele i le asociaz cu un fiier
particular.
Avantaje:
-se realizeaz un acces direct;
-aproape dispare fragmentarea extern:
-este o situaie avantajoas n cazul n care sistemul de operare are
multe fiiere de dimensiune mic.
Dezavantaje:
-implic un cost suplimentar prin accesul la blocul de index.
Bloc
29
Bloc
70
Bloc
29
Bloc
200
Bloc
200
Bloc
1234
Bloc
1234
Zon
date
Zon
date
Zon
date
Zon
date Pointer Pointer Pointer Pointer
Sisteme de operare 133
Alocarea indexat este utilizat n sistemele UNIX, n sistemul cu i-
noduri.
Un i-nod (index nod) conine un cmp de date n care sunt stocate
atributele fiierului respectiv i o legtur spre alt bloc. Fiecrui fiier i
corespunde un i-nod.
Structura unui nod de indexare este dat n figura 7.4.
Fig. 7.4. Structura unui i-nod (nod de indexare).
Aceast implementare permite o indirectare pn la nivel de
trei blocuri.
Adresa indexat unde se gsesc informaiile din fiier poate fi:
-blocul iniial, dac adresa este mai mic dect 10 blocuri;
-blocul urmtor indexat, pentru bloc de indirectare simpl;
-al doilea bloc, dat de blocul urmtor, pentru bloc de indirectare
dubl;
atribute
1
2
3 bloc
4
5
6
7
8
9
9
10
11
12
13
Bloc de indirectare simplu
Bloc de indirectare dublu
Bloc
de
indirectare
triplu
Sorin Adrian Ciureanu 134
-al treilea bloc, dup indirectarea dat de primele 2 blocuri, pentru
bloc de indirectare tripl.
7.4.2. Evidena blocurilor libere
Operaiile de creare, tergere, scriere , efectuate asupra fiierelor,
sunt operaii dinamice, ceea ce necesit, n orice moment, alocare/dealocare
de blocuri pentru fiiere.
Cum se aloc, firesc, blocuri libere n acel moment, este necesar ca
sistemul de fiiere s aib o eviden a blocurilor libere n orice moment.
Cele mai utilizate metode de eviden sunt:
-metoda listei nlnuite;
-metoda hrii de bii;
-gruparea.
n prima metod, blocurile libere din disc sunt organizate ntr-o
structur de list simplu nlnuit.
Operaiile efectuate asupra acestei liste sunt: inserarea de noi noduri,
pentru blocurile libere nou aprute, i tergerea de noduri pentru blocurile ce
au fost ocupate. Aceast list este implementat la o adres dintr-un bloc
dinainte stabilit. Implementare permite o indirectare pn la nivel de trei
blocuri.
Fig. 7.5. Lista simplu nlnuit a blocurilor libere din disc.
Adresa indexat unde se gsesc informaiile din fiier poate fi:
-blocul iniial, dac adresa este mai mic dect 10 blocuri;
-blocul urmtor indexat, pentru bloc de indirectare simpl;
-al doilea bloc, dat de blocul urmtor, pentru bloc de indirectare
dubl;
-al treilea bloc, dup indirectarea dat de primele 2 blocuri, pentru
bloc de indirectare tripl.
Bloc
liber
Bloc
liber
Bloc
liber
Bloc
liber
Sisteme de operare 135
n metoda hrilor de bii, se utilizeaz o structur de hart de bii n
care fiecare bit corespunde unui bloc de pe disc. Un bit 0 nseamn c
blocul este liber iar un bit 1 nseamn c blocul este ocupat.
Aceast metod are avantajul, fa de prima, c harta de bii are o
dimensiune constant, relativ mic. n plus, localizarea unei zone libere de
blocuri cu dimensiune prestabilit se face uor, prin cutarea n hart a unei
secvene de bii 0.
Bl. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Zon de 4
blocuri libere
Fig. 7.6.Hart de bii pentru evidena blocurilor libere pe disc.
n metoda gruprii se folosete o structur care memoreaz zonele
libere din disc, fiecare zon fiind caracterizat prin adresa primului bloc din
zona liber i prin numrul de blocuri.
7.4.3. Eficiena i performana sistemului de
fiiere
Eficiena unui sistem de fiiere depinde n primul rnd de doi factori:
-de algoritmii de alocare a discului, discutai anterior;
- de tipurile de date pstrate n intrarea fiierului din director.
Performana unui sistem de fiiere poate fi mbuntit prin trei
factori:
-disc cache; aceasta nseamn o seciune bine determinat a
memoriei principale, utilizat ca memorie cache a blocurilor de disc cele
mai des utilizate;
-free-behind i read ahead care sunt tehnici de optimizare a
accesului secvenial;
-RAM disc care nseamn declararea unei poriuni de memorie
principal ca un disc virtual.
7.4.4. Fiabilitatea sistemelor de fiiere
Este necesar ca sistemele de fiiere s ofere instrumente care s
permit urmtoarele lucruri:
a)-Evitarea distrugerii informaiei pe disc.
b)-Recuperarea informaiilor n urma unor erori hard sau soft.
1 0 0 0 0 1 1 1 1 0 0 1 0 0 0
Sorin Adrian Ciureanu 136
c)-Asigurarea consistenei sistemului de fiiere.
7.4.4.1. Evitarea distrugerii informaiei pe disc
n acest context, una dintre cele mai importante probleme este
evidena blocurilor defecte (bad blocks). Aceast problem este rezolvat
att la nivel hard ct i la nivel soft.
La nivel hard, pn n anul 1993, era permis unui productor de hard
discuri ca acestea s aib un numr limitat de sectoare defecte, sectoare ce
erau stanate pe hard disc. Dup 1993, standardele internaionale nu au mai
permis productorilor s scoat pe poarta fabricii discuri cu sectoare defecte.
La nivel soft, sistemul de operare, prin intermediul sistemului de
fiiere, are ncorporat un fiier bad bloc n care sunt trecute toate blocurile
defecte ale hard discului. Un bloc situat n acest fiier nu va fi utilizat de
sistemul de fiiere, fiind ignorat. Exist dou tipuri de metode pentru a
determina dac un bloc este defect i pentru a-l trece n fiierul de bad-bloc:
-metode offline;
-metode online.
Metodele offline constau n a rula programe fr ca sistemul de
operare s fie ncrcat, deci a efectua teste independent de sistemul de
operare.
La sistemele mai noi acest lucru se face, de obicei, prin formatarea
lowlevel, cnd se determin blocurile defecte, se trec ntr-o memorie local a
discului i apoi , la ncrcarea SO, ele vor fi trecute n fiierul bad block. La
sistemele mai vechi, cnd nu exista noiunea de formatare a discului, se
treceau teste, se determinau sectoarele defecte i se derutau aceste sectoare,
n sensul c se treceau pe pista de rezerv a discului i nu mai erau
considerate blocuri defecte.
Metodele online se desfoar att timp ct sistemul de operare este
activ. De obicei, sistemul de fiiere are nglobat un program care testeaz
blocurile unui disc i le declar defecte dac este cazul.
7.4.4.2. Recuperarea informaiei n urma unor erori
soft sau hard
Recuperarea unui fiier poate fi fcut prin urmtoarele metode:
-prin mecanisme de back-up;
-prin sisteme jurnalizate.
Un mecanism de back-up nseamn copierea ntregului sistem de
fiiere pe alt periferic dect discul, adic pe band magnetic sau, mai
Sisteme de operare 137
adesea, pe streamer. Aceast operaie de salvare se face periodic, perioada
fiind hotrt de inginerul de sistem, i se numete massive dump sau
periodic dump.
Principalul ei dezavantaj const n timpul lung ce necesit.
Exist i o variant ce necesit timp mai scurt, numit incremental
dump, care const n salvarea pe band sau pe streamer numai a fiierelor ce
au fost modificate de la ultima operaie de salvare.
Sistemele jurnalizate nregistreaz fiecare actualizare a sistemului de
fiiere ca pe o tranzacie. Toate tranzaciile sunt scrise ntr-un jurnal. O
tranzacie este considerat comis atunci cnd este scris n jurnal.
Tranzaciile din jurnal sunt operate asincron n sistemul de fiiere.
Dup ce sistemul de fiiere este modificat, tranzacie este tears din
jurnal. n momentul n care sistemul de fiiere a czut dintr-o eroare de hard
sau soft, se repornete sistemul de operare i tranzaciile din jurnal vor fi,
toate, actualizate.
7.4.4.3, Asigurarea consistenei sistemului de fiiere
Probleme de consisten a sistemului de fiiere apar n cazul n care
unele modificri fcute sistemului de fiiere nu au fost actualizate pe disc.
Verificarea consistenei sistemului de fiiere se face, att la nivel de bloc ct
i la nivel de fiiere, cu ajutorul unor programe utilitare.
Un exemplu de program care verific consistena la nivel de bloc,
din sistemul UNIX, este cel dat n continuare.
C1- indic numrul de apariii ale blocului respectiv n toate i-
nodurile.
C2- indic numrul apariiilor blocului n lista de blocuri libere.
n mod normal trebuie s avem C1+C2=1
Tabelul 7.1. Situaiile anormale care pot s apar n asigurarea
consistenei sistemului de fiiere.
C1 C2 Situaie aprut Corecie
0 0 Se irosete un bloc ce nu va putea fi
alocat
Se face C2 = 1
1 1 Exist riscul ca blocul s fie alocat
mai multor fiiere; pot aprea
suprancrcri de date
Se face C2=0
0 >1 Bloc alocat mai multor fiiere Se face C2=1
>1 0 Blocul este ters ntr-unul din fiiere; Se aloc C1-1
Sorin Adrian Ciureanu 138
el va fi trecut n lista de noduri libere
i, eventual, alocat altui fiier.
Celelalte C1-1 referine la blocul
respectiv vor adresa o informaie
invalid ntruct e posibil ca el s fie
alocat unui fiier nou creat.
blocuri libere n
care se copiaz
coninutul
blocului incorect
adresat.C1-1
dintre referinele
ctre blocul
respectiv vor fi
nlocuite ctre
copiile acestuia.
Pentru verificarea consistenei la nivel de fiier se folosesc dou
contoare, CF1 i CF2. CF1 contorizeaz apariiile fiierului n directorul de
sistem i CF2 contorizeaz numrul de legturi stocat n i-nodul asociat
fiierului respectiv. n mod normal CF1=CF2. Situaiile anormale sunt:
CF1< CF2, fiierul va figura ca fiind adresat chiar dac el a fost ters
din toate directoarele unde figura i irosete un i-nod;
CF1>CF2, se aloc acelai i-nod pentru dou fiiere diferite.
7.4.5. Protecia fiierelor
Este foarte important ca fiecare utilizator s-i defineasc drepturile
de acces asupra propriilor fiiere, preciznd cine le poate accesa i ce
operaie poate efectua asupra lor. Sistemul UNIX are unul din cele mai
eficiente sisteme de protecie a fiierelor. In acest sistem sunt trei tipuri de
utilizatori i proprietari : proprietarul fiierului, utilizatori membri ai
grupului din care face parte posesorul fiierului, ali utilizatori. Se
efectueaz trei tipuri de operaii: citire, scriere i execuie.
Utilizatori, membri
Proprietarul fiierului ai grupului Ali utilizatori
Citire scriere execuie Citire scriere execuie Citire scriere execuie
Fig. 7.7. Implementarea sistemului de protecie n UNIX.
1 1 1 1 0 1 1 0 0
Sisteme de operare 139
Implementarea se face cu un grup de 9 bii, 3 bii de fiecare operaie,
pentru fiecare tip de utilizator. Acest grup de 9 bii este coninut n unul
dintre atributele care se gsesc n i-nodul asociat.
n acest caz proprietarul are toate drepturile asupra sistemului,
utilizatorii membri ai grupului au drept de citire i execuie iar ceilali
utilizatori au doar dreptul de citire.
Metoda utilizat n sistemul WINDOWS este cea a listelor de acces.
Fiecrui fiier i este asociat o list de control de acces (acces control list=
ACL). Lista conine mai multe intrri de control al accesului (acces control
entries =ACE). Fiecare ACE specific drepturile de acces pentru un
utilizator sau grup de utilizatori, coninnd un identificator al acestora, o
descriere a drepturilor i drepturile pe care le confer asupra fiierului,
precum i alte opiuni cum ar fi cea legat de posibilitatea ca un fiier creat
n cadrul unui director s moteneasc drepturile de acces ale acestuia. n
momentul n care un utilizator ncearc s acceseze fiierul, se verific
automat n cadrul listei de control asociate (ACL) dac este vorba de un
acces permis sau nepermis.
7.4.6. Organizarea fiierelor pe disc
7.4.6.1. Organizarea fiierelor n SO ce folosesc FAT
n SO care utilizeaz mecanisme de tip FAT, structura unei intrri de
director este:
Nume
fiier
Extensie Atribute Rezervat Timp Data Numrul
primului
bloc
Principalul dezavantaj al mecanismelor FAT este absena
mecanismului de crearea legturilor la fiiere. Pentru realizarea unor legturi
ar fi necesar ca o aceeai intrare s figureze n dou sau mai multe
directoare, avnd drept consecin duplicarea unor date legate de
poziionarea pe disc, de timpul i dimensiunea fiierului respectiv, ceea ce
poate genera inconsistene.
7.4.6.2. Organizarea n HPFS (High Performance File System)
Aceast organizare utilizeaz pentru descrierea localizrii pe disc a
fiierelor structuri de date de tip arbori B care au principala proprietate de a
avea performane ridicate pentru operaiile de cutare.
Sorin Adrian Ciureanu 140
n aceast organizare discul arat astfel:
-Primele 18 sectoare conin blocul de boot, superblocul, blocul de
rezerv. Aceste blocuri conin informaii despre iniializarea sistemului de
fiiere , gestiunea sistemului i refacerea sistemului dup producerea de
erori.
-Benzi de 8MB, fiecare band avnd asociat o hart de bii de
dimensiunea 2kB n care un bit corespunde unui bloc de 4KB din cadrul
benzii; dac bitul e zero bitul este liber, dac bitul e 1 blocul este alocat.
Hrile de bii sunt situate n mod alternativ la sfritul i la nceputul
benzilor aa nct s se poat face alocri contigue de pn la 16MB. Se las
spaiu ntre fiierele existente i cele nou create n ideea obinerii unor
alocri de blocuri contigue.
Bloc de boot
Superbloc
Bloc rezerv
Banda 1
Bitmap 1
Bitmap 2
Banda 2
Banda3
Bitmap 3

Fig. 7.8. Organizarea benzilor cu hri de bii n sistemul HPFS.


Director
F-nod
Fig. 7.9. Descrierea fiierelor cu F-noduri.
Intrare n director
Antet
Nume fiier
Atribute
Extensie 1
Extensie 7
Extensie 8
Arbore de alocare
Sisteme de operare 141
Pentru descrierea fiierelor se utilizeaz F-noduri.
F-nodurile sunt structuri de date care conin atributele i informaiile
legate de localizarea pe disc a fiierelor. Fiecare F-nod are cel mult 8
extensii. Extensiile sunt entiti distincte, fiecare din ele putnd adresa
blocuri de maxim 16MB.
7.5.6.3. Organizarea n NTFS (New Technology File System)
Fiecare volum NTFS conine un MFT (Master File System) care este
un fiier cu informaii despre fiierele i directoarele de pe volumul
respectiv. MFT este organizat ca o succesiune de nregistrri dintre care
primele 16 sunt utilizate pentru descrierea MFT-ului nsui i pentru
furnizarea informaiei necesare dup situaii de avarie. Urmtoarele
nregistrri din MFT descriu fiierele i directoarele.
7.5. FIIERE N DIFERITE SISTEME
7.5.1. Sisteme de fiiere pentru CD-ROM-uri
Sistemele de fiiere pentru CD-ROM sunt simple, fiind concepute
pentru medii ce pot fi scrise o singur dat. Exist mai puine funcii dect la
sistemele normale, deoarece, fiierele pe CD-ROM neputnd fi terse sau
adugate, nu exist nici mecanismul pentru evidena blocurilor libere. Exist
un sistem de fiiere principal care respect IS09660 i dou extensii: Rock
Ridge i Joiliet.
7.5.1.1. Sistemul de fiiere I S09660
Este un standard adoptat n 1988 i aproape toate CD-ROM-urile
actuale sunt compatibile cu acest standard. Acest standard a urmrit dou
lucruri eseniale:
- s nu depind de sistemul de operare utilizat;
- s nu depind de ordinea din memorie a octeilor.
CD-ROM-urile nu au cilindru ca la hard discuri ci organizat sub
forma unei spirale continue. Spirala este mprit n blocuri de cte 2352
octei. Sunt dou tipuri de blocuri:
-blocuri funcionale (bloc de preambul, bloc de corecie erori etc.);
-blocuri de date (un bloc de date are 2048 octei).
Un CD-ROM, ca suport de muzic, este organizat astfel:
-lead-in (informaii scrise la nceputul compact-discului)
Sorin Adrian Ciureanu 142
-piste cu muzic;
-spaii neutilizate ntre piste;
-lead-aut (informaii scrise la sfritul compact-discului).
Adesea poziia unui bloc n lungul spiralei este exprimat n minute
i secunde. Conversia ntr-un numr de bloc se face innd cont c
1secund=75blocuri.
Structura soft a informaiei n ISO9660 este urmtoarea:
-primele 16 blocuri, cu o structur nedefinit, unde productorul
poate s pun orice, de exemplu un program de iniializare;
-un bloc numit descriptorul de volum principal, care conine
informaii generale despre CD:
-identificatorul de sistem (32bii);
-identificatorul de volum (32 octei);
-identificatorul distribuitorului (128 octei);
-identificatorul preparatorului datelor (128 octei);
-3 fiiere cu: -dimensiunea blocului logic ( 2048)
-numrul de blocuri de pe CD-ROM
-datele de creare i expirare a CD-ROM-ului.
-adresa blocului unde ncepe catalogul rdcin;
-descriptor de volum secundar.
Catalogul rdcin este format dintr-un numr variabil de intrri, de
lungime variabil. Fiecare intrare n catalog este format 10-12 cmpuri,
unele n format ASCII iar altele n cod binar. Cele n cod binar au 2
codificri: format little endian (primul bit, cel mai semnificativ bit),
specific procesoarelor Pentium i format big - endian (ultimul bit, cel mai
semnificativ), specific procesoarelor Sparc.
Formatul unei intrri n catalog este urmtorul:
1 1 8 8 7 1 2 4 1 4-15 1 Sistem
1-lungimea intrrii n catalog
1-lungime nregistrrii de atribute extinse
8-poziia fiierului
8-dimensiunea fiierului
7-data i ora
1- indicator
2-ntreesere
4-numrul compact- discului
1-nume de baz
4-15-nume fiier
1-extensie
-sistem
Sisteme de operare 143
7.5.1.2. Extensia ROCK RIDGE.
Toate extensiile utilizeaz cmpul sistem pentru citirea CD-ROM-
urilor. Celelalte cmpuri rmn la fel ca n ISO9660. Aceast extensie a
aprut pentru a citi fiierele UNIX pe CD-ROM-uri.
Extensiile sunt formate din urmtoarele cmpuri:
PX - atribute POSIX
PN - numere major i minor pentru dispozitive
SL - legturi simbolice
NM nume alternativ
CL locaia copilului
PL locaia printelui
RE relocare
TF indicator de timp
7.5.1.3. Extensia JOLIET.
Este extensia ISO9660 venit din partea Microsoft-ului i aduce
urmtoarele nouti:
-nume lungi de fiiere;
-setul de caractere UNICODE;
-cataloage pe 8 niveluri;
-cataloage cu extensii.
7.5.2. Sistemul de fiiere UNIX
n UNIX structura discului este urmtoarea:
Blocul de
BOOT
Superblocul Lista de i-noduri Blocuri de date
Blocul de boot conine proceduri i funcii pentru iniializarea
sistemului.
Superblocul conine informaii despre starea sistemului de fiiere:
dimensiunea, numrul de fiiere ce pot fi create, adresa spaiului liber de pe
disc, numrul de i-noduri, numrul de blocuri.
Lista de i-noduri este lista tuturor nodurilor index coninute n
sistem, o list linear n care un nod este identificat printr-un indice. Dintre
Sorin Adrian Ciureanu 144
i-noduri, primul din list este destinat gestiunii blocurilor diferite iar al
doilea are directorul de rdcini.
Blocurile de date conin att date utilizator ct i date folosite de
sistemul de fiiere.
7.5.2.1. Sistemul de fiiere rapid Berkley
Acest sistem a adus urmtoarele mbuntiri:
-extinderea numelor fiierelor de la 14 caractere la 256 caractere;
-discul este mprit n grupuri de cilindri, fiecare cu superblocul, i-
nodurile i blocurile proprii; n acest fel se evit cutrile lungi prin
gruprile locale; ori de cte ori este posibil blocurile sunt alocate n grupul
de cilindri ce conine i-nodul;
-s-au introdus dou tipuri de blocuri: de lungime mare i de lungime
mic; n felul acesta fiierele mai mari i mpart aceste blocuri ntr-un mod
mai eficient; desigur, exist o complicare major a codului.
7.5.2.2. Sisteme de fiiere LI NUX
n Linux exist mai multe sisteme de fiiere:
-ext 2
-ext 3
-Reiser FS
-XFS
-JFS
a)Sistemul de fiiere ext 2 nu mai mparte discul n grupuri de
cilindri, ca sistemul Berkeley, ci n grupuri de blocuri, fr a se ine cont
unde cad marginile cilindrilor. Se ncearc mprtierea cataloagelor n mod
egal pe disc. Structura lui ext 2 este dat n figura 7.10.
Fig. 7 10 Structura unui sistem Ext 2.
b) Sistemul de fiiere ext 3 este de fapt versiunea jurnalizat a
sistemului ext 2, oferind informaii de jurnalizare de tip metadat, pentru
BOOT Grup 0
de blocuri
Grup 1
de blocuri
Grup 2
de blocuri
Grup 3
de blocuri
SUPER
BLOC
Descriptor
de bloc
Hart de bii
pe blocuri
Hart de bii
de i-noduri
I-noduri Blocuri de
date
Sisteme de operare 145
recuperri rapide. n plus este o jurnalizare complet i ordonat a datelor.
De asemenea, sistemul ext 3 conine o indexare adiional, B-tree, opiune
de indexare ce ofer o performan bun n aproape toate situaiile.
c) Sistemul Reisert FS este un sistem de fiiere B-tree ce depete
sistemele ext 2 i ext3, pentru fiierele mici (mai mici de 4KO). Ofer o
stabilitate foarte bun i conine jurnalizare de tip metadat.
d)Sistemul XFS este un sistem de fiiere cu jurnalizare metadatat
care are un set de funcionabiliti robuste i este optimizat pentru stabilitate.
Acest sistem este recomandat pentru sistemele de operare Linux care conin
discuri SCSI i sisteme de stocare pe pe fibr optic, i care conin o surs
de alimentare nentreruptibil. Deoarece XFS utilizeaz ntr-un mod agresiv
pstrarea datelor tranzitate n RAM, programele ce nu sunt proiectate corect
pot pierde multe date dac sistemul se oprete n mod neateptat.
e) Sistemul JFS este sistemul de fiiere cu jurnalizare de nalt
performan al IBM. A devenit gata pentru producie i nu exist prea multe
nregistrri pentru a se putea comenta pozitiv sau negativ asupra stabilitii
acestuia n acest moment.
7.5.2.3. Sistemul de fiiere de reea NFS (Network File System)
Vom studia sistemul NFS de la Sun care este utilizat de majoritatea
sistemelor UNIX. Cele trei aspecte prezentate sunt:
-arhitectura NFS;
-protocoalele NFS;
-implementarea NFS.
a)Arhitectura NFS. Ceea ce trebuie s realizeze un astfel de sistem
este: s permit unei mulimi de clieni i servere s partajeze un sistem de
fiiere comun.
Fiecare server de NFS export cataloage spre a fi exploatate de ctre
clieni, la distan. Se export de fapt arborele ntreg de catalog. Lista
cataloagelor exportate se gsete ntr-un fiier, cel mai adesea /etc/exports ,
n aa fel nct aceste cataloage s fie exportate automat atunci cnd este
pornit serverul. Clienii acceseaz cataloagele exportate, montndu-le.
Atunci cnd un client monteaz un catalog, acesta devine parte component
a ierarhiei de cataloage.
Un fiier poate avea nume diferite pentru clieni diferii, datorit
faptului c poate fi montat n locuri diferite n arborii respectivi. Punctul de
montare este n ntregime local pentru clieni. Serverul nu tie locaia de
montare pentru nici unul dintre clieni.
b)Protocoale NFS. NFS utilizeaz dou protocoale client-server.
Sorin Adrian Ciureanu 146
Primul protocol trateaz montarea. Un client poate trimite o cale la
un server i are permisiunea de a monta catalogul n ierarhia sa de cataloage.
Serverul returneaz clientului un identificator de fiier (file handle).
Identificatorul de fiier conine cmpuri care identific unic tipul sistemului
de fiiere, discul, numrul catalogului i informaia de securitate.
Urmtoarele apeluri, ca write i reed, asupra fiierului din
catalogul montat folosesc identificatorul de fiier.
La pornirea sistemului de operare, exist dou posibiliti de montare
a fiierelor: manual i automontare.
Montarea manual se face rulnd fiierul /etc/rc, nainte de a intra n
modul utilizator.
Automontarea permite ca o mulime de cataloage de la distan s fie
asociate cu un catalog local. Nici unul dintre acestea nu este montat la
pornirea clientului. Prima oar cnd este deschis un fiier la distan, SO
trimite un mesaj fiecrui server i primul care rspunde ctig i catalogul
su este montat.
Automontarea are dou avantaje principale:
-dac unul din serverele din /etc/rc este inactiv, atunci este imposibil
s se porneasc clientul fr mari dificulti;
-se obine un grad de toleran la defecte, permindu-se clientului s
monteze o mulime de servere n paralel.
Automontarea este utilizat cel mai des pentru sistemele de fiiere
numai cu citire, care conin fiierele binare ale sistemului.
Al doilea protocol NFS este pentru accesul la fiiere i cataloage. n
general, aproape toate apelurilesistem sunt suportate de NFS, cu excepia lui
open i close , deoarece nu este necesar s se deschid un fiier
nainte de a fi citit i nici s se nchid cnd s-a terminat.
n acest tip de protocol, fiecare mesaj este independent. Avantajul
protocolului const n faptul c serverul nu reine nimic despre conexiunile
deschise ntre apeluri. Dac un server devine nefuncionabil i apoi i
revine, nu se pierde nici o informaie despre fiierele deschise, pentru c nu
exist o astfel de informaie. Un astfel de server care nu reine informaii
despre starea fiierelor se numete fr stare (stateless). Un dezavantaj al
acestui tip de servere este obinerea dificil a semanticii exacte privind
fiierele. Astfel, un fiier poate fi deschis i nchis n aa fel ca celelalte
procese s nu l poat accesa. Atunci cnd un fiier este nchis, blocajele
sunt eliberate. Blocajele nu pot fi asociate cu fiierele deschise i de aceea
NFS necesit un mecanism adiional pentru a trata blocarea fiierelor.
n ceea ce privete protecia fiierelor, NFS utilizeaz mecanismul
standard al UNIX-ului cu biii rwx.
Sisteme de operare 147
Deoareceacest mecanism este depit, se ncearc utilizarea
criptografiei cu chei publice.
c)Implementarea NFS-ului. Se utilizeaz o implementare pe trei
straturi.
Primul strat este stratul apelurilor sistem pentru fiiere, de genul
open, read, write. Se analizeaz apelurile, se verific parametrii i
apoi se apeleaz al doilea strat.
Al doilea strat este stratul sistemului virtual de fiier (VFS). Rolul
su este s menin un tablou cu o intrare pentru fiecare fiier deschis,
analog cu structura i-nodurilor din UNIX. Acestr strat are pentru fiecare
fiier deschis o nregistrare numit V-nod, format din perechea virtual i-
node i i-nod virtual. V-nodurile sunt utilizate pentru a determina dac
fiierul este local sau la distan. Pentru fiierele de la distan sunt puse la
dispoziie suficiente informaii pentru a putea fi accesate iar penttru fiierele
locale sunt reinute sistemul de fiiere i i-nodul.
Al treilea strat este constituit din memorii tampon i din discuri.
Severul utilizeaz memorii tampon pentru date iar clienii utilizeaz dou
memorii tampon: una pentru atributele fiierelor i una pentru datele
fiierelor. Zona tampon a clienilor ajut considerabil la mrirea vitezei, ca
orice memorie cache. Din pcate ea este o memorie de tip incoerent. Pentru
a corecta acest inconvenient sau, cel puin, pentru a-l atenua, se folosesc
diferite metode. Una este metoda cronometrului. n fiecare bloc din zona
tampon exist un cronometru care este setat la 3 secunde, pentru blocuri de
date, i la 30 secunde , pentru blocuri catalog. Dup expirarea acestui timp,
toate blocurile murdare (modificate, scrise) din zona tampon sunt trimise la
server, fiind salvate.
7.5.3. Sistemul de fiiere WINDOWS
n prima variant WINDOWS s-au utilizat sisteme de fiiere FAT-16
i FAT-32 (WINDOWS 95, 96). ncepnd cu WINDOWS NT, s-a trecut la
alt sistem de fiiere, NTFS (NT File System), dat n continuare.
7.5.3.1. Sistemul se fiiere NTFS
Din punct de vedere structural, un fiier NTFS const n fluxuri de
octei, fiecare flux reprezentnd un atribut. Aceste fluxuri pot fi:
-fluxuri mici de octei (numele fiierului, identificatorul fiierului);
-fluxuri mari de octei (datele fiierului).
Sorin Adrian Ciureanu 148
Aceast idee, de fiiere cu fluxuri multiple, a fost implementat la
Apple Mac Intosh, unde fiierele aveau dou fluxuri: de date i de resurse.
n continuare sunt date cteva exemple de de utilizare a fluxurilor
multiple n NTFS:
-un program de editare de imagini ar putea avea fluxul fr nume
pentru imaginea principal i un flux cu nume pentru o versiune
miniaturizat;
-n editarea de text, dac se construiesc dou versiuni, versiunea
temporar este folosit pentru fluxul cu nume i cea final pentru fluxul fr
nume.
n general, fiecare flux de octei are un nume compus din numele
fiierului, dou puncte, un nume de flux, fiecare flux avnd propria
dimensiune i propriul zvor independent de celelalte fluxuri.
Implementarea sistemului de fiiere NTFS. NTFS este un sistem
de fiiere foarte complex, el fiind creat de la zero, nu ca celelalte siteme care
au fost create pe baza MS-DOS-ului. Cele mai importante caracteristici ale
NTFS-ului sunt:
-structura sistemului de fiiere;
-cutarea fiierelor;
-compresia fiierelor;
-criptarea fiierelor.
Structura sistemului de fiiere NTFS. Un volum NTFS, care poate fi
de exemplu o partiie a unui disc, este alctuit din:
-fiiere;
-cataloage;
-fiiere de tip hri de bii;
-alte structuri de date.
Fiecare volum este organizat ca o secven liniar de blocuri, cu
dimensiune fixat, lungimea unui bloc variind ntre 512 octei i 64 KB,
depinznd de dimensiunea volumului. n general, se utilizeaz blocuri de
4KB, deci de dimensiune medie, ntre blocurile mari (eficiente la
transferuri) i blocurile mici (eficiente pentru fragmentarea intern).
Structura de date principal, din fiecare volum, este MFT (Master
File Table), tabela principal de fiiere. Ea sete o secven liniar de
nregistrri cu lungime fix de 1 KB. Fiecare nregistrare din MFT este de
fapt un fiier sau un catalog. O nregistrare conine atributele fiierului
(numele, lista adreselor blocurilor etc).
Un fiier foarte mare are mai multe nregistrri, prima, numit
nregistrare de baz, cuprinde indirectrile ctre celelalte nregistrri.
MFT este i el un fiier, putnd fi plasat oriund n volum.
Sisteme de operare 149
Tab. 7. 1 Structura MFT.
Numr
nregistrare
Nume Descriere
0 $Mft Tabel principal de fiiere
1 $MftMirr Copie MFT
2 $LogFile Fiierul jurnal
3 $Volume Fiierele de tip volum
4 $AttrDef Definiie atribute
5 $ Directorul rdcin
6 $BitMap Harta de bii a blocurilor utilizate
7 $Boot ncrcarea sistemului de operare
8 $Badelus Lista blocurilor diferite
9 $Secure Descriptorul de securitate pentru toate fiierele
10 $Upcase Tabele de conversie a literelor mari
11 $Extend Extensii
12
13
14 Rezervate pentru utilizri ulterioare
15
16
-----------------------------1KB-------------------------------
Primele 16 nregistrri sunt rezervate pentru fiierele de metadate.
Fiecare nregistrare descrie un fiier care are atribute i blocuri de date.
Fiecare fiier are un nume care ncepe cu semnul $ pentru a indica faptul c
este un fiier de metadate.
nregistrarea 0 descrie fiierul MFT, indicnd unde sunt blocurile
fiierului.
nregistrarea 1 este un duplicat al nregistrrii 0, util dac unul din
primele blocuri MFT se defecteaz.
nregistrarea 2 este fiierul jurnal. Toate schimbrile sunt trecute n
jurnal, cu excepia celor care modific datele utilizator.
nregistrarea 3 conine informaii despre volum, cum ar fi
dimensiunea, eticheta, versiunea.
nregistrarea 4 conine atributele fiierelor.
nregistrarea 5 conine fiierul rdcin.
nregistrarea 6 conine harta de bii a blocurilor alocate.
nregistrarea 7 conine informaii despre ncrcarea SO n memorie.
Sorin Adrian Ciureanu 150
nregistrarea 8 este utilizat pentru nlnuirea i evidena blocurilor
diferite.
nregistrarea 9 conine informaia despre securitate.
nregistrarea 10 este utilizat pentru punerea n coresponden a
literelor mari (evident pentru alfabetul latin, dar i mai util pentru alfabetele
mai puin cunoscute ca armean, georgian, grecesc ).
nregistrarea 11 este un catalog care conine diverse fiiere pentru:
cote de disc, identificatori de obiecte, puni de re
Fiecare nregistrare MFT este compus dintrun antet i o secven
de perechi (antet atribut, valoare). Antetul nregistrrii conine: un numr
magic utilizat pentru verificri de validitate, o secven de numere
actualizate de fiecare dat cnd o nregistrare MFT este realizat pentru un
fiier mare, un contor al referinelor la fiier, numrul de octei utilizai din
nregistrare, indicatorul nregistrrii de baz.
NTFS definete 13 atribute care pot prea n nregistrrile MFT.
Aceste atribute sunt:
1.Informaia standard - indicator pe bii, momente de timp.
2.Numele fiierului numele fiierului n UNI CODE.
3.Descriptorul de securitate practic ne mai utilizat; informaiile de
securitate sunt n $Extend$Secure.
4.Lista de atribute locaia nregistrrilor MFT.
5.Identificatorul obiectului un identificator de fiier, pe 64 bii,
unic n volum.
6.Punct de reanalizare utilizat pentru montare i legturi simbolice.
7.Volume numele volumului.
8.Informaii despre volum versiunea volumului.
9.Indexul rdcinii utilizat pentru cataloage.
10. Indexul de alocare utilizat pentru cataloage foarte mari.
11.Hri de bii utilizate pentru cataloage foarte mari.
12.Flux de jurnalizare controleaz scrierea de $LogFile.
13.Date fluxul de date.
Compresia fiierelor. n NTFS compresia fiierelor se face
transparent. Dac fiierul este creat n modul arhivat, atunci se ncearc o
compresie a blocurilor la scrierea fiierului i o decompresie la citire. Acest
lucru, n modul arhivat, se face automat.
Tehnica de compresie este urmtoarea: se ncearc mai nti
compresia primelor 16 blocuri din fiier. Dac rezult 15 sau mai puin,
compresia a reuit, dac rezult tot 16, nu are loc compresie. Procedeul
continu cu urmtoarele 16 blocuri i se termin odat cu ultimele blocuri
din fiier.
Sisteme de operare 151
La decomprimare NTFS trebuie s tie care blocuri din fiier au fost
comprimate i care nu. Acest lucru se realizeaz pe baza adreselor de disc.O
adres de disc 0 nseamn c acea adres a fost partea final a unui grup de
16 blocuri comprimate.
Criptarea fiierelor. SO WINDOWS 2000 marcheaz cataloagele
care vor fi criptate, ceea ce implic ca toate fiiereloe din catalog s fie
criptate. Criptarea i decriptarea nu sunt fcute de NTFS ci de un driver
numit EFS (Encrypting File System) situat ntre HTFS i programele
utilizator. n felul acesta programele aplicaie nu sunt contiente de criptare
iar NTFS este doar parial implicat n ea. Algoritmul utilizat este o variant
a lui DES (Data Encryption Standard) dar arhitectura EFS permite
adugarea de algoritmi noi n viitor.
Sorin Adrian Ciureanu 152
Sisteme de operare 153
Capitolul 8
SISTEME DE OPERARE PENTRU
CALCULATOARE PARALELE
8.1. NOIUNI INTRODUCTIVE
Platformele hardware pentru programare paralel sunt:
-tablouri de procesoare;
-multiprocesoare;
-multicalculatoare;
-reele de calculatoare (staie de lucru n LAN).
n funcie de platformele hardware exist urmtoarele tipuri de
sisteme de operare:
-sisteme de operare n reea, pentru platforme hardware de tip
multicalculatoare;
-sisteme de operare cu multiprocesoare, pentru platforme hardware
de tip multiprocesoare;
-sisteme de operare distribuite, pentru platforme hardware de tip
multicalculatoare.
Denumirea de sisteme de operare distribuite se gsete n literatura
de specialitate, n unele cazuri, pentru toate calculatoarele paralele. n
ultimul timp, ns, s-a impus termenul de distribuit numai pentru
multicalculatoare, astfel nct termenul sisteme de operare distribuite
nseamn sisteme de operare numai pentru multicalculatoare. O alt
problem esenial ntr-un calculator paralel este distribuia sarcinilor ntre
sisteme de operare, programe, compilatoare, problem neclarificat..
Limbajele de programare n calculatoarele paralele pot fi la rndul
lor clasificate n:
-limbaje de programare paralel, pentru programarea prin variabile
partajate, pe multiprocesoare;
-limbaje de programare distribuit, pentru programarea prin transfer
de mesaje.
Sorin Adrian Ciureanu 154
n prezent exist un mare numr de limbaje de programare paralel i
distribuit. Aceste limbaje sunt de dou categorii:
-limbaje paralele i distribuite dezvoltate din limbaje secveniale
uzuale ca: Fortran, Pascal, C; astfel de limbaje sunt limbajele Power
Fortran, Power C, C*.
-limbaje paralele i distribuite noi, scrise special pentru
multiprocesoare i multicalculatoare; astfel de limbaje sunt limbajele
Occam, Orca, Ada, Parlog, SR, Emerald.
O alt clasificare a limbajelor de programare paralele, legat de tipul
compilatoarelor, este:
-limbaje de programare paralel explicite;
-limbaje de programare paralel implicite.
n limbajele de programare paralel explicite, programatorul este
acela cruia i revine sarcina de a descrie algoritmul paralel n mod explicit,
specificnd activitile paralele precum i modul de comunicare i
sincronizare a proceselor sau threadurilor.
n limbajele de programare paralel implicite, compilatorul este
acela care detecteaz paralelismul algoritmului prezentat ca un program
secvenial i genereaz codul corespunztor pentru execuia activitilor
paralele pe procesoarele componente ale calculatorului. Astfel de
compilatoare se mai numesc compilatoare cu paralelizare cci au sarcina de
a paraleliza programul. Dezvoltarea acestor compilatoare este limitat de
dificultatea de a detecta i analiza dependenele n programele complexe.
Paralelizarea automat a programelor este mai uor de executat pentru
paralelismul la nivel de instruciune, n care se distribuie instruciunile unei
bucle, i este mai greu de fcut pentru programele cu o structur neregulat,
care prezint apeluri multiple de funcii, proceduri, ramificaii sau bucle
imperfect imbricate. Un exemplu de astfel de compilatoare este cel al
multiprocesoarelor Silicon Graphics n care se ruleaz Power C i care
includ un analizor de surs ce realizeaz paralelizarea automat a
programelor.
Din punct de vedere al sistemelor de operare intereseaz aspectele
de cuplare ale hardului i softului.
Din punct de vedere al hardului, multiprocesoarele sunt puternic
cuplate iar multicalculatoarele sunt slab cuplate.
Din punct de vedere al softului, un sistem slab cuplat permite
calculatoarelor i utilizatorilor unui sistem de operare o oarecare
independen i, n acelai timp, o interacionare de grad limitat. ntr-un
sistem software slab cuplat, ntr-un grup de calculatoare fiecare are memorie
proprie, hardware propriu i un sistem de operare propriu. Deci
Sisteme de operare 155
calculatoarele sunt aproape independente n funcionarea lor. Un defect n
reeaua de interconectare nu va afecta mult funcionarea calculatoarelor, dei
unele funcionaliti vor fi pierdute.
Un sistem soft puternic cuplat are n componen programe de
aplicaii care interacioneaz mult ntre ele dar i cu sistemul de operare.
Corespunztor celor dou categorii de hardware (slab i puternic
cuplat) i celor dou categorii de software (slab i puternic cuplat), exist
patru categorii de sisteme de operare, dintre care trei au corespondent n
implementrile reale.
8.2. SISTEME DE OPERARE N REEA
Sistemele de operare din aceast categorie au:
-hardware slab cuplat;
-software slab cuplat.
Fiecare utilizator are propriul su workstation, cu un sistem de
operare propriu care execut comenzi locale. Interaciunile care apar nu sunt
puternice. Cel mai des apar urmtoarele interaciuni:
-conectarea ca user ntr-o alt staie, ceea ce are ca efect
transformarea staiei proprii ntr-un terminal la distan al staiei la care s-a
fcut conectarea;
-utilizarea unui sistem de fiiere global, accesat de toate staiile din
reea, plasat intr-una din staii, denumit server de fiiere.
Sistemele de operare din aceast categorie au sarcina de a administra
staiile individuale i serverele de fiiere i de a asigura comunicaiile dintre
acestea. Nu este necesar ca pe toate staiile s ruleze acelai sistem de
operare. Cnd pe staii ruleaz sisteme de operaii diferite, staiile trebuie s
accepte toate acelai format al mesajelor de comunicaie.
n sistemele de operare de tip reea nu exist o coordonare n
execuia proceselor din reea, singura coordonare fiind dat de faptul c
accesul la fiierele nelocale trebuie s respecte protocoalele de comunicaie
ale sistemului.
8.3. SISTEME DE OPERARE CU MULTIPROCESOARE
Aceste sisteme de operare au:
-hardware puternic cuplat;
-software puternic cuplat.
ntr-un astfel de sistem hardul este mai dificil de realizat dect
sistemul de operare.
Sorin Adrian Ciureanu 156
Un sistem de operare pentru sisteme cu multiprocesoare nu difer
mult de fa de un sistem de operare uniprocesor.
n ceea ce privete gestiunea proceselor, faptul c exist mai multe
procesoare hard nu schimb structura sistemului de operare. Va exista o
coad de ateptare unic a proceselor pentru a fi rulate, organizat exact
dup aceleai principii ca la sisteme uniprocesor. La fel, gestiunea
sistemului de intrare/ieire i gestiunea fiierelor rmn practic neschimbate.
Cteva modificri sunt aduse gestiunii memoriei. Accesul la
memoria partajat a sistemului trebuie fcut ntr-o seciune critic, pentru
prevenirea situaiei n care dou procesoare ar putea s aleag acelai proces
pe care s-l planifice n execuie simultan. Totui, de cele mai multe ori,
accesul la memoria partajat trebuie s fie fcut de programator, adic de
cel care proiecteaz aplicaia. Sistemul de operare pune la dispoziie
mijloacele standard (semafoare, mutexuri, monitoare) pentru implementarea
realizrii seciunii critice, mijloace care sunt aceleai ca la sistemele
uniprocesor. De aceea, sistemele de operare pentru multiprocesoare nu
trebuie fundamental tratate altfel dect sistemele de operare pentru
uniprocesoare.
8.3.1. Programarea paralel
n programarea paralel, mai multe procese sau threaduri sunt
executate concurent, pe procesoare diferite, i comunic ntre ele prin
intermediul variabilelor partajate memorate n memoria comun. Avantajele
programrii paralele sunt:
- o vitez de comunicare ntre procese relativ ridicat;
- o distribuie dinamic a datelor;
- o simplitate de partiionare.
8.3.1.1. Memoria partajat ntre procese
Deoarece n programarea paralel memoria partajat joac un rol
important, s prezentm cteva caracteristici ale acesteia.
Am vzut, n capitolele anterioare, c fiecare proces are un spaiu
virtual de procese alctuit din:
-cod;
-date;
-stiv.
Un proces nu poate adresa dect n acest spaiu iar alte procese nu au
acces la spaiul de memorie al procesului respectiv.
Sisteme de operare 157
n memoria partajat, modalitatea prin care dou sau mai multe
procese pot accesa o zon de memorie comun este crearea unui segment de
memorie partajat. Un proces creeaz un segment de memorie partajat
definindu-i dimensiunea i drepturile de acces. Apoi amplaseaz acest
segment n propriul spaiu de adrese. Dup creare, alte procese pot s-l
ataeze i s-l amplaseze n spaiul lor de adrese. Esenial este ca segmentul
de memorie s fie creat n memoria principal comun i nu ntr-una din
memoriile locale.
8.3.1.2. Exemple de programare paralel
Modelul PRAM
Modelul PRAM (Parallel Random Acces Machines) a fost dezvoltat
de Fortane i Willie pentru modelarea unui calculator paralel cu cost
suplimentar de sincronizare i acces la memorie nul. El conine procesoare
care acceseaz o memorie partajat. Operaiile procesoarelor la memoria
partajat sunt:
- citirea exclusiv (Exclusive Read ,ER) ; se permite ca un singur
procesor s citeasc dintr-o locaie de memorie, la un moment dat;
- scriere exclusiv ( Exclusive Write, EW); un singur procesor va
scrie ntr-o locaie de memorie, la un moment dat;
- citire concurent (Concurrent Read, CR); mai multe procesoare pot
s citeasc o locaie de memorie la un moment dat;
- scriere concurent (Concurent Write, CW); mai multe procesoare
pot s scrie ntr-o locaie de memorie la un moment dat.
Combinnd aceste operaii, rezult urmtoarele modele:
EREW, cu citire i scriere concurent; este modelul cel mai restrictiv
n care numai un singur procesor poate s scrie sau s citeasc o locaie de
memorie la un moment dat;
CREW, cu citire concurent i scriere exclusiv; sunt permise accese
concurente doar n citire, scrierea rmnnd exclusiv;
ERCW, cu citire exclusiv i scriere concurent; sunt permise accese
concurente n scriere, citirea rmnnd exclusiv;
CRCW, cu citire i scriere exclusiv; sunt permise accese concurente
de scriere i citire la aceiai locaie de memorie.
Scrierea concurent (CW) se rezolv n urmtoarele moduri:
COMMON PRAM, operaiile de scriere memoreaz aceiai valoare
la locaia accesat simultan.
Sorin Adrian Ciureanu 158
MINIMUM PRAM, se memoreaz valoarea scris de procesorul cu
indicele cel mai mic.
ARBITRARY PRAM, se memoreaz numai una din valori, aleas
arbitrar.
PRIORITY PRAM, se memoreaz o valoare obinut prin aplicarea
unei funcii asociative ( cel mai adesea nsumarea) tuturor valorilor cu care
se acceseaz locaia de memorie.
Algoritmi PRAM
Pentru algoritmii paraleli se folosete un limbaj de nivel nalt (de
exemplu C) la care se adaog dou instruciuni paralele
1) forall<lista de procesare>do
<lista instruciuni>
endfor
Se execut, n paralel, de ctre mai multe procesoare (specificate n
lista de procesoare) unele operaii (specificate n lista de instruciuni).
2) parbegin
<lista de instruciuni>
parend
Se execut, n paralel, mai multe instruciuni (specificate n lista de
instruciuni).
Program paralel de difuziune
Operaia de difuziune (broadcast) const din transmiterea unei date
ctre toate procesele din sistem. Dac exist o dat ntr-o locaie din
memoria partajat, ea va trebui transmis ctre celelalte n procesoare.
Modelul ales este EREW.
Dac procesoarele ar citi fiecare valoare din locaie, pentru n
procesoare, ar rezulta o funcie de tip O(n),deci un timp liniar care este mare
i nu exploateaz posibilitatea de execuie concurent a mai multor
procesoare.
P1 acceseaz x
P2 acceseaz x
Pn acceseaz Xx
rezult
o funcie O(n)
x= locaie de memorie
Fig. 8.1. Program paralel de difuziune (model EREW).
P1
P2
Pn
M
P
X
Sisteme de operare 159
Soluia de difuziune presupune urmtorii pai.
- Se alege un vector a[n[, n fiind numrul de procesoare n memorie
partajat.
- Data de difuzat este a[0] i n memoria local a procesorului P
0
.
-n primul pas , la iteraia j=0, procesorul P
1
citete data din a[0], o
nscrie n memoria local i n vectorul partajat n poziia a[1].
- n al doilea pas, la iteraia j=1, procesoarele P
2
i P
3
citesc data din
a[0] i a[1], o nscriu n memoria local i n locaiile a[2] i a[3].
- n general, n iteraia j, procesoarele i, cu condiia 2
j
i<2
j+1
, citesc
data de difuzat de la locaiile a[i-2
j
], o memorizeaz n memoria local i o
nscriu n vector n locaiile a[i]. Iat un exemplu pentru n=8 procesoare.
Data de difuzat iniial este 100.
Iniial a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
P
0
P
1
P
2
P
3
P
4
P
5
P
6
P
7
Primul pas (iteraia j=0)
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
P
0
P
1
P
2
P
3
P
4
P
5
P
6
P
7
Al doilea pas (iteraia j=1)
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
P
0
P
1
P
2
P
3
P
4
P
5
P
6
P
7
Al treilea pas (iteraia j=2)
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
P
0
P
1
P
2
P
3
P
4
P
5
P
6
P
7
100
100
100 100
100 100
100 100 100 100
100 100 100 100
100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100
Sorin Adrian Ciureanu 160
Deoarece la fiecare iteraie se dubleaz numrul de procesoare care
au recepionat data de difuzat, sunt necesare log
2
n iteraii. ntr-o iteraie j,
sunt active 2
j
procesoare, cele cu indice i avnd 2
j
i<2
j+1
.
Timpul de execuie este estimat de O(log n), deci un timp sublinear.
Iat o implementare a difuziunii ntr-un limbaj formal PRAM, n
EREW:
DIFUZIUNEA:
int n, a[n];
forall(0i<n)do
for(j=0; j<log n; j++)
if(2
j
<=i<2
j+1
)
{citete valoarea din a[i-2
j
];
memoreaz valoarea n memoria local a lui P
i
i n a[i];}
endfor
Program paralel de reducere
Fiind date n valori ca elemente ale unui vector i operaia de
adunare ,+, reducerea este operaia:
a[1]+a[2]+a[3]+.+a[n]
Implementarea secvenial a reducerii este:
for(i=1;i<n;i++)
a[0]+=a[i]
Se observ c rezultatul reducerii se gsete n prima component a
vectorului a[0]. La fel ca i la difuziune, implementarea secvenial duce la
un timp O(n).
Algoritmul paralel de reducere este unul de tip EREW, utiliznd m/2
procesoare. Se consider iniial datele ntr-un vector a[n], pentru
simplificare lundu-se n ca multiplu de doi. Paii sunt urmtorii:
- n primul pas, iteraia j=0, toate procesoarele P
i
(0i<n/2) sunt
active i fiecare adun dou valori a[2i] i a[2i+1] , rezultatul fiind a[2i] ;
- n al doilea pas, iteraia j=1, sunt active procesoarele P
i
, cu i=1 i
i=2, care adun a[2i] cu a[2i+2], rezultatul fiind a[2i] ;
- n general, n iteraia j, sunt active procesoarele cu indice i,
multiplu de 2; fiecare actualizeaz locaia a[2i], deci execut
a[2i]=a[2i]+a[2i+2].
Se observ c numrul de iteraii j este log
2
n , deci avem un timp de
execuie de tip O(log n), un algoritm sublinear.
Sisteme de operare 161
Dm mai jos un exemplu de implementare pentru n=8 .
P0 P1 P2 P3
Iter.
J=0
J=1
J=2
Fig. 8.2. Program paralel reducere (model EREW)
REDUCERE
int n, a[n];
forall(0i<n/2)do
for(j=0;j<log n;j++)
if(i modulo 2
j+1
==0)
a[2i]=a[2i+2
j
];
endfor
8.4. SISTEME DE OPERARE DISTRIBUITE
Aceste sisteme fac parte din categoria
a. hardware slab cuplat (multicalculatoare)
b. software puternic cuplat.
Din punct de vedere hardware, un astfel de sistem, tip
multicalculator, este uor de realizat. Un multicalculator este format din mai
multe procesoare, fiecare procesor avnd propria unitate de control i o
memorie local. Procesoarele sunt legate ntre ele printr-o reea de
comutaie foarte rapid. O astfel de arhitectur hardware prezint o serie de
avantaje:
- adugarea de noi procesoare nu conduce la degradarea
performanelor;
- un astfel de sistem multicalculator permite folosirea mai eficient a
procesoarelor; n general, un utilizator solicit inegal n timp un calculator,
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
a[0] a[2] a[4] a[6]
a[0] a[4]
a[0]
Sorin Adrian Ciureanu 162
existnd perioade n care unitatea central nu este ncrcat i perioade n
care este foarte solicitat (la programe cu calcule foarte multe, de exemplu
la un sistem liniar cu multe ecuaii i necunoscute); ntr-un sistem distribuit
ncrcarea procesoarelor se face mult mai bine, mrindu-se mult viteza de
calcul;
- sistemul poate fi modificat dinamic, n sensul c se pot nlocui
procesoare vechi cu unele noi i se pot aduga unele noi, cu investiii mici,
fr s fie nevoie de reinstalare de soft sau reconfigurare de resurse.
Din punct de vedere al sistemului de operare, ns, lucrurile se
complic. Este foarte dificil de implementat un sistem de operare distribuit.
Sunt de rezolvat multe probleme legate de comunicaie, sincronizare ,
consistena informaiei etc.
Scopul acestor sisteme de operare distribuite este de a crea impresia
utilizatorului c tot multicalculatorul este un singur sistem multitasking i
nu o colecie de calculatoare distincte. De fapt, un multicalculator ar trebui
s aib o comportare de uniprocesor virtual. Ideea este ca un utilizator s nu
fie preocupat de existena mai multor calculatoare n sistem.
Un sistem de operare distribuit trebuie s prezinte anumite
caracteristici:
- s existe un singur mecanism de comunicare ntre procese, astfel
nct fiecare proces s poat comunica cu altul, indiferent dac acesta este
local sau nelocal; mulimea apelurilor sistem trebuie s fie aceeai i tratarea
lor identic;
- sistemul de fiiere trebuie s fie acelai pentru toate staiile
componente, fr restricii de lungime a numelor fiierelor i cu aceleai
mecanisme de protecie i securitate;
- pe fiecare procesor trebuie s ruleze acelai kernel.
Problema esenial care se pune acum n sistemele distribuite este
mprirea sarcinilor ntre sistemul de operare, programatorul de operaii i
compilator. La ora actual nu exist sarcini precise pentru fiecare dintre ele,
lucrurile n acest domeniu fiind noi sau n curs de formare.
n ceea ce privete sigurana n funcionare a unui sistem distribuit,
se poate spune c acesta este mai sigur dect un sistem de operare
centralizat. ntr-adevr, cderea unui procesor dintr-un sistem centralizat
duce la cderea ntregului sistem, pe cnd ntr-un sistem distribuit
procesoarele care dispar pot fi suplinite de celelalte procesoare.
Punctul critic al siguranei de funcionare n sistemele distribuite este
sigurana reelei de interconectare. Se pot pierde mesaje i, n cazul
suprancrcrii reelei de interconectare, performanele scad foarte mult.
Sisteme de operare 163
8.4.1. Structura unui SO distribuit
n sistemele de operare distribuite se folosesc transferuri de mesaje
prin intermediul celor dou primitive de transfer de mesaje send i
receive , primitive care au fost studiate n capitolul Comunicare ntre
procese. Un sistem de operare distribuit (SOD) trebuie s foloseasc numai
aceste primitive. Revine ca sarcin principal gsirea unor modele de
comunicare cu ajutorul crora s se poat implementa un SOD. Principalele
modele de comunicare utilizate n prezent sunt:
a) comunicarea client server;
b) apelul de procedur la distan, RPC(Remote Procedure Call);
c) comunicaia de grup.
8.4.1.1. Comunicarea client-server
Este un model foarte des aplicat n multe domenii. n sistemele de
operare distribuite exist dou tipuri de grupuri de procese cooperante:
-servere, grup de procese ce ofer servicii unor utilizatori;
-clieni, grup de procese care consum serviciile oferite de servere.
cerere
rspuns
Fig. 8.3. Modelul de comunicare client/server.
Att procesele server ct i cele client execut acelai kernel al
sistemului de operare, n timp ce procesele server i client sunt executate n
spaiul utilizator. Exist procese servere specializate n diferite servicii de :
lucru cu fiiere, compilatoare, printare etc. Un proces care face o cerere
ctre un server pentru a solicita un anumit serviciu devine un proces client.
De remarcat c acelai proces sau grup de procese pot s fie, n diferite
momente, att server ct i client.
Avantajul principal al acestui tip de comunicaie este dat de eficiena
i simplitatea execuiei. Comunicaia are loc fr s se stabileasc mai
clieni
Kernel
SO
servere
Kernel
SO
Sorin Adrian Ciureanu 164
nainte o conexiune ntre client i server, clientul trimind o cerere iar
serverul rspunznd cu datele solicitate.
Principalul dezavantaj al acestui model este dat de dificultatea de
programare, deoarece programatorul trebuie s apeleze explicit funciile de
transfer de mesaje.
Comunicarea prin socluri (sokets) n reelele UNIX ce
funcioneaz pe sistemul client-server
Soclurile (Sockets) sunt un mecanism de comunicaie ntre procese
n reelele UNIX introdus de 4.3 BSD ca o extensie sau generalizare a
comunicaiei prin pipes-uri. Pipes-urile faciliteaz comunicaiile ntre
procesele de pe acelai sistem n timp ce socketurile faciliteaz comunicarea
ntre procese de pe sisteme diferite sau de pe acelai sistem.
Proces client Proces server
Reea
Fig. 8.4. Implementarea comunicaiei prin socluri.
Acest subsistem conine trei pri:
-nivelul soclurilor, care furnizeaz interfaa dintre apelurile sistem i
nivelurile inferioare;
-nivelul protocoalelor, care conine modulele utilizate pentru
comunicaie (TCP i IP);
-nivelul driverelor, care conine dispozitivele pentru conectare n
reea.
Comunicarea ntre procese prin socluri utilizeaz modelul client
server. Un proces server (listener) ascult pe un soclu (un capt al liniei de
comunicaie ntre procese) iar un proces client comunic cu serverul la
cellalt capt al liniei de comunicaie , pe un alt soclu care poate fi situat i
pe alt nod.
Nivelul soclurilor
Nivelul protocoalelor
TCP i IP
Nivelul driverelor
Nivelul soclurilor
Nivelul protocoalelor
TCP i IP
Nivelul driverelor
Sisteme de operare 165
Nucleul sistemului de operare memoreaz date despre linia de
comunicaie deschis ntre cele dou procese.
Exemplu de sistem distribuit bazat pe modelul client-server
Sistemul din acest exemplu (fig. 8.5.) are un client, care este
procesul aplicaie, i cteva servere care ofer diferite servicii.
NOD 1 NOD 2
Server Server
de de
comunicaie comunicaie
Fig. 8.5. Exemplu de structur a unui sistem de operare distribuit.
Acest sistem distribuit bazat pe modelul client-server are ase
componente dintre care dou sunt programabile de ctre utilizatori.
1) Serverul de comunicaie este un singur proces n fiecare nod, rolul
su fiind de a asigura comunicarea aplicaiilor de pe acel nod cu restul
sistemului. El asigur independena aplicaiilor fa de localizarea serverelor
de obiecte. Pentru a determina localizarea unui obiect n reea, serverul de
comunicaie interogheaz serverul de nume local.
2) Serverul de nume are rolul de a memora i determina plasarea
managerilor de obiecte din reea. Exist un singur server de nume n fiecare
nod.
3) Serverul tranzaciilor are rolul de a recepiona i trata toate
apelurile de
Inceputtranzacie ,
Sfrittranzacie i
Terminareanormaltranzacie.
Acest server coordoneaz protocolul pentru tranzaciile distribuite.
Exist un singur server de acest fel n fiecare nod.
4) Serverul de obiecte conine module programabile de utilizator, pe
baza unor funcii de baz livrate de biblioteca de funcii. Are rolul de a
implementa operaiile asupra obiectelor partajate i de a rezolva concurena
la nivelul obiectelor. Pot exista oricte servere de obiecte n fiecare nod.
5)Serverele de recuperare asigur, recuperarea tranzaciilor cu
Terminareanormal, Sabotatevoluntar de procesul de aplicaii sau
involuntar la cderea unui nod. Exist cte un server pentru fiecare obiect.
Server de tranzacii
Server de nume
Server de recuperare
Server de obiecte
Proces aplicaii Proces aplicaii
Server de tranzacii
Server de nume
Server de recuperare
Server de obiecte
Sorin Adrian Ciureanu 166
6) Procesele aplicaii sunt scrise de utilizator.
8.4.1.2. Apelul de proceduri la distan
RPC (Remote Procedure Call)
Ideea acestui mecanism de comunicaie este ca un program s
apeleze proceduri care i au locul n alte calculatoare. Se ncearc ca apelul
unei proceduri la distan s semene foarte mult cu apelul unei proceduri
locale, la fel ca n limbajele de nivel nalt studiate. n momentul n care un
proces aflat n procesorul 1 apeleaz o procedur din procesorul 2, procesul
apelant este suspendat din procesorul 1 i execuia sa continu n procesorul
2. Informaia este transferat de la procesul apelant la procedura apelat prin
intermediul parametrilor de apel iar procedura va returna procesului apelant
rezultatul execuiei, la fel ca n cazul unei proceduri locale. n tot acest
mecanism, transferurile de mesaje nu sunt vizibile pentru programator. ntr-
un astfel de mecanism nu pot fi folosii dect parametri de valoare,
parametrii de referin neputnd fi utilizai datorit acheselor diferite ale
memoriei locale, aici neexistnd o memorie comun.
RPC este o tehnic destul de des utilizat n sistemele de operare
distribuite, chiar dac mai exist probleme atunci cnd un calculator se
blocheaz sau cnd exist modaliti diferite de reprezentare a datelor pe
diferite calculatoare.
Fig. 8.6. Schema de principiu a funcionrii RPC.
Kernel client de apeluri
mpachetarea
parametrilor
Despachetarea
rezultatului
CALL
CLIENT
RETURN
KERNEL
SO
CLIENT
Kernel server de apeluri
CALL
SERVER
RETURN
Despachetarea
parametrilor
mpachetarea
rezultatutlui
KERNEL
SO
SERVER
Sisteme de operare 167
Paii executai la apelul unei proceduri la distan pot fi prezentai
astfel:
a) Procedura client apeleaz local kernelul client de apeluri,
transferndu-i parametrii.
b) Kernelul client de apeluri mpacheteaz parametrii primii,
construiete un mesaj pe care l pred kernelului SO client.
c) Kernelul SO client transmite mesajul ctre kernelul SO server i
de aici spre kernelul server de apeluri.
d) Kernelul server de apeluri despacheteaz parametrii i apeleaz
procedura server.
e) Serverul execut funcia i returneaz rezultatul kernelului server
de apeluri.
f) Kernelul server de apeluri mpacheteaz rezultatul, construiete
mesajul pe care l pred kernelului SO server.
g) Kernelul SO server transmite mesajul kernelului client de apeluri.
h) Kernelul client de apeluri despacheteaz rezultatul i-l returneaz
procedurii client apelante.
In comunicarea RPC, aa cum am prezentat-o mai sus, se leag un
singur client de un singur server. Aceast comunicare este de tip sincron. n
ultima vreme se utilizeaz protocoale de tip RPC asincron n care se poate
ca un client s comunice cu mai multe servere simultan. Mecanismele RPC
au fost standardizate de OSF (Open Software Foundation). Exist dou
mecanisme RPC mai cunoscute: NCS, dezvoltat de firma Hewlett Packard
i ONC(Open Network Computing)dezvolat de firma Scan.
Consoriul DEC (Distributed Environement Corporation) a lansat de
asemenea un RPC pe platforma Microsoft. RMI (Remote Method
Invocation) este un apel la distan de tip RPC dar folosind obiectele n
sistemele Java. OSF DCE este un pachet de specificaii (Application
Environement Specification, AES) ale serviciilor utilizabile de ctre o
aplicaie client-server ntr-un mediu distribuit i eterogen. Odat cu
specificaiile DCE, OSF a realizat i un set de produse program care
implementeaz aceste servicii, faciliteaz administrarea lor i simplific
elaborarea, testarea i instalarea aplicaiilor care le utilizeaz. Fiecare
productor are libertatea de a utiliza i adapta produse OSF sau de a ine la
propria sa implementare.
8.4.1.3. Comunicaia de grup
Principalul dezavantaj al mecanismului de comunicare RPC este c
implic o comunicaie unu la unu, adic un singur client cu un singur server.
Sorin Adrian Ciureanu 168
Pentru ca mai muli clieni s comunice cu un server, s-a introdus un
nou tip de mecanism de comunicaie numit comunicaie de grup.
Un grup de comunicaie nseamn o mulime de procese care se
execut ntr-un sistem distribuit, care au proprietatea ca, atunci cnd se
transmite un mesaj grupului, toate procesele din grup le recepioneaz. Este
un tip de comunicaie unu la muli.
Grupurile pot fi clasificate dup mai multe criterii .
a) n funcie de procesele care au dreptul de a transmite un mesaj n
interiorul grupului, pot fi:
-grupuri nchise, n care numai procesele membre ale grupului pot
transmite un mesaj;
-grupuri deschise, n care orice proces poate transmite un mesaj
membrilor grupului.
b)n funcie de drepturile de coordonare a operaiilor n grup, sunt:
-grupuri omogene, n care toate procesele au drepturi egale, nici unul
dintre ele nu are drepturi suplimentare i toate deciziile se iau n comun;
-grupuri ierarhice, n care unul sau mai multe procese au rolul de
coordonator, iar celelalte sunt procese executante.
c) n funcie de admiterea de noi membri n grup, exist:
-grupuri statice, care i pstreaz neschimbate dimensiunea i
componenii de la creare i pn la dispariie; dup crearea unui grup static
nici un proces membru nu poate s prseasc grupul;
-grupuri dinamice, la care se pot ataa procese membre noi sau altele
pot prsi grupul.
d)n funcie de modul de gestionare, pot exista:
-grupuri centralizate, n care un proces, numit server, execut toate
operaiile referitoare la crearea grupurilor, ataarea de noi procese, prsirea
grupului de unele procese etc.; serverul de grup menine o baz de date a
grupurilor, cu membrii fiecrui grup; dezavantajul este c dac serverul se
distruge, toate grupurile i nceteaz activitile;
-grupuri distribuite, n care fiecare proces este rspunztor pentru
ataarea sau prsirea unui grup; cnd un proces se distruge, el nu mai poate
anuna grupul de prsirea sa i trebuie ca celelalte procese s descopere
acest lucru.
Pentru implementarea comunicaiei ntre grupuri, sistemele de
operare pun la dispoziie primitive de gestionare a grupurilor.
O posibilitate mult mai des folosit este aceea de a utiliza biblioteci
de comunicaie care suport comunicaia de grup. Dou dintre cele mai
cunoscute astfel de biblioteci sunt:
-PVM(Parallel Virtual Machine);
Sisteme de operare 169
-MPI(Message Passing Interface).
Biblioteca PVM
PVM (Parallel Virtual Machine) este un pachet de programe
dezvoltat de Oak Ridge National Laboratory, Universitatea Statului
Tenessee i de Universitatea Emory. Proiectul PMV a fost conceput de
Vaidy Sunderam i Al. Geert de la Oak Ridge National Laboratory.
PVM asigur un mediu de lucru unitar n care programele paralele
pot fi dezvoltate eficient utiliznd un mediu hardware deja existent. Se
asigur o transparen n rutarea mesajelor prin reea, n conversia datelor i
n planificarea taskurilor.
n PVM, utilizatorul va scrie aplicaiile ca o colecie de taskuri care
coopereaz. Aceste taskuri vor accesa resursele PVM cu ajutorul unor
biblioteci de rutine de interfa. Rutinele din cadrul bibliotecilor asigur
iniierea i terminarea taskurilor, comunicarea i sincronizarea lor. n orice
punct al execuiei unei aplicaii concurente, orice task n execuie poate
iniia sau termina alte taskuri, poate aduga sau elimina calculatoare din
maina virtual. Utilizatorii pot scrie programe n Fortran sau C, folosind
rutine din PVM. Modelul de programe utilizat este cel cu transfer de mesaje.
Sunt incluse faciliti de asigurare a toleranei la defecte.
Descrierea sistemului PVM
Sistemul PVM are dou componente:
-demonul pvmd;
-biblioteca de rutine PVM.
Demonul pvmd trebuie s existe pe toate mainile care alctuiesc
maina virtual. Acest demon a fost proiectat astfel nct orice utilizator s-l
poat instala pe orice main dac dispune de un login valid. Cnd un
utilizator dorete s ruleze o aplicaie PVM, va trebui s creeze maina i
apoi s o porneasc. O aplicaie PVM poate fi pornit de pe orice calculator.
Mai muli utilizatori pot configura maini virtuale care se pot suprapune i
fiecare utilizator poate executa cteva aplicaii PVM simultan.
Biblioteca de rutine PVM conine un set complet de primitive care
sunt necesare pentru cooperare ntre tastaturi. Exist urmtoarele tipuri de
rutine:
-rutine de trimitere i recepionare a mesajelor;
-rutine de iniiere a tastaturilor;
-rutine de coordonare a tastaturilor;
-rutine de coordonare a mainii virtuale.
Modelul de calcul utilizat se bazeaz pe faptul c o aplicaie este
alctuit din mai multe taskuri, fiecare task fiind responsabil pentru calculul
unei pri a problemei.
Sorin Adrian Ciureanu 170
O aplicaie poate accesa resursele de calcul n trei moduri diferite:
-modul transparent, n care taskurile sunt plasate n sistem prin
maina cea mai potrivit;
-modul dependent de arhitectur, n care utilizatorul poate indica o
arhitectur specific pe care un task poate fi executat;
-modul cu specificare a mainii, n care utilizatorul poate indica o
anume main pe care s se execute un task.
Toate taskurile sunt identificate cu un ntreg numit task identifier
(TID), echivalent PID-ului din sistemele de operare. Aceste TID-uri trebuie
s fie unice n cadrul mainii virtuale i sunt asigurate de demonul pvmd
local. PVM conine rutine care returneaz valoarea TID astfel nct
aplicaiile pot identifica taskurile din sistem. Pentru a programa o aplicaie,
un programator va scrie unul sau mai multe programe secveniale n C, C++,
Fortran++, cu apeluri la rutinele din bibliotecile PVM.
Pentru a executa o aplicaie, un utilizator iniiaz o copie a unui task,
numit task master iar acesta va iniia taskuri PVM care pot fi rulate pe alte
maini sau pe aceeai main cu task masterul. Acesta este cazul cel mai des
ntlnit, dar exist situaii n care mai multe taskuri sunt iniiate de utilizator
i ele pot iniia la rndul lor alte taskuri.
Consola PVM
Consola PVM este un task de sine stttor care permite utilizatorului
s porneasc, s interogheze i s modifice maina virtual. Consola poate fi
pornit i oprit de mai multe ori pe orice gazd din PVM, fr a afecta
rularea PVM sau a altor aplicaii. La pornire, consola PVM determin dac
aceasta ruleaz ; dac nu, se execut pvmd pe aceast gazd. Prompterul
consolei este pvm> .
Comenzile ce se pot aplica pe acest prompter sunt:
add , adaug gazde la maina virtual;
conf , afieaz configuraia mainii virtuale;
(numele gazdei, pvmd tid, tipul
arhitecturii i viteza relativ);
delet
e
, elimin gazde din maina virtual;
halt , termin toate procesele PVM, inclusiv
consola i oprete maina virtual;
id , afieaz identificatorul de task al
consolei;
jobs , afieaz lista taskurilor n execuie;
kill , termin un task PVM;
mstat , afieaz starea gazdelor specificate;
Sisteme de operare 171
pstat , afieaz starea unui task specificat;
quit , prsete consola lsnd demonii i
taskurile n execuie;
reset , termin toate procesele PVM
exceptnd consola;
spawn , pornete o aplicaie PVM.
PVM permite utilizarea mai multor console. Este posibil s se ruleze
o consol pe orice gazd din maina virtual i chiar mai multe console n
cadrul aceleiai maini.
Implementarea PMV
Pentru implementarea PVM s-a inut cont de trei obiective:
-maina virtual s cuprind sute de gazde i mii de taskuri;
-sistemul s fie portabil pe orice maini UNIX;
-sistemul s permit construirea aplicaiilor tolerante la defecte.
S-a presupus c sunt disponibile socluri pentru comunicaie ntre
procese i c fiecare gazd din maina virtual se poate conecta direct la
celelalte gazde, utiliznd protocoale IP(TCB UDP). Un pachet trimis de un
pvmd ajunge ntr-un singur pas la alt pvmd. Fiecare task al mainii virtuale
este marcat printr-un identificator de task (TID) unic.
Demonul pvmd asigur un punct de contact cu exteriorul pentru
fiecare gazd. pvmd este de fapt un router care asigur controlul proceselor
i detecia erorilor. Primul pvmd, pornit de utilizator, este denumit pvmd
master, ceilali, creai de master, sunt denumii slave. n timpul operrii
normale, toi pvmd sunt considerai egali.
Tolerana la defecte este asigurat n felul urmtor:
-dac masterul a pierdut contactul cu un slave, l va marca i l va
elimina din maina virtual;
-dac un slave pierde contactul cu masterul, atunci el se elimin
singur din main.
Structurile de date importante pentru pvmd sunt tabele de gazde care
descriu configuraia mainii virtuale i taskurile care ruleaz n cadrul
acesteia.
Exist urmtoarele biblioteci:
-biblioteca PVM (lib pvm);
-comunicaiile PVM.
Biblioteca PVMconine o colecie de funcii care asigur interfaarea
taskurilor cu pvmd i cu alte taskuri, funcii pentru mpachetarea i
despachetarea mesajelor i unele funcii PVM de sistem. Aceast bibliotec
este scris n C i este dependent de sistemul de operare i de main.
Sorin Adrian Ciureanu 172
Comunicaiile PVM se bazeaz pe protocoalele de Internet IP (TCP
i UDP) pentru a se asigura de portabilitatea sistemului.
Protocoalele IP faciliteaz rutarea prin maini tip poart
intermediar. Rolul su este de a permite transmiterea datelor la maini ce
nu sunt conectate direct la aceiai reea fizic. Unitatea de transport se
numete datagram IP. La acest nivel se folosesc adrese IP care sunt
formate din dou pri:
- prima parte identific o reea i este folosit pentru rutarea
datagramei;
- a doua parte identific o conexiune la un anumit dat n interiorul
reelei respective.
Serviciul de livrare asigurat de IP este de tipul fr conexiune,
fiecare datagram fiind rutat prin reea independent de celelalte datagrame.
UNIX folosete dou protocoale de transport:
-UDP (User Datagram Protocol), un protocol fr conexiune;
-TCP (Transmission Control Protocol), orientat pe conexiune;
caracteristicile TCP-ului constau n transmiterea adresei destinaiei o singur
dat la stabilirea conexiunii, garantarea odinei datelor transmise i
bidirecionalitatea.
n sistemele PVM sunt posibile trei tipuri de comunicaii:
-ntre demonii pvmd;
-ntre pvmd i taskurile asociate;
-ntre taskuri.
a) Comunicaia pvmd-pvmd
Demonii pvmd comunic ntre ei prin socluri UDP. Pachetele vor
avea nevoie de mecanisme de confirmare i directare UDP. Se impun, de
asemenea, limitri n ceea ce privete lungimea pachetelor, ajungndu-se la
fragmentarea mesajelor lungi. Nu s-a utilizat TCP din trei motive:
- o main virtual compus din n maini necesit n(n-1)/2
conexiuni, un numr care ar fi greu de stabilit;
-protocolul TCP nu poate sesiza cderea unei gazde pvmd;
-protocolul TCP limiteaz numrul fiierelor deschise.
b) Comunicaia pvmd-task
Un task comunic cu un pvmd cruia i este asociat prin intermediul
conexiunilor. Taskul i pvmd menin o structur FIFO de pachete, comutnd
ntre citire i scriere pe conexiuni TCP.
Un dezavantaj al acestui tip de conectare este numrul crescut de
apeluri sistem necesare pentru a transfera un pachet ntre un task i un
pvmd.
c) Comunicaie task-task
Sisteme de operare 173
Comunicaiile ntre taskurile locale se realizeaz ca i comunicaiile
pvmd-task. n mod normal, un pvmd nu comunic cu taskurile de pe alte
gazde. Astfel, comunicaiile ce trebuie realizate ntre taskuri de pe gazde
diferite vor folosi ca suport comunicaiile pvmd.
Limitri ale resurselor
Limitrile resurselor impuse de sistemul de operare i de hardul
disponibil se vor reflecta n aplicaiile PVM. Cteva din limitri sunt
afectate dinamic datorit competiiei dintre utilizatorii de pe aceiai gazd
sau din reea. Numrul de taskuri pe care un pvmd le poate deservi este
limitat de doi factori:
- numrul permis unui utilizator de ctre sistemul de operare;
- numrul de descriptori de fiiere disponibili pentru pvmd.
Mrimea maxim a mesajelor PVM este limitat de mrimea
memoriei disponibile pentru un task.
Aceste probleme vor fi evitate prin revizuirea codului aplicaiei, de
exemplu prin utilizarea mesajelor ct mai scurte, eliminarea strangulrilor i
procesarea mesajelor n ordinea n care au fost generate.
Programarea n PVM
Lansarea mainii virtuale PVM se face prin lansarea n execuie a
procesului server master, folosind funcia
pvm-start-pvmd .
Apoi se lanseaz funcia
pvm-setopt
n care se seteaz diferitele opiuni de comunicaie.
Pe procesorul server master trebuie s fie un fiier de descriere a
configuraiei mainii i anume fiierul
h.stfile .
Acesta conine numele staiilor pe care se configureaz maina
virtual, cile unde se afl fiierele executabile, cile unde se afl procesele
server (demonii) de pe fiecare staie, codul utilizatorului i parola.
Configuraia mainii virtuale este dinamic; staii noi n reea pot fi
adugate prin apelul funciei
pvm-addh.sts
Alte staii pot fi excluse prin funcia
pvm-delh.sts
Funcionarea mainii se oprete prin
pvm-halt
Controlul proceselor.
Pentru ataarea unui proces la maina virtual PVM se apeleaz
funcia
Sorin Adrian Ciureanu 174
pvm-mytid
Prin aceast funcie se nroleaz procesul i se returneaz
identificatorul de task TID.
Crearea dinamic de procese noi n maina virtual se face prin
apelul funciei
pvm-spawn
La apelul funciei de mai sus se specific adresa staiei unde vor fi
create procesele noi, chiar PVM-ul putnd selecta staiile unde vor fi create
i lansate procesele noi. De exemplu:
numt=pvm-spawn(my-task,NULL,pvmtaskdefault,0,n-
task,tids);
Se solicit crearea a n-task procese care s execute programul my-task
pe staiile din PVM. Numrul real de procese create este returnat de funcia
numt. Identificatorul fiecrui task creat este depus ntr-un element al
vectorului tids.
Un proces membru al mainii PVM poate prsi configuraia prin
apelul
pvm-exit
sau poate fi terminat de ctre un alt proces care apeleaz funcia
pvm-kill(tid)
Interfaa PVM suport dou modele de programare diferite i pentru
fiecare din acestea se stabilesc condiiile de mediu de execuie . Aceste
modele sunt SPMD(Single Program Multiple Data) i MPMD (Multiple
Program Multiple Data).
n modelul SPMD, n instane ale aceluiai program sunt lansate cu n
taskuri ale unei aplicaii paralel, folosind comanda spwan de la consola
PVM, sau, normal, n cele n staii simultan. Nici un alt task nu este creat
dinamic de ctre taskurile aflate n execuie, adic nu se apeleaz funcia
pvm-spwan. n acest model iniializarea mediului de programare const
n specificarea staiilor pe care se execut cele n taskuri.
n modelul MPMD, unul sau mai multe taskuri distincte sunt lansate
n diferitele staii i acestea creeaz dinamic alte taskuri.
Comunicaiile n maina virtual PVM
n maina virtual PVM exist dou tipuri de mesaje ntre procesele
componente :
- comunicaie punct la punct, adic transferul de mesaje ntre dou
procese;
-comunicaie colectiv, adic difuziunea sau acumulare de mesaje
ntr-un grup de procese.
Comunicaia punct la punct.
Sisteme de operare 175
Pentru transmiterea unui mesaj de ctre un proces A la un mesaj B,
procesul transmitor A iniializeaz mai nti bufferul de transmisie prin
apelul funciei de iniializare:
int pvm-init send(int encode);
Argumentul (encode) stabilete tipul de codare al datelor n
buffer. Valoarea returnat este un identificator al bufferului curent de
transmisie n care se depun datele mpachetate, folosind funcia
pvm-pack
Dup ce datele au fost depuse n bufferul de transmisie, mesajul este
transmis prin apelul funciei
int pvm-send(int tid,int msgtag);
Funcia de transmisie este blocant. Ea returneaz controlul
procesului apelant numai dup ce a terminat de transmis mesajul.
Argumentul tid este identificatorul procesului receptor iar flagul msgtag
este folosit pentru a comunica receptorului o informaie de tip mesaj pe baza
creia receptorul ia decizia acceptrii mesajului i a tipului de prelucrri pe
care trebuie s le fac asupra datelor din mesaj. Valoarea returnat de
funcia pvm-send este
0, transmisie corect
-1, n cazul apariiei unei erori.
Pentru recepia unui mesaj, procesul receptor apeleaz funcia
int pvm-recv(int tid,int msgtag);
Aceast funcie este blocant. Ea returneaz controlul procesului
apelant numai dup terminarea execuiei, deci dup recepia mesajului.
Argumentul tid specific identificatorul procesului de la care se ateapt
mesajul iar argumentul msgtag specific ce tip de mesaj este ateptat.
Recepia se efectueaz numai pentru mesajele care corespund celor dou
argumente sau pentru orice transmitor, dac tid=-1, i orice tip de
mesaj, dac msgtag=-1.Valoarea returnat este identificatorul bufferului
de recepie n care au fost depuse datele recepionate. Din acest buffer datele
sunt extrase folosind funcia de despachetare a datelor
pvm-unpack
n biblioteca PVM exist i o funcie de recepie neblocant
pvm-nrecv
Aceasta returneaz controlul procesului apelant imediat, fr ca
acesta s atepte dac mesajul a fost recepionat.
Comunicaia colectiv n PVM
n sistemul PVM se pot crea grupuri dinamice de procese care
execut sarcini corelate, comunic i se sincronizeaz intre ele. Un proces se
Sorin Adrian Ciureanu 176
poate ataa unui grup, definit printr-un nume unic n maina virtual PVM,
prin apelul funciei
int pvm-joingrup(cher*group-name);
Dac grupul cu numele group-name nu exist, el este creat.
Valoarea returnat este un identificator al instanei procesului n grupul
respectiv, care se adaug identificatorului procesului. Acest identificator
este 0 pentru procesul care creeaz grupul i are cea mai mic valoare
disponibil n grup pentru fiecare proces care apeleaz funcia pvm-
joingroup.
Un proces poate aparine simultan unuia sau mai multor grupuri din
maina virtual. El poate prsi un grup prin apelul funciei
int pvm-lvgroup(cher*group.name);
Dac un proces prsete un grup, fr ca un altul s-l nlocuiasc ,
pot aprea goluri n identificatorii de instan de grup ai proceselor rmase.
Un proces poate obine diferite informaii de grup. Funciile pvm-
getinst, pvm-gettid, pvm-gsize returneaz identificatorul
procesului n grup.
Comunicaia colectiv n maina virtual PVM se desfoar ntre
procesele membre ale unui grup. Funciile de comunicaie colectiv sunt:
-Funcii de difuziune
int pvm-bcast(cher*group-name, int msgtag);
Se difuzeaz asincron mesajul aflat n bufferul de transmisie curent
al procesului apelant cu flagul de identificare msgtag , ctre toate
procesele membre ale grupului cu nume group-name. Procesul apelant
poate fi sau nu membru al grupului. Dac este membru, nu se mai transmite
msg lui nsui.
-Funcia de distribuire
int pvm-scatter(void*my array,void*s-array,
int dim, int type,int msgtag,
cher*group-name,int root);
Un vector de date de tipul type, cu multe s-array i de
dimensiune dim, aflat n spaiul de adres al procesului rdcin, este
distribuit uniform tuturor proceselor din grupul cu numele group-name.
Fiecare proces din grup trebuie s apeleze funcia pvm-scatter
i fiecare recepioneaz o partiie a datelor din vectorul s-array din
procesul rdcin (cu identificatorul root), n vectorul local s-
array.
Funcia de colectare
int pvm-gather(void*g-array,void*myarray,
Sisteme de operare 177
int dim,int type,cher*group-name,
int root);
Se colecteaz toate mesajele cu flagul de identificare msgtag de la
toate procesele membre ale grupului cu nume group-name n procesul
rdcin cu identificatorul root. Colectarea are loc n vectorul de date g-
array, a datelor aflate n fiecare proces n vectorii cu numele group-
name n procesul rdcin (definit de utilizator) cu identificatorul root.
Funcia de reducere
int pvm reduce(int operation,void*myrols,int dim,
int type,int msgtag,cher*groupe-name,
int root);
Se efectueaz operaia de reducere paralel ntre toate procesele
membre ale unui grup. Argumentul operation definete operaia de
reducere. Fiecare proces efectueaz mai nti operaia de reducere a datelor
din vectorul local de date, de tipul type , cu numele myrols, de
dimensiune dim. Valoarea rezultat este transferat procesului rdcin
root n care se va afla valoarea de reducere final.
Funcia de sincronizare ntre procesele membre
int pvm-barrier(cher*group name, int ntasks);
La apelul acestei funcii procesul este blocat pn cnd un numr
ntasks procese din grupul cu numele group-name au apelat funcia
pvm-barrier.
Exemple de programare n PVM
Program de reducere paralel
Am vzut n programarea paralel (pe multiprocesoare) cum se
realizeaz operaia de reducere cnd avem la dispoziie o memorie comun.
S vedem acum cum se face aceast operaie prin transfer de mesaje n pvm.
#includepvm3.h
#define NTASKS 4
int main()
{int mytid,tids(NTASKS-1),groupid,sum,info;
/*se creeaz grupul de comunicaie*/
mytid=pvm-mytid();
groupid=pvm-joingroup(sumex);
sum=groupid;
/*Primul proces creaz celelalte NTASKS-1
procese*/
if(groupid==0)
{info=pvm-spawn(summex,NULL,pvmtasksdefault,
Sorin Adrian Ciureanu 178
*&,NTASKS-1,tids);
printf(groupid=%d spawned%d tasks\n,
groupid,info(;}}
/*se introduce o barier pn ce NTASKS
procese s-au alturat grupului*/
pvm-feeze group(summex,NTASKS);
/*Apelul funciei de comunicaie colectiv
pentru calculul sumei unui grup*/
pvm-reduce(pvm sum,&sum,1,
pvm-INT,1,summex,0);
/*Procesul 0 tiprete rezultatul operaiei de
reducere*/
if(groupid==0) print(sum=%d\n,sum);
/*Sincronizare pentru ca toate procesele s
execute operaia nainte de prsirea grupului i
terminarea programului*/
pvm-barrier(summex,NTASKS))
pvm-evgroup(summex);
pvm exit();
Reducerea paralel se execut pe un numr de procese (taskuri)
definit prin constanta NTASKS care se alege n funcie de numrul de staii
din reea. Fiecare proces ncepe execuia prin obinerea propriului
identificator de task PVM (mytid). Apoi procesul se ataeaz grupului
cu numele summex i obine la ataare identificatorul de instan de grup
(groupid). Procesul master are groupid=0 i creeaz NTASKS-1
procese. Deoarece operaia de reducere paralel nu poate ncepe pn cnd
grupul nu este complet creat, se introduce un punct de sincronizare prin
funcia pvm-freeze group. Aceast funcie oprete creterea
numrului de procese din grupul cu numele group-name la valoarea
size, transformnd grupul ntr-un grup static. Ea are i rolul de
sincronizare i trebuie s fie apelat nainte de execuia unor operaii
colective ntr-un grup., deoarece o astfel de operaie, odat nceput, poate fi
perturbat de apariia unui nou membru n grup. n fiecare proces se execut
reducerea ntr-un vector cu lungimea 1. n variabila sum fiecare proces
memoreaz identificatorul su (mytid) .Dup execuia reducerii paralele,
suma tuturor identificatorilor taskurilor din grup este afiat la consol de
ctre procesul master. Pentru ca ici un proces s nu poat prsi grupul
nainte ca toate procesele grupului s fi terminat operaiile, se introduce un
nou punct de sincronizare, prin apelul funciei pvm-barrier, dup care
Sisteme de operare 179
programul poate fi terminat prin desfiinarea grupului. Toate procesele sunt
detaate din grup prin funcia pvm-lv group i prsesc maina virtual
prin pvm-exit.
Biblioteca MPI (Massage Passing Interface)
MPI este o bibliotec standard pentru construirea programelor
paralele, portabile n aplicaii C i Fortran++, care poate fi utilizat n
situaii n care programul poate fi pariionat static ntr-un numr fix de
procese.
Cea mai mare diferen ntre biblioteca MPI i cea PVM este faptul
c grupurile de comunicaie MPI sunt grupuri statice. Dimensiunea grupului
este static i este stabilit la cererea grupului. n acest fel proiectarea i
implementarea algoritmilor paraleli se face mai simplu i cu un cost redus.
Funciile din MPI sunt asemntoare cu cele din PVM. Dei MPI are
peste 190 de funcii, cele mai des folosite sunt:
MPI-Init() /*iniializeaz biblioteca MPI*/
PMI-Finalize /*nchide biblioteca MPI*/
MPI-Comm-SIZE /*determin numrul proceselor
n comunicator*/
MPI-Comm-rank() /*determin rangul procesului
n cadrul grupului*/
MPI-send() /*trimite un mesaj*/
MPI-recv() /*primete un mesaj*/
Iat mai jos programul de reducere, pe care l-am prezentat n PVM,
implementat n MPI.
#include<mpi.h>
#include<sys/types.h>
#include<stdio.h>
int main()
{int mytid,ntasks,sum;
MPI-Init;
/*Crearea contextului de comunicaie implicit
i obinerea rangului procesului n acest context*/
MPI-Comm-rank(MPI-COMM-WORLD,&mytid=;
/*Aflare dimensiunii grupului de procese*/
MPI-Comm-SIZE(MPI-COMM-WORLD,&ntasks);
if(mytid==0)
printf(mytid=%d,ntasks=%d\n,mytid,ntasks);
/*Calcului local al sumei pariale;suma
parial este egal cu identificatorul procesului*/
Sorin Adrian Ciureanu 180
sum=mytid;
/*Sincronizarea cu toate procesele s fie
lansat*/
MPI-barrier(MPI-COMM-WORLD);
MPI-reduce(MPI-SUM,&sum,1,MPI-INT,1,MPI-
WORLD,0);
/*Rezultatul reducerii se afl n procesor =*/
if(mytid==0)printf(sum=%d\n,sum);
MPI-Finalize();
exit();
}
Definirea mediului de programare paralel n sistemul MPI se face
prin execuia unui program de iniializare care stabilete procesoarele ce vor
rula n MPI. n MPI toate procesele unei aplicaii se creeaz la iniializarea
acesteia. n cursul execuiei unei aplicaii nu pot fi create procese dinamice
i nu poate fi modificat configuraia hardware utilizat.
Comunicaii, grupuri i contexte n MPI
Comunicatorul specific un grup de procese care vor coordona
operaii de comunicare, fr s afecteze sau s fie afectat de operaiile din
alte grupuri de comunicare.
Grupul reprezint o colecie de procese. Fiecare proces are un rang
n grup, rangul lund valori de la 0 la n-1. Un proces poate aparine mai
multor grupuri, caz n care rangul dintr-un grup poate fi total diferit de
rangul n alt grup.
Contextul reprezint un mecanism intern prin care comunicatorul
garanteaz grupului un spaiu sigur de comunicare.
La pornirea unui program, sunt definii doi comunicatori implicii:
-MPI-COMM-WORLD , care are ca grup de procese toate
procesele din job;
-MPI-COMM-SELF, care se creeaz pentru fiecare
proces, fiecare avnd rangul 0 n propriul comunicator.
Comunicatorii sunt de dou feluri:
-intracomunicatori, care coordoneaz operaii n interiorul unui grup;
-extracomunicatori, care coordoneaz operaii ntre dou grupuri de
procese.
Lansarea n execuie se poate face n dou medii:
CRE (Cluster Tools Runtime Environement)
LSF (Lood Sharing Facility)
n mediul CRE exist patru comenzi care realizeaz funcii de baz.
mprun /*execut programe MPI*/
Sisteme de operare 181
mpkill /*termin programele*/
mpps /*afieaz informaii despre
programele lansate*/
mpinfo /*afieaz informaii despre noduri*/
8.4.2. Exemple de sisteme de operare distribuite
8.4.2.1. Sistemul de operare AMOEBA
Sistemul de operare AMOEBA a fost creat de profesorul Andrew
Tanenbaum la Vrije Universiteit Amsterdam. S-au urmrit dou scopuri:
-crearea unui sistem de operare distribuit care s gestioneze mai
multe calculatoare interconectate ntr-un mod transparent pentru utilizator,
astfel nct s existe iluzia utilizrii unui singur calculator;
-crearea unei platforme pentru dezvoltarea limbajului de programare
distribuit ORCA.
AMOEBA ofer programatorilor dou mecanisme de comunicaie:
-comunicaie RPC (Remote Procedure Call);
-comunicaie de grup.
Comunicaia de tip RPC utilizeaz trei primitive:
trans /*un client transmite o cerere
spre server*/
get-request /*severul i anun
disponibilitatea*/
put-reply /*serverul comunic rezultatul
unei cereri*/
Comunicaia de grup asigur ca toate procesele din grup s
primeasc aceleai mesaje i n aceeai ordine. n AMOEBA exist un
proces secveniator care are dou roluri:
- acord numere de ordine mesajelor care circul n grup;
- pstreaz o istorie a mesajelor i realizeaz, atunci cnd este cazul,
o retransmisie a mesajelor care nu au fost transmise.
Transmiterea unui mesaj ctre grup se face n dou moduri, funcie
de lungime mesajului:
-se transmite mesajul ctre secveniator, acesta ataeaz mesajului un
numr de secvene dup care secveniatorul difuzeaz mesajul ctre toate
procesele; fiecare mesaj trece de dou ori prin reea;
-se anun prin difuzare c se dorete transmiterea unui mesaj iar
secveniatorul rspunde prin acordarea unui numr de secvene dup care
Sorin Adrian Ciureanu 182
procesul care a dorit s transmit mesajul face difuzarea acestuia; n acest
caz se difuzeaz mai multe mesaje, fiecare procesor fiind ntrerupt odat
pentru mesajul care solicit numrul de secvene i a doua oar pentru
mesajul propriu zis.
Procesul care transmite mesajul se blocheaz pn primete i el
mesajul, ca orice proces din grup.
Secveniatorul pstreaz o istorie a mesajelor transmise. Procesul
anun secveniatorului numrul de secven al ultimului mesaj recepionat.
Secveniatorul poate, la rndul su, s cear situaia mesajelor de la un
proces care nu a mai transmis de mult vreme nimic. Utiliznd aceste
informaii, secveniatorul poate s i gestioneze n mod corespunztor
istoria.
Structura sistemului de operare AMOEBA
AMOEBA este bazat pe un microkernel care ruleaz pe fiecare
procesor n parte, deasupra cruia ruleaz servere ce furnizeaz servicii.
Microkernelul asigur gestiunea principalelor resurse ale sistemului ce pot fi
grupate n patru categorii.
1)Gestiunea proceselor i threadurilor.
2)Gestiunea de nivel jos a memoriei.
3)Gestiunea pentru comunicaie.
4)Gestiunea operaiilor de intrare/ieire de nivel jos.
1) Procesele reprezint mecanismul care asigur execuia n
AMOEBA. Un proces conine un singur spaiu de adrese. Threadurile (firele
de execuie) sunt interne unui proces i au acces la spaiul de adrese al
procesului.
n AMOEBA un procesor nu are proprietar i de aceea utilizatorul nu
are nici un fel de control asupra procesoarelor pe care ruleaz aplicaiile.
Sistemul de operare ia deciziile plasrii unui proces pe un anumit procesor,
n funcie de diferii factori ca: ncrcarea procesorului, memoria
disponibil, puterea de calcul etc.
Anumite procesoare pot fi dedicate rulrii unor servere care cer
multe resurse, de exemplu serverul de fiiere.
2)Gestiunea memoriei se face prin segmente de lungime variabil.
Acestea sunt pstrate n totalitate n memorie i sunt rezidente n memorie,
adic sunt pstrate tot timpul n memorie. Nu se face swapping cu aceste
segmente. Din aceast cauz dimensiunea memoriei trebuie s fie foarte
mare, Tannenbaum considernd resursa memorie ca una ieftin.
Segmentele de memorie pot s fie mapate n spaiul de adres al mai
multor procese care se execut pe acelai procesor. n felul acesta se
creeaz memorie partajat.
Sisteme de operare 183
3)Gestiunea comunicaiei se face, aa cum a fost prezentat, prin RPC
i comunicaie de grup.
4)Operaiile de intrare/ieire se efectueaz prin intermediul
driverelor. Pentru fiecare dispozitiv exist un driver. Acestea aparin
microkernelului i nu pot fi adugate sau terse dinamic. Comunicaia
driverelor cu restul sistemului se face prin RPC. Deoarece s-a ales o soluie
cu microkernel, serverele sunt acelea care au preluat sarcina vechiului
kernel. Exemple de servere sunt:
-servere de fiiere;
-serverul de boat;
-serverul de execuie;
-serverul de TCP/IP;
-serverul de generare a numerelor aleatorii;
-serverul de erori;
-serverul de mail.
Pentru principalele servere exist apeluri de biblioteci cu ajutorul
crora un utilizator poate accesa obiecte. Exist un compilator special cu
ajutorul cruia se pot crea funcii de bibliotec pentru serverele nou create.
n AMOEBA toate resursele sunt vzute ca nite obiecte. Acestea sunt
entiti ce apar ntr-o nou paradigm de programare. Prin definiie, un
obiect este o colecie de variabile care sunt legate mpreun de un set de
proceduri de acces numite metode. Proceselor nu li se permite accesul direct
la aceste variabile ci li se cere s invoce metode. Un obiect const dintr-un
numr de cuvinte consecutive n memorie (de exemplu n spaiul de adres
virtual din kernel) i este deci o structur de date n RAM.
Sistemele de operare care utilizeaz obiectele, le construiesc aa fel
ca s furnizeze o interfa uniform i consistent cu toate resursele i
structurile de date ca procese, threaduri, smafoare etc. Uniformitatea const
n numirea i accesarea n acelai mod al obiectelor, gestionarea uniform a
partajrii obiectelor ntre procese, punerea n comun a controlorilor de
securitate, gestionarea corect a cotelor de resurse etc.
Obiectele au o structur i pot fi tipizate. Structurarea se face prin
dou pri principale:
-o parte (header) care conine o anumit informaie comun tuturor
obiectelor de toate tipurile ;
-o parte cu date specifice obiectului.
Obiectele sunt gestionate de servere prin intermediul
capabilitilor. La crearea unui obiect, serverul construiete o capabilitate
protejat criptografic pe care o asociaz obiectului. Clientul primete aceast
capabilitate prin care va accesa obiectul respectiv.
Sorin Adrian Ciureanu 184
Principala deficien a sistemului de operare AMOEBA este c nu s-
a creat o variant comercial a lui, din mai multe motive:
-fiind un produs al unui mediu universitar, nu a avut fora economic
s se impun pe piaa IT;
-dei a fost unul dintre primele sisteme de operare distribuite
(proiectarea a nceput n anii optzeci) i dei a introdus multe concepte
moderne, preluate astzi n majoritatea sistemelor de operare distribuite
(microkernelul, obiecte pentru abstractizarea resurselor, RPC, comunicaii
de grup), alte firme au introdus rapid alte sisteme de operare.
8.4.2.2. Sistemul de operare GLOBE
n prezent, profesorul Tanenbaum lucreaz la un nou sistem de
operare distribuit, denumit GLOBE, ale crui prime versiuni au aprut deja.
Este un sistem de operare, creat pentru aplicaii distribuite pe o arie larg,
care utilizeaz obiecte locale sau distribuite. n GLOBE, un obiect este o
entitate format din:
-o colecie de valori ce definesc starea obiectului;
-o colecie de metode ce permit inspectarea i modificarea strii
obiectului;
-o colecie de interfee.
Un obiect local este coninut n ntregime (stare, metode, interfa)
ntr-un singur spaiu de adres.
Un obiect distribuit este o colecie de obiecte locale care aparin unor
spaii de adrese diferite.
Obiectele locale comunic ntre ele pentru a menine o stare global
consistent.
GLOBE are la baz modelul memoriei distribuite partajat, DSM(
Distributed Shared Memory ). Acest model utilizeaz ,in mod paradoxal,
tehnica de memorie partajat, utilizat cu precdere la multiprocesoare , n
sistemele distribuite ce folosesc ca mijloc de comunicare transmisiile de
mesaje. Aceasta, deoarece tehnica memoriei distribuite este mult mai bine
pus la punct , mult mai eficient si mai bine folosit.
n DSM fiecare main are propria memorie virtual i propria
tabel de pagini.
Cnd un procesor execut o instruciune LOAD sau STORE pe o
pagin care nu este n posesia lui, se execut o ntrerupere n sistemul de
operare. Acesta localizeaz pagina i cere procesorului care o deine s
anuleze punerea n coresponden a paginii n memorie i s o trimit pe
reeaua de interconectare.
Sisteme de operare 185
Cnd pagina sosete din reea ea este pus n coresponden din nou.
Ca efect, sistemul de operare trateaz numai erorile de pagin din memoria
de la distan, in loc s utilizeze discul.
GLOBE utilizeaz noiunea de obiect partajat distribuit (distributed
shared object ). Acesta este un obiect replicat, in sensul c exist o mulime
de copii ale obiectului rspndite n ntreg sistemul. Un obiect este alctuit
din clase. O clas conine mai multe metode, metodele conin interfee ale
obiectului.
Exist un mecanism in acest sistem de operare ce utilizeaz un
secveniator al crui rol este de a asigura numere consecutive de secven n
momentul cnd i se cere acest lucru. DE exemplu, pentru metoda scrie
trebuie mai nti s se obin un numr de secven iar apoi s transmit un
mesaj coninnd numrul de secven, numele operaiei, ctre toate celelalte
procese ce au legtur cu obiectul. Dac dou procese apeleaz metoda
simultan, ele au dou numere de secven diferite. Toate procesele apeleaz
metodele n ordinea numerelor de secven primite i nu n ordinea sosirii
mesajelor. Acest secveniator asigur faptul c toate operaiile de scriere
sunt fcute n aceeai ordine n toate replicile obiectului , garantnd
consistena secvenial. Totui nu toate obiectele necesit consisten
secvenial i de aceea nu este nevoie de un secveniator global, la nivelul
tuturor obiectelor. Ideea de baz a acestui model este ca fiecare obiect s
aib toate copiile egale i orice copie s aib dreptul s iniieze actualizri
dup ce a obinuit un numr de secven. Acest protocol se numete
replicare activ. Mai exist i alte protocoale de replicare.
- n al doilea protocol, exist o copie principal numit master i copii
secundare numit slave. Toate actualizrile se fac asupra copiei principale,
urmnd ca aceasta s actualizeze copiile secundare
- Al treilea protocol de replicare const n o singur copie care conine
starea obiectului, toate celelalte fiind simpli intermediari fr stare(stateless
proxy). Cnd este apelat o metod cererea respectiv este transmis copiei
care menine starea obiectului i executat de ctre aceasta.
Principala calitate a sistemului GLOBE este faptul c fiecare obiect
poate avea propria politic de replicare. De asemenea , fiecare obiect poate
avea propria politic n ceea ce privete consistena, crearea, tergerea i
securitatea replicilor. Aceste lucruri sunt posibile deoarece aceste politici
sunt manevrate n cadrul obiectului, independent de utilizatori i
administratorii de sistem.
Implementarea unui obiect GLOBE necesit nite subobiecte din
care este compus obiectul iniial. Aceste subobiecte sunt :
c. Subobiectul responsabil de control
Sorin Adrian Ciureanu 186
d. Subobiectul responsabil cu replicarea
e. Subobiectul responsabil cu securitatea
f. Subobiectul care se ocup cu semantica
g. Subobiectul responsabil cu comunicarea
Subobiectul responsabil de control accept invocri ale metodelor
sale i folosete subobiectele pentru a le efectua.
Subobiectul responsabil cu replicarea coordoneaz replicarea ,
avnd rolul de a comuta ntre diferite protocoale de replicare.
Subobiectul responsabil cu securitatea are rolul de alege politica de
securitate adecvat( capabiliti,liste de acces).
Subobiectul care se ocup cu semantica are rolul de a efectua toate
cererile ctre interfaa obiectului.
Subobiectul responsabil cu comunicarea are rolul de a schimba
protocoalele de reea, de exemplu IPv5 cu IPv6.
Cnd o metod a obiectului este apelat, codul indicat de interfa se
afl n subobiectul de control, acesta apelnd subobiectul de replicare. Dac
este replicarea activ , subobiectul de replicare anun toate replicile s
execute efectiv cererea prin subobiectul de semantic. Dac obiectul este n
replicare master-slave, se trimite un mesaj la master. Verificrile de
securitate sunt executate de subobiectul de securitate, la anumite momente
de timp, fcndu-se diferite verificri specifice. Un element cheie n
GLOBE este serviciul de localizare care permite obiectelor s fie gsite
oriunde n lume., acest serviciu fiind organizat ca un arbore.
Sisteme de operare 187
Capitolul 9
SECURITATEA SISTEMELOR DE
OPERARE
9.1. NOIUNI INTRODUCTIVE
Termenul de securitate, ntr-un sistem de operare, implic noiuni
multiple i complexe legate de foarte multe aspecte. Este greu de limitat
partea din aciunea de securitate ce revine sistemului de operare, deoarece
aceasta este o chintesen a hardului, programrii, tehnicilor de programare,
structurilor de date, reelelor de calculatoare etc. De aceea vom ncerca s
tratm n general problemele de securitate, insistnd asupra celor legate
strict de sistemul de operare.
Din punctul de vedere al sistemului de calcul i, implicit, al
sistemului de operare, exist trei concepte fundamentale de securitate care
reprezint n acelai timp i obiective generale de securitate:
-confidenialitatea;
-integritatea;
-disponibilitatea.
Confidenialitatea se refer la accesul datelor, adic la faptul c
anumite date, considerate secrete, nu trebuie s fie accesate de utilizatori
neautorizai. Proprietarii datelor au dreptul s specifice cine are acces la ele
iar sistemul de operare trebuie s impun aceste specificaii. Principala
ameninare este expunerea datelor iar n momentul n care datele sunt
accesate de persoane neautorizate are loc o pierdere a confidenialitii.
Integritatea se refer la faptul c datele pot fi modificate numai de
utilizatori autorizai; n caz contrar, adic atunci cnd un utilizator
neautorizat modific nite date, are loc o pierdere de integritate. Principala
ameninare, n acest caz, este coruperea datelor.
Disponibilitatea se refer la faptul c datele sunt accesibile pentru
utilizatorii autorizai la un moment dat. Atunci cnd datele nu sunt
disponibile, este vorba de refuzul serviciilor (denial of service).
Sorin Adrian Ciureanu 188
Alte dou concepte din securitatea sistemelor de calcul sunt legate de
dreptul unor utilizatori la accesul de date:
-autentificarea;
-autorizarea.
Autentificarea nseamn operaiunea de demonstrare c un utilizator
are identitatea declarat de acesta, operaiune ce presupune solicitarea unor
informaii suplimentare de la utilizatorul respectiv.
Autorizarea reprezint constatarea dreptului unui utilizator de a
efectua anumite operaii.
Cele mai rspndite forme de autentificare sunt:
-autentificarea prin parole;
-autentificarea provocare-rspuns;
-autentificarea ce folosete un obiect fizic;
-autentificarea ce folosete date biometrice.
Autentificarea prin parole este una dintre cele mai rspndite forme
de autentificare n care utilizatorul trebuie s tasteze un nume de conectare
i o parol. Este o form de autentificare uor de implementat.
Cea mai simpl implementare const dintr-o list n care sunt stocate
perechi de nume-parol. Aceast list este pstrat de sistemul de operare
ntr-un fiier de parole stocat pe disc. Stocarea poate fi:
-necriptat;
-criptat.
Soluia necriptat este din ce n ce mai puin utilizat, deoarece ofer
un grad de securitate redus, prea muli utilizatori avnd acces la acest fiier.
Soluia criptat utilizeaz parola drept o cheie pentru criptarea unui
bloc fix de date. Apoi programul de conectare citete fiierul cu parole, care
este de fapt o sum de linii scrise n alfabetul ASCII, fiecare linie
corespunznd unui utilizator. Dac parola criptat coninut n acea linie se
potrivete cu parola introdus de utilizator, criptat i ea, atunci este permis
accesul.
O mbuntire a acestei soluii este utilizarea parolelor de unic
folosin, cnd utilizatorul primete un caiet ce conine o list de parole. La
fiecare conectare se folosete urmtoarea parol din list. Dac un intrus
descoper vreodat o parol, o poate folosi doar o singur dat, la
urmtoarea conectare trebuind alt parol.
O schem elegant de generare a unor parole de unic folosin este
schema lui Lamport, elaborat n 1981. Dac n este numrul de parole de
unic folosin, atunci se alege o funcie unidirecional f(x), cu y=f(x) i
proprietatea c fiind dat x este uor de gsit y dar fiind dat y este foarte greu
de gsit x.
Sisteme de operare 189
Dac prima parol secret este p, atunci prima parol de unic folosin este
dat de legea:
Parola
1
=P
1
=f(f(f(f(s))) )
n ori n ori
Parola
2
=P
2
=f(f(f(f(s))) )
n-1 ori n-1 ori
.
.
.
Parola
n
=P
n
=f(s)
Dac P
i
(cu 1 i n) este o parol de unic folosin la a i-a
alegere, atunci:
P
i-1
=f(P
i
)
Cu alte cuvinte, se poate calcula uor parola anterioar dar nu este
nici o posibilitate de a calcula parola urmtoare.
Autentificarea provocare-rspuns const ntr-o serie de ntrebri puse
utilizatorului, fiecare ntrebare avnd un rspuns. Toate rspunsurile la
ntrebri sunt stocate n sistemul de operare. Dup compararea rspunsurilor
se permite sau nu conectarea utilizatorilor.
O alt variant este folosirea unui algoritm care s stea la baza
acestui rspuns. Utilizatorul alege o cheie secret, c, pe care o instaleaz pe
server. n momentul conectrii, serverul trimite un numr aleatoriu, a, spre
utilizator. Acesta calculeaz o funcie f(a,c) unde f este o funcie cunoscut,
pe care o retrimite serverului. Serverul verific dac rezultatul primit napoi
se potrivete cu cel calculat.
Avantajul acestei metode este acela c, chiar dac tot traficul dintre
server i utilizator este interceptat de un intrus, acest lucru nu i va permite
intrusului s se conecteze data viitoare. Funcia f trebuie s fie suficient se
complex, astfel nct c s nu poat fi dedus, avnd un numr foarte mare
de eantioane de trafic.
Autentificarea ce folosete un obiect fizic. Dac n autentificarea
provocare-rspuns se verific ceea ce utilizatorii tiu, n autentificarea ce
folosete obiecte fizice se verific nite caracteristici fizice ale utilizatorilor.
Obiectele fizice cele mai folosite sunt cartelele care pot fi de mai
multe feluri:
-cartele magnetice;
-cartele electronice;
-cartele inteligente.
Cartelele magnetice stocheaz informaiile sub form magnetic,
existnd senzori magnetici care au rolul de citire/scriere. Senzorii magnetici
Sorin Adrian Ciureanu 190
sunt foarte diferii: magnetostrictivi, cu efect Hall, cu magnetoimpedan
etc. De obicei, n aceste cartele sunt stocate parole. Din punct de vedere al
securitii, cartelele magnetice sunt destul de riscante deoarece senzorii
magnetici utilizai sunt ieftini i foarte rspndii.
Cartelele electronice au la baz senzori electronici care nseamn toi
senzorii electrici afar de cei magnetici.
Cartelele inteligente au la baz un microprocesor, de obicei simplu,
pe 8 bii. Ele utilizeaz un protocol criptografic, bazat pe principii
criptografice pe care le vom studia n capitolul urmtor.
Autentificarea ce folosete date biometrice se bazeaz pe folosirea
unor caracteristici fizice ale utilizatorilor, numite date biometrice, i care, de
obicei, sunt unice pentru fiecare persoan. Astfel de date biometrice pot fi:
amprentele digitale, amprentele vocale, tiparul retinei etc. Un astfel de
sistem de autentificare are dou pri:
-nrolarea;
-identificarea.
nrolarea const din msurarea caracteristicilor utilizatorului, din
digitizarea rezultatelor i din stocarea lor prin nregistrare ntr-o baz de date
asociat utilizatorului i aflat n sistemul de operare.
Identificarea const din msurarea, nc odat, a caracteristicilor
utilizatorului care vrea s se conecteze i din compararea lor cu rezultatele
culese la nrolare.
Problema esenial n acest tip de autentificare este alegerea
caracteristicilor biometrice, caracteristici care trebuie s aib suficient
variabilitate, nct sistemul s poat distinge fr eroare dintre mai multe
persoane.
O caracteristic nu trebuie s varieze mult n timp. Vocea unei
persoane poate s se schimbe n timp, mai ales la persoanele instabile psihic,
deci aceast caracteristic nu ofer o stabilitate temporal.
O caracteristic biometric din ce n ce mai mult utilizat n ultimul
timp, tocmai datorit unei bune stabiliti temporale, este tiparul retinei.
Fiecare persoan are un diferit tipar de vase de snge retinale, chiar i
gemenii. Aceste tipare pot fi fotografiate cu acuratee.
9.2.ATACURI ASUPRA SISTEMULUI DE OPERARE I
MSURI DE PROTECIE MPOTRIVA LOR
Exist numeroase tipuri de atacuri asupra unui sistem de operare i,
implicit, mai multe clasificri. O clasificare a atacurilor const n:
Sisteme de operare 191
-atacuri din interiorul sistemului;
-atacuri din exteriorul sistemului.
Atacurile din interior sunt svrite de utilizatori deja autorizai iar
atacurile din exterior sunt executate, de cele mai multe ori, prin intermediul
unei reele de calculatoare.
Vom prezenta, n continuare, principalele atacuri ce se pot executa
asupra unui sistem de operare.
9.2.1. Depirea zonei de memorie tampon (Buffer
Overflow)
De multe ori, spaiul de memorie alocat unui program se dovedete a
fi insuficient i se depete acest spaiu, informaiile fiind stocate la o alt
adres. Acest tip de atac este un atac din interiorul sistemului i poate fi
intenionat sau nu.
Un caz tipic de atac neintenionat este cel al programatorului n
limbajul C, care lucreaz cu vectori n memorie i care nu face, prin
program, verificarea limitelor de vectori. Limbajul C este unul flexibil, chiar
prea flexibil, iar compilatorul de C nu face verificarea limitelor vectorilor,
lsnd acest lucru n seama programatorilor.
Modul de combatere a acestui atac se face prin utilizarea de tehnici
de programare corecte care s verifice eventualele depiri ale dimensiunilor
zonelor de memorie alocate dar i prin instalarea de versiuni actualizate ale
pachetelor de programe.
9.2.2. Ghicirea parolelor (Password guessing)
Acest atac nseamn ncercarea de aflare a unor parole. De obicei se
utilizeaz un program creat de ctre CRACKERI (sprgtori de parole),
program care, printr-o analiz comparativ, poate determina o
coresponden ntre variantele presupuse criptate. Cel mai simplu program
de spargere a parolelor este generarea de cuvinte pn se gsete unul care
s se potriveasc. Cuvintele sunt generate fie prin permutri de componente
fie prin utilizarea cuvintelor unui dicionar. Dac parolele sunt criptate
atunci mecanismele de decriptare sunt mai diferite.
Modalitile de protecie mpotriva atacului de ghicire a parolelor
sunt:
-utilizarea sistemului shadow , pentru ca fiierul de parole s nu
poat fi accesat de utilizatori;
Sorin Adrian Ciureanu 192
-impunerea pentru utilizatori a unor reguli stricte la schimbarea
parolelor;
-educarea utilizatorilor , n sensul c acetia trebuie s respecte nite
reguli fixe de stabilirea parolelor;
-folosirea periodic a unui program sprgtor de parole, pentru a
verifica complexitatea acestora, i atenionarea utilizatorilor respectivi.
9.2.3. Interceptarea reelei (IP sniffing)
Acest atac const n monitorizarea informaiilor care circul printr-o
interfa de reea, pentru detectarea eventualelor parole necriptate.
Programele care efectueaz interceptarea traficului din reea se numesc
sniffere. Se utilizeaz un interceptor de reea i apoi se face captarea
traficului ntr-un fiier. Deoarece viteza reelelor a crescut mult n ultimul
timp, fiierul n care se intercepteaz reeaua devine foarte mare n scurt
timp, putnd umple ntreg hard discul. Din aceast cauz se obinuiete s
se capteze primele sute de octei ai pachetelor, unde, cu mare probabilitate,
se va afla numele i parola utilizatorului.
Este un atac din interior i se efectueaz asupra parolei. De aceea
mijlocul de combatere cel mai obinuit trebuie s fie criptarea parolelor. O
alt metod de protecie este segmentarea reelei n mai multe subreele,
utilizarea switch-urilor fiind indicat.
9.2.4. Atacul de refuz al serviciului
(Denial Of Service)
Prin aceste atacuri se degradeaz sau se dezafecteaz anumite
servicii ale sistemului de operare. n reelele de calculatoare, de exemplu,
exist bombardamentul cu pachete, cunoscut ca PACKET FLOOD care
const n transmiterea ctre un calculator int un numr foarte mare de
pachete de date, avnd ca rezultat ncrcarea traficului n reea. Uneori se
poate ajunge chiar la blocarea reelei.
Atacul poate proveni de la singur surs (DOS= Denial Of Service)
sau de la mai multe surse (DDOS=Distributed Denial Of Service), caz mai
rar ntlnit. Exist trei tipuri de bombardamente cu pachete:
a) TCP - Bombardamentul se face n protocolul TCP (Transmission
Control Protocol), iar un flux de pachete TCP sunt trimise spre int.
b) ICMP - Acest atac se mai numete PING FLOOD i utilizeaz
pachete ICMP.
Sisteme de operare 193
c)UDP Bombardamentul se realizeaz, cu un flux de pachete UDP
(User Datagram Protocol) trimise spre int.
Pentru a deruta filtrele de pachete existente n interiorul fiecrei
reele, n bombardarea cu pachete exist programe speciale care modific
atributele pachetelor trimise.
Exemple:
-se modific adresa IP-surs, (IP-Spoofing = falsificarea adresei IP),
pentru a ascunde identitatea real a pachetelor;
-se modific portul sursei sau destinaiei;
-se modific alte valori ale atributelor din antetul pachetelor IP.
Exemple de bombardamente cu pachete, pentru ncrcarea traficului.
-Atacul SYN-flood. Se trimit pachete care au numai bitul de SYN
setat. n felul acesta se deschid multe conexiuni care sunt incomplete.
Deoarece fiecare conexiune trebuie prelucrat pn la starea final, se va
depi timpul admis, se va declara time-aut i sistemul se va bloca.
- Atacul smarf. Este un atac de tipul ICMF mpotriva unei inte care
este adresa broadcast a reelei. Atacul se face cu adres surs IP modificat
i va duce la generare de trafic suplimentar.
- Atacul fraggle. Este un atac cu pachete UDP avnd ca int portul
7 al adresei broadcast al reelei. n felul acesta un singur pachet va fi
transmis ntregului segment al reelei.
Exemple de bombardamente cu pachete, n vederea unor
vulnerabiliti ale serviciilor reelei.
- Atacul tear-drop. Acest atac exploateaz protocolul TCP pentru
fragmentele IP suprapuse ce nu sunt gestionate corect, adic cele care nu
verific corectitudinea lungimii fragmentelor.
- Atacuri land craft. Se trimit pachete SYN ce au adresa sursei
identic cu adresa destinaie, deschiznd astfel o conexiune vid.
- Atacuri ping of death. Se trimit pachete ICPM de dimensiuni
foarte mari, ce depesc lungimea standard de 64 kB, ct permite ICPM,
depirea acestei valori ducnd la disfuncii ale stivei de comunicaie.
- Atacuri naptha. Acest atac const n deschiderea unui numr mare
de conexiuni i abandonarea lor n diferite stri. La un moment dat se ajunge
la refuzul serviciilor de reea a calculatorului int.
Modalitile de prevenire a atacurilor de tip DOS sunt:
- utilizarea unor versiuni ct mai recente ale sistemului de operare;
-implementarea mecanismului SYNCOOKIES care const n
alegerea particular ale numerelor iniiale de secven TCP, n aa fel ca
numrul iniial de secven din server s creasc puin mai repede dect
numrul iniial de secven de pe client;
Sorin Adrian Ciureanu 194
-separarea serviciilor publice de cele private, utilizate n interiorul
reelei;
-utilizarea de IP separate pentru fiecare serviciu n parte (HTTP,
SMTP,DNS..);
-instalarea unei conexiuni de siguran care s preia traficul extern n
cazul unui atac PACKET FLOOD;
-instalarea de firewall-uri la nivel de pachet, pentru serviciile care
nu se utilizeaz n mod curent;
-dezactivarea serviciilor ce nu sunt necesare;
-separarea Intranetului de Internet.
9.2.5. Atacuri cu bomba e-mail
Acest atac const din trimiterea repetat a unui mesaj ctre aceeai
int. Principala metod de protecie este refuzul mesajului primit de la
utilizatorul respectiv.
Un alt atac de tip e-mail este atacul SPAM (e-mail spamming).
Acest atac este un atac mai nou n care se trimit mesaje nesolicitate, de cele
mai multe ori de tip reclam, de ctre un expeditor care utilizeaz o adres
fals.
9.2.6. Falsificarea adresei expeditorului
(e-mail spoofing)
Este un atac care const din recepionarea de ctre utilizator a unui e-
mail care are adresa expeditorului diferit de cea original. Este utilizat, n
general, pentru a ascunde adresa atacatorului.
Aceast modificare a adresei expeditorului este favorizat de faptul
c protocolul de transport al mesajelor, utilizat n reele, (SMTP=Simple
Mail Transfer Protocol), nu prevede nici un sistem de autentificare.
Prevenirea acestui tip de atac poate fi fcut prin diferite metode:
-utilizarea criptografiei pentru autentificare;
-configurarea serverului de e-mail pentru a refuza conectarea direct
la portul SMTP sau limitarea accesului la el;
-stabilirea unui singur punct de intrare pentru e-mail-ul primit de
reea, permindu-se astfel concentrarea securitii ntr-un singur punct
precum i instalarea unui firewall.
Sisteme de operare 195
9.2.7. Cai troieni (Trojan horses)
Caii troieni informatici sunt programe care se ascund sub forma unor
fiiere executabile obinuite. Odat ptruni ntr-un fiier, gazda poate
efectua orice operaie.
Exemple:
-aplicaiile denumite vduva neagr (black widow) de pe www
care acioneaz asupra browserelor web, blocndu-le sau deteriorndu-le;
-caii troieni instalai n scriptul CGI , care deterioreaz scriptul.
Ca mijloace de lupt mpotriva cailor troieni se recomand realizarea
periodic de copii de siguran a sistemelor de fiiere, pentru a putea
restaura fiierele executabile originale n cazul alterrii acestora.
9.2.8. Ui ascunse (Back dors and traps)
Sunt cazuri particulare de cai troieni. Se creeaz o U care de fapt
este un utilizator nou i care permite acordare de privilegii speciale unui
anumit utilizator.
9.2.9. Virui
Un virus este o secven de cod care se autoinsereaz ntr-o gazd,
inclusiv n sistemul de operare, pentru a se propaga. Aceast secven de
cod, neputnd rula independent, apeleaz la execuia programului gazd
pentru a se putea activa.
Crearea virusului a pornit de la o idee a profesorului Cohen, la
nceputul anilor 80, care, ntr-un articol, explica c s-ar putea crea secvene
de cod-program care s provoace anumite daune.
Primii virui sunt consemnai n istoria informaticii n 1987, n
Pakistan. De atunci i pn n prezent viruii au cunoscut o dezvoltare
spectaculoas, fiind principalii actori ai atacurilor din afara sistemului.
Dac n anii 80 o eroare a unui sistem de calcul avea cauza principal n
redusa fiabilitate hard, astzi majoritatea erorilor sunt cauzate de virui.
Trebuie remarcat c, la ora actual, exist o larg rspndire a
viruilor n sistemul de operare WINDOWS i o rspndire foarte mic,
chiar nul, n sistemele de operare de tip UNIX. Faptul c sistemele de
operare UNIX nu sunt vulnerabile la virui se datoreaz gestiunii stricte a
memoriei i a proceselor ce se execut.
Sorin Adrian Ciureanu 196
Chiar dac un virus reuete s ptrund n sistemul UNIX,
posibilitatea lui de replicare este extrem de redus.
Lupta contra viruilor este astzi una dintre cele mai importante
probleme. Ca i n cazul virusului biologic, ideal ar fi ca virusul informatic
s fie evitat. Pentru aceasta ar trebui respectate anumite reguli importante
cum ar fi:
-alegerea unui sistem de operare cu un nalt grad de securitate;
-instalarea de aplicaii sigure i evitarea copiilor a cror provenien
este dubioas;
-achiziionarea unui program antivirus bun i upgardarea sa ct mai
des posibil;
-evitarea ataamentelor de pe e-mail;
-crearea frecvent a copiilor de siguran pentru fiierele cele mai
importante i salvarea lor pe medii de stocare externe (CD-uri, streamere
etc.).
Programele antivirus create pn n prezent folosesc diferite tehnici
antivirus cu ar fi:
-scanarea de virui;
-verificarea de integritate n care programul antivirus utilizeaz
tehnica checksum-ului;
-verificarea de comportament n care programul antivirus st tot
timpul n memorie i capteaz el nsui toate apelurile sistem.
9.2.10. Viermi (Worms)
Viermii sunt nite virui care nu se reproduc local ci pe alte
calculatoare, de obicei prin Internet.
Un vierme este un program care poate rula independent, consumnd
resursele gazdei pentru a se executa i care poate propaga o versiune
funcional proprie ctre alte calculatoare. Viermele funcioneaz dup
principiul caut i distruge.
Un vierme se rspndete n mod automat, instalndu-se n
calculatoarele ce prezint vulnerabiliti. Din pcate, la ora actual
factorului de multiplicare al viermilor este exponenial. Pe lng aciunile
distructive, un vierme creeaz un trafic uria n reea ducnd la un refuz al
serviciilor.
Exemple de viermi:
-viermele MORRIS este primul vierme din istorie, creat de un
student de la Universitate Cornell;
-viermele CODE RED care exploateaz un bug din WEB numit IIS.
Sisteme de operare 197
9.3. MECANISME DE PROTECIE
n acest subcapitol vom prezenta principalele mecanisme de
protecie folosite n sistemele de operare. Ne vom ocupa de dou mecanisme
de protecie curente , criptografia i sistemele firewall, precum i de dou
concepte de securitate, monitorul de referin i sistemele de ncredere.
9.3.1. Criptografia
Criptografia are ca scop transformarea unui mesaj sau a unui fiier,
denumit text n clar (plaintext), ntr-un text cifrat, denumit ciphertext.
Acest lucru se poate realiza n dou moduri:
-criptarea cu cheie secret (criptografia simetric);
-criptarea cu chei publice (criptografia asimetric).
9.3.1.1. Criptografia cu chei secrete
(criptografia simetric)
n acest sistem este folosit o singur cheie, att pentru criptarea ct
i pentru decriptarea informaiei.
ntre expeditor i destinatar se negociaz un protocol comun, de
maxim siguran, care are rolul de a transmite de la expeditor la destinatar
o cheie de criptare secret.
n cadrul criptografiei cu chei secrete exist mai multe tehnici:
a)-cifrurile bloc (block ciphers);
b)-cifrurile flux (stream ciphers);
c)-codurile de autentificare a mesajelor(MAC)).
a)-Cifrul bloc transform un bloc de text de lungime fix ntr-un
bloc de text criptat, de aceeai lungime, cu ajutorul unei chei secrete. Putem
spune c n acest tip de criptare, deoarece nu se modific numrul de
caractere al textului iniial, are loc o permutare a caracterelor din setul
iniial. Exist mai multe tehnici de criptare:
-cifrul bloc iterativ;
-modul carte de coduri (ECB=Electronic Code Block);
-modul cu nlnuire (CBC=Cipher Block Chaining);
-modul cu reacie (CFB=Cipher Feed Back);
-modul cu reacie la ieire (OFB=Output Feed Back).
-Cifrul bloc iterativ. Se aplic la fiecare iteraie o aceeai
transformare, utiliznd o subcheie. Setul de subchei este derivat din cheia
Sorin Adrian Ciureanu 198
secret de criptare, prin intermediul unei funcii speciale. Numrul de cicluri
dintr-un cifru iterativ depinde de nivelul de securitate dorit. n general, un
numr ridicat de cicluri va mbunti performana, totui, n unele cazuri,
numrul de iteraii poate fi foarte mare. Cifrurile Feistel reprezint o clas
special de cifruri bloc iterative n care textul criptat este generat prin
aplicarea repetat a aceleiai transformri sau a funciei iterative. Se mai
numesc i cifruri DES (Data Enscryption Standard). ntr-un cifru Feistel,
textul original este desprit n dou pri, funcia iterativ fiind aplicat unei
jumti folosind o subcheie iar ieirea acestei funcii este calculat SAU-
EXCLUSIV cu cealalt jumtate. Cele dou jumti sunt apoi
interschimbate.
-Modul carte de coduri. Fiecare text original (de fapt bloc de text)
este criptat independent, cu alte cuvinte fiecrui bloc de text original i
corespunde un bloc de text cifrat.
-Modul cu nlnuire. Fiecare bloc de text original este calculat SAU-
EXCLUSIV cu blocul criptat precedent i apoi este criptat. Este utilizat un
vector de iniializare, de preferin pseudo aleatoriu.
-Modul cu reacie. Blocul cifrat precedent este criptat iar ieirea este
combinat cu blocul original printr-o operaie SAU-EXCLUSIV.
b)-Cifrurile flux seamn cu cifrurile bloc dar au avantajul c sunt
mult mai rapide. Dac cifrurile bloc lucreaz cu blocuri mari de informaie,
cifrurile flux lucreaz cu buci mici de text, de cele mai multe ori la nivel
de bit.
c)-Coduri de autentificare a mesajelor (MAC=Message
Authentification Code). Un asemenea cod este o etichet de autentificare
numit i sum de control (checksume) i deriv din aplicarea unei scheme
de autentificare, mpreun cu o cheie secret, unui mesaj. Spre deosebire de
semnturile digitale, Mac-urile sunt calculate i verificate utiliznd aceeai
cheie, astfel nct ele pot fi verificate doar de ctre destinatar. Exist patru
tipuri de MAC-uri:
-Sigure necondiionat. Sunt bazate pe criptarea unui drum unic.
Textul cifrat al mesajului se autentific pe sine nsui i nimeni altcineva la
drumul unic. Un MAC sigur condiionat poate fi obinut prin utilizarea unei
chei secrete folosite doar odat.
-Bazate pe funcia de dispersie (HMAC). O funcie de dispersie H
reprezint o transformare ce primete la intrare valoarea m i returneaz un
ir de lungime fix, h. Se utilizeaz una sau mai multe chei mpreun cu o
funcie de dispersie, pentru a produce o sum de control care este adugat
mesajului.
Sisteme de operare 199
-Bazate pe cifruri flux. Un cifru flux sigur este utilizat pentru a
descompune un mesaj n mai multe fluxuri.
-Bazate pe cifruri bloc. Se cripteaz blocuri de mesaj utiliznd DES
i CBC, furnizndu-se la ieire blocul final al textului cifrat ca sum de
control.
Sistemul DES (Data Encryption Standard) este o aplicaie a cheilor
secrete. Se utilizeaz n acest sistem chei de 56 bii. Sistemul DES este
destul de vulnerabil i de aceea el se utilizeaz mpreun cu un sistem sigur
de gestionare a cheilor de criptare. Variante mai performante ale DES-ului
sunt:
-triple DES, unde se cripteaz datele de trei ori consecutiv;
-DESX, unde se utilizeaz o cheie de criptare de 64 bii, de tip SAU-
EXCLUSIV, nainte de criptarea cu DES iar dup DES se mai utilizeaz
nc o dat o cheie de criptare.
9.3.1.2. Criptarea cu chei publice
(Criptografia asimetric)
Fiecare persoan deine cte dou perechi de chei, una public ce
poate fi chiar disponibil pe Internet- i una privat. Avantajul acestui
sistem de criptare este c nu este necesar asigurarea securitii transmisiei
informaiei. Oricine poate transmite o informaie utiliznd cheia public dar
informaia nu poate fi decriptat dect prin intermediul cheii private,
deinut doar de destinatar. Cheia privat este ntr-o legtur matematic cu
cea public. Protejarea mpotriva unor atacuri care se fac prin derivarea
cheii private din cheia public se realizeaz fcnd aceast derivare ct mai
dificil, aproape imposibil.
Criptografia cu chei secrete este utilizat de sistemele tradiionale.
Este un mod mult mai rapid dar are dezavantajul c modul de transmisie a
cheilor trebuie s fie foarte sigur.
Sistemul RSA (Rivers Shamir Adleman). Acest sistem utilizeaz
chei publice i ofer mecanisme de criptare a datelor i semnturi digitale.
Algoritmul de funcionare al sistemului RSA este urmtorul:
-se aleg dou numere prime mari p i q
-se calculeaz n=pq
-se alege un numr e, e<n , e fiind prim cu (p-1)(q-1)
-se calculeaz un numr d, astfel nct (ed-1) s fie divizibil prin (p-
1)(q-1)
-cheia public este (n,e)
-cheia privat este (n,d)
Sorin Adrian Ciureanu 200
Obinerea cheii private d pornind de la cheia public (n,e) este
dificil. Se poate determina cheia privat d prin favorizarea lui n n p i q.
Securitatea sistemului RSA se bazeaz pe faptul c aceast determinare este
foarte dificil.
Criptarea prin intermediul RSA se realizeaz astfel:
-expeditorul mesajului m creeaz textul cifrat c=m
e
mod n, unde
(e,n) reprezint cheia public a destinatarului;
-la decriptare, destinatarul calculeaz m=c
d
mod n .
Relaia dintre e i d asigur faptul c destinatarul decripteaz corect
mesajul. Deoarece numai destinatarul cunoate valoarea lui d, doar el poate
decripta mesajul.
Sigurana RSA se bazeaz n primul rnd pe gestionarea cheilor
private, mecanism dependent de implementarea algoritmului RSA. De
asemenea, este important alegerea unei perechi puternice de numere prime
p i q. Numerele prime puternice au diferite proprieti care le face greu de
fabricat.
Dimensiunea cheii utilizate ntr-un algoritm RSA se refer la
dimensiunea lui n. Cu ct n este mai mare cu att securitatea algoritmului
este mai mare dar i funcionarea acestuia este mai lent. Mrimea uzual a
cheii este de 1024 bii.
Sistemul RSA este utilizat mpreun cu un sistem criptografic cu
chei scurte, cum ar fi DES.
9.3.2. Dispozitive firewall
Un firewall este un sistem care separ o reea protejat de una
neprotejat, reeaua neprotejat fiind n majoritatea cazurilor INTERNET.
Un astfel de sistem monitorizeaz i filtreaz traficul dintre cele dou reele,
conform unei politici predefinite de control al accesului.
Internet exterior Firewall interior Reea
intern
Fig. 9.1. Locul unui firewall
Termenul firewall nseamn perete de foc i arat capacitatea de a
segmenta o reea mai mare n subreele.
Un firewall are dou interfee:
-una ctre exterior, de cele mai multe ori ctre Internet;
Sisteme de operare 201
-una direcionat ctre reeaua intern pe care o protejeaz.
Filtrarea traficului dintre aceste dou reele se face dup anumite
criterii i vizeaz:
-adresele IP surs i destinaie ale pachetelor de informaie
vehiculate (address filtering);
-anumite porturi i protocoale (HTTP, FTP, TELNET) (protocol
filtering).
Un firewall de reea nu poate administra transferul de date efectuat
de ctre un utilizator care folosete o legtura la Internet de tip deal-up,
ocolind procedurile de securitate i implicit firewall-ul n sine.
9.3.2.1. Tipuri de firewall
Putem considera patru tipuri :
1) Firewall-uri cu filtrare de pachete (Packet Filtering Firewalls).
Funcioneaz la nivelul IP al modelului OSI i respectiv la nivelul IP al
modelul TCP/IP. Se analizeaz sursa de provenien i destinaie a fiecrui
pachet n parte, acceptnd sau blocnd traficul derulat de acestea. De obicei,
acest tip de firewall este implementat la nivel de router, ceea ce implic un
cost minim. Principalul su dezavantaj const n incapacitatea de a furniza o
securitate, prin reguli complexe de identificare i validare a IP-urilor, motiv
pentru care este indicat utilizarea mpreun cu un al doilea firewall extern
care s ofere protecie suplimentar.
2) Portie de circuit (Circuit Level Gateways). Ruleaz la nivelul 5 al
modelului OSI i respectiv nivelul 4 al modelului TCP/IP. Se monitorizeaz
sesiunile TCP dintre reeaua intern i reeaua Internet. Se utilizeaz un
server intermediar care mascheaz datele de pe calculatoarele reelei private.
Punctul slab al porilor de curent este faptul c nu se verific pachetele ce
constituie obiectul traficului cu reeaua public ci doar filtreaz n funcie
titlu.
3) Proxi-uri de aplicaie (Proxies). Sunt cele mai complexe soluii de
tip firewall dar i cele mai scumpe. Funcioneaz la nivel de aplicaie al
modelului OSI. Se verific pachetele de date i se blocheaz accesul
pachetului care nu respect regulile stabilite de proxi. Pentru un proxi de
web, de exemplu, acesta nu va permite niciodat accesul unui trafic de
protocol FTP sau TELNET. Serverul local vede aceast soluie ca pe un
simplu client, n timp ce reeaua public l va recepta ca fiind nsui
serverul.
Proxi-urile de aplicaie pot crea fiiere de tip log cu activitatea
utilizatorilor din reea sau pot monitoriza autentificrile acestora, oferind i
Sorin Adrian Ciureanu 202
o verificare de baz a pachetelor transferate cu ajutorul antivirusului
ncorporat.
4) Firewall-uri cu inspecii multistrat (Stateful Multilayer
Inspections). Este o combinaie ntre cele trei tipuri descrise anterior.
Acest tip se bazeaz pe algoritmi proprii de recunoatere i aplicare a
politicilor de securitate, spre deosebire de o aplicaie proxi standard.
Inspecia multinivel ofer un nalt grad de securitate, performane foarte
bune i o transparen oferit end-user-urilor. Este cea mai scump dar, fiind
foarte complex, se poate transforma ntr-o arm mpotriva reelei pe care o
protejeaz dac nu este administrat de personal competent.
9.3.2.2. Funciile unui firewall
Un firewall are urmtoarele posibiliti:
-monitorizeaz cile de acces n reeaua privat, permind n acest
fel o mai bun monitorizare a traficului i o mai uoar detectare a
ncercrilor de infiltrare;
-blocheaz traficul nspre i dinspre Internet;
-selecteaz accesul n spaiul privat pe baza informaiilor coninute n
pachete;
-permite sau interzice accesul la reeaua public de pe anumite spaii
specificate;
-poate izola spaiul privat de cel public i realiza interfaa dintre cele
dou.
Un firewall nu poate s execute urmtoarele:
-s interzic importul/exportul de informaie duntoare vehiculat
ca urmare a aciuni rutcioase a unor utilizatori aparinnd spaiului privat,
cum ar fi csua potal i ataamentele;
-s interzic scurgerea de informaie de pe alte ci care ocolesc
firewall-ul (acces prin deal-up ce nu trece prin router);
-s apere reeaua privat de userii ce folosesc sisteme fizice mobile
de introducere a datelor n reea (USB Stick, CD, dischete);
-s previn manifestarea erorilor de proiectare ale aplicaiilor ce
realizeaz diverse servicii, precum i punctele slabe ce decurg din
exploatarea acestor greeli.
9.3.2.3. Firewall-uri n sistemele de operare Windows
Vom exemplifica instalarea i configurarea unui firewall n
Windows. Am ales versiunea trial a programului Zone Alarm Pro.
Sisteme de operare 203
Pentru nceput, programul se instaleaz n mod standard, urmnd ca
setrile s se fac ulterior.
Programul ofer, pe lng protecia firewall, protejarea programelor
aflate pe hard disc, protecia e-mail i posibilitatea blocrilor cookies-urilor,
pop-urilor i bariere-lor nedorite.
Setrile se pot face pe trei nivele diferite:
-High, nivel ce ofer o protejare cvasitotal, strict monitorizat, dar
care mpiedic opiunile de sharing;
-Medium, nivel ce ofer o setare cu posibilitatea vizionrii resurselor
proprii din exterior dar fr posibilitatea modificrii acestora;
-Low, nivel la care firewall-ul este inactiv iar resursele sunt expuse
la atacuri.
Pentru pota electronic programul se comport ca o adevrat
barier n faa unor eventuale supraaglomerri a csuei potale, avnd
posibilitatea blocrii e-mail-urilor ce vin consecutiv. n default exist
opiunea de acceptare a maximum 5 e-mail-uri ce vin ntr-un interval de 2
secunde. Exist i opiunea refuzrii e-mail-urilor nsoite de diverse
ataamente sau a acceptrii lor doar pentru cele ce nu au un numr de
recipiente ataate care depete totalul admis de utilizator.
9.3.2.4. Firewall-uri n sistemul de operare Linux
n sistemul de operare Linux a fost implementat la nivel de kernel un
firewall numit iptables. Acest sistem ofer posibilitatea de a filtra sau
redireciona pachetele de date, precum i de a modifica informaiile despre
sursa i destinaia pachetelor, procedur numit NAT (Network Address
Translation). Una dintre aplicaiile sistemului NAT este posibilitatea
deghizrii pachetelor (masquerading). Deghizarea nseamn c pachetele
trimise de ctre sistemele aflate n reea, care au stabilite ca gateway o
anumit main, s par transmis de maina respectiv i nu de cea
originar. Maina, configurat ca firewall, retrimite pachetele venite, dinspre
reea spre exterior, fcnd s par c provin tot de la ea. Acest mecanism
este foarte util atunci cnd exist o main care realizeaz legtura la
Internet, o singur adres IP alocat i mai multe calculatoare n reea care
au definit maina respectiv ca gateway. Situaia este des ntlnit n cadrul
companiilor mici i mijlocii dotate cu o legtur Internet permanent, mai
ales ca urmare a crizei de adrese IP manifestat n ultimii ani.
Nucleul Linux definete dou tabele de reguli:
-filter, utilizat pentru filtrul de pachete;
-nat, utilizat pentru sistemul NAT.
Sorin Adrian Ciureanu 204
Exist 5 lanuri predefinite care nseamn o succesiune de reguli
utilizate pentru verificarea pachetelor de date ce tranziteaz sistemul.
Acestea sunt:
-lanul INPUT, disponibil pentru tabela filter;
-lanul FORWARD, disponibil pentru tabela filter;
-lanul PREROUTING, disponibil pentru tabela nat;
-lanul POSROUTING, disponibil pentru tabela nat:
-lanul OUTPUT, disponibil pentru ambele tabele.
Atunci cnd pachetul intr n sistem printr-o interfa de reea,
nucleul decide dac el este destinat mainii locale (lanul INPUT) sau altui
calculator (lanul FORWARD). n mod similar, pachetele care ies din
maina local trec prin lanul OUTPUT. Fiecare lan conine mai multe
reguli ce vor fi aplicate pachetelor de date care le tranziteaz.
n general, regulile identific adresele surs i destinaie a
pachetelor, nsoite de porturile surs i destinaie, precum i protocolul
asociat. Cnd un pachet corespunde unei reguli, adic parametrii menionai
mai sus coincid, asupra pachetelor se va aplica o anumit aciune care
nseamn direcionarea ctre o anumit int. Dac o regul specific
aciunea accept, pachetul nu mai este verificat folosind celelalte reguli ci
este direcionat ctre destinaie. Dac regula specific aciunea DROP,
pachetul este aruncat, adic nu i se permite s ajung la destinaie. Dac
regula specific aciunea REJEET, pachetului tot nu i se permite s ajung
la destinaie dar este trimis un mesaj de eroare expeditorului.
Este important ca fiecrui lan s-i fie atribuit o aciune implicit
care va reprezenta destinaia pachetului dac nici una din regulile stabilite
nu corespunde. Astfel lanul INPUT trebuie s aib DROP sau REJECT ca
aciune implicit pentru orice pachet care se dorete a fi filtrat.
Dac dorim s implementm un firewall ntr-o main care
realizeaz conexiunea Internet ntr-o companie privat, vom permite
accesul din exterior la serviciile web, precum i la serviciile de e-mail.
Conexiunea la reeaua local este realizat prin interfaa etho , iar cea pe
Internet prin interfaa pppo.
Exist mai multe interfee grafice pentru generarea de firewall-uri
pentru sistemul iptables, cum ar fi : Firewall Bulder, Firestarter etc.
La sfritul implementrii se verific funcionarea firewall-ului,
testarea fiind mai greu de realizat dac acesta conine multe reguli. Testarea
se face din afara reelei, utiliznd un scanner (SATAN sau NMAP) i din
interior. Dup ce s-au stabilit regulile de filtrare i s-a testat funcionarea
firewall-ului este recomandabil s se salveze configuraia curent a
sistemului iptables.
Sisteme de operare 205
9.3.3. Sisteme de ncredere
Sistemele de ncredere sunt un concept mai nou i sunt capabile s
ofere securitate la nivel de sistem. Pentru aceste sisteme s-au formulat clar
cerine de securitate care s-au i ndeplinit.
Fiecare sistem de ncredere conine o Baz de Calcul de ncredere
(TCB= Trusted Computing Base) care const n hardul i softul ce conin
toate regulile de securitate. Dac aceast TCB funcioneaz conform
specificaiilor, sistemul de securitate nu poate fi compromis.
TCB-ul const dintr-o parte a kernelului sistemului de operare i din
programele utilitare ce au putere de superutilizator. Funciile sistemului de
operare care fac parte din TCB sunt separate de restul SO, pentru a le
minimaliza dimensiunea i a le verifica corectitudinea.
Vom prezenta n continuare cteva modele de sisteme de ncredere.
9.3.3.1. Monitorul de referine
Monitorul de referine este o parte important a TCB-ului care
accept toate apelurile sistem ce implic securitatea, cum ar fi deschiderea
de fiiere, i decide dac ar trebui s fie procesate sau nu. Astfel, monitorul
de referin permite amplasarea tuturor deciziilor de securitate ntr-un singur
loc, fr posibilitatea de a-l ocoli.
USER
KERNEL
Fig. 9.2. Schema unui monitor de referine
Toate apelurile sistem trec prin
monitorul de referine, pentru
verificare de securitate.
Proces
utilizator
TCB
TCB
MONITOR DE REFERINE
Sorin Adrian Ciureanu 206
9.3.3.2. Modelul cu Liste de Control al Accesului
(ACL)
Un sistem de calcul conine multe obiecte care necesit a fi protejate.
Aceste obiecte pot fi componente hard (uniti de disc, segmente de
memorie, imprimante etc.) sau componente soft (procese, fiiere, semafoare
etc.). Fiecare obiect are un nume unic prin care este referit i un set finit de
operaii permise, de exemplu scriere/citire pentru fiiere, up/down pentru
semafoare etc. Este necesar o modalitate de a interzice proceselor de a
accesa obiecte pe care nu sunt autorizate s le acceseze. Trebuie creat un
mecanism pentru restricionarea proceselor la un subset al operaiilor legale,
cnd este necesar.
Se introduce noiunea de domeniu de protecie care nseamn un set
de perechi (obiecte, drepturi). Fiecare pereche specific un obiect i un
subset al operaiilor permise asupra lui. Un drept, n acest context, nseamn
permisiunea de a executa una din aceste operaii. O implementare a
domeniilor de protecie este matricea de protecie n care coloanele sunt
obiecte iar liniile sunt domenii sau drepturi.
Un exemplu de matrice de protecie este cel de mai jos:
obiecte
domenii
Fiier 1 Fiier 2 Fiier 3 Imprimanta
1
Imprimanta
2
1 citire citire
scriere
2 citire
scriere
scriere
3 scriere
Fig.9.3. Matrice de protecie.
Practic, o astfel de matrice are dimensiuni foarte mari iar
mprtierea n cadrul matricei este i ea foarte mare. De aceea matricea se
pstreaz pe rnduri sau pe coloane, cu elemente nevide. Dac matricea se
pstreaz pe coloane, structura de date este Lista de Control al Accesului
(ACL = Acces Control List). Dac se pstreaz pe linii, se numete lista de
capabiliti (Capability List) sau lista C (C-List) iar intrrile individuale se
numesc capabiliti.
Sisteme de operare 207
Liste de Control al Accesului. Fiecare obiect are asociat o ACL n
care sunt trecute drepturile respective. Pentru exemplul dat, ACL-urile
obiectelor sunt:
Fiier 1 1;c;2;3;
Fiier 2 1;cs;2;3;
Fiier 3 1;2;cse;3;
Imprimant 11;2;3;s;
Imprimant 21;2;s;3;
Proprietarul fiierului poate s modifice ACL-urile.
Capabiliti.
Se reine matricea pe linii. Listele 1,2,3 de capabiliti ale obiectelor
sunt, pentru exemplul de mai sus, urmtoarele:
1 2 3
Fiier 1 Fiier 1:c Fiier 3:cse Imprimant 1:s
Fiier 2 Fiier 2:cs Imprimant2:s
Fiier 3
Imprimant 1
Imprimant 2
9.3.3.3. Modelul Bell-La Padula
Cele mai multe sisteme de operare permit utilizatorilor individuali s
decid cine poate s citeasc i s scrie fiierele sau alte obiecte proprii.
Aceast politic se numete control discreionar al accesului. n unele medii
modelul funcioneaz bine dar exist i medii n care se cere o securitate
superioar, de exemplu armata, spitalele etc. Pentru aceste medii sunt
necesare o serie de reguli mult mai stricte. Se folosete, n aceste cazuri, un
control obligatoriu al accesului. Se regularizeaz fluxul informaiei pentru a
se asigura c nu sunt scpri n mod nebnuit. Un astfel de model este i
Bell-La Padula, folosit des i n armat.
n acest model oamenilor din armat le sunt atribuite nivele n
funcie de natura documentelor permise lor spre vizualizare. Un proces ce
ruleaz din partea unui utilizator primete nivelul de securitate al
utilizatorului. Din moment ce exist mai multe nivele de securitate, aceast
schem se numete sistem de securitate multinivel.
Modelul Bell-La Padula aparine acestui sistem, el avnd reguli
despre cum poate circula informaia.
Sorin Adrian Ciureanu 208
-Proprietatea simpl de securitate: un proces rulnd la nivelul de
securitate k poate citi doar obiecte la nivelul su sau mai jos.
-Proprietatea asterisc (*) : un proces rulnd la nivelul de securitate k
poate scrie doar obiecte la nivelul su sau mai sus.
Deci, conform acestui model, procesele pot citi n jos i scrie n sus.
Dac sistemul impune cu strictee aceste dou proprieti, se poate arta c
nu se poate scurge nici o informaie de la un nivel mai nalt la un nivel mai
cobort. n acest model, ilustrat grafic n fig.9.4., procesele citesc i scriu
obiecte dar nu comunic ntre ele.
NIVEL DE
SECURITATE
A
4
2 B 3 C
D
1
6 E
5
4
3
2
1
Citire Scriere
Proces Obiect Proces Obiect
Fig. 9.4. Schem de securitate multinivel.
Proprietatea simpl de securitate afirm c toate sgeile continue (de
citire) merg n lateral sau n sus iar sgeile ntrerupte (de scriere) merg n
lateral sau n sus. Din moment ce toat informaia circul doar orizontal sau
n sus, orice informaie ce pornete de la nivelul k nu poate s apar la un
Sisteme de operare 209
nivel inferior. Deci nu exist nici o cale care s mite informaia n jos,
garantndu-se astfel securitatea modelului. Dac transpunem aceste lucruri
n termeni militari, un locotenent poate s cear unui soldat s-i dezvluie
tot ce tie ca apoi s copieze aceast informaie n fiierul unui general, fr
a nclca securitatea.
n concluzie, modelul Bell-La Padula a fost conceput s pstreze
secrete dar nu s garanteze integritatea datelor.
9.3.3.4. Modelul Biba
Pentru a se garanta integritatea datelor ar trebui inversate
proprietile din modelul Bell-La Padula, adic:
1) Un proces rulnd la nivelul de securitate k poate scrie doar obiecte
la nivelul su sau mai jos.
2) Un proces rulnd la nivelul de securitate k poate citi doar
obiecte la nivelul su sau mai sus.
Aceste proprieti stau la baza modelului Biba care asigur
integritatea datelor dar nu i secretizarea lor. Bineneles c modelul Biba i
modelul Bell-La Padula nu pot fi realizate simultan.
9.3.3.5. Modelul securitii Crii Portocalii
n 1985 Departamentul Aprrii Statelor Unite ale Americii a
publicat un document cunoscut sub denumirea de Cartea Portocalie , un
document care mparte sistemele de operare n cteva categorii bazate pe
criteriul de securitate. Iat mai jos criteriile de securitate ale Crii
Portocalii. Nivelele de securitate sunt notate cu D, C1, C2, B1, B2, B3, A1,
n ordinea n care securitatea crete spre dreapta.
S analizm categoriile de securitate i s subliniem cteva dintre
aspectele importante.
Nivelul D de conformitate este uor de atins, neavnd nici un fel de
cerine de securitate. Adun toate sisteme ce au euat s treac chiar i
testele de securitate minim. MS-DOS i Windows 98 sunt de nivel D.
Nivelul C este intenionat pentru medii cu utilizatori cooperativi. C1
necesit un mod protejat al sistemului de operare, conectarea utilizatorilor
prin autentificare i capacitatea pentru utilizatori de a specifica ce fiiere pot
fi fcute disponibile altor utilizatori i cum. Se cere o minim testare de
securitate i documentare. Nivelul C2 adaug cerina ca i controlul
discretizabil al accesului s fie cobort la nivelul utilizatorului individual.
Trebuie ca obiectele date utilizatorului s fie iniializate i este necesar o
Sorin Adrian Ciureanu 210
minim cantitate de auditare. Protecia rwh din Unix este de tipul C1 dar nu
de tipul C2.
CRITERIU D C
1
C
2
B
1
B
2
B
3
A
1
Politica de securitate
Control discretizabil al accesului x x x
Refolosirea obiectului x
Etichete x x
Integritatea catalogrii x
Exportare a informaiei catalogate x
Catalogarea ieirii lizibile x
Control obligatoriu al accesului x x
Catalogri ale senzitivitii subiectului x
Etichete ale dispozitivelor x
Posibilitatea de contabilizare
Identificare i autentificare x x x x x
Audit x x x x
Cale de ncredere x x
Asigurare
Arhitectura sistemului x x x x x
Integritatea sistemului x
Testarea securitii x x x x x x
Specificrile i verificarea modelului x x x x
Analiza canalului camuflat x x x
Administrarea caracterului de ncredere x x
Administrarea configuraiei x x
Recuperarea de ncredere x
Distribuire de ncredere x
Documentare
Ghid pentru aspecte de securitate x
Manual al caracteristicilor de ncredere x x x x x
Documentaie de testare x x x
Documentaie de proiectare x x x x x
Legend : x - sunt noi cerine;
- cerinele pentru urmtoarea categorie
inferioar se aplic i aici.
Nivelele B i A necesit ca tuturor utilizatorilor i obiectelor
controlate s le fie asociat o catalogare de securitate de genul: neclasificat,
Sisteme de operare 211
secret, strict secret. Sistemul trebuie s fie capabil a impune modelul Bell-
La Padula. B2 adaug la aceast cerin ca sistemul s fi fost modelat de sus
n jos ntr-o manier modular. B3 conine toate caracteristicile lui B2, n
plus trebuie s fie ACL-uri cu utilizatori i grupuri, trebuie s existe un TCB
formal, trebuie s fie prezent o auditare adecvat de securitate i trebuie s
fie incus o recuperare sigur dup blocare. A1 cere un model formal al
sistemului de protecie i o dovad c sistemul este corect. Mai cere i o
demonstraie c implementarea este conform cu modelul.
9.3.4. Securitatea n sistemele de operare
Windows
Windows NT satisface cerinele de securitate C2 n timp ce
Windows 98 nu satisface aceste cerine.
Cerinele de securitate, de tip C2, ale versiunii Windows NT sunt:
-nregistrarea sigur , cu msuri de protecie mpotriva atacurilor de
tip spoofing;
-mijloace de control al accesului nengrdit;
-mijloace de control ale acceselor privilegiate;
-protecia spaiului de adrese al unui proces;
-paginile noi trebuie umplute cu zerouri;
-nregistrri de securitate.
nregistrare sigur nseamn c administratorul de sistem poate cere
utilizatorilor o parol pentru a se nregistra. Atacul de spoofing se manifest
atunci cnd un utilizator scrie un program ruvoitor care afieaz caseta de
nregistrare i apoi dispare. Cnd un alt utilizator va introduce un nume i o
parol, acestea sunt scrise pe disc iar utilizatorului i se va rspunde c
procesul nregistrare a euat. Acest tip de atac este prevenit de Windouws
NT prin indicaia ca utilizatorul s tasteze combinaia CTRL+ALT+DEL,
nainte de a se nregistra utilizatorul. Aceast secven este capturat de
driverul de tastaturi care apeleaz un program al sistemului de operare ce
afieaz caseta de nregistrare real. Procedeul funcioneaz deoarece
procesele utilizator nu pot dezactiva procesarea combinaiei de taste
CTRL+ALT+DEL din driverul de tastatur.
Mijloacele de control al accesului permit proprietarului unui fiier
sau obiect s spun cine l poate utiliza i n ce mod.
Mijloacele de control al accesului privilegiat permit
administratoruluis treac de aceste restricii cnd este necesar.
Paginile noi trebuie umplute cu zerouri pentru ca procesul curent s
nu poat gsi informaii vechi puse acolo de proprietarul anterior.
Sorin Adrian Ciureanu 212
Protecia spaiului de adrese nseamn c fiecare proces utilizator are
propriul su spaiu virtual de adrese protejat i inaccesibil pentru alte
procese neautorizate.
nregistrrile de securitate permit administratorului de sistem s
produc un jurnal cu anumite evenimente legate de securitate.
9.3.4.1. Concepte fundamentale de securitate n
sistemele Windows
Fiecare utilizator este identificat de un SID (Security ID). Acestea
sunt numere binare cu antet scurt urmat de o component aleatoare mare.
Cnd un utilizator lanseaz un proces n execuie, procesul i firele sale de
execuie ruleaz cu SID-ul utilizatorului. Cea mai mare parte a securitii
sistemului este proiectat pentru a se asigura c fiecare obiect este accesat
doar de firele de execuie cu SID-urile autorizate.
Fiecare proces are un jeton de acces care specific SID-ul propriu i
alte caracteristici. Este valid i asigurat n momentul nregistrrii de
winlogon.
antet Timp de
expirare
Grupuri DAGL
implicit
SID
utilizator
SID
grup
SID-uri
restricionate
Privilegii
Fig. 9.5. Structura unui jeton de acces Windows.
Timpul de expirare indic momentul n care jetonul nu mai este
valid dar actualmente nu este utilizat.
Grupuri specific grupurile de care aparine procesul (Discretionary
Acces Control List).
DAGL implicit este lista de control al accesului, discret, asigurat,
pentru obiectele create de proces.
SID utilizator indic proprietarul procesului.
SID grup reprezint grupul din care face parte utilizatorul.
SID-uri restricionate este constituit dintr-un cmp care permite
proceselor ce nu prezint ncredere s participe la lucrri cu alte procese
demne de ncredere, dar mai puin distructive.
Lista de privilegii ofer procesului mputerniciri speciale cum ar fi
dreptul de a opri calculatorul sau de a accesa fiiere pe care n mod normal
nu ar putea s le acceseze.
n concluzie jetonul de acces indic proprietarul procesului i ce
setri implicite i mputerniciri sunt asociate cu el.
Sisteme de operare 213
Cnd un utilizator se nregistreaz, winlogon ofer procesului iniial
un jeton de acces. De obicei, procesele ulterioare motenesc acest jeton de-a
lungul ierarhiei. Jetonul de acces al unui proces se aplic iniial tuturor
firelor de execuie ale procesului. Totui un fir de execuie poate obine un
jeton de acces de-a lungul execuiei. Un fir de execuie client poate s-i
paseze jetonul de acces unui fir de execuie server pentru a-i permite
serverului s-i acceseze fiierele protejate i alte obiecte . Un astfel de
mecanism se numete impersonalizare.
Descriptorul de securitate este un alt concept utilizat de Windows.
Fiecare obiect are un descriptor de securitate care indic cine poate efectua
operaii asupra lui.
ACE
ACE
ACE
ACE
ACE
ACE
ACE
ACE
Fig. 9.6. Descriptoare de securitate Windows.
Fiier
Antet
SID proprietar
SID grup
DACL
SACL
Antet
nregistreaz
George
1 1 1 1 1 1
Antet
Refuz
Dan
1 1 1 1 1 1
Permite
Irina
1 1 0 0 0 0
Permite
Andrei
1 1 1 1 1 1
Permite
Roxana
1 0 0 0 0 0
DESCRIPTOR
DE
SECURITATE
DESCRIPTOR
DE
SECURITATE
Sorin Adrian Ciureanu 214
Un descriptor de securitate este format din:
-antet;
-DACL (Discretionary Acces Control List)
-unul sau mai multe ACE (Acces Control Elements).
Cele dou tipuri principale de elemente sunt Permite i Refuz. Un
element Permite specific un SID i o hart de bii care specific ce operaii
pot face procesele cu respectivul SID asupra obiectului. Un element Refuz
funcioneaz dup acelai principiu, doar c o potrivire nseamn c
apelantul nu poate efectua operaia respectiv.
n structura unui descriptor de securitate mai exist i SACL (System
Acces Control List) care este asemntoare cu DACL numai c nu specific
cine poate utiliza obiectul ci specific operaiile asupra obiectului pstrate
n jurnalul de securitate al ntregului sistem. n exemplul nostru fiecare
operaie executat de George asupra fiierului va fi nregistrat.
9.3.4.2. Implementarea securitii
Pentru a implementa descriptorul de securitate prezentat anterior, se
folosesc multe din funciile pe care Windows NT le are din Win32API,
legate de securitate, marea majoritate gestionnd descriptorii. Iat etapele
utilizate n gestionarea acestor descriptori:
-se aloc spaiul descriptorului;
-se iniializeaz descriptorul cu funcia Initialize Security
Descriptor, funcie care scrie i antetul;
-se caut apoi proprietarul SID-ului i al grupului i dac ei nu exist
se utilizeaz funcia Look Account Sid ;
-se iniializeaz DACL-ul sau SACL-ul descriptorului de securitate
cu ajutorul funciei Add Access Denied Ace; aceste funcii se
execut de attea ori cte funcii trebuiesc ncrcate;
-se ataeaz ACL-ul creat la descriptorul de securitate;
-dup crearea descriptorului de securitate el poate fi pasat ca
parametru pentru a fi adugat la obiect.
9.3.5. Securitatea n Linux
9.3.5.1. Open source
Exist dou modaliti n ceea ce privete optica productorilor de
produse soft:
Sisteme de operare 215
-una, nchis, n care codul surs este secret i, n general, orice
informaie este deinut numai de proprietar;
-una, deschis, n care codul surs este disponibil pentru toi
utilizatorii i n care informaia circul deschis.
Din cea de-a doua categorie face parte i comunitatea Open source.
Linux este un sistem de operare free care face parte din comunitatea Open
source.
S vedem ce avantaje, din punct de vedere al securitii, ar oferi
apartenena la aceast comunitate. S ncercm s argumentm acest lucru
prin prizma bug-urilor care exist n cadrul programelor i provin din erori
de programare sau proiectare, introduse intenionat sau nu. Aceste buguri
pot fi:
-depirea capacitilor tampon, care pot duce la obinerea de
privilegii neautorizate de ctre utilizator;
-gestiunea necorespunztoare a fiierelor, care poate permite
eventualelor persoane ruvoitoare s modifice sau s deterioreze fiiere
importante;
-algoritmi de autentificare sau de criptare prost proiectai, care pot
conduce la accesul neautorizat al unor persoane sau decriptarea cu uurin a
unor date confideniale, cum ar fi parolele utilizatorilor;
-caii troieni.
Securitatea sporit a programelor open source provine chiar din
disponibilitatea codului surs. Deoarece codul surs este la dispoziia multor
utilizatori se ajunge la depistarea bug-urilor cu o probabilitate mult mai
mare dect la sistemele nchise. Iat cteva din aceste avantaje:
-oricine poate corecta codul surs, aceste corecii fiind fcute publice
n cel mai scurt timp i incluse n urmtoarea sesiune;
-atunci cnd sunt descoperite, bug-urile sunt reparate foarte rapid; de
exemplu, cnd a aprut bug-ul Ping O Death, n Unix crearea unui path de
corecie a durat doar cteva ore, n timp ce n Windows rspunsul a venit
doar dup o sptmn;
-sistemele solide de comunicaie dintre membrii comunitii, precum
listele de discuii i resursele localizate on-line, ajut la eficientizarea
procesului de dezvoltare i depanare, reducnd i distribuind efortul.
9.3.5.2 Programe ce depisteaz i corecteaz
vulnerabiliti
Programul NESSUS. Este un program de scanare evoluat, n sensul
c, dup scanarea propriuzis stabilete versiunile serviciilor care ruleaz pe
Sorin Adrian Ciureanu 216
maina int, putnd determina vulnerabilitatea acesteia. NESSUS const
din dou pri:
-partea de server, care efectueaz practic scanrile;
-partea de client care reprezint o interfa grafic xwindows cu
utilizatorul.
Serverul Nessus folosete protocolul TCP pentru a atepta cererile
de la clieni, clieni autentificai printr-un sistem de chei publice El Gamal.
Traficul este criptat cu ajutorul unui cifru flux.
Programul Titan poate depista i corecta n mod automat
vulnerabilitile unui sistem Unix; este scris n BASH. Exist trei moduri de
rulare a acestui utilitar:
-modul verificare, recomandat a se folosi prima dat, cu rol de a
testa sistemul fr s fac nici o modificare asupra sa;
-modul informal, care testeaz sistemul i afieaz modificrile pe
care le-ar efectua n mod normal;
-modul reparare , care va modifica fiierele de configurare a
sistemului n vederea securizrii lui.
Titan jurnalizeaz problemele descoperite i aciunile produse ntr-un
director. Iat cteva vulnerabiliti pe care Titan le poate depista i corecta:
-bug-urile din protocolul TCP, avnd protecie mpotriva atacurilor
de tip SYN flood, PING flood i NFS bind;
-serviciile considerate periculoase, de exemplu automount, sunt
dezactivate;
-drepturile de acces ale fiierelor i cataloagelor:
-conturile utilizatorilor speciali care sunt terse sau dezactivate.
9.3.5.3. Auditarea sistemului
Auditarea unui sistem const n operaiunile de certificare c acel
sistem nu a fost compromis i c se afl ntr-o stare sigur.
Un program destinat certificrii sistemului de fiiere este
Programul Tripwire.
Acest program este un sistem de monitorizare a fiierelor care poate
fi utilizat pentru a asigura integritatea acestora. Sistemul este realizat de
compania Tripwire,Inc.
Prima etap a programului const din analiza sistemului de fiiere i
crearea unei baze de date a fiierelor importante, intr-un moment n care
acestea sunt considerate sigure. Se stabilesc acum fiierele i directoarele ce
vor fi monitorizate.
Sisteme de operare 217
Odat creat baza de date, integritatea fiierelor importante poate fi
oricnd verificat. Se detecteaz fiierele noi, cele terse i cele modificate.
Dac aceste modificri sunt valide, baza de date va fi actualizat; n caz
contrar, ele vor fi raportate administratorului sistemului.
Fiierele importante, cum ar fi baza de date i fiierele de
configuraie, sunt criptate cu ajutorul algoritmului El Gamal. Se utilizeaz
dou fiiere de chei care memoreaz cte o pereche de chei, una public i
una privat. Fiierul global este utilizat pentru a proteja fiierele de
configurare iar fiierul local de chei este folosit pentru protecia bazelor de
date i fiierelor raport.
Sorin Adrian Ciureanu 218
Sisteme de operare 219
Capitolul 10
STRUCTURA SISTEMELOR DE OPERARE
Dup structura lor, sistemele de operare se clasific n :
-Sisteme de operare monolitice.
-Sisteme de operare structurate pe nivele.
-Maini virtuale.
-Microkerneluri.
-Exokerneluri.
-Nanokerneluri.
10.1. SISTEME DE OPERARE MONOLITICE
n acest tip, sistemul de operare este scris ca o colecie de proceduri,
fiecare procedur putnd s apeleze oricare alt procedur, ori de cte ori
este nevoie. Exist totui o oarecare structurare, ca n modelul din figura
10.1.
Procedur
principal
Proceduri
de servicii
Proceduri
utilitare
Fig. 10.1. Structura unui sistem de operare monolitic.
n acest model exist urmtoarele structuri:
Sorin Adrian Ciureanu 220
-un program principal care apeleaz procedura de serviciu dorit;
-un set de proceduri de serviciu care se ocup cu tratarea apelurilor
sistem;
-un set de proceduri utilitare care ajut procedurile de serviciu.
Pentru fiecare apel sistem exist o singur procedur de sistem care
rspunde de el. Procedurile utilitare ndeplinesc funcii de care au nevoie
anumite proceduri de serviciu.
10.2. SISTEME DE OPERARE STRUCTURATE PE
NIVELURI
Sistemul este organizat ca o ierarhie de niveluri. W. Dijkstra a
construit primul sistem de operare n acest mod, sistemul THE. Acest sistem
are 6 niveluri organizate ca n fig.10.2.
Fig. 10.2. Structura sistemului de operare THE.
Nivelul 0 asigur alocarea procesorului i comutarea ntre procese la
apariia de ntreruperi sau expirarea ceasurilor. Nivelul zero ofer funcia de
multiprogramare de baz a procesorului, n sensul c, deasupra acestui nivel,
exist procese secveniale, fiecare dintre acestea putnd fi programat fr a
se lua n considerare faptul c mai mute procese ruleaz pe acelai procesor.
Nivelul 1 se ocup de gestiunea memoriei. Se aloc spaiu pentru
procese att n memoria principal ct i ntr-o rol magnetic de 512 h
folosit pentru a pstra pri de procese organizate n pagini, pentru care nu
Nivelul 6
OPERATORUL
Nivelul 4
PROGRAME UTILIZATOR
Nivelul 3
ADMINISTRAREA INTRRI / IEIRI
Nivelul 2
COMUNICAREA OPERATOR / PROCESE
Nivelul 1
GESTIUNEA MEMORIEI INTERNE / EXTERNE
Nivelul 0
ALOCAREA PROCESORULUI I MULTIPROGRAMARE
Sisteme de operare 221
este loc n memoria principal. Exist un soft pe nivelul 1 care rspunde de
procedeul de switch (mutare) ntre memoria principal i memoria de pe
rol, cu alte cuvinte de aducerea paginilor din rola magnetic n memoria
principal, ori de cte ori este nevoie de ele pentru orice proces situat
deasupra nivelului 1.
Nivelul 2 asigur comunicarea dintre fiecare proces i consola
operatorului. Deasupra acestui nivel fiecare proces are propria sa consol
operator.
Nivelul 3 gestioneaz dispozitivele de intrare ieire.
Nivelul 4 gestioneaz programele utilizator.
Nivelul 5 asigur procesul operator.
Un alt sistem de operare organizat pe niveluri este sistemul
MULTICS creat de profesorul Tanenbaum la Universitatea Vrijie din
Amsterdam, sistem de operare aflat la baza sistemului Linux. n locul
nivelurilor MULTIX utilizeaz inele concentrice, cele interioare avnd
privilegii mai mari dect cele mai exterioare. Cnd o procedur dintr-un
nivel exterior apeleaz o instruciune dintr-un nivel interior, atunci se
apeleaz o instruciune de tip TRAP, ai crei parametri, dup ce au fost
verificai i declarai valizi, permit nceperea unui apel sistem. Avantajul
mecanismului inelelor fa de cel al nivelurilor este acela c poate fi uor
extins pentru o structur de subsisteme utilizator.
10.3. MAINI VIRTUALE
Aceast organizare a pornit de la ideea iniial de a se separa
complet cele dou funcii de baz care sunt:
-multiprogramarea i
-divizarea de timp (time sharing).
Instruciuni Apeluri sistem
I/E
TRAP
TRAP
Fig. 10.3. Structura sistemului VM /370 cu CMS
Main
virtual
Main
virtual
Main
virtual
Main
virtual
CMS CMS CMS CMS
VH / 370
Hardware 370
Sorin Adrian Ciureanu 222
Primul sistem care a utilizat mainile virtuale a fost denumit iniial
CP/CMS i redenumit mai trziu VM/370 de ctre Seawright i Mackannde
n 1979. Schema bloc a sistemului este dat n figura 10.3.
Partea principal a sistemului este denumit monitorul mainii
virtuale care ruleaz direct pe hard. El realizeaz practic multiprogramarea,
oferind mai multe maini virtuale nivelului imediat superior. Aceste maini
virtuale nu sunt de fapt nite maini extinse, ci sunt copii exacte ale
hardului, incluznd modurile kernel / user, intrare / ieire, ntreruperi i toate
celelalte elemente ale mainii reale. Deoarece fiecare main virtual este o
copie identic a adevratului hardware, fiecare poate rula orice sistem de
operare care ar rula pe hard.
Pe nivelul imediat inferior mainii virtuale ruleaz CMS
(Conversational Monitor System), un sistem de monitorizare
conversaional pentru utilizatori interactivi ce beneficiaz de rulare cu
divizare de timp. Cnd un program CMS execut un apel de sistem, acesta
este transmis ctre sistemul de operare de pe propria sa main virtual.
Apoi, CMS genereaz instruciuni de intrare / ieire hardware normale
pentru citirea discului sau virtuale pentru a executa apelul. Aceste
instruciuni de Intrare / ieire sunt captate de VM/370 care le execut ca
fcnd parte din simularea hardului real. Prin separarea complet a funciilor
de multiprogramare, fiecare dintre cele dou pri poate fi mult mai simpl,
mai flexibil i mai uor de ntreinut.
Ideea mainii virtuale este utilizat foarte mult i n prezent, mai ales
cnd exist cereri de a rula soft vechi pe hard nou.
1- Un prim exemplu este rularea unui program vechi, scris sub MS-
DOS, pe un hard actual, cu un procesor PENTIUM, sub un sistem de
operare WINDOWS. Aceste programe se pornesc n modul 8o86 virtual.
Atta timp ct execut instruciuni normale, ele ruleaz direct pe hard.
Atunci cnd sistemul ncearc s execute o derut (TRAP) ctre sistemul de
operare, pentru a face un apel sistem, sau ncearc s execute direct operaii
de intrare/ieire protejate; se execut un trap ctre monitorul mainii
virtuale. Sunt posibile dou variante:
a)- Se ncarc MS-DOS n spaiul de adrese al procesorului 8086
virtual iar monitorul mainii virtuale reflect o derut ctre MS-DOS, aa
cum s-ar ntmpla pe un 8086 real. Cnd MS-DOS va ncerca ulterior s
realizeze el nsui operaia de intrare/ieire, aceast operaie va fi executat
pe monitorul mainii virtuale.
b)-Monitorul mainii virtuale execut el nsui operaia de
intrare/ieire, deoarece tie care sunt toate apelurile sistem MS-DOS.
Sisteme de operare 223
n timp ce prima variant emuleaz toate sistemele de operare, a
doua poate emula numai varianta MS-DOS. n schimb, a doua variant este
mult mai rapid, deoarece evit pornirea MS-DOS pentru operaiile de
intrare/ieire. De menionat c n nici o variant prezentat emularea nu se
face ca la VM/370, unde este posibil s se ruleze chiar VM/370 peste
maina virtual. La PENTIUM nu se poate relua, de exemplu, WINDOWS
peste procesorul 8086 virtual pentru c nici o versiune WINDOWS nu
ruleaz pe 8086.
2-Un alt exemplu de utilizare a mainilor virtuale este aa numita
main virtual Java . Compilatorul pentru Java produce cod pentru JVM
(Java Virtual Machine), cod ce este executat n mod normal de un
interpretor soft JVM. Avantajul acestei abordri este acela c programele
pentru JVM pot fi transportate prin INTERNET ctre orice calculator care
are interpretor JVM i ruleaz acolo. Dac compilatorul ar fi produs
programe binare pentru SPARC sau PENTIUM, acestea nu ar fi putut fi
portate i rulate peste tot la fel de uor. Un alt avantaj al JVM este acela c,
dac interpretorul este corect implementat, programele JVM care sunt aduse
pot fi verificate din punct de vedere al securitii i apoi executate ntr-un
mediu protejat.
3-Un al treilea exemplu, utilizat de data aceasta n prezent, este
programul VMWARE, care poate instala, pe post de main virtual, un
sistem de operare. La nceput, programul VMWARE lucra sub WINDOWS
i crea ca main virtual sistemul de operare LINUX. Acum exist i
versiunea sub LINUX care emuleaz sistemul de operare WINDOWS.
10.4. SISTEME DE OPERARE CU MICRONUCLEU
(MICROKERNEL)
Ideea care st la baza microkernelului este modularizarea. O mare
parte din serviciile sistemuluide operare, cum ar fi memoria virtual i
sistemul de fiiere, a fost scoas i implementat ca produse separate n
afara kernelului. Ceea ce a rmas a primit denumirea de microkernel. n
principiu, microkernelul implementeaz mecanismele de:
-alocare a procesului,
-schimbare de context,
-protecia resurselor.
Aceast modularizare are anumite avantaje; ea face mai uoar
modificarea politicilor i mecanismelor implementate n exteriorul
microkernelului. Spre deosebire de sistemele monolitice, n acest caz este
Sorin Adrian Ciureanu 224
suficient numai modificarea modului respectiv i nu a ntregului sistem. Pe
lng faptul c se uureaz semnificativ sarcina programatorului, noile
modificri pot fi mult mai uor distribuite, preul pltit pentru aceasta fiind
eficiena. Orice decizie de politic care se face n afara microkernelului,
presupune schimbri de context adiionale. De exemplu, n cazul alocrii
unei pagini din memoria fizic, microkernelul trebuie s invoce procesul
care implementeaz memoria virtual pentru a obine identificatorul
acestuia. n acest fel, fa de un sistem de operare monolitic n care serviciul
este implementat n kernel, sunt executate dou schimbri de context n
plus.
n ceea ce privete implementarea microkernelului, cea mai des
utilizat este implementarea pe principiul client /server, prin intermediul
mesajelor. De exemplu, dac un proces vrea s citeasc un fiier, el va
trimite un mesaj cu ajutorul micronucleului ctre o alt aplicaie care ruleaz
n spaiul utilizator i care acioneaz ca un server de fiiere. Aceast
aplicaie va efectua comanda iar rezultatul ei va ajunge napoi la procesul
apelant, tot prin intermediul unor mesaje. n acest fel se poate crea o
interfa bine definit pentru fiecare serviciu, adic un set de mesaje pe care
serverul le nelege. Se pot instala uor noi servicii n sistem, servicii care
pot fi pornite fr a fi necesar reformarea nucleului. Se pot crea n mod
simplu servicii de ctre utilizatori.
n concluzie, sistemele de operare cu micronucleu au avantajul unei
viteze mai mari, obinut prin eliberarea unei pri de memorie, i
dezavantajul unui timp pierdut cu schimbul de mesaje. Se pare, ns, c
viteza mare va duce la nlocuirea sistemelor clasice cu sisteme cu
micronucleu.
n SO UNIX, un exemplu de micronucleu este ONX al firmei
Quantum Software. ONX respect standardele POSIX 1003.1., care se
refer la interfaa dintre aplicaiile C i serviciile nucleului, POSIX 1003.2.,
care se refer la interfaa la nivel SHELL i POSIX 1003.4., care se refer la
SO n timp real. ONX conine un micronucleu de 8KO n care sunt
implementate planificarea i interschimbarea proceselor, tratarea
ntreruperilor i servicii de reea la nivel sczut. Un sistem minimal ONX
adaug la acest micronucleu un controlor de procese care creeaz i
controleaz procesele n memorie. Micronucleul conine 14 apeluri sistem.
10.5. SISTEME DE OPERARE CU EXOKERNEL
Exokernelul este un microkernel redus la extrem, n sensul c
elimin aproape complet nucleul, mutndu-se absolut toate funciile acestuia
Sisteme de operare 225
n biblioteci ntregi din spaiul utilizator. n kernel ar rmne o singur
funcie, de arbitrare a accesului la resurse de nivel foarte jos. Ideea este
foarte tentant deoarece toate operaiile se pot executa la ntreaga vitez a
microprocesorului, evitndu-se costisitoarele apeluri de sistem. Toate
mecanismele de gestiune a resurselor sunt implementate sub form de
biblioteci n spaiul utilizator, ceea ce ofer o flexibilitate maxim
utilizatorilor n ceea ce privete adugarea de noi mecanisme sau
modificarea celor existente. Funcia de baz a exokernelului este protecia.
Spre deosebire de alte ncercri de abstractizare a hardului,
exokernelul nu ncearc s ofere o abstracie independent. Motivul este c
o astfel de independen ar sacrifica unele faciliti hard avansate pe care
maina le-ar putea oferi. Deci preul pltit este portabilitatea. Deoarece
bibliotecile sistemului de operare sunt dependente de abstracia hardware
exportat, n cazul portrii este nevoie ca o bun parte din acestea s fie
rescrise. Evident, o soluie este ca partea dependent de main s fie
implementat la un nivel separat, deasupra exokernelului, n spaiul
utilizator.
Este interesant faptul c implementarea sistemului de operare sub
form de biblioteci face posibil rularea simultan a mai multor sisteme de
operare diferite. Aceasta ridic ns problema interaciunii dintre politicile i
mecanismele de gestionare ale aceleiai resurse, implementate de sisteme de
operare diferite. Este necesar proiectarea unui arbitru sau a unei politici
globale care s gestioneze resursa respectiv. Se adaug ns un cost
suplimentar i se mrete complexitatea sistemului.
Mai trebuie subliniat faptul c exist posibilitatea de extindere a
exokernelului, securitatea fiind garantat de utilizarea mecanismului de
izolare soft.
10.6. SISTEME DE OPERARE CU NANOKERNEL
Nanokernelul ofer o abstractizare a resurselor hard pentru nivelele
superioare ale sistemului de operare. El este la baza unui sistem de operare
numit Micro-Choise , acesta reprezentnd o rescriere a SO orientat pe
obiecte. Extensibilitatea acestui sistem se face prin ncrcare de ageni soft
scrii de obicei n Java. Deoarece agenii sunt interpretai, problema
proteciei este rezolvat. Codul interpretat este mult mai lent dect cel nativ
i desigur eficiena este mai sczut. Din acest motiv sunt relativ puine
mecanisme ce pot fi implementate folosind aceast metod. O posibil
soluie pentru mbuntirea performanelor este folosirea de noi tehnologii,
Sorin Adrian Ciureanu 226
cum ar fi just in time compilation, adic, la ncrcare, agenii sunt automat
compilai n cod nativ. Folosirea limbajului Java pentru scrierea agenilor
soft constituie un avantaj al Micro-Choise-ului.
10.7. STRUCTURA SISTEMULUI DE OPERARE
UNIX/LINUX
Un sistem UNIX poate fi privit ca un fel de piramid, ca n figura
10.4.
Interfee utilizator
Interfee cu bibliotecile
Modul modul
utilizator
Interfee cu apeluri sistem
modul m
modul nucleu
Fig. 10.4. Nivelurile ntr-un sistem de operare UNIX
Programele fac apelurile sistem, punnd parametrii n registre sau pe
stiv i genernd instruciuni pentru a se trece din modul utilizator n modul
nucleu i pentru a porni UNIX-ul. Procedurile sunt scrise de obicei n
limbaj de asamblare dar pot fi apelate i din limbajul C. Fiecare procedur
plaseaz parametrii i apoi execut instruciunea capcan. Interfaa din
bibliotec este cea specificat de POSIX i nu interfaa apelului sistem. Cu
alte cuvinte, POSIX este acela care indic ce proceduri din bibliotec trebuie
furnizate, care sunt parametrii, ce trebuie s fac acetia i ce rezultate
trebuie s ntoarc.
Pe lng sistemul de operare i biblioteca apelurilor sistem, toate
versiunile UNIX furnizeaz un numr mare de programe standard dintre
care unele sunt specificate de standardul POSIX 10032, iar altele difer de
la o versiune la alta. Acestea includ interpretor de comenzi, compilatoare,
editoare, programe pentru procesare de texte i utilitare pentru manipularea
fiierelor.
Deci, n UNIX, se disting trei interfee diferite:
Utilizatori
Programe utilitare standard
(console, editoare, compilatoare
Biblioteca standard
(open, fork, read, write)
Sistemul de operare UNIX
(gestionare procese, memorie, fiiere, intrare/ieire)
HARD
Sisteme de operare 227
-interfaa cu apelurile sistem;
-interfaa cu bibliotecile;
-interfaa format din setul standard de programe utilitare.
10.7.1. Structura nucleului UNIX
Nivelul de jos al nucleului const in drivere de dispozitiv plus
schimbarea proceselor.
Fig.10.5. Structura nucleului 4.4BSD.
Toate driverele din UNIX sunt clasificate n : drivere pentru
dispozitive de tip caracter i drivere pentru dispozitive de tip bloc, cu
principala diferen c pe dispozitivele de tip bloc sunt permise cutrile i
pe dispozitivele de tip caracter nu sunt permise. Dispozitivele de reea, dei
sunt de tip caracter, sunt tratate special. Schimbarea proceselor are loc
atunci cnd apare o ntrerupere. Din codul de nivel jos se oprete procesul
care se execut, i se salveaz starea n tabela de procese din nucleu i se
pornete driverul corespunztor. Schimbarea proceselor se ntmpl i
atunci cnd nucleul i-a terminat execuia i este timpul s se porneasc din
nou un proces utilizator. Codul de schimbare este n asamblare i este foarte
diferit de planificare.
HARD
Schimbarea proceselor
Dispozitive
tip
caracter
Drivere
de
reea
Drivere pentru disc
Dirijare
Proto
coale
de reea
Socluri ntrebuinarea
consolei
Intrare
prelucrat
Discipline
de
linie
I
n
t
r
a
r
e
n
e
m
o
d
i
f
i
c
a
t

Memorie
Intern
ascuns
Sisteme
de
fiiere
Numirea
fiierelor
Memoria
intermediar
de pagini
Memorie virtual
Planificarea proceselor
Crearea i
terminarea
proceselor
P
u
n
e
r
e

i
n
c
o
r
e
s
p
o
n
d
e
n

T
r
a
t
a
r
e
a

s
e
m
n
a
l
e
l
o
r
D
e
f
e
c
t
e


d
e
p
a
g
i
n

Apeluri sistem Intreruperi i capcane


Sorin Adrian Ciureanu 228
Deasupra nivelului de jos, codul este diferit n fiecare din cele patru
coloane din figur.
n stnga exist dispozitive de tip caracter. Acestea sunt utilizate n
dou moduri:
-unele programe, cum ar fi editoarele vi i emacs, vor fiecare
apsare de tast imediat ce aceasta a fost lovit;
-alte programe, cum ar fi interpretorul de comenzi sh , sunt orientate
pe linie de comand i permit utilizatorului s editeze linia curent nainte
de a apsa pe Enter pentru a o trimite n program. Acest tip de soft utilizeaz
modul prelucrat i disciplina de linie.
Softul de reea este modulat, suportnd diferite dispozitive i
protocoale. Nivelul de deasupra driverelor de reea se ocup cu funciile de
dirijare, asigurndu-se c pachetul potrivit se duce la dispozitivul sau la
programul de protocol potrivit. Cele mai multe sisteme UNIX conin n
nucleu ntreaga funcionalitate a unui ruter.
Deasupra codului de dirijare este stiva de protocoale, incluznd
totdeauna IP i TCP, precum i alte protocoale adiionale. Peste ntreaga
reea se afl interfaa de socluri (Sockets) care permite programelor s
creeze socluri n comunicarea ntre procese.
Deasupra driverului de disc exist dou componente:
-memoria ascuns tampon (tampoane cache);
-memoria de pagini a sistemului.
Dac la primele versiuni UNIX memoria ascuns tampon era o
bucat strict limitat de memorie, n sistemele moderne actuale nu exist
nici o limit fix i orice pagin de memorie poate fi luat pentru oricare
dintre funcii.
Deasupra memoriei ascunse tampon exist sistemul de fiiere.
Majoritatea sistemelor UNIX suport mai multe sisteme de fiiere, inclusiv
sistemul de fiiere system V. Toate acestea partajeaz aceiai memorie
ascuns tampon.
Deasupra sistemului de fiiere se situeaz numirea fiierelor (file
naming), gestiunea cataloagelor, gestiunea legturilor tari, a legturilor
simbolice i alte proprieti ale sistemelor de fiiere.
Deasupra memoriei intermediare de pagini este sistemul de memorie
virtual. Toat paginarea logic se afl aici, ca, de exemplu, algoritmul de
nlocuire a paginilor. Deasupra sa se situeaz codul pentru punerea n
coresponden a fiierelor n memoria virtual i codul pentru gestiunea la
nivel nalt a defectelor de pagini. Acesta este codul care i d seama ce s
fac atunci cnd apare o eroare de pagin. Mai nti verific dac referina
la memorie este valid i, dac este, unde este pagina necesar i cum poate
Sisteme de operare 229
fi obinut. Ultima coloan conine gestiunea proceselor. Deasupra
dispecerului se afl programatorul proceselor care alege procesul care se va
executa n continuare. Dac firele de execuie sunt gestionate n nucleu,
atunci aici sunt gestionate, dei pe unele sisteme UNIX sunt tratate n
spaiul utilizator. Superior programatorului este codul pentru procesarea
semnalelor i pentru trimiterea lor la destinaia corect, la fel ca i crearea
proceselor i codul lor de terminare.
Nivelul de sus este interfaa cu sistemul. n stnga este interfaa cu
apelurile sistem. Toate apelurile de sistem vin aici i sunt direcionate ctre
unele din modulele de mai jos, n funcie de natura apelului. n partea
dreapt a nivelului de sus se situeaz intrarea pentru capcane i ntreruperi,
incluznd semnalele, erorile de pagin, excepiile de procesor i
ntreruperile intrare/ieire.
10.8. STRUCTURA SISTEMULUI DE OPERARE
WINDOWS
Mod
utiliza
tor
Exec Mod
Nucleu n nu n nucleu
nucleu
M
a
n
a
g
e
r


d
e


I
/
E
M
a
n
a
g
e
r

d
e

o
b
i
e
c
t
e
M
a
n
a
g
e
r

d
e

p
r
o
c
e
s
e
M
a
n
a
g
e
r

d
e


m
e
m
o
r
i
e
M
a
n
a
g
e
r

d
e

s
e
c
u
r
i
t
a
t
e
M
a
n
a
g
e
r

d
e

m
e
m
o
r
i
e
i
n
t
e
r
m
e
d
i
a
r

M
a
n
a
g
e
r

a
l

P
a
P
M
a
n
a
g
e
r

d
e

a
l
i
m
e
n
t
a
r
e
M
a
n
a
g
e
r

d
e

c
o
n
f
i
g
u
r
a
r
e
M
a
n
a
g
e
r


L
P
C
W
i
n

3
2




G
D
J
Sistem de
fiiere
Servicii sistem
Interfaa sistemului (NT DLL-DLL)
Proces de
serviciu
Subsistem POSIX
Program POSIX
Subsistem WIN 32 Subsistem 05/2
Program WIN 32 Program 05/2
Driver de
dispozitiv
Nivelul de abstractizare a hardului (HAL)
HARD
NUCLEU Driver
video
Sorin Adrian Ciureanu 230
Fig.10.6. Structura sistemului de operare WINDOWS 2000.
Dintre toate versiunile, alegem prezentarea structurii sistemului de
operare din WINDOWS 2000.
Aceast structur are dou pri semnificative:
-nucleul propriuzis;
-subsistemele de mediu care lucreaz n mod utilizator.
Dup cum se vede din figur, structura acestui sistem de operare este
modular ceea ce mbuntete mult portabilitatea. WINDOWS 2000 este
organizat pe niveluri, fiecare nivel utiliznd serviciile nivelelor din nivelul
inferior. Fiecare modul ndeplinete o funcie particular i are o interfa
bine definit fa de celelalte module.
Nivelele cele mai de jos HAL i nucleul sunt scrise n limbaj C i
limbaj de asamblare i sunt dependente de main. Nivelele superioare sunt
scrise n C sau C++.
Vom examina n continuare diferitele componente ale sistemului,
ncepnd de la nivelurile inferioare pn la cele superioare.
Nivelul de abstractizare a hardului (HAL)
HAL nseamn Hardware Abstraction Layer. Denumirea a fost
inspirat i de filmul lui Stanley Kubrick Odiseea spaial 2001 n care
exist un computer numit HAL. Numele acestuia se obine prin scderea
unui 1 din fiecare liter de la IBM.
Scopul nivelului Hal este de a prezenta celorlalte nivele ale SO
dispozitive hard abstracte, sub forma unor servicii independente de maini,
cum ar fi apelurile de proceduri sau macro-urile. n general, serviciile alese
pentru a fi incluse n HAL sunt servicii legate de cipul de pe placa de baz,
care pot varia de la o main la alta. Hal este proiectat pentru a ascunde
diferenele dintre diferite plci de baz, nu ns i diferenele dintre
procesoare. Serviciile oferite de Hal sunt:
-accesul la registrele dispozitivelor;
-adresarea dispozitivelor independent de magistral;
-tratarea ntreruperilor;
-transferul DMA;
-controlul cronometrelor i a ceasului de timp real, a zvoarelor de
spin de nivel jos;
-sincronizarea procesoarelor multiple;
-interfaa cu memoriile BIOS i CMOS.
n ceea ce privete scrierea n registrele dispozitivelor i adresarea
dispozitivelor independent de magistral, Hal ofer trei proceduri pentru
citire i trei proceduri de scriere:
Sisteme de operare 231
Proceduri de citire din registrele dispozitivelor:
UC=READ-PORT-UCHAR(port);
US=READ-PORT-USHOR(port);
Ul=READ-PORT-ULONG(port);
Proceduri de scriere n registrele dispozitivelor:
WRITE-PORT-UCHAR(port,UC);
WRITE-PORT-USHORT(port,UC);
Hal furnizeaz un serviciu pentru identificarea dispozitivelor prin
punerea n coresponden a adreselor relative la magistral cu adresele
logice ale sistemului. n acest fel driverele nu trebuie s urmreasc pe ce
magistral este un dispozitiv. Aceste adrese logice sunt asemntoare cu
referinele pe care sistemul de operare le d programelor utilizator pentru
referirea fiierelor i a altor resurse de sistem. De asemenea, acest mecanism
protejeaz nivelele de mai sus de proprietile structurilor alternative de
magistrale i de conveniile de adresare.
ntreruperile sunt dependente de magistral. HAL pune la dispoziie
servicii pentru denumirea ntreruperilor, n general, n tot sistemul, i
servicii ce permit driverelor s ataeze o ntrerupere, n mod portabil, fr a
trebui s cunoasc nimic despre ce anume vector de ntrerupere este pentru o
anumit magistral.
Configurarea i administrarea transferului DMA ntr-un mod
independent de dispozitiv se face n mod comandat, utiliznd mecanismele
specifice ale DMA i ale plcilor de I/E. De asemenea scrierea i
citirea. cache este fcut tot de HAL.
Tot Hal administreaz ceasurile i cronometrele ntr-un mod portabil.
HAL asigur unele primitive pentru administrarea acestei sincronizri , cum
ar fi zvoarele de spin n care un proces ateapt ca o resurs deinut de alt
proces s fie eliberat, n special n cazul n care resursa este meninut
foarte puin, numai cteva instruciuni main.
HAL discut cu BIOS-ul i examineaz memoria CMOS, pentru a
vedea ce magistrale i ce dispozitive de I/E conine sistemul i cum au fost
ele configurate.
Deoarece HAL este dependent de main, este normal s existe o
diversitate de HAL-uri disponibile pe kitul de instalare de pe WINDOWS
2000. n momentul instalrii sistemului, este selectat cel potrivit i copiat n
catalogul sistem \ winkit\system 32\ cu hal.dll. Toate pornirile ulterioare
folosesc aceeai versiune de HAL iar tergerea ei face ca sistemul s nu mai
porneasc.
Nivelul nucleu .Deasupra nivelului de abstractizare a hardului se
afl nucleul i driverele dispozitiv.
Sorin Adrian Ciureanu 232
Principalele obiective ale nucleului sunt:
a)-asigurarea unei abstractizri a hardului, de nivel mai nalt;
b)-comutarea firelor de execuie;
c)-suportul de nivel jos pentru obiecte de control;
d)-suportul de nivel jos pentru obiecte dispecer;
a)-Obiectivul nucleului este de a face ca restul sistemului de operare
s fie complet independent de hard i astfel foarte portabil. El continu de
acolo de unde se oprete HAL i construiete peste serviciile HAL, la un
nivel extrem de jos, pentru a crea abstraciuni de un nivel mai nalt.
La nivelul nucleu, operaiile curente care se fac sunt:
-salvarea tuturor registrelor procesorului;
-modificarea tabelelor de pagini;
-managementul tampoanelor cache.
b)-Comutarea firelor de execuie se face de ctre nucleu prin
salvarea vechiului fir n tabelele de memorie, prin setarea hrii de memorie
i ncrcarea registrelor pentru noul fir de execuie. Codul pentru
planificarea firelor de execuie se afl tot n nivelul nucleu, acesta selectnd
din coada de ateptare noul fir de execuie.
c)-Obiectele de control (Control Objects), cele care controleaz
sistemul, sunt:
-obiecte primitive de proces;
-obiecte de ntreruperi;
-DPC (Defererred Procedure Call) sau Apeluri de Proceduri
ntrziate;
-APC ( Asynchronous Proceure Call) sau Apeluri de Proceduri
Asincrone.
Un obiect DPC este utilizat, ntr-o procedur de tratare a
ntreruperilor, pentru a separa partea critic, din punct de vedere al timpului,
de partea necritic. Un obiect APC este asemntor cu obiectul DPC, cu
excepia faptului c el se execut n contextul unui proces specific.
d)-Obiectele dispecer constau n: mutex-uri, semafoare, evenimente,
cronometre de ateptare, obiecte utilizate la planificarea firelor de execuie,
planificare care este o sarcin a nucleului.
Drivere de dispozitiv.
n general rolul driverelor este foarte clar: ele asigur buna
funcionare a dispozitivelor I/E. Pot avea ,ns, i alte roluri, cum ar fi:
criptarea unui flux de date sau asigurarea accesului la anumite structuri de
date ale nucleului. Organizarea driverelor n WINDOWS este urmtoarea:
-drivere vizibile macroscopic, pentru dispozitive I/E foarte utilizate,
cum ar fi discurile i imprimantele;
Sisteme de operare 233
-drivere foarte puin utilizate, pentru dispozitive interne i cipuri;
-driverele WIN 32 CDI i driverele video care sunt cele mai mari
drivere de dispozitiv i care sunt cele maides utilizate drivere de ctre
sistemul de operare, ele rezolvnd multe apeluri sistem i o mare parte din
grafic.
Executivul
Deasupra nivelului nucleu i a driverelor de dispozitiv, se afl partea
superioar a sistemului de operare, denumit executiv.
Executivul este scris n limbaj C, este independent de arhitectur i
poate fi portat cu un efort relativ mic. Structura executivului const n 11
componente, fiecare dintre ele fiind doar o colecie de proceduri care
conlucreaz pentru realizarea unui obiectiv. Nu exist bariere ferme ntre
pri iar componentele de pe acelai nivel pot s se apeleze una pe cealalt
n mod extensiv.
Cele 11 componente sunt:
-Managerul de obiecte (Object manager) gestioneaz toate obiectele
cunoscute sistemului de operare. Obiectivul su este de a ine evidena
tuturor obiectelor. La crearea unui nou obiect, managerul de obiecte i aloc
un bloc de memorie virtual din spaiul de adrese al nucleului pe care l
returneaz n lista de blocuri libere atunci cnd obiectul este dealocat.
-Managerul de I/E (I/Omanager) ofer servicii de generare de I/E i
gestioneaz dispozitivele I/E, apelnd driverele.
-Managerul de procese (Process manager) controleaz procesele i
firele de execuie, asigurnd principalele operaii cu procese precum crearea
i terminarea lor. Ele se ocup de mecanismele de gestionare a proceselor i
nu de politicile respective, aceste mecanisme constituind cheia
multiprogramrii n sistemul de operare WINDOWS.
-Managerul de memorie (Memory manager) asigur serviciile pentru
memoria virtual, implementat prin paginare la cerere.
-Managerul de securitate (Security manager) asigur mecanismul de
securitate care const n implementarea cerinelor crii aurii.
-Managerul memoriei intermediare (Cache manager) menine
ultimele blocuri de disc folosite n memorie pentru a accelera accesul la ele
cnd sunt cerute. Funcioneaz dup principiile memoriei cache.
-Managerul de configurare automat a dispozitivelor (Plug and Play
(PaP)) este utilizat pentru dispozitivele periferice cel mai recent ataate
sistemului de operare. Pentru unele dispozitive I/E se face o verificare la
pornire, pentru altele nu se face. Unele dispozitive, ca USB, pot fi ataate n
orice moment i ataarea lor va declana un mesaj ctre managerul PaP care
va localiza i ncrca driverul respectiv.
Sorin Adrian Ciureanu 234
-Managerul de alimentare (Power manager) ine sub supraveghere
folosirea energiei de alimentare ceea ce nseamn ntreruperea alimentrii
monitorului (displayului) i a discurilor, dac acestea nu au fost accesate o
anumit perioad de timp. Pe calculatoarele portabile, managerul de
alimentare monitorizeaz folosirea bateriei.
-Managerul de configurare (Configuration manager ) rspunde de
adugarea unei noi nregistrri n registre i caut o cheie cnd i se cere.
-Managerul de apeluri de proceduri locale (Local Procedure Call
Manager-RPC) ntreine o comunicaie ntre procese cu un nivel ridicat de
eficien. Este utilizat ntre procese i subsistemele lor.
-Modulul Win 32 GDI manipuleaz anumite apeluri sistem. Iniial el
a fost plasat n spaiul utilizator. Apoi a fost mutat n spaiul nucleu, n
WINDOWS NT 4.0. pentru mbuntirea performanelor. GDI trateaz
gestionarea imaginilor pentru monitor i imprimante. El furnizeaz apeluri
sistem care permit programelor utilizator s scrie pe un monitor sau
imprimant ntr-un mod independent de dispozitiv. De asemenea el conine
i managerul de ferestre i drivere de afiare.
Servicii de sistem (System services)
Funcia sa este s furnizeze o interfa ctre executiv. El primete
apeluri sistem WINDOWS 2000 i apeleaz alte pri ale executivului
pentru rezolvarea acestora.
La pornire, WINDOWS 2000 este ncrcat n memorie sub forma
unei colecii de fiiere. Partea principal a sistemului de operare, care const
din nivelele nucleu i executiv, se afl n fiierul ntoskml.exe.. HAL este o
biblioteca partajat aflat ntr-un fiier denumit hal.dll. win32 GDI i
interfaa dispozitivelor grafice se afl n fiierul win32 k.sys.
Nivelul utilizator
Componentele nivelului utilizator sunt:
-DLL-urile (Dynamic Link Librairy = Bibliotec cu legare
dinamic);
-subsistemele de mediu;
-procese de serviciu.
Aceste componente conlucreaz pentru a furniza fiecrui proces
utilizator o interfa, alta dect interfaa apelurilor sistem.
WINDOWS 2000 suport trei API-uri diferite:
-WIN 32
-POSIX
-OS/2
Fiecare dintre aceste interfee are o list de apeluri de bibliotec
publicate care pot fi folosite de programatori. Treaba DLL-urilor i a
Sisteme de operare 235
subsistemelor de mediu este s implementeze funcionalitatea interfeei,
ascunznd n acest fel programelor de aplicaii adevrata fa a apelurilor de
sistem. n particular, interfaa Win 32 este interfaa oficial a mai multor
versiuni Windows printre care i WINDOWS 2000. Prin utilizarea DLL-
urilor i a subsistemului de mediu Win32, se poate scrie unprogram
folosind specificaiile Win 32, program care s ruleze pe toate versiunile
Windows care au interfa Win 32 (WINDOWS 2000, WINDOWS NT,
WINDOWS 95/98), cu toate c apelurile sistem nu sunt aceleai pe sisteme
diferite.
Un program Win 32 conine apeluri ctre funciile Win 32 cum ar fi:
Create Window, Draw MenuBar, Open Semaphore. Exist mii de astfel de
apeluri, iar majoritatea programelor folosesc o parte substanial din ele. O
implementare posibil ar fi legarea static a fiecrui program Win 32 cu
toate procedurile din bibliotec pe care le utilizeaz. Dac s-ar face acest
lucru, fiecare program binar ar conine n interiorul executabilului su o
copie a fiecrei proceduri folosite. Aceasta ar nsemna o risip mare de
memorie, mai ales n situaia n care utilizatorul are mai multe programe
deschise n acelai timp i multe dintre ele utilizeaz aceleai proceduri de
bibliotec. Pentru a evita aceast problem, se utilizeaz biblioteci partajate
numite DLL-uri. Fiecare DLL adun n acelai fiier, cu extensie. dll, o serie
de proceduri de biblioteci nrudite i structurile lor de date. Atunci cnd o
aplicaie este legat, editorul de legturi i d seama c unele proceduri de
bibliotec aparin DLL-urilor i nregistreaz aceast informaie n antetul
executabilului.
Apelurile ctre procedurile din DLL sunt fcute indirect, printr-un
vector de transfer din spaiul de adrese al apelantului. Iniial acest vector
este umplut cu zerouri deoarece adresele procedurilor ce vor fi apelate nu
sunt nc cunoscute. Cnd procesul aplicaie este pornit, DLL-urile care sunt
necesare sunt localizate pe disc sau chiar n memorie i puse n
coresponden cu spaiul virtual de adrese al procesorului. Vectorul de
transfer este apoi completat cu adrese corecte, n aa fel ca procedurile s fie
apelate prin intermediul lui, cu o pierdere mic de eficien. Ctigul este
aici faptul c, dei sunt mai multe programe de aplicaie cu acelai DLL, pus
n coresponden n interior, numai o singur copie a textului DLL este
necesar n memoria fizic.
n figura 10.8. sunt date diferite moduri de implementare a apelurilor
din Win 32 API.
Fiecare proces utilizator este legat de obicei cu un numr de DLL-uri
care mpreun implementeaz interfaa Win 32. Pentru a efectua un apel
API, trebuie apelat o procedur dintr-un DLL, n figur acesta fiind pasul
Sorin Adrian Ciureanu 236
1. n unele cazuri, DLL-ul apeleaz un alt DLL, n figur fiind ntdll.dll,
care la rndul su este captat n sistemul de operare, n figur 2a i3a. De
asemenea este posibil ca DLL-ul s fac ntreaga operaie fr s fac nici
un apel sistem. Pentru alte apeluri Win 32 API este aleas alt cale. Mai
nti este trimis un mesaj ctre procesul csrss.exl al subsistemului Win 32,
care face unele prelucrri, i apoi un apel de sistem (paii 2b, 3b, 4b.)
Fig. 10.8. Moduri de implementare a apelurilor sistem Win 32 API
n prima versiune de WINDOWS NT , toate apelurile WIN 32 API
foloseau ruta 2b,3b,4b, meninnd o mare parte din sistemul de operare n
spaiul utilizator (de exemplu grafica). ncepnd cu WINDOWS NT 4.0 , o
mare parte din cod a fost trecut n modul nucleu (de fapt n driverul Win 32
GDI).
n WINDOWS 2000 numai un mic numr din apelurile Win 32 API,
cum ar fi crearea proceselor i a firelor de execuie, aleg ruta cea mai lung.
Celelalte aleg ruta prin ocolirea subsistemului Win 32.
n ultimele variante ale sistemului WINDOWS 2000, exist 800
DLL-uri diferite n catalogul /Win nt/system 32. totaliznd 1300 MB,
gdi 32.dll
user 32.dll Proces
utilizator
kernel 32.dll
2b 2a
Proces al
subsistemului
de mediu
(csrss.exl) 3b
3b
4b 3a
4b 3a
Apel
Apel
Apel 1
Subsistem
Win 32
Interfaa sistemului (nt dl.dll)
Sistem de operare
Sisteme de operare 237
numrul apelurilor API coninute n ele fiind aproximativ13060; numrul de
operaii exportate din prima lansare public a ntdll.dll din WINDOWS 2000
este de 1179.
Afar de interfaa de proces Win 32, care este cea mai important i
cel mai des utilizat, mai exist dou interfee, POSIX i 05/2.
POSIX (Portable Operating System Interface)furnizeaz un suport
minim pentru aplicaiile UNIX. Dei ar fi trebuit ca prin mediul POSIX s
se porteze programe UNIX pe WINDOWS 2000, acest lucru este practic
imposibil. Mediul POSIX a fost inclus doar la cerina guvernului SUA care
cere ca sistemele de operare utilizate de guvern s fie compatibile cu
P1003.1, iar mediul POSIX suport acest lucru. Practic, pentru a permite
utilizatorilor UNIX s migreze ctre WINDOWS 2000, Microsoft a pus la
dispoziie un produs, numit Inferix, care ofer un grad mai mare de
compatibilitate dect subsistemul POSIX.
Subsistemul 05/2 este limitat n funcionalitate i nu suport nici o
aplicaie grafic, practic fiind nefolositor. Deci, ideea de a avea mai multe
interfee de sistem de operare implementate de diferite procese din spaiul
utilizator este, n esen, pierdut, singura interfa rmnnd Win 32.
10.8.1.Implementarea obiectelor n SO WINDOWS
2000
Obiectele sunt probabil conceptul cel mai important din WINDOWS
2000. Ele asigur o interfa uniform i consistent ctre toate resursele
sistemului i ctre structurile de date.
Un obiect este o colecie de variabile legate ntre ele printr-un set de
proceduri numite metode, care in loc de fiiere sau documente.
Iat cteva din aspectele cele mai importante ale utilizrii obiectelor
n WINDOWS 2000:
-toate obiectele sunt denumite i accesate n acelai fel;
-prezint o securitate mult mai bun, din moment ce toate accesele la
obiecte trec obligatoriu prin acelai loc: managerul de obiecte; n consecin
toate verificrile de securitate sunt puse ntr-un singur loc, pe care nici un
proces nu poate s-l ocoleasc;
-partajarea obiectelor ntre procese funcioneaz ntr-un mod
uniform;
-tergerea obiectelor se face n siguran, tot datorit managerului de
obiecte.
n figura 10.9. este prezentat structura unui obiect.
Sorin Adrian Ciureanu 238
Fig. 10.9. Structura unui obiect.
Fiecare obiect conine un antet cu anumite informaii comune tuturor
obiectelor de toate tipurile. Cmpurile din acest antet includ: numele
obiectului, catalogul n care se afl, informaia de securitate i o list de
procese cu referine deschise ctre obiect.
Antetul de obiect conine un cmp de ncrcare a cotei, care
reprezint cota perceput proceselor pentru deschiderea obiectului. Dac un
obiect fiier cost 1 punct i un proces aparine unui job care are o cot de
30 de puncte, procesele din acel job pot deschide n total numai 30 de
fiiere. n acest el se pot fixa limite de resurse pentru fiecare tip de obiect
separat. Cnd un obiect trebuie ters, spaiul su de adrese trebuie recuperat.
Mecanismul de recuperare const ntr-un contor de referine n antetul
A
n
t
e
t
u
l

o
b
i
e
c
t
u
l
u
i
Numele obiectului
Directorul n care se afl obiectul
Informaie de securitate
Costul folosirii obiectului
Lista proceselor, cu referine
Contoare de referin
Indicator ctre obiectul de tip
Date specifice obiectului
D
a
t
e
l
e
o
b
i
e
c
t
u
l
u
i
o
b
i
e
c
t
u
l
u
i
Tipuri de acces
Drepturi de acces
Costul de folosire a obiectului
Sincronizabil
Paginabil
Metoda de deschidere
Metoda de nchidere
Metoda de tergere
Metoda de cerere nume
Metoda de audibilitate
Metoda de securitate
Numele tipului
Sisteme de operare 239
fiecrui obiect. Contorul este incrementat de fiecare dat cnd un obiect este
deschis i decrementat de fiecare dat cnd este nchis. Cnd ajunge la
valoarea 0, nici un utilizator nu mai deine o referin ctre obiect. Cnd un
obiect este nsuit sau eliberat de o component executiv, un al doilea
contor este incrementat sau decrementat., cu toate c nu este emis efectiv
nici o referin. Cnd amndou contoarele ajung la 0, nici un proces
utilizator i nici un proces executiv nu mai folosete obiectul, aa c acesta
poate fi ters i memoria sa eliberat.
Obiectele sunt tipizate, fiecare obiect avnd proprietile tuturor
obiectelor de acelai tip. Informaia obiectului de tip include elemente cum
ar fi: denumirea tipului, ateptarea unui obiect la mutex-uri sau semafoare
etc. Foarte importante n coninutul unui obiect sunt referinele la codul
pentru anumite operaii standard ca: open, close, delete.
Sorin Adrian Ciureanu 240
Sisteme de operare 241
Capitolul 11
SISTEMUL DE OPERARE LINUX.
APLICAII
11.1. SCURT ISTORIC
Anul 1965 poate fi considerat ca punct de pornire pentru sistemul de
operare UNIX. Atunci a fost lansat la MIT (Massachusets Institute of
Technology) un proiect de cercetare pentru crearea unui sistem de operare
multiutilizator, interactiv, punndu-se la dispoziie putere de calcul i spaiu
de memorie n cantitate mare. Acest sistem s-a numit MULTICS. Din el,
Ken Thompson a creat n 1971 prima versiune UNIX. De atunci UNIX-ul a
cunoscut o dezvoltare puternic n noi versiuni.
In 1987, profesorul Andrew Tanenbaum creeaz, la Vrije
Universiteit din Amsterdam, un sistem de operare , asemntor cu UNIX-ul,
cu scop didactic, pentru dezvoltare de aplicaii, numit MINIX.
Pornind de la MINIX, un tnr student finlandez, Linus Torvalds, a
realizat n anul 1991 un sistem de operare mai complex, numit LINUX.
Datorit faptului c a fost nc de la nceput free , LINUX-ul a cunoscut
o puternic dezvoltare, fiind sprijinit da majoritatea firmelor mari, cu
excepia, bineneles, a MICROSOFT-ului.
n anul 1998 s-a format Free Standars Group n cadrul cruia exist
iniiative de standardizare pentru a ncuraja dezvoltarea de programe i
aplicaii n LINUX. Ceea ce a lipsit mult vreme LINUX-ului a fost un
standard pentru ierarhia din sistemul de fiiere al programelor i aplicaiilor
dar mai ales al bibliotecilor.
Lucrul cel mai important n LINUX este faptul c ntregul sistem de
operare i o serie ntreag de operaii sunt puse la dispoziie, inclusiv
sursele. Multe universiti i faculti de specialitate i dezvolt propriile
aplicaii n LINUX.
Sorin Adrian Ciureanu 242
11.2. DISTRIBUII N LINUX
LINUX-ul este un sistem distribuit. Dintre cele trei specii de sisteme
cu procesoare multiple i anume: multiprocesoare, multicomputere i
sisteme distribuite, sistemele distribuite sunt sisteme slab cuplate, fiecare
din noduri fiind un computer complet, cu un set complet de periferice i
propriul sistem de operare.
Exist la ora actual peste 300 de distribuii n LINUX. Vom trece n
revist cele mai importante i mai utilizate distribuii.
11.2.1. Distribuia SLACWARE
Creatorul acestei distribuii este Patrick Volkerding, prima versiune
fiind lansat de acesta n aprilie 1993. Aceast distribuie are dou prioriti
de baz: uurina folosirii i stabilitatea.
Instalarea se face n mod text, existnd posibilitatea alegerii unui
anumit KERNEL la bootare, dei cel implicat este suficient, n general,
pentru o instalare normal.
Formatul standard al pachetelor SLACKWARE este .tgz i exist o
serie de programe de instalarea, upgradarea i tergerea pachetelor, cum ar fi
install pkg, upgrade pkgrd, care nu pot fi folosite dect direct din linia de
comand.
11.2.2. Distribuia REDHAT
Este una din cele mai rspndite distribuii. Conine un sistem de
pachete RPM, sistem ce ntreine o baz de date cu fiierele i pachetele din
care provin.
Versiunea REDHAT conine codul surs complet al sistemului de
operare i al tuturor utilitarelor, cea mai mare parte a acestuia fiind scris n
limbajul C.
La instalarea sistemului nu se permit dect partiii tip ext 2 i ext 3.
Exist module de kernel i sisteme jurnalizate, ca JFS sau Reiser FS, care
pot fi montate i dup instalare. La instalare se poate configura un sistem
FireWall cu trei variante de securitate, High, Medium i N.FireWall.
Exist o sut de aplicaii destinate configurrii n mod grafic a
sistemului, aplicaii specifice att interfeei GNOME ct i KDE.
Sisteme de operare 243
11.2.3. Distribuia DEBIAN
Este considerat cea mai sigur dintre toate distribuiile existente. De
aceast distribuie se ocup o comunitate restrns de dezvoltatori, pachetele
fiind foarte bine studiate i testate nainte de a fi lansate ca release-uri ntr-
o distribuie. De obicei, aplicaiile i programele sunt cu cteva versiuni n
urma celorlalte distribuii. Nu exist, n general, o activitate comand de
promovare a acestei distribuii, singurul suport fiind asigurat de o list de
discuii.
Procedura de instalare este una din cele mai dificile. Exist dou
posibiliti de instalare:
a)simpl;
b)avansat.
n varianta simpl se aleg taskuri de instalare, fiecare task
presupunnd instalarea mai multor pachete reunite de acesta.
n cazul unei variante avansate, exist posibilitatea alegerii efective a
fiecrui pachet n parte.
Meritul de baz al acestei distribuii este acela c este cea mai
apropiat de comunitatea Open Source. Pachetele sunt de tipul deb i sunt
administrate cu ajutorul unui utilitar numit APT(Advanced Package Tool).
11.2.4. Distribuia MANDRAKE
Este o distribuie care pune baz pe o mare internaionalizare, fiind
disponibile versiuni de instalare n 40 de limbi. Exist i o distribuie n
limba romn, n dou variante de manipulare a tastaturii, gwerty i qwertz.
MANDRAKE are un sistem de gestiune dual:
a)Linux Conf;
b)Drak Conf.
Linus Conf reprezint motenirea de la RedHat i permite
modificarea setrilor obinuite ale sistemului: gestiunea utilizatorilor, a
serviciilor (dns, mail, rtp), configurarea plcii de reea.
Drak Conf este un utilitar care se dorete a fi pentru LINUX ceea ce
Control Panel reprezint pentru WINDOWS. El permite configurarea
sistemului de la partea hardware ce folosete Hard Drake (plci de reea,
video, sunet, tuner) pn la cele mai utilizate servicii (web rtp, dns, samba,
NIS, firewall). Au fost introduse wizard-uri pentru toate serviciile ce pot fi
setate grafic.
Sorin Adrian Ciureanu 244
11.2.5. Distribuia LYCORIS
Este o companie foarte tnr care i-a propus drept scop crearea
unei versiuni Linux foarte uor manevrabil. Instalarea acestei distribuii
este cea mai simpl instalare dintre toate existente pn n prezent. Nu este
permis nici un fel de selecie a pachetelor, individuale sau n grup. Procesul
de instalare ncepe imediat dup alegerea partiiilor, rulnd n fundal, iar
configurrile sistemului se realizeaz n paralel.
O aplicaie util este Network Browser, realizat de Lycoris, care
permite interconectarea simpl cu alte sisteme Linux sau Windows. Aceast
versiune de Linux se adreseaz utilizatorilor obinuii cu mediile de lucru
Microsoft Windows. n acest sens, desktopul conine MyLinux System i
Network Browser. Configurarea sistemului se realizeaz prin intermediul
unui Control Panel care este de fapt KDE Control Center. Managerul
sistemului de fiiere, Konqueror, reunete aplicaiile executabile de ctre
Microsoft Windows i le ruleaz cu ajutorul programului Wine, cu care se
pot chiar instala programe Windows.
11.2.6. Distribuia SUSE
SUSE este distribuia european (de fapt german) cea mai
cunoscut i de succes. Se axeaz pe personalizarea sistemului n ct mai
multe ri europene. Din pcate limba romn lipsete din aceast
distribuie.
11.3. APLICAII LINUX
Vom prezenta n aceste aplicaii o serie de programe pe baza unor
apeluri sistem sau a unor funcii din LINUX. Mediul de programare este
limbajul C.
Aplicaiile sunt structurate pe modelul unui laborator la disciplina
Sisteme de operare, fiecare lucrare de laborator prezentnd trei pri:
1) Consideraii teoretice asupra lucrrii.
2) Desfurarea lucrrii, cu exemple de programe.
Sisteme de operare 245
3) Tema pentru lucru individual, care, de obicei, propune crearea de
diferite programe n contextul lucrrii respective.
11.3.1. Comenzi LINUX
1) Consideraii teoretice
Vom prezenta aici cteva din comenzile principale ale sistemului de
operare LINUX, date pe linia de comand. Aceste comenzi reprezint
interfee ntre utilizator i sistemul de operare i ele sunt de fapt programe ce
se lanseaz n execuie cu ajutorul unui program numit interpretor de
comenzi sau, in terminologia UNIX, numit shell.
2)Desfurarea lucrrii
a) Comenzi pentru operaii asupra proceselor.
Listarea proceselor active n sistem.
Comanda ps (process status) furnizeaz informaii detaliate, n
funcie de opiunile afiate, despre procesele care aparin utilizatorului.
Comanda $ps, cu urmtorul exemplu de rspuns:
pid TTY STAT TIME COMMAND
3260 p3 R 0:00 bash
3452 p4 W 1:21 ps
4509 p3 Z 5:35 ps
5120 p9 S 8:55 bash
Prima coloan (pid) reprezint identificatorul procesului.
A doua coloan (TTY) reprezint terminalul de control la care este
conectat procesul. Pot fi i adrese de ferestre sau terminale virtuale, cum
este i n exemplul de fa ( valorile p3, p4, p9 sunt adrese de terminale
virtuale).
A treia coloan reprezint starea procesului.
R(Running) = n execuie
S(Sleeping) = adormit pentru mai puin de 20 secunde
I(Idle) = inactiv, adormit pentru mai mult de 20
secunde
W(Swapped
out)
= scos afar din memoria principal i
trecut pe hard disc
Z(Zombie) = terminat i ateapt ca printele s se
termine
N(Nice) = proces cu prioritate redus
A patra coloan (TIME) indic timpul de procesor folosit de proces
pn n prezent.
Sorin Adrian Ciureanu 246
A cincia coloan (COMMAND) listeaz numele programului
executat de fiecare proces.
Dintre opiunile acestei comenzi amintim:
Opiunea $ps -u, cu urmtorul rspuns:
USER pid %CPU MEM VSZ RSS TTY STAT START CMD.
500 3565 0.0 1.4 4848 1336 pts/0 S 19:15 bash
500 3597 0.0 0.7 3824 688 pts/0 R 19:37 ps-u
unde cmpurile noi reprezint:
USER = Numele proprietarului fiierului
%CPU = Utilizarea procesorului de ctre proces
%MEM = Procentele de memorie real folosite de proces
START = Ora la care procesul a fost creat
RSS = Dimensiunea real n memoria procesului(kB)
Opiunea $ps -l , cu urmtorul rspuns:
F S UID PID PPID C PPI NI ADDR SZ TTY TIME CM
D
0 S 500 3565 3563 0 76 0 - 1212 - pts/0 00:00:00 bash
0 R 500 3599 3565 0 78 0 - 1196 - pts/0 00:00:00 ps
unde cmpurile noi reprezint:
UID = Identificatorul numeri al proprietarului procesului
F = Fanioane care indic tipul de operaii executate de
proces
PPID = Identificatorul procesului printe
NI = Incrementul de planificare al procesului
SZ = Dimensiunea segmentelor de date al stivei
WCHAN = Evenimentul pe care procesul l ateapt
Opiunea $ps -e determin ca la fiecare comand s se afieze att
argumentele ct i ambiana de execuie.
Opiunea $ps -a determin afiarea de informaii i despre procesele
altor utilizatori momentani conectai n sistem.
Listarea activitilor diverilor utilizatori
Comanda $W, cu urmtorul rspuns:
USER TTY FROM LOGING IDLE JLPU PCPU WHAT
Ion 0 - 7:13pm ? 0,00s 0,32s jusr/bin/gnome
Ion pts/0 0:0 7:15pm 0,00s 0,06s 0,01s W
Listarea dinamic a proceselor din sistem
Comanda $top cu care se poate avea o imagine dinamic a
proceselor din sistem i nu o imagine static ca la comanda W. Perioada de
actualizare este implicit de 5 secunde.
b) Comenzi pentru operaii generale asupra fiierelor i cataloagelor:
Comanda $pwd , pentru afiarea numelui catalogului curent.
Sisteme de operare 247
Comanda $ls , pentru afiarea coninutului unui catalog ; este
echivalent cu comanda DIR din MS-DOS. Cele mai des utilizate opiuni
sunt $ls -l , $ls -al, $ls -li bin.
Comanda $cd , pentru schimbarea catalogului curent; nume catalog.
Comanda $rm , pentru tergerea unei intrri n catalog; nume
catalog.
Comanda $cat , pentru listarea coninutului unui fiier; nume fiier,
cu opiunile cele mai frecvente $cat -n , (afieaz numrul de ordine la
fiecare linie din text) i $cat -v (afieaz i caracterele netipribile).
Comanda $cp , pentru copierea unui fiier; nume1, nume2.
Comanda mv, redenumirea unui fiier; surs destinaie.
3) Tem
S se realizeze toate comenzile prezentate n aceast lucrare,
folosind un utilitar al LINUX-ului, de preferin mc.
11.3.2. Crearea proceselor
1) Consideraii teoretice
Pentru crearea proceselor LINUX folosete apelul sistem
fork(). Ca urmare a acestui apel un proces printe creeaz un proces
fiu. Funcia fork() returneaz o valoare dup cum urmeaz:
-1, dac operaia nu s-a putut efectua, deci eroare;
0, n codul FIULUI;
PID FIU, n codul printelui.
n urma unui fork procesul fiu, nou creat, va moteni de la printe
att codul ct i segmentele de date i stiva. n ceea ce privete sincronizarea
printelui cu fiul, nu se poate spune care se va executa mai nti, fiul sau
printele. Se impun dou probleme majore:
a) sincronizarea printelui cu fiul;
b) posibilitatea ca fiul s execute alt cod dect printele.
Pentru a rezolva aceste dou situaii se folosesc dou apeluri:
wait() i exec().
Funcia wait() rezolv sincronizarea fiului cu printele . Este
utilizat pentru ateptarea terminrii fiului de ctre printe. Dac punem un
wait() n cadrul printelui, se execut nti fiul i apoi printele. Exist
dou apeluri:
pid_t wait(int*status)
pid_t waitpid(pid_t pid, int*status, int
flags)
Sorin Adrian Ciureanu 248
Prima form wait() este folosit pentru ateptarea terminrii
fiului i preluarea valorii returnate de acesta. Parametrul status este
utilizat pentru evaluarea valorii returnate, cu ajutorul ctorva macro-uri
definite special.
Funcia waitpid() folosit ntr-un proces va atepta un alt proces
cu un pid dat.
Funcia exec() are rolul de a face ca fiul s execute alt cod dect
printele. Exist mai multe forme ale acestei funcii : execvp, execle,
execvl, execlp, execvp. De exemplu, pentru execvp avem
sintaxa:
int execvp(const char*filename,const* char arg)
Prin aceast funcie fiul va executa, chiar de la creare, fiierul cu
nume filename.
Deoarece este prima aplicaie cu programe scrise i executate n
limbajul C, prezentm mai jos etapele lansrii unui program n C, n
sistemul de operare LINUX.
-Se editeaz un fiier surs in limbajul C, utiliznd un editor de texte,
de exemplu vi, kate sau mc. Se numete fiierul, de exemplu nume
fiier.c
-Se compileaz fiierul editat n C cu comanda:
$gcc numefiier.c
-Se execut fiierul rezultat n urma compilrii.
$ . /a.out
2)Desfurarea lucrrii
-Programul a
#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>
#include<sys/types.h>
main()
{int pid,status,i;
if((pid=fork())<0) {printf(EROARE;
exit(0);}
if(pid==0) {printf(am pornit copilul\n);
for(i=1;i<=25;i++)
{fflush(stdout);
printf(0);}
Sisteme de operare 249
exit(1);}
else {wait(&status);
printf(am pornit printele\n);
for(i=1;i<=25;i++)
{fflush(stdout);
printf(1);}}}
Aceasta este o schem posibil de apelare a funciei fork().
Dac n urma execuiei s-a terminat cu eroare, se va afia
EROARE. Dac suntem n procesul fiu (pid = =0), atunci codul
fiului nseamn scrierea a 25 cifre de 0, iar dac suntem n procesul printe,
se vor scrie 25 cifre de 1. Deoarece avem apelul wait n cadrul printelui,
nti se va executa fiul i apoi printele. Pe ecran se va afia:
am pornit copilul 0000000000000000000000000
am pornit printele 1111111111111111111111111
Rolul fflush(stdout) este de a scrie pe ecran, imediat ce
bufferul stdout are un caracter n el. Fr fflush(stdout),
momentul scrierii pe ecran este atunci cnd stdout este plin. n acest caz
trebuie s tim cnd se afieaz pe ecran ceva. Dac acest program nu ar
conine wait , atunci nu s-ar ti cine se execut primul i cine al doilea,
fiul i printele lucrnd n paralel. n programul nostru, cnd fiul tiprete
numai 0 iar printele numai 1, ar trebui ca, la o rulare, s avem la printare o
secven de 0 ,1 amestecat.( Ex: 0011101010110). Dar, dac rulm de
multe ori acest program, constatm c de fiecare dat el va tipri mai nti
25 de 0 i apoi 25 de 1, ca i cum a exista wait-ul. Care este
explicaia? Ea trebuie cutat n modul de rulare, n time sharing, n funcie
de cuanta de timp alocat fiecrui proces. Oricum ea este foarte mare n
raport cu duratele proceselor printe i fiu din exemplul nostru. De aceea,
procesele fiu i printe nu vor fi ntrerupte din rularea n procesor, deoarece
ele se termin amndou ntr-o singur cuant.
-Programul b
#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>
#include<sys/types.h>
main()
{int pid,status,i;
if((pid=fork())<0) {printf(EROARE);
exit(0);}
Sorin Adrian Ciureanu 250
if(pid==0) {printf(am pornit copilul\n);
execlp(./sorin1,./sorin1,NULL);
exit(1);}
else {wait(&status);
printf(am pornit printele\n};
for (i=1;i<=25;i++)
{fflush(stdout);
printf(1);}}}
unde sorin1 este un fiier executabil ce se obine prin compilarea
fiierului surs sorin1.c astfel:
$gcc -o sorin1 sorin1.c
Fiierul sorin1.c are coninutul:
#include<stdio.h>
main()
{int i;
for(i=1;i<=25;i++)
printf(0);}
Se observ c n acest program n codul fiului avem funcia execlp
care va nlocui codul printelui prin codul dat de fiierul executabil
sorin1 care, de fapt, realizeaz acelai lucru ca la programul anterior.
Rezultatul rulrii va fi:
0000000000000000000000000
am pornit printele 1111111111111111111111111
Fa de rezultatul de la programul anterior, nu se mai execut
printf(am pornit copilul). Din ce cauz? Pentru c atunci
cnd se execut fiul, printarea am pornit copilul este trecut n
bufferul stdout, ns cnd se execut execlp, bufferul se golete i se
execut strict numai fiierul sorin1.
Programul c
#unclude<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
main()
{pid_t copil_pid;
copil_pid=fork();
if(copil_pid>0)
/*suntem n printe i vom dormi 120 secunde*/
sleep(120);
Sisteme de operare 251
if(copil_pid==-1) {printf(EROARE);
exit(0);}
else {printf(pid copil%d\n,
getpid());
exit(1);
/*suntem n copil i ieim imediat*/}}
n acest program fiul i termin execuia imediat iar printele este
ntrziat cu 120 secunde. n acest timp fiul intr n starea zombie, pn cnd
procesul init(), care preia copiii orfani, va prelua rolul de printe al
fiului i l va scoate din starea zombie, elibernd tabela proceselor.
Programul se compileaz cu:
$gcc -o zombie numefiier.c
i se execut astfel :
$ ./zombie &
Dac se lanseaz comanda :
$ps -a
se poate observa ct timp st fiul n starea zombie, pn l preia procesul
init()
Program d
#include<stdio.h>
#include<unistd.h>
main()
{int i/*iterator*/
sum=0;
if(fork()<0){perror(eroare la fork);return(1);}
for(i=0;i<=100;i++)
{printf(valoarea lui i este%d\n,i);
fflush(stdout):}
sum+=i;}
printf(suma este%d\n,sum);return(0);}
va fi afisata de 2 ori suma primelor 100mde numere naturale dar valorile
iteratiei i vor altera in functie de care dintre ceel doua procese este
programat sa ruleze
3) Tem
S se scrie un program care s creeze 10 procese. Fiecare proces va
scrie o linie numai cu cifre; procesul 0 va scrie o linie de 0, procesul 1 va
scrie o linie numai de 1.. procesul 9 va scrie o linie numai de 9. Liniile
vor trebui scrise n ordinea cifrelor, deci prima linie de 0 i ultima de 9.
Sorin Adrian Ciureanu 252
11.3.3 Gestiunea fisierelor
11.3.3. Comunicare ntre procese
11.3.3.1. Comunicarea ntre procese prin
PIPE-uri i FI FO
1) Consideraii teoretice
a) Pipe-ul este un pseudofiier care servete la comunicarea
unidirecional ntre dou procese. Faptul c este unidirecional a fost
considerat ulterior ca una dintre limitele mecanismului i de aceea unele
versiuni actuale au nlocuit pipe-ul unidirecional prin cel bidirecional.
Astfel la SOLARIS pipe-urile sunt bidirecionale dar n Linux sunt
unidirecionale. Aici, deci, vom considera pipe-urile unidirecionale.
O alt caracteristic a pipe-ului este faptul c procesele care
comunic ntre ele trebuie s aib un grad de rudenie, de exemplu tat-fiu.
Un pipe este creat cu apelul:
int pipe (int file des[2]);
care creeaz n kernel un pipe accesibil n procesul apelant prin doi
descriptori:
file des[0] deschis n citire
file des[1] deschis n scriere
n urma apelului pipe exist dou returnri:
0 , n caz de succes,
-1, n caz de eroare.
FILE DES[0] FILE DES[1]
Fig. 11.1. Schema unui pipe unidirecional.
PROCES
KERNEL
PIPE
Sisteme de operare 253
Marea majoritate a aplicaiilor care utilizeaz pipe-urile nchid, n
fiecare dintre procese, captul de pipe neutilizat n comunicarea
unidirecional. Astfel, dac pipe-ul este utilizat pentru comunicaia printe-
fiu, atunci procesul printe scrie n pipe iar procesul fiu citete din pipe.
b)FIFO (pipe-uri cu nume)
Restricia ca procesele care comunic s fie nrudite este eliminat la
pipe-urile cu nume care sunt fiiere de tip FIFO.
Apelul sistem pentru crearea unui FIFO este:
#include<sys/types.h>
#include<sys/stat.h>
int mkfifo(const char*pathname,mode_t mode);
Cele dou argumente ale apelului sunt:
char*pathname, ( numele FIFO-ului)
mode_t mode, (apare numai la deschidere, are loc i
crearea fiierului).
Dup ce FIFO a fost creat, i se pot ataa toate operaiile tipice cu
fiiere (open, read, write, unlink etc.).
2) Desfurarea lucrrii
Programul a
Acesta este un program care transmite un text (text prin
pipe) prin pipe de la procesul printe la procesul fiu.
#include<unistd.h>
#include<sys/types.h>
#define MAXLINE 500
main()
{int n, fd[2];
pid_t pid;
char line [MAXLINE];
if(pipe(fd)<0) {printf(eroare pipe);
exit(0);}
if((pid=fork())<0) { printf(eroare fork)
exit(1);}
else
if(pid>0) {/*printe*/
close(fd[0]);
write(fd[1],text prin pipe,14);}
else {close(fd[1]);/*fiu*/
Sorin Adrian Ciureanu 254
n=read(fd[0],line, MAXLINE);
write(1,line,n);}
exit(0);}
Program b
Programul folosete dou pipe-uri, pipe1 i pipe2, ncercnd s
simuleze un pipe bidirecional. Se va observa c, de fiecare dat cnd se
execut o operaie la un capt al pipe-ului, cellalt capt este nchis.
/*
Se compileaz trei fiiere surs ca obiecte
$gcc c mainpipe.c
$gcc c client.c
$gcc c sever.c
i apoi
$gcc o mainpipe mainpipe.o client.o server.o
Se va crea un fiier cu cteva linii de text
avnd un nume, de exemplu unu, i apoi se lanseaz
$.mainpipe unu
i apare afiat ce era scris n fiierul unu.
*/
mainpipe.c
#include<stdio.h>
main()
{int childpid,pipe1[2],pipe2[2];
if(pipe(pipe1)<0 || pipe(pipe2)<0){
perror(nu pot crea pipe);
if((childpid=fork())<0)
perror(nu pot crea fork);
}else
if(childpid>0) {/*printe*/
close(pipe1[0]);
close(pipe2[1]);
client(pipe2[0],pipe[1]);
Sisteme de operare 255
while(wait((int*)0)!=childpid//wait pt. copil
close(pipe1[1]);
close(pipe2[0]);
exit(0);}
else
{/*copil*/
close(pipe1[1];)
close(pipe2[0]);
server(pipe1[0],pipe2[1]);
close(pipe1[0]);
close(pipe2[1]);
exit(0);
}
}
client.c
#include<stdio.h>
define MAXBUFF 1024
client(int readfd,int writefd)
{
char buff[MAXBUFF];
int n;
/*Citete nume fiier de la standard input*/
if(fgets(buff, MAXBUFF, stdin)==NULL)
perror(Client:eroare nume fiier);
n=strlen(buff);
if(buff[n-1]==\n)
n--;
if(write(writefd,buff,n)!=n)
perror(Client:eroare scriere nume
fiier);
/*Citire date din descriptor IPC i scriere la
standard output*/
while((n=read(readfd,buff,MAXBUFF))>0)
if(write( 1,buff,n) !=n /*fd==1 pt stdout*/
Sorin Adrian Ciureanu 256
perror(Client:eroare citire date);
}
server.c
#include<stdio.h>
define MAXBUFF 1024
server(int readfd,int writefd){
char buff[MAXBUFF];
char errmsg[256];
int n,k,fd;
extern int errno;
/*Citire nume fiier din IPC descriptor*/
if((n=read(readfd,buff,MAXBUFF))<=0)
perror(Server:eroare citire nume
fisier);
buff[n]=\0;
if((fd=open(buff,0))<0){
/*Eroare.Generm un mesaj de eroare i l
trimitem la client*/
sprint(errmsg,:nu pot sa deschid
fisierul\n);
strcat(buff,errmsg);
n=strlen(buff);
if(write(writefd,buff,n)!=n)
perror(server:eroare scriere);
}
else{
perror(ncepem bucla de citire din fisier-
scriere la client.\n);
/*Citete data din fiier i trimite
clientului*/
while((n=read(fd,buff,MAXBUFF))>0)
{
printf(Am citit %d car din fisier\n,n);
if((k=write(writefd,buff,n))!=n)
{printf(Am scris ctre client%d car\n,k);
perror(server:eroare scriere date);
}}
if(n<0)
perror(server:eroare citire);
Sisteme de operare 257
}
}
Program c
Acest program creaz un proces copil care citete dintr-un pipe un
set de caractere trimis de procesul printe, convertind orice liter mic ntr-o
litera mare. Procesul printe citete irul de caractere de la intrarea standard.
#include<stdio.h>
#include<ctype.h>
#include<stdlid.h>
#include<unist.h>
#include<sys/wait.h>
int piped[2]; /*pipe-ul*/
int pid; /*pid-ul fiului*/
int c; /*caracterele citite*/
main()
{if(pipe(piped)<0) /*se creaz pipe-ul 1*/
{perror(eroare pipe);
exit(0);}
if((pid=fork())<0) /*creare proces fiu*/
{perror(eroare fork); exit(1);}
if (pid) /*sunt n procesul
printe*/
{close(piped[0]); /*nchiderea descriptorului
de citire*/
printf(proces printe:introducei irul de
caractere);
/*se citete de la intrarea
standard*/
while(read(0,&c,1))/*se scriu datele n
pipe*/
if(write(piped[1],&c,1)<0)
{perror(eroare scriere);exit(2);}
/*se nchide descriptorul
de scriere n pipe*/
close(piped[1]);
if (wait(NULL)<0)
{perror(eroare wait);exit(3);}
exit(4);}
else
Sorin Adrian Ciureanu 258
{ /*sunt n fiu*/
close(piped[1]); /*se nchide descriptorul
de scriere*/
printf(proces datele\n);
while(read(piped[0],&c,1))
{if(islower(c) /*este litera mic?*/
printf(%c,toupper(c));
else
printf(%c,c);}
close(piped[0]); /*se nchide descriptorul
de citire*/
exit(0);}}
Program d
n acest program se citesc date dintr-un fiier existent, specificat ca
prim argument linie de text, i se trimit prin pipe comenzii sort ce are ieire
redirectat ntr-un fiier specificat ca argumentul al doilea.
#include<stdio.h>
#include<unistd.h>
int main(int argc,char*argv[])
{char buf[81];
char command[80];
FILE*ip;
FILE*pp;
sprintf(command,sort>%s,argv[2]);
ip=fopen(argv[1],r);
pp=fopen(command,w);
while(fgets(buf,80,ip))fputs(buf,pp);
pclose(pp);
fclose(ip);
exit(0);}
Programul se compileaz cu
$gcc -o pope pope.c
i se lanseaz
$./ pope fiierintrare fiierieire
Program e
Sisteme de operare 259
Acest program este asemntor cu programul d numai c de data
aceasta nu mai comunic printele cu fiul prin pipe ci dou procese prin
FIFO, unul client , altul server.
Client (fifoc.c)
/*se compileaz cu
$gcc - o fifoc
i se lanseaz n execuie serverul cu
$ ./fifos
apoi de la alt terminal sau de la acelai dac
am lansat serverul n backround
$./fifoc Sir ce va fi afiat la server
*/
#include<stdio.h>
#include<stdlib.h>
#define FIFO_FILE MYFIFO
int main(int argc, char*argv[])
{
FILE*fp;
if(argc!=2){
printf(Utilizare:fifoc[sir]\n);
exit(1);
}
if((fp=fopen(FIFO_FILE,w))==NULL){
perror(fopen);
exit(1);
}
fputs(argv[1],fp);
fclose(fp);
return(0);
}
Server (fifos.c)
/*fifos.c
Sorin Adrian Ciureanu 260
Se compileaz programul cu comanda
$gcc o fifos fifos.c
i apoi se lanseaz serverul n execuie n
foreground sau backround
$./fifos
ateptnd s se afieze ce s-a scris cu clientul
folosind
$./fifoc Sir ce va fi afisat la server
de la alt terminal sau de la acelai dac s-a
lansat severul n backround */
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<unistd.h>
#include<linux/stat.h>
#define FIFO_FILE MYFIFO
int main(void)
{
FILE *fp;
char readbuf[100];
/* se creaz FIFO dac nu exist*/
umask(0);
mknod(FIFO_FILE, S_IFIFO|0666, 0);
while(1)
{
fp=fopen(FIFO_FILE, r);
fgets(readbuf, 100, fp);
printf(Am recepionat sirul: %s\n,
readbuf);
fclose(fp);
}
return(0);
}
Sisteme de operare 261
Program f
Acest program arat dac implementarea pipe-
lor permite funcionarea n ambele sensuri (pipe
bidirecionale).
La Solaris pipe-le sunt bidirecionale. La
Linux nu. Aceasta se poate pune n eviden (la
cele bidirecionale)prin reuita citirii n printe
dup ce a scris cu write() citirea, ateptnd
ceva de la copil i nu returnnd ce a scris tot
printele.
Pentru a realiza scenariul, copilul doarme cu
sleep() 4 secunde, timp n care printele ncearc
ce a fost prezentat mai sus.
Se compileaz cu
$gcc o bidi bidi.c
i se lanseaz cu
$.bidi
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
int fd[2]; int n; char c; pid_t pid;
pipe(fd);
if((pid=fork())==0{//copil
sleep(5);
printf(Copil nainte de read()\n);
if((n=read(fd[0],&c,1)) !=1)
printf(Eroare read() a returnat
%d\n,n);
printf(Copilul a citit %c\n,c);
write(fd[0],c,1);exit(0);}
else if(pid>0){
//printe
printf(Printe nainte de write()\n);
write(fd[1],q,1);
printf(Printe nainte de read()\n);
if((n=read(fd[1],&c,1)) !=1)
printf(printe read() a returnat %d\n,n);
printf((printele a citit %c\n,c);exit(0);}}
Sorin Adrian Ciureanu 262
Program g
/* Acest program se compileaz cu
$gcc o popen popen.c
Se lanseaz n execuie cu
$.popen
Vom obine un file pointer (captul dinspre
noi al pipei) la care vom scrie trei iruri.
La captul cellalt al pipei este comanda sort
ce va afia la STDOUT rezultatul.
*/
#include<stdio.h>
#include<unistd.h>
int main(){
FILE*stream;
stream=popen(sort,w);
fprintf(stream,O ncercare\n);
fprintf(stream,A doua ncercare\n);
fprintf(stream,Ultima ncercare\n);
pclose(stream);
return 0;
}
3) Tem
a)S se creeze un pipe prin care procesul printe va trimite
procesului fiu numai numerele rotunde dintre cele citite de printe de la
tastatur. (Un numr rotund este numrul care, n baza 2, are numrul de
cifre 0 egal cu numrul de cifre 1.
b) S se creeze un FIFO prin care un proces va trimite altui proces
numai numere multiple de 11 dintre cele citite de la tastatur de primul
proces.
11.3.3.2. Comunicarea ntre procese prin semnale
1)Consideraii teoretice
Sisteme de operare 263
Semnalele reprezint unul dintre primele mecanisme de comunicare
ntre procese. Ele anun apariia unui eveniment. Semnalele pot fi trimise
de ctre un proces altui proces sau pot fi trimise de ctre kernel. Momentul
apariiei unui semnal este neprecizat el aprnd asincron.
Un semnal este reprezentat printr-un numr i un nume care se post
vedea prin lansarea comenzii
$kill -1
Se pot trimite semnale:
-cu comanda kill,
-n program cu apelul sistem kill(),
-cu anumite combinaii de chei de la tastatur,
-cnd se ndeplinesc anumite condiii: de exemplu eroare de virgul
mobil (SIGFPE) sau referirea unei adrese din afara spaiului unui proces
(SIGSEGV)
-sau prin kernel care poate semnaliza, de exemplu, prin SIGURG
apariia aut-of-band pe un soclu-socket.
Funcia kill()
Trimite un semnal unui proces sau unui grup de procese.
int kill(pid_t pid,int sig);
Pentru ca un proces s poat trimite un semnalaprocesului identificat
prin pid, trebuie ca user ID-ul real sau efectiv al procesului care trimite
semnalul s se potriveasc cu ID-ul real sau set-user-ID salvat
al procesului care recepioneaz semnalul.
-Dac pid>0 semnalul se trimite tuturor procesului pid;
-dac pid==0 semnalul se trimite tuturor proceselor care fac
parte din acelai grup de procese cu procesul care trimite semnalul, dac
exist permisiunile necesare;
-dac pid==-1 semnalul se trimite tuturor proceselor (cu excepia
unui set nespecificat de procese sistem), dac exist permisiunile necesare;
-dac pid<0&&pid!=-1, semnalul se trimite tuturor proceselor
care fac parte din grupul de procese al crui pgid este egal cu modulul
valorii primului argument, dac exist permisiunile necesare;
-dac al doilea argument este 0, nu se trimite nici un semnal; se
testeaz existena procesului specificat n primul argument.
Exist dou moduri de lucru cu semnalele:
A) folosind standardul iniial (stil vechi, nerecomandat);
B) folosind noul stil.
n ambele situaii, pentru procesul care recepioneaz un semnal,
putem seta trei tipuri de aciuni:
Sorin Adrian Ciureanu 264
-aciunea implicit, reprezentat prin pointerul la funcie SIG_DEL;
-aciunea de a ignora semnalul recepionat, reprezentat prin
pointerul la funcie SIG_IGN;
-aciunea precizat printr-o funcie, numit handler, reprezentat
printr-un pointer la funcie (numele funciei este adresa ei.
A)Standardul vechi
n vechiul stil, pentru a seta o aciune corespunztoare unui semnal
foloseam funcia signal() al crui prototip era:
void(*signal(int sig,void(*handler)(int)))(int);
glibc folosete pentru handlere tipul sig_t.
Mai exist extensia GNU:
typedef void(*sighandler_t handler)(int);
sighandler_t signal(int signum,
sighandler_t handler);
B) Standardul Posix
Cele trei cazuri rmn i aici valabile.
Putem s specificm un handler pentru semnal cnd aciunea este de
tipul captare de semnal:
void handler(int signo);
Dou semnale nu pot fi captate (nu putem scrie handlere pentru ele):
SIGKILL i SIGSTOP.
Putem ignora un semnal prin setarea aciunii la SIG_IN. Pentru
SIGKILL i SIGSTOP nu se poate acest lucru.
Putem seta o aciune implicit prin folosirea lui SIG_IN. Aciunea
implicit nseamn, pentru majoritatea semnalelor, terminarea unui proces.
Dou semnale au aciunea implicit s fie ignorate: SIGCHLD ce este trimis
printelui cnd un copil a terminat i SIGURG la sosirea unor date aut-
of-band.
Funcia sigaction()
Pentru a seta aciunea corespunztoare unui semnal, n loc de funcia
signal() vom folosi funcia sigaction().Pentru aceasta trebuie s
alocm o structur de tipul sigaction:
typedef void(*sighandler_t)(int signo)
struct sigaction
{
sighandler_t sa_handler;/*pointer la o funcie
de captare semnal sau SIG_IGN sau SIG_DEF*/
sigset_t sa mask; /*setul de semnale blocate n
timpul execuiei handlerullui*/
Sisteme de operare 265
unsiged long sa_flags; /*flaguri speciale*/
void(*sa_restorer)(void); /*pointer la o funcie
captare de semnal*/
};
Cteva flaguri:
SA_NOCLDSTOP - un semnal SIGCHLD este trimis printelui
unui proces cnd un copil de-al su a terminat sau e oprit. Dac specificm
acest flag, semnalul SIGCHLD va fi trimis numai la terminarea unui
proces copil.
SA_ONESHOT - imediat ce handlerul pentru acest semnal este
rulat, kernelul va reseta aciunea pentru acest semnal la SIG_DEL.
SA_RESTART apelurile sistem lente care returnau cu eroarea
EINTR vor fi restartate automat fr s mai returneze.
Prototipul funciei sigaction() este:
int sigaction(int signum,struct sigaction act,
struct sigaction oact);
Unde signum este semnalul a crui livrare urmez s fie setat,
prima structur sigaction act conine setrile pe care kernelul le va
utiliza cu privire la semnalul signum, iar a doua structur oact
memoreaz vechile setri (pentru a fi setate ulterior); se poate specifica
NULL pentru ultimul argument dac nu ne intereseaz restaurarea.
Alte funcii utilizate
Tipul de date pe care se bazeaz funciile pe care le vom prezenta
este sig_set i reprezint un set de semnale. Cu acest tip putem pasa uor
o list de semnale kernelului.
Un semnal poate aparine sau nu unui set de semnale.
Vom opera asupra unui obiect sig_set numai cu ajutorul
urmtoarelor funcii:
int sigempzyset(sigset_t*set);
int sigfillset(sigset_t*set);
int sigaddset(sigset_t*set,int signo);
int sigdelset(sigset_t*set,int signo);
int sigismember(const sigset_t*set, int signo)
Observm c primul argument este un pointer la setul de semnale.
sigempzyset() scoate toate semnalele din set, iar sigfillset()
adaug toate semnalele setului. Trebuie neaprat s folosim una din cele
dou funcii pentru a iniializa setul de semnale. sigaddset() adaug un
semnal setului iar sigdelset() scoate un semnal din set.
Sorin Adrian Ciureanu 266
Un concept important referitor la procese l reprezint masca de
semnale corespunztoare procesului. Aceasta precizeaz care semnale sunt
blocate i nu vor fi livrate procesului respectiv; dac un astfel de semnal este
trimis, kernelul amn livrarea lui pn cnd procesul deblocheaz acel
semnal. Pentru a modifica masca de semnale se utilizeaz:
int sigprocmask(int how,const sigset_t*modset,
sigset_t*oldset);
how poate fi:
SIG_BLOCK semnalele coninute n modset vor fi adugate
mtii curente i semnalele respective vor fi i ele blocate.
SIG_UNBLOCK semnalele coninute n modset vor fi scoase din
masca curent de semnale.
SIG_SETMASK masca de semnale va avea exact acelai coninut
cu modset.
Cnd un semnal nu poate fi livrat deoarec eeste blocat, spunem c
semnalul respectiv este n ateptare. Un proces poate afla care semnale sunt
n ateptare cu:
int sigpending(sigset_t*set);
n variabila set vom avea toate semnalele care ateapt s fie livrate
dar nu sunt, deoarece sunt blocate.
Un proces poate s-i suspende execuia simultan cu schimbarea
mtii de semnale pe timpul execuiei acestui apel sistem prin utilizarea lui:
int sigsuspend(const segset_t*mask);
Este scos din aceast stare de oricare semnal a crui aciune este precizat
printr-un handler sau a crui aciune este s termine procesul. n primul caz,
dup execuia handlerului se revine la masca de semnale de dinaintea lui
sigsuspend() iar n al doilea caz (cnd aciunea e s termine procesul)
funcia sigsuspend() nu mai returneaz. Dac masca este specificat
ca NULL, atunci va fi lsat nemodificat.
Concluzii pentru semnalele Posix:
-un semnal instalat rmne instalat-(vechiul stil dezactiva handlerul);
-n timpul execuiei handlerului, semnalul respectiv rmne blocat; n plus,
i semnalele specificate n membrul sa_mask al structurii sigaction sunt
blocate;
-dac un semnal este transmis de mai multe ori cnd semnalul este blocat,
atunci va fi livrat numai odat, dup ce semnalul va fi deblocat;
-semnalele sunt puse ntr-o coad.
Semnale de timp real
Sisteme de operare 267
Modelul de semnale implementat n UNIX n 1978 nu era sigur. n
decursul timpului au fost aduse numeroase mbuntiri i n final s-a ajuns
la un model Posix de timp real.
Vom ncepe cu definiia structurii sigval
union sigval {
int sival_int;
void*sival_ptr;
};
Semnalele pot fi mprite n dou categorii:
1) semnale realtime ale cror valori sunt cuprinse ntre
SIGRTMIN i SIRTMAX (vezi cu $kill_1);
2) restul semnalelor.
Pentru a avea certitudinea comportrii corecte a semnalelor de timp
real va trebui s specificm pentru membrul sa_flags al structurii
sigaction valoarea SA_SIGINFO i s folosim unul din semnalele
cuprinse ntre SIGRTMIN i SIGRTMAX.
Ce nseamn semnale de timp real?
Putem enumera urmtoarele caracteristici:
1)FIFO semnalele nu se pierd; dac sunt generate de un numr de
ori, de acelai numr de ori vor fi livrate;
2)PRIORITI cnd avem mai multe semnale neblocate, ntre
limitele SIGRTMIN i SIRTMAX, cele cu numere mai mici sunt livrate
naintea celor cu numere mari (SIGRTMIN are prioritate mai mare dect
SIRTMIN+1;
3)Comunic mai mult informaie pentru semnalele obinuite
singurul argument pasat era numrul semnalului; cele de tipul real pot
comunica mai mult informaie.
Prototipul funciei handler este:
void func(int signo,siginfo_t*info,void*context);
unde signo este numrul semnalului iar structura siginfo_t
este definit:
typedef struct{
int si_signo;//la fel ca la argumentul signo
int si_code;//SI_USER,SI_QUEUE,SI_TIMER,
SI_ASYNCIO,SI_MESGQ
union sigval si value;/*valoare ntreag sau
pointer de la emitor*/
}siginfo_t;
Sorin Adrian Ciureanu 268
SI_ASYNCIO nsemn c semnalul a fost trimis la terminarea unei
cereri I/O asincrone.
SI_MESGQ nseamn c semnalul a fost trimis la plasarea unui
mesaj ntr-o coad de mesaje goale.
SI_QUEUE nseamn c mesajul a fost trimis cu funcia
sigqueue().
SI_TIMER semnal generat la expirarea unui timer.
SI_USER semnalul a fost trimis cu funcia kill().
n afar de funcia kill() mai putem trimite semnale cu funcia
sigqueue(), funcie care ne va permite s trimitem o union sigval
mpreun cu semnalul.
Pentru SI_USER nu mai putem conta pe si_value. Trebuiesc
i :
act.sa_sigachon=func;//pointer k funcie handler
act.sa_flags=SA-SIGINFO;//rest time
2) Desfurarea lucrrii
Program a
/*Compilm programul cu
$gcc -o semnal semnal.c
i dup lansare observm de cte ori a fost chemat handlerul aciune,
n dou cazuri:
-lsm programul s se termine fr s mai trimitem alte semnale;
-lansm programul n fundal i trimitem mai multe comenzi prin
lansarea repetat:
$kill -10 pid
Ar trebui s gsim valoarea:
10000+nr-de-killuri */
#include<signal.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
sig_atomic_t nsigusrl=0;
Sisteme de operare 269
void aciune(int signal_number{
++nsigusrl;}
int main(){
int i;
struct sigaction sa;
printf(am pid-ul %d\n,getpid());
memset)&sa,0,sizeof(sa));
sa.sa_handler=aciune;
sigaction(SIGUSR!,&sa,NULL);
/*aici efectum calcule.*/
for(i=0;i<10000;i++)
{kill(getpid(),SIGUSR1);}
for(i=0;i<20;i++)sleep(3);
printf(SIGUSR1 a aprut de %d ori\n,
nsigusfl1);
return 0;
}
Program b
#include<signal.h>
/*vom compila programul cu
$gcc-o ter1 ter1
i vom putea lansa programul n fundal cu
$./ter1 &
Vom citi pid-ul copilului i-i vom putea trimite un semnal
cu
$kill-10pid-copil
i vom vedea starea de ieire (corespunztoare semnalului trimis). La
o alt lansare n foreground, lsm programul s se termine i observm
starea de ieire. S se remarce utilizarea handlerului curatare-copil care este
instalat s trateze terminarea unui copil. Aceast abordare permite ca
printele s nu fie blocat ntr-un wait() n ateptarea strii de ieire a
copilului*/
#include<signal.h>
#include<unistd.h>
#include<setjmp.h>
sig_atomic_t copil_stare_exit;
Sorin Adrian Ciureanu 270
void curatare_copil(int signal_number){
int stare;
wait(stare);
copil_stare_exit=stare;
}
int main(){
int i;
pid_t pid_copil;
int copil_stare
struct sigaction sa;
memset(&sa,0,sizeof(sa));
sa.sa_handler=curatare.copil;
sigaction(SIGCHLD,&sa,NULL);
/*aici lucrm*/
pid_copil=fok();
if(pid_copil !=0){
/*suntem n printe*/
printf(pid-ul copilului este %d\n,pid_copil);
sleep(30);//s ne asigurm c nu terminm
naintea copillui
}
else {
/*suntem n copil*/
sleep(15);
execlp(ls,ls,-1,/,NULL;
/*nu trebuie s ajungem aici*/
exit(2);
}
for(i=0;i<10000000;i++);
if(WIFEXISTED(copil_stare_exit)){
prinf(copilul a ieit normal cu starea
exit%d\n,WEXITSTATUS(copil_stare_exit));
printf(n handler de terminare am setat
variabila global la valoarea %d\n,
copil_stare_exit);}
Sisteme de operare 271
else
prinf(copilul a ieit anormal cu semnalul
%d\n,WTERSIG(copil_stare_exit));
return 0;
}
Program c
/*Programul vrea s testeze comportarea real time a semnalelor
din intervalul SIGRTMIN-SIGRTMAX.
Dup fork() copilul blocheaz recepia celor trei semnale.
Printele trimite apoi cte trei salve purtnd informaie (pentru a verifica
ordinea la recepie), pentru fiecare semnal, ncepnd cu semnalul cel mai
puin prioritar. Apoi copilul deblocheaz cele trei semnale i vom putea
vedea cte semnale i n ce ordine au fost primite.
*/
#include<signal.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
typedef void sigfunc_rt(int,siginfo_t*,void*);
static void sig_rt(int,siginfo_t*,void*);
sigfunc_rt*signal_rt(int,sigfunc_rt*,sigset*);
int main(){
int i,j;
pid_t pid;
sigset_t newset;
union sigval val;
printf(SIGRTMIN=%d,SIGRTMAX=%d\n,
(int)SIGRTMIN,(int)SIGRTMAX);
if((pid=fork())==0){//n copil
sigemptyset(&newset);//iniializeaz set
semnale
sigaddset(&newset,SIGRTMIN);//adaug un semnal
setului
Sorin Adrian Ciureanu 272
sigaddset(&newset,SIGRTMIN+1);
sigaddset(&newset,SIGRTMIN+2);
sigprocmask(SIG_BLOCK,&newset,NULL);//blocare
recepie set semnale
signal_rt(SIGRTMIN,sig_rt,&newset);/*folosete
o funcie aparte pentru setare structura sigaction
i apoi cheam funcia sigaction()*/
signal_rt(SIGRTMIN+1,sig_rt,/newset);
signal_rt(SIGRTMIN+2,sig_rt,/newset);
sleep(6);//delay pentru a lsa printele
s trimit toate semnalele
sigprocmask(SIG_UNBLOCK,&newset,
NULL)//deblochaz recepia semnalelor
sleep(3)//las timp pentru livrarea semnalelor
exit(0);
}
//n printe
sleep(3);//las copilul s blocheze semnalele
for(i=SIGRTMIN+2;i>=SIGRTMIN;i--){
for(j=0;j<=2;j++){
val.sival_int=j;
sigqueue(pid,i,val);/*n loc de kill() folosim
aceast funcie pentru trimitere semnal cu
argumentele:pid_copil,nr_semnal,extra_valoare*/
printf(am trimis semnal %d,val=%d\n,i,j);
}
}
exit(0);
}
static void sig_rt(int signo,siginfo_t*info,
void*context){
ptintf(recepie semnal #%d,code=%d,
ival=%d\n,signo,\infosi_code,
infosi_value.sival_int);
}
/*vom seta structura sigaction i apoi vom
apela funcia sigaction() pentru a comunica
kernelului comportamentul dorit*/
Sisteme de operare 273
sigfunc_rt*signal_rt(int signo,
sigfunc_rt*func,sigset_t*mask)
{
struct sigaction act,oact;
act.sa_sigaction=func;
act.sa_mask)*mask;
act.sa_flags=SA-SIGINFO;//foarte important
pentru a activa realtime
if(signo==SIGALRM){
#ifdef SA_INTERUPT
act.sa_flags|=SA_INTERUPT;
#enddif
}else{
#ifdef SA_RESTART
act.sa_flags|=SA_RESTART;
#endif
}
if(sigaction(signo,&act,&oact)<0)
return((sigfunc.rt*)SIG_ERR);
return(oact.sa_sigaction);}
3) Tem
S se scrie un program care terge n 10 minute, toate fiierele
temporare, (cu extensie.bak), din directorul curent.
11.3.3.3. Comunicaie ntre procese prin sistem V I PC.
Cozi de mesaje
Mecanismele de comunicare ntre procese prin sistem V IPC sunt de
trei tipuri:
-cozi de mesaje;
-semafoare;
-memorie partajat.
Pentru a genera cheile necesare obinerii identificatorilor, care vor fi
folosii n funciile de control i operare, se utilizeaz funcia ftok():
#include<sys/ipc.h>
key_t ftok(const char*pathname,int id);
unde tipul de dat keyt_t este definit n <sys/types.h>
Funcia folosete informaii din sistemul de fiiere pornind de la
pathname, numrul i-node i din LSB-ul lui id. Pathname nu
Sorin Adrian Ciureanu 274
trebuie ters i recreat ntre folosiri deoarece se poate schimba i-node-
ul. Teoretic nu este garantat c folosind dou pathname-uri diferite i
acelai id vom obine dou chei de 32 bii diferite. n general, se convine
asupra unui pathname unic ntre clieni i server i dac sunt necesare
mai multe calale se utilizeaz mai multe id-uri.
Structura ipc-perm
O structur nsoete fiecare obiect IPC
struct ipc_perm{
uid_t uid;
gid_tgid;
uid_t cuid;
gid_t cgid;
mode_t mode;
ulong seq;
key_t key;
}
uid i gid sunt id-urile proprietar, cuid i cgid sunt id-urile creator
ce vor rmne neschimbate, mode conine permisiunile read-write,
seq un numr de secven care ne asigur c nu vor fi folosite de procese
diferite din ntmplare i, n final,cheia key.
Pentru a obine identificatorul care va fi utilizat n funcia de control
i operare cu ajutorul funciilor _get(), putem folosi ca prim argument o
valoare ntoars de funcia ftok() sau valoarea special IPC- PRIVATE
(n acest caz avem certitudinea c un obiect IPC nou i unic a fost creat,
deoarece nici o combinaie de pathname i id nu va genera valoarea 0,
datorit faptului c numrul de i-nod este mai mare ca zero).
Se pot specifia n oflag IPC_CREAT,cns de va crea o nou
intrare, corespunztor cheii specificate dac nu exist sau
IPC_CREAT|IPC_EXCL cnd,la fel ca mai sus, se va crea o nou cheie
dac nu exist sau va returna eroarea EEXIST dac deja exist. Dac
serverul a creat obiectul, clienii pot s nu specifice nimic.
Permisiuni IPC
n momentul creerii unui obiect IPC cu una din funciile _get(),
urmtoarele informaii sunt salvate n structura ipc_perm:
-permisiunile dec read sau/i write pentru user, grup i alii:
0400 read de ctre user
0200 write de ctre user
0040 read de ctre grup
0020 write de ctre grup
Sisteme de operare 275
0004 read de ctre alii
0002 write de ctre alii
-cuid i cgid (id-urile creator) sunt setai la uid-ul
efectiv i gid-ul efectiv al procesului chemtor (acetia nu se pot
schimba)
-uid i gid sunt setai la fel ca mai sus; se numesc uid i gid
proprietar; se pot schimba prin apelul unei funcii de control ctl( )
cu argument IPC_SET.
Verificarea permisiunilor se face att la deschiderea obiectului cu
_get( ) ct i de fiecare dat cnd un obiect IPC este folosit. Dac un
obiect, la deschidere, are precizat pentru membrul mode s nu aib drept de
read grupul i alii i un client, i un client folosete un oflag ce include
aceti bii, va obine o eroare chiar la _get( ). Aceast eroare s-ar putea
ocoli prin precizarea unui flag 0, dar de aceea se vor verifica la orice
operaie permisiunile.
Iat ordinea testelor-la prima potrivire se acord accesul:
-superuserului i se permite accesul;
-dac uid-ul efectiv este egal cu uid-ul sau cuid-ul
obiectului IPC i dac bitul corespunztor din membrul mode este setat, se
permite accesul;
-dac gid-ul efectiv este egal cu cu gid-ul sau cgid-ul
obiectului IPC i bitul corespunztor din membrul mode al obiectului este
setat, accesul este permis;
-dac bitul corespunztor din membrul mode al obiectului IPC este
setat, se permite accesul.
Comenzi de vizualizare IPC
$ipcs, pentru a vedea informaii pentru fiecare IPC.
Pentru a terge IPC-uri din sistem folosim:
$ipcrm -q msg_id (pentru cozi)
$ipcrm -m shm_id (pentru memorie partajat)
$ipcrm -s sem_id (pentru semafoare)
Exist i o sintax cu aceleai opiuni dar cu litere mari unde se
specific ca ultim argument cheia.
Cozi de mesaje
Un proces cu privilegiile corespunztoare i folosind identificatorul
cozii de mesaje poate plasa mesaje n ea, dup cum un proces cu privilegiile
corespunztoare poate citi mesajele. Nu este necesar (la fel ca la POSIX) ca
un proces s atepte mesaje inainte ca s plasm mesaje n coad.
Sorin Adrian Ciureanu 276
Kernelul pstreaz informaiile pentru o coad ntr-o structur
definit n <sys/msg.h> ce conine :
struct msgid_ds {
struct ipc_perm msg_perm;//permisiuni read-
write
msgqnum_t msgqnum; //nr.mesaje prezente n
coad
msglen_t msg_qbytes ; //nr.max de bytes
permii n coad
pid_t msg_lspid ; //pid-ul ultimei operaii
msgsnd()
pid_t msg_lrpid ; //pid-ul ultimei operaii
msgrcv()
time_t msg_stime ; //timpul ultimei operaii
msgsnd()
time_t msg_rtime; //timpul ultimei operaii
msgrcv()
time_t msg_ctime ; /*timpul ultimei operaii
msgctl() ce a modificat structura*/
La LINUX tipurile msgqnum_t, msglen_t,pid_t
sunt ushort.
Funcia msgget()
Are prototipul:
int msgget(key_t key, int msgflg);
O nou coad de mesaje este creat sau se acceseaz o coad
existent. Valoarea de retur este identificatorul cozii de mesaje i aceasta va
fi folosit ca prim argument pentru celelalte funcii de control i operare.
Primul argument al funciei poate fi IPC_PRIVATE sau o valoare
obinut prin apelul funciei ftok(). O nou coad este creat dac
specificm IPC_PRIVATE pentru msgflg sau dac nu specificm
IPC_PRIVATE dar specificm IPC_CREAT i nici o coad nu este
asociat cu key. Altfel va fi doar referit.
Flagul IPC_EXCL, dac este mpreun cu IPC_CREAT (prin
folosirea lui | ), face ca funcia msgget() s returneze eroarea EEXIST
dac coada exist deja.
La crearea unei noi cozi se vor iniializa urmtorii membri ai
structurii msqid_ds :
Sisteme de operare 277
-msg_perm.cuid i msg_perm.uid sunt setai la userul
uid efectiv al procesului chemtor;
-msg_perm.cgid i msg_perm.gid sunt setai la gid-ul
efectiv al procesului apelant;
-cei mai puin semnificativi 9 bii ai lui msg_perm.mode sunt
setai la valoarea celor mai puin semnificativi 9 bii ai lui msflg.
-msg-qnum, msg-lspid, msg-lrpid,msg-stime,
msg_rtime, sunt setai la 0;
-msg_ctime este setat la timpul curent;
-msg_qbytes este setat la limita sistemului de
operare( la Linux MSGMNB).
Alte erori returnate:
EACCES dac un identificator exist pentru key dar procesul
apelant nu are permisiunile necesare;
EIRDM (Linux) coada este marcat pentru tergere;
ENOENT - coada nu exist i nici nu s-a specificat IPC_CREAT;
ENOMEM - (Linux) o coad trebuie creat dar nu exist memorie
pentru structura de date.
Funcia msgsnd()
Cu ajutorul funciei:
int msgsnd(int msqid,cont void*msgp,size_t,
int msgflg);
vom trimite un mesaj n coada specificat prin identificatorul msquid. Al
doilea argument este un pointer ctre un buffer, definit de utilizator, care
are n primul cmp o component de tip long i care specific tipul
mesajului, urmat apoi de poriunea de date.
n Linux prototipul funciei este:
int msgsnd(int msquid, struct msgbuf*msgp,
size_t msgsz,int msgflg);
Funcia msgrcv()
Pentru a citi din coad folosim:
size_t msgrcv(int msqid, void*msgp,
size_t msgsz,int msgflg);
Argumentul msgp este un pointer la o structur buffer, definit de
utilizator, care conine ca prim membru un ntreg de tip long ce specific
tipul mesajului urmat de zona de date:
struct msgbuf{
long mtype;
char mtext[1];
Sorin Adrian Ciureanu 278
};
Primul membru reprezint tipul mesajului recepionat. mtext este
textul mesajului. Argumentul msgsz specific lungime n bytes a
componentei mtext. Mesajul recepionat va fi trunchiat la lungimea
msgsz dac n cadrul flagurilor msgflg precizm MSG_NOERROR. Altfel
funcia msgrcv() va returna eroarea E2BIG.
Argumentul msgtype determin politica la recepie astfel:
-dac = = 0, primul mesaj din coad este solicitat;
-dac = = n>0, primul mesaj de tipul n este solicitat;
-dac = = n<0, primul mesaj al crui tip este mai mic sau egal cu valoarea
absolut a lui msgtyp va fi solicitat.
Argumentul msgflg precizeaz cum s se procedeze dac tipul
dorit nu este n coad:
-dac msgflg conine i IPC_NOWAIT, funcia msgrcv() va returna
imediat cu eroarea ENOMSG; astfel se intr n sleep pn cnd:
-un mesaj de tipul dorit este disponibil n coad;
-coada creia i solicitm un mesaj este distrus de altcineva, astfel c
msgrcv() returneaz eroarea EIDRM;
-sleepul este ntrerupt de un semnal.
Dac recepionarea s-a efectuat cu succes, structura informaional
asociat cu msqid este actualizat astfel:
-msg_qnum va fi decrementat cu 1;
-msg_lrpid va fi setat la pid-ul procesului apelant;
-msg_rtime este setat la timpul curent.
La Linux prototipul funciei este:
Ssize_t msgrcv,(int msqid,struct msgbuf*msgp,
Ssize_t msgsz,long msgtyp,\int msgflg);
Funcia msgctl()
Prototipul funciei este;
int msgctl(int msqid,int cmd,struct msqid_ds*buf);
Sunt permise urmtoarele comenzi:
IPC_STA va copia informaiile din structura informaional
asociat cu msqid n structura indicat prin pointerul buf, dac avem
dreptul de read asupra cozii;
IPC_SET va scrie unii membri din structura indicat prin pointerul
buf n structura de date informaional a cozii; membrii care pot fi
modificai sunt:
msg_perm.uid
msg_perm.gid
Sisteme de operare 279
msg_perm.mode //numai LSB 9 bii
msg_qbytes
Aceast actualizare se va efectua dac procesul apelant are privilegiile
necesare: root sau user id-ul efectiv al procesului este cel al
msg_perm.cuid sau msg_perm.uid.La Linux pentru a mri
msg_qbytes peste valoarea sistem MSGMNB trebuie s fim root. Dup
o operaie de control se va actualiza i msg_ctime.
IPC_RMID va distruge coada al crei identificator a fost specificat
n msgctl() mpreun cu structura de date informaional msqid_ds
asociat. Aceast comand va putea fi executat de un proces cu user
id-ul efectiv egal cu cel msg_perm.cuid sau msg_perm.uid.
Erori:
EINVAL - msqid greit sau comanda greit:
EIDRM coada deja distrus;
EPERM comanda IPC_SET sau IPC_RMID dar procesul
apelant nu are drepturile necesare;
EACCES comanda IPC_STAT dar procesul apelant nu are
dreptul de read;
EFAULT comanda IPC_SET sau IPC_STAT dar adresa
specificat de pointerul buf nu este accesibil.
2) Desfurarea lucrrii
Program a
/*scriere-q.c-scriu mesaj n coad
se compileaz cu
$gcc o scriere q scriere q.c
i se lanseaz n execuie
$./scriere_q nr-nivel
se introduc linii de text.
Se pornete citirea cu
$gcc citire_q nr_nivel
S se ncerce citirea cu niveluri diferite*/
#include<stdio.h>
#include<errno.h>
#include<sys/ipc.h>
#include<sys/msg.h>
Sorin Adrian Ciureanu 280
#include <sys/stat.h>
struct my_buf{
long mytype;
char mytext[400];
};
int main(int argc,char*argv[])
{
struct my_buf buf;
int msqid;
key_t key;
if(argc!=2){printf(utilizare:$./scriere-q
nivel-numeric\n);}
if((key=ftok(scriere-q.c,'L'))==(key_t)-1){
perror(ftok);
exit(1)
}
if((msqid=msgget(key,S_IRUSR|S_IWUSR|S_IRGRP|S
_IROTH|IPC_CREAT))==-1){
perror(msgget);
exit(1);
}
printf)introducei linii de text,^D pt.
terminare:\n);
buf.mtype=atoi(argv[1];/*nu ne intereseaz
acum*/
while(gets(buf.mytext),!feof(stdin)){
if(msgsnd(msqid,(struct msgbuf*)&buf,
sizeof(buf),0)==-1)
perror(msgsnd);
}
if(msgctl(msqid,IPC_RMID,NULL)==-1){
perror(msgctl);
exit(1)
}
return 0;
}
Program b
/*
citire-q.c- citete coada
Sisteme de operare 281
Se lanseaz scrierea:
$./scriere-q nivel
se ncepe introducerea liniilor de test.
Se iese cu ^D.
S se lanseze citirile cu niveluri aleatoare
$./citire-q nivel
*/
#include<errno.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/stat.h>
struct my_buf {
long mtype;
char mytext[400];
};
int main(int argc,char*argv[])
{
struct my_buf buf;
int msqid;
key_t key;
if(argc!=2){printf(Utilizare:$./citire-q
nivel_ numeric\n);exit(2);}
if((key=ftok(scriere-q.c,'L'))==(key_t)-1{
/*aceeai cheie ca n scriere-coada.c*/
perror(ftok);
exit(1);
}
if((msqid=msgget(key,S_IRUSR|S_IWUSR|S_IRGRP|S
IROTH))==-1 {/*conectare la coad*/
perror(msgget);
exit(1);
}
printf(citire mesaj:sunt gata pentru recepie
mesaje\n);
Sorin Adrian Ciureanu 282
while(1){/*citire mesaj nu se termin
niciodat*/
if(msgrcv(msqid, (struct msgbuf*)&buf,
sizeof(buf),atoi(argv[1],0)==-1){
perror(msgrcv);
exit(1);
}
printf(citire-mesaj:\%s\\n,buf.mytext);
}
return 0;
}
3)Tem
S se creeze dou procese numite client i server n care clientul
va introduce mesaje n ir iar serverul va extrage mesajul de prioritate
maxim.
11.3.3.4. Comunicaie ntre procese prin sistem V IPC.
Semafoare
Aa cum am artat n capitolele anterioare, semaforul a fost inventat
de Edsger Dijkstra, ca obiect de sincronizare a proceselor. Implementarea
din Linux este bazat pe acest concept dar ofer faciliti mai generale.
Exist o implementare n SVR4, foarte complex, cu urmtoarele
caracteristici:
-semafoarele nu exist individual ci numai n seturi, numrul
semafoarelor dintr-un set fiind definit la crearea setului;
-crearea i iniializarea sunt dou operaii separate i distincte;
crearea se face prin apelul semget iar iniializarea prin apelul semet1;
-deoarece semafoarele rmn n sistemul de operare dup terminarea
proceselor care le utilizeaz, ca i la celelate structuri IPC, trebuie gsit o
soluie de tratare a situaiilor n care un program se termin fr a elibera
semafoarele alocate.
Forma structurilor semafoarelor este:
struct semid_ds
{struct ipc_perm sem_perm;
struct sem*sem_base;/*primul semafor*/
ushort sem_usems; /*numrul semafoarelor din
set*/
time_tsem_otime; /*timpul ultimei operaii*/
Sisteme de operare 283
time_t sem_ctime; /*timpul ultimei
modificri*/}
La rndul su, cmpul sem_base are urmtoarele structuri:
struct sem
{ushort semval; /*valoarea semaforului*/
pid_t sempid; /*pid-ul ultimei operaii*/
ushort semcnt; /*numrul de procese care
ndeplinesc condiia semval>crtval*/
ushort semzcnt;/*numrul de procese pentru
semval=0*/
};
Apelul sistem de creare a semafoarelor este:
#include<sys/tipes.h>
#include<sys/ipc.h>
#include<sys/sem.h>
int semget(key_t key,int nsems, int flag);
/*unde nsems reprezint numrul de semafoare
din set; valoarea lui se pune la crearea
semaforului*/
Apelul sistem pentru iniializare este:
int semcti(int semid,int semnum,intcmd,union
semnum arg);
unde parametrii reprezint:
semnum indic un semafor din set pentru funciile cmd
union semnum arg are urmtoarea structur:
union sem num
{int val; /*pentru SETVAL*/
struct semid_ds*buf; /*pentru IPC_STAT i
IPC_SET*/
ushort*array; /*pentru GETALL iSETALL*/
}
cmd specific 10 funcii de executat asupra setului identificat de
semid.
2) Desfurarea lucrrii
Program a
Este un program care implementeaz primele semafoare binare,
inventate de Dijkstra, pentru nite procese care intr n seciunea critic.
#include<sys/types.h>
#include<sys/ipc.h>
Sorin Adrian Ciureanu 284
#include<sys/sem.h>
#include<errno.h>
#define SEMPERM 0600
#define TRUE 1
#define FALSE 0
typedef union_semun
{int val;
struct semid_ds*buf;
ushort*array;
}
semun;
int init_sem(key_t semkey)
{
int status=0,semid;
if((semid=semget(semkey,1,SEMPERM |
IPC_CREAT | IPC_EXCL))==-1)
{if(errno==EEXIST) semid=semget(semkey,1,0);}
else
{semun arg; arg.val=1;
status=semct1(semid,0,SETVAL,arg);}
if(semid==-1|| status==-1)
{perror(eroare intrare); return-1}
return semid;}
/*implementarea operaiei p(s)*/
int p(int semid)
{struct sem buf p_buf;
p_buf.sem_num=0;
p_buf.sem_op=-1;
p_buf.sem_flg=SEM_UNDO;
if(semop(semid,&p_buf,1)==-1)
{
perror(p(semid)failed);
exit(1);
}
return 0;
}
/*implementarea operaiei v(s)*/
int v(int semid)
{
struct sembuf v_buf;
Sisteme de operare 285
v_buf.sem_num=0;
v_buf.sem_op=1;
v_buf.sem_flg=SEM_UNDO;
if(semop(semid,&v_buf,1)==-1)
{
perror(v(semid)failed);
exit(1);
}
return 0;
}
/*procese concurente ce folosesc semaforul*/
void procsem(key_t skey){
int semid;
pid_t pid=getpid();
if((semid=init_sem(skey))<0)
exit(1);
printf(\nproces %d inaintea seciunii
critice\n,pid);
p(semid);
printf(procesul %d n seciune
critic\n, pid);
sleep(5); /*simulare- aici se desfoar
operaiile critice*/
printf(procesul %d prsete seciunea
critic\n,pid);
v(semid);
printf(procesul %d iese\n,pid);
exit(0);
}
/*programul principal, drearea proceselor */
int main(void)
{
key_t semkey=0x200;
int i;
for(i=0);i<3;i++)
if(fork()==0)
procsem(semkey);
}
Sorin Adrian Ciureanu 286
3)Tem
S se implementeze problema productor-consumator folosind
semafoarele.
11.3.3.5.Comunicaia ntre procese prin sistem V I PC.
Memorie partajat
1) Consideraii teoretice
Mecanismul care permite comunicarea ntre dou sau mai multe
procese folosind o zon comun de memorie este folosit frecvent de
multiprocesoare. Pentru a utiliza memoria partajat este nevoie de
sincronizarea proceselor, deci de utilizarea excluderii mutuale.
Implementarea excluderii mutuale se poate face cu obiecte de sincronizare,
cel mai adesea cu semafoare.
Structura pentru evidena segmentelor de memorie este:
struct shmid_ds
{struct ipc_perm shm_perm;/*drepturi de acces*/
struct anon_map*shm_map; /*pointer spre kernel*/
int shm_segsz; /*dimensiune segment*/
ushort shm_lkcnt; /*zvorrea segmentului*/
pid_t shm_lpid; /*pid petru ultim shmop*/
pid_t shm_cpid; /*pid-ul procesului creator*/
ulong shm_nattch; /*numr de atari curente*/
ulong shm_cnattch; /*shminfo*/
time_t shm_atime; /*timp ultima ataare*/
time_t shm_dtime; /*timp ultima detaare*/
time_t shm_ctime; /*timp ultima modificare*/
}
Pentru a obine un identificator de memorie partajat se utilizeaz
apelul shmget
#include<sys/tipes.h>
#include<sys/ipc.h>
#include<sys/shm.h>
int shmget(key-t key,int size,int flag);
2) Desfurarea lucrrii
Program a
Sisteme de operare 287
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define SHMKEY1(key_t)0x100 /*cheia primului
segment*/
#define SHMKEY2 (key_t) 0x1AA /*cheia pentru al
doilea segment*/
#define SEMKEY (key_t) 0x100 /*cheie pentru
semafoare*/
#define SIZ 5*BUFSIZ /*dimensiunea segmentului
BUFSIZ def n stdio.h */
struct databuf
{int d_nread;
char d_buf[SIZ];};
typedef union_semun
{int val;
struct semid_ds*buf;
ushort*array;}
semun;
/*rutinele de iniializare*/
#define IFLAGS (IPC_CREAT|IPC_EXCL)
#define ERR ((struct databuf*)-1)
static int shmid1,shmid2,semid;
void getseg(struct databuf**p1,struct databuf p2)
/*se creeaz segmentele de memorie partajat*/
{if((shmid1=shmget(SMKEY,sizeof(struct databuf),
0600|IFLAGS))==-1)
{perror(shmget error); exit(1);}
/*ataeaz segmentele de memorie*/
if((*p1=(struct databuf*)shmat(shmid1,0,0))==ERR)
{perror(shmget error); exit(1);}
if((*p2=(struct databuf*)shmat(shmid2,0,0))==ERR)
{perror(shmget error); exit(1);}}
int getsem(void)
{semun x;x.val=0;
/*se creeazun set cu dou semafoare*/
if((semid=semget(SEMKEY,2,0600| IFLAGS))==-1)
{perror(semget error); exit(1);}
/*se iniializeaz valorile semafoarelor*/
Sorin Adrian Ciureanu 288
if(semct1(semid,0,SETVAL,x)==-1)
{perror(semct1 error); exit(1);}
return semid;}
/*rutina pentru tergerea identificatorilor
memoriei partajate i semafoarelor*/
void remobj(void)
{if(shmct1(shmid1,IPC_RMID,NULL)==-1
{perror(shmct error); exit(1);}
{if(shmct1(shmid2,IPC_RMID,NULL)==-1
{perror(semct1 error); exit(1);}
{if(semct1(semid,IPC_RMID,NULL)==-1)
{perror(shmct1 error); exit(1);}}
/*definiie pentru operaiile p() i v() pe
cele dou semafoare*/
struct sembuf p1={0,-1,0},p2={1,-1,0};
struct sembuf v1={0,1,0}, v2={1,1,0};
/*rutina de citire*/
void reader(int semid,struct databuf*buf1,
struct databuf*buf2)
{for(;;){
/*citire n tamponul buf1*/
buf1d_nread=read(0,buf1d_buf,SIZ);
/*punct de sincronizare*/
semop(semid,&v1,1);
semop(semid,&p2,1);
/*test pentru evitarea inactivit.proc. writer*/
if(buf1d_nread<=0)
return;
buf2d.nread=read(0,buf2d_buf,SIZ);
semop(semid,&p1,1);
semop(semid,&v2,1);
if(buf2d_nread<=0) return;
/*rutina pentru scriere*/
void writer(int semid,struct databuf*buf1,
struct databuf*buf2){
for(;;){
semop(semid,&p1,1); semop(semid,&v2,1)
if(buf1d_nread<=0) return;
write(1,buf1d_buf,buf1d_nread);
semop(semid,&p1,1); semop(semid,&v2,1);
if(buf2d_nread<=0) return;
Sisteme de operare 289
write(1,buf2d_buf,buf2d_nread);}}
/*program principal*/
int main(void)
{int semid;
pid_t pid;
struct databuf*buf1,*buf2)
semid=getsem();getseg(&buf1,*buf2);
switch(pid=fork())
{case-1;perror(forkerror);exit(1);break;
case 0; /*proces fiu*/
writer(semid,buf1,buf2);
remobj();
break;
default:/*proces printe*/
reader(semid,buf1,buf2);
break;}
exit(0);
11.3.3.6. Comunicaia ntre fire de execuie
1) Consideraii teoretice
n capitolul 3 am definit firele de execuie i motivele din care au
fost introduse. Firele de execuie (thread-urile) pot fi considerate ca nite
subuniti ale proceselor.
Crearea unui fir de execuie se face prin comanda:
#include<pthread.h>
int pthread_create(pthread_t*thread,const pthread_
attrt*attr,void*(start_routine)(void*),void arg);
Firul de execuie nou creat va executa codul din start_routine
cruia i se transmit argumentele arg.
Noul fir de execuie are atributele transmise prin attr, iar dac
ele sunt implicite se utilizeaz NULL. Dac funcia se execut cu succes ea
va returna 0 i n thread se va pune identificatorul nou creat.
Terminarea execuiei unui fir de ateptare se specific prin apelul
funciei pthread.
#include<pthread.h>
void pthread_exit(void*status);
O alt proprietate a unui fir de execuie este detaarea. Firele de
execuie detaate elibereaz, n momentul terminrii lor, memoria pe care au
deinut-o, astfel c alte fire nu se pot sincroniza cu fire detaate. Implicit,
Sorin Adrian Ciureanu 290
firele sunt create cu atributul joinable, ceea ce face ca alte fire s poat
specifica c ateapt terminarea unui astfel de fir.
#include<pthread.h>
int pthread_join(pthread_t thread,void status);
2) Desfurarea lucrrii
Program a
#include<stdio.h>
#include<pthread.h>
int global=5;
void*copilfuncie(void*p)
{printf(copilaici,pid=%d,global=%d\n,getpid(),
global());
global=15;
printf(copil,globalacum=%d\n,global);}
main()
{pthread_t copil;
pthread_create(&copil,NULL,copilfuncie,NULL);
printf(printe,pid=%d,global=%d\n,getpid(),
global);
global=10;
pthread_join(copil,NULL);
printf(nucopil,global=%d\n,global);}
Programul se va compila astfel
$gcc -o sorin sorin.c -lpthread
unde sorin.c este fiierul surs.
Un posibil rspuns ar fi:
copil aici,pid=3680,global=5
copil,global acum 15
printe,pid=3680,global=15
nu copil,global=10
3) Tem
S se creeze trei fire de execuie n care:
-primul fir calculeaz media aritmetic a n numere citite,
-al doilea fir calculeaz media geometric a n numere citite,
-al treilea fir calculeaz media armonic a n numere citite.
(n i numerele se citesc de la tastatur) . Apoi s se compare
rezultatele.
Sisteme de operare 291
11.3.3.6.1 Functii pentru excluderea mutuala in standardul
POSIX
1) Mutexuri
a) Initializarea unui mutex se face cu functia:
#include<pthread>
int pthread_mutex_init(pthread_mutex_t *mutx const
pthread_mutex_attr *attr);
Functia creeaza un nou mutex, cu atributele specificate de attr sau cu
atributeleimplicite.Nu este absolut necesara utilizarea acestei functii pentru
ca o initializare implicita a unui mutex are loc la decalarea sa in program
b) Blocarea unui mutex se face cu functia
#include<pthread>
int pthread_mutex_init(pthread_mutex_t *mutx const
pthread_mutex_t *mutx);
Daca functia gaseste mutx deja blocat, firul de executie curent intra
in asteptare pana cand ul alt fir il va debloca.
c)Blocarea unui mutex cu testarea valorii acestuia, permite ca firul
curent sa nu fie pus in asteptare.
#include <pthread>
int pthread_mutex_trylock(pthread_mutex_t mutx);
Daca mutx este liber in momentul apelului, el va fi blocat,iar functia
va returna zero.In caz contrar se revine din functie cu eroare,fara apune firul
curent in asteptare.
d) Deblocarea unui mutex se face prin apelarea functiei:
# include <pthread>
int pthread_mutex_unlock(pthread_mutex_t *mutx);
Daca firul curent este momentan proprietatea lui mutx,acesta va fi
deblocat.Daca exista fire de executie in asteptare la mutx,atunci
planificatorul pentru fire l va selecta pe cel ce va obtine mutx,altfel mutx
ramane disponibil pentru urmatorul fir care va apela functia pthread_mutex-
unlock.
1) program a
Programul calculeaza suma numerelor naturale d ela 1 la 50 dar
fiecare numar este adunat la totalul declarat ca variabila globala de un fir de
executie separat. Accesul firelor la variabila globala este controlat d eun
mutex iar in absenta acestuia valoarea lui tot_items nu poate fi determinata
corect.
# include <stdio.h>
# include<pthread.h>
# include<stdlib.h>
Sorin Adrian Ciureanu 292
# define NKIDS 50
int tot_items=0;
pthread_mutex_t mutx;
struct kidrec{
int data;
pthread_t id;};
void *kidfunc(void*p){
int *ip=(int*)p;
int, tmp,n;
pthread_mutex_lock(&mutx);
tmp=tot_items;
/* for(n=50000;n--;);*/
tot_items=tmp+*ip;
pthread_mutex_unlock(&mutx);}
int main(){
struct kidrec kids[NKIDS];
int n;
for(m=0;m<NKIDS;m++){
kids[m].data=m+1;
pthread_join(kids[m].id,NULL);
printf(End.Total=%d,tot-items);}
Ciclul for din codul functiei kidfunc nu are nici o semnificatie pentru
cazul codificarii corecte prezentate aici.daca se elimina mutexul prin acest
ciclu for se creeaza o incarcare artificiala a sistemului care va face ca tot
tot_items sa obtina si alte valori decat cea corecta.
2)Semafoare
O gneralizare a mutexului este seamforul, considerat in standardul
Pthreads ca o variabila cu valori de tip intreg, partajata inte firele de
executie. Pricipalele operatii asupra semafoarelor sunt:incrementarea
atomica,asteptarea ca semaforul sa aiba o valoare nenegativa si
decrementarea saa tomica.
Functiile pentru llucrul cu semafoare au prototipurile in
<semaphore.h> .
Principalele functii sunt:
- int sem_init(sem_t *sem,int pshared,unsigned int value);
Initializeaza la vlaue valoarea semforului spre care indica sem.Prin
argumnetul pshared se indica daca semaforul este local procesului
curent(pshared=0) sau poate fi partajat de mai mult eporcese.Se precizeaza
ca momentan in Linux nu se permite partajarea.
- int sem_wait(sem_t *sem);
Sisteme de operare 293
Suspenda firul de executie aplenat pana cand valoarea semaforului spre care
indica sem devine nenegativa.Atunci valoarea semaforului este
decrementata atomic.
- int sem_trywait(sem_t, *sem);
Este varianta fara blocare a lui sem-wait.Daca semaforul spre care tinde sem
are valoare diferita de zero acesta este decrementat atomic si sem.trywait
returneaza imediat zero.Daca valoarea semaforului este zero sem.trywait
revine imediar semnaland eraorea EGAIN.
- int sem_post(sem_t *sem);
Se incementeaza atomic valoarea semaforului spre care indica sem.Acwasta
functie nu conduce niciodata la blocare si poate fi folkosita in rutinele de
control a semnalelor.
- int sem_getvalue(sem_t *sem, int *sval);
Se memoreaza valoarea curenta a semaforului indicat de sem in locatia spre
care indica sval.
- int sem_destroy(sem_t *sem);
Se distruge un semafor eliberand toate resursele detinute de acesta. Se
presupune ca in momnetul apelului nu exista fire de executie inasteptare la
sem. In implentareaa ctuala de Linux nu exista resurse asociate semfoarelor.
Program1
Se folosesc tampoane duble pentru a reduce timpul de executie a operatiilor
de I/E.
#include<pthread.h>
#include<sys/types.h>
#include<semaphore.h>
#define BSIZE 1024
sem_t emptybuf_sem,fullbuf_sem;
struct{
char data[BSIZE];
int size;}
buf[2];
void *reader(void*p){
int i=0;
sem_init(&emptybuf_sem,0,2);
seminit(&fullbuf_sem,0,0);
while(1){
sem_wait(&emptybuf_sem);
buf[i].size=read(0,buf[i].data,BSIZE);
sem_post(&fullbuf_sem);
if(buf[i].size<=0)
Sorin Adrian Ciureanu 294
break;
}}
void *writer(void*p){
while(1){
sem_wait((&fullbuf_sem);
if(buf[i].size<=0)
break;
write(1,buf[i].data,buf[i].size);
sem_post(&emptybuf_sem);}}
int main(){
pthread_t,treader,twriter;
pthread_create(&treader,NULL,reader,NULL);
pthread_create(&twriter,NULL,writer,NULL);
pthread_join(writer,NULL);}
Firul pentru citire(reader)umple pe rabd cele doua tampoane,preluand
informatii dinfisierul standard de intrare, iar firul pentru scriere(writer)ia
datele din tampoanele pline si le duce spre fisierul de iesire standard. Cele
doua fire se sincronizeaza folosind doua semafoare:empty-buf_sem numara
cate tampoane au fost golite pe firul pentru scriere, iar fullbuf-sem numara
cate tampoane au fost umplute de firul pentru citire. Initializarea
semaforului emptybuf_sem este obligatorie, pentru ca valoarea de start e
diferita de zero.Celalt semfor nu trebuie neaparat initializat prin apel la
sem_init, deoarece initializarea cu zero se produce la alocarea spatiului
pentru semafor.
3.Sincronizarea cu variabile de conditie
Folosind doar concpetul de mutex sau chiar de semafor, firele de executie
nu iis pot transmite efectiv informatia,ci pot doar s aiis sincronizeze accesul
la resursele partajate sau sa anunte un eveniment. O comunicare mai
complexa este realizata prin variabilele de conditie, care permit ca un fir d
eexecutie sa se blocheze pana cand este satisfacuta o anumita conditie.
Variabilele de conditie se folosesc totdeuna impreuna cu un mutex.Valoarea
variabilei de conditie este testata sub protectia mutexului, iar daca valoarea
este falsa firul aplenat se blocheaza la variabila conditie, eliberand atomic
mutexul.Cand un alt fir schimba conditia el poate semnala variabilei d
econditie sa determine reluarea unuia sau a mai multor fire de
asteptare.Acestea vor trebui sa obtina din nou mutexul si sa reevalueze
conditia.
Nu exista nici o ordine impusa pentru deblocarea firelor de astptare la o
variabila de conditie.
Principalel functii sunt:
Sisteme de operare 295
-int pthread_cond_init(pthread_cond_t*cond,const ptread_cond_attr*attr);
Se creeaza o noua variabila conditie cu atributele specificate de attr sau cu
cele implicite daca attr=NULL.Executia cu succes a functiei face
identificatorul noii variabile conditie sa se memoreze in locatia spre care
indica argumentul cond.
-int pthread_cond_destroy(pthread-cond_t *attr);
Distrugerea unei variabile conditie realizabila in principiu prinapelarea
functiei pthread_cond_destroy nu se paote efectua daca aceasta este referita
de un alt fir.
-int pthread_cond_wait(pthread_cond_t*cond,pthread_mutex_t*mutex);
Un apel la aceasta functie apare atunci cand un fir de executie obtine un
mutex si in sectiunea critica testeazadaca un anumit predicat(conditie) are
valoarea true.Daca acel predicat este false firulva astepta la o variabila de
conditie,apeland aceasta functie cu variabila de conditie ca prim argument
si cu mutexul detinut ca al doilea argument.
- int pthread_cond_signal(pthread_cond_t *cond);
Se deblocheaza numai unul dintre firele de asteptare la varibila de conditie
specificata prin cond.Alegerea firului de executie deblocat este facuta de
palnificatorul firelor.
Program2
Utilizarea variabilelr de conditie este ilustrata printr-o solutie a problemei
clasice producator-consumator prin tampon de caapcitate limitata.
Programul se desfasoara ca un ciclu infinit dar se afiseaza mesaje la intrarea
in asteptare a fiecaruia dinre firele producator si consumator.
#include <pthread.h>
#define MAX 20
int queue[MAX];
int i=0, ip=0,ic=0,length=0;
pthread mutex_t mutex;
pthread_cond_t prod, cons;
int get_prod(){
i=(i+1)%MAX;return i;}
void put_cons(int i0{}
void add(int i){
queue[ip]=i;ip=(ip+1)%MAX;length++;}
int remove(){
int i;
i=queue[ic]ic={ic+1)%MAX;length--;return i;}
void * producer9void *arg)
Sorin Adrian Ciureanu 296
{int p;
while(1)
{p=get_prod();
pthread_mutex_lock($mutex);
while(length>=MAX){
printfproducer waits....\n);
pthread_cond_wait(&prod,&mutex);}
add(p);
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cons);}}
void *consumer(void *arg){
int c;
while(1){
pthread_mutex_lock($mutex);
while(length==0){
printfconsumer waits....\n);
pthread_cond_wait(&prod,&mutex);}
c=remove();
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&prod);put_cons(c);}}
int main(0{
pthread_t pr, con;
pthread_create(&pr,NULL,producer, NULL);
pthread_create(&con,NULL,consumer, NULL);
pthread_join(con, NULL);}
.3.3.7. I nterfaa SOCKET
1) Consideraii teoretice
Interfaa SOCKET reprezint o facilitate general de comunicare a
proceselor aflat, n general, pe maini diferite.
Un SOCKET poate avea tipuri diferite i poate fi asociat cu unul sau
mai multe procese, existnd n cadrul unui domeniu de comunicaie. Datele
pot fi schimbate numai ntre SOCKET-uri aparinnd aceluiai domeniu de
comunicaie.
Exist dou primitive pentru SOCKET-uri.
Sisteme de operare 297
Prima primitiv
#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain,int type,intprotocol)
int domain este un parametru ce stabilete formatu adreselor
mainilor implicate n transferul de date. Uzual aceste domenii sunt:
AF-UNIX, care stabilete domeniile de comunicare local (UNIX);
AF-INET, care folosete protocolul TCP/IP i este utilizat n
INTERNET.
int type se refer la modalitile de realizare a comunicrii.
Cele mai utilizate tipuri sunt:
SOCK-STREAM, n care un flux de date se transmite ntr-o
comunicare de tip full-duplex;
SOCK-DGRAM, n care se stabilete o comunicare fr conexiune cu
utilizarea datagramelor.
int protocol specific protocolul particular utilizat pentru
transmisia datelor. De obicei se utilizeaz valoarea 0(zero).
A doua primitiv este SOCKETPAIR()
Aceasta se utilizeaz pentru crearea unei perechi de SOCKET-uri
conectate.
#include<sys/types.h>
#include<sys/socket>
int socketpair(int domain,int type,int protocol,
int SV[2];
Primele trei argumente sunt la fel ca la socket iar cel de-al patrulea
argument SV[2] este la fel ca la pipe.
2)Desfurarea lucrrii
Program a
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<errno.h>
#include<unistd.h>
#include<string.h>
#include<sys/wait.h>
main()
{int sd[2];
/*mesajele folosite*/
char*p=sunt printele;
Sorin Adrian Ciureanu 298
char*c=sunt copilul;
char tampon[500];
/*se creeaz perechea de socketuri*/
if(socketpair(AF_UNIX,SOCK_STREAM,0,sd)==-1)
{perror(eroare la crearea socket);exit(1);}
/*crearea fiului*/
switch(fork())
{case -1 : /*eroare*/
perror(eroare la creareproces);
exit(1);
break;
case 0: /*fiu*/
/*citim din socket mesajul*/
if(read(sd[1],tampon,100)<0)
{perror(eroare la citire); exit(2);}
prinf(procesul cu pid-ul%d(fiu)a primit%s\n,
getpid, tampon);
/*scriem mesajul copilului*/
if(write(sd[1],c,100)<0)
{perror(eroare la citire); exit(2);}
/*trimitem EOF*/
close (sd[1]);
exit(0);
default :/*printe*/
/*trimitem mesajulprintelui*/
if(write(sd[0],p,100)<0)
{perror(eroare scriere); exit(3);}
/*citim mesajul pornind de la copil*/
if(read(sd[0],tampon,100)<0)
{perror(eroare citire); exit(3);}
printf(procesul cu pid %d(printe)
a pornit'%s'\n,getpid(),tampon);
/*s ateptm terminarea copilului*/
if(wait(NULL)<0)
{perror(eroare wait); exit(3);}
close(sd[0]);
return(0);}}
Dup rulare se va afia:
procesul cu pidul 10896(fiul) |sunt printele|
procesul cu pidul 10897(printele)|sunt fiul|
eroare: No child proces
Sisteme de operare 299
3) Tem
S se creeze o pereche de socket-uri n care primul socket va trimite
celui de-al doilea socket un ir de caractere, iar cel de-al doilea va returna
primului socket caracterele ordonate dup alfabetul ASCII.
11.3.3.8. Modelul client/server-TCP
1) Considerente teoretice
n modelul client /server o main numit server ofer anumite
servicii altor maini numite clieni.
TCP (Transmission Control Protocol) este un protocol de
comunicaie care realizeaz legtura ntre client i server prin intermediul
socketurilor, utiliznd streamuri.
Schema general de funcionare client/server TCP, n Linux, este
dat n fig. 10.2.
Fig. 10.2. Schema de funcionare client/server-TCP.
Server TCP
socket()
socket()
bind()
listen()
accept()
read()
write()
close()
connect()
write()
read()
close()
Server TCP Client TCP
Sorin Adrian Ciureanu 300
Se execut urmtoarele apeluri sistem:
socket() se creaz un socket care va trata conexiunile cu
clienii.
bind() - se ataeaz socketul creat anterior la un port de
comunicaie.
listen() se instaleaz socketul n vederea ascultrii portului
pentrustabilirea conexiunii cu clienii.
acept() se ateapt realizarea unei conexiuni cu un client i
apoi acest apel blocheaz programul pn cnd vine o cerere de conectare
de la alt client.
read(),write() primitive pentru schimbul de mesaje
client/server.
close() se nchide conexiunea cu clientul.
Client TCP
Se utilizeaz aceleai apeluri sistem ca i la server, cu excepia
primitivei accept() care trebuie s conin adresa IP i portul serverului
la care se conecteaz clientul.
La apelul read() din server va corespunde un apel write() la
client iar la write() din server va corespunde un apel read() n client.
Primitivele utilizate n acest protocol sunt:
a) bind()
#include<sys/types.h>
#include<sys/socket.h>
int bind(int sockd,struct sockaddr*addr,
socklen_t addrlen);
int sock d este descriptorul serverului.
struct sockaddr*addr este o structur care reine informaia
de adres pentru orice tip de socket-uri.Este definit astfel:
struct sockaddr
{unsignet short sa_family;
char sa_data[16]
}
n cazul INTERNET-ului structura utilizat este:
struct sockaddr_in
{short int sin_family:/*familia de adrese AF_INET*/
unsignet short int sin_port;/*portul(0-65365)*/
struct in_addr sin_addr; /*adresa Internet*/
Sisteme de operare 301
unsignet char sin_zero[8]; /*octei neutilizai*/
}
Trebuie testat c sin_zero este nul i acest lucru se realizeaz
prin funciile bzero() sau manset().
Adresa Internet este stocat n structura in_addr :
struct in_addr
{unsigned long int s_addr;}/*adresa IP*/
b) listen()
#include<sys/socket.h>
int listen(int sockd,int backlog);
-backlog arat numrul de conexiuni permise n coada de
ateptare a conexiunilor clieni, uzual fiind 5.
c) accept()
Se ruleaz ateptarea de ctre master.
#include<sys/types.h>
#include<sys/socket.h>
in accept(int socd,struct sockaddr*addr,
socklen_t*addrlen)
2) Desfurarea lucrrii
Acest program creeaz un server i un client; serverul primete un ir
de caractere de la client i l trimite napoi n ecou. Clientul citete un ir de
caractere de la intrarea standard, il trimite serverului, apoi ateapt ca
serverul s l returneze.
servertcp.c
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<errno.h>
#include<unist.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define PORT 8081 /*se definete portul */
extern int errno; /*codul de eroare*/
/*programul*/
Sorin Adrian Ciureanu 302
int
main()
{/*structurile utilizate de server i client*/
struct sockaddr_in server;
struct sockaddr_in from;
char tampon[100]; /*mesaj trimis de client*/
int sd; /*descriptorul de socket*/
/*se creaz un socket*/
if((sd=socket(AF_INET,SOCK_STREAM,0))==-1)
{perror(eroare socket()\n);
return errno;}
/*se pregtesc structurile de date*/
bzero(&server,sizeof(server));
bzero(&from,sizeof(from));
/*umplem structura folosit de server*/
server.sin_family=AF_INET;/*familia de socketuri*/
server.sin_addr.s_addr=htonl(INADDR_ANY);/*se
accept orice adres*/
server.sin_port=htons(PORT);/*port utilizator*/
/*se ataeaz socketul*/
if(bind(sd,(struct sockaddr*)&server,
sizeof((struct sockaddr))==-1)
{
perror(eroare la bind().\n);
return errno;
}
/*serverul ascult linia dac vin clieni*/
if(listen(sd,5)==-1)
{
perror(eroare listen().\n);
return errno;
}
/*se servesc clienii*/
while(1)
{
int client;
int length=sizeof(from);
printf(se ateapt la portul %d\n,PORT);
fflush(stdout);
Sisteme de operare 303
/*se accept un client*/
/*serverul se blocheaz pn la realizarea
conexiunii*/
client=accept(sd,(struct
sockaddr*)&from,&length);
/*eroare de acceptarea conexiunii de la un
client*/
if(client<0)
{
perror(eroare la accept().\n);
continue;
}
bzero(tampon,100);/*s-a realizat conexiunea,
se ateapt mesajul*/
printf(ateptm mesajul\n);
fflush(sdout);
/*se citete mesajul*/
if(read(client,tampon,100)<=0)
{
perror(eroare la read()de la client.\n);
close(client); continue;/*s-a nchisconexiunea
cu clientul*/
continue;
}
printf(mesaj recepionat\n
trimitem mesaj napoi);
/*se returneaz mesajul clientului*/
if(write(client,tampon,100)<=0)
{
perror(eroare la write() ctre client.\n);
continue;/*se continu ascultarea*/
}
else
printf(transmitere cu succes.\n);
/*am terminat cu acest client,
se nchide conexiunea*/
close(client)
} /*while*/
}
Sorin Adrian Ciureanu 304
Codul surs al clientului este client-tcp.c
clienttcp.c
/*Client-tcp (echo*/)
/*retransmite serverului mesajul primit de la
acesta*/
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<errno.h>
#include<unistd.h>
#include<stdio>
#include<stdlib.h>
#include<netdb.h>
#include<string.h>
/*codul de eroare returnat de anumite
apeluri*/
extern int errno;
/*portulde conectare la server*/
int port;
/*programul*/
int
main(int argc,char*argv[])
{
/*descriptorul de socket*/
int sd;
/*structura utilizat la conectare*/
struct sockaddr_in server;
/*mesaj transmis*/
char tampon[100];
/*testarea argumentelor din linia de comand*/
if(argc!=3)
{
printf(sintaxa:%s<adresa_server><port>\n,
argv[0]);
return-1;
}
Sisteme de operare 305
/*se stabilete portul*/
port=atoi(argv[2]);
/*se creeaz socketul*/
if((sd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror(Eroare la socket().\n);
return errno;
}
/*umplem structura folosit pentru realizarea
conexiunii cu serverul*/
server.sin_family=AF_INET;/*familia socketului*/
server.sin_addr.s_addr=inet_addr(argv[1];)/*adresa
IP a serverului*/
server.sin_port=htons(port);/*portulde conectare*/
/*ne conectm la server*/
if(connect(sd,(struct sockaddr*)&server,
sizeof(struct sockaddr))==-1
{
perror(Eroare la connect().\n);
return errno;
}
/*citirea mesajului i transmiterea ctre
server*/
bzero(tampon,100);
printf(introducei mesajul:);
fflush(stdout);
read(0,buffer,100);
if(write(sd,tampon,100)<=0)
{
perror(Eroare la write() spre srver.\n);
return errno;
}
/*citirea rspunsului dat de server (ne blocm
pn cnd serverul rspunde)*/
if (read(sd,tampon,100)<0)
{
perror(Eroare la read()de la server.\n);
return errno;
}
/*afiarea mesajului primit*/
Sorin Adrian Ciureanu 306
printf(mesajul primit este:%s\n,tampon);
/*nchiderea conexiunii, am terminat*/
close(sd);
}
Pentru compilarea clientului i a serverului vom folosi comenzile:
$gcc -o servertcp servertcp.c
$gcc -o clienttcp clienttcp.c
Pentru execuia programelor:
$ ./servertcp
$ ./clienttcp 127.0.0.1 8081
3)Tem. S se creeze dou fiiere, server i client, n care clientul
trimite serverului numere ntregi iar serverul va returna clientului numai
numerele pare dintre cele transmise (n TCP).
11.3.3.9. Modelul client/server-UDP
(User Datagrama Protocol)
n acest protocol de transmisie a datelor nu se realizeaz o conexiune
ntre client i server pentru ca apoi s se citeasc i s se scrie date. n UDP
transmisia este asincron, n sensul c clientul i serverul i trimit mesaje
unul altuia prin intermediul primitivelor SEND i RECEIVE. Structura de
date transmis se numete datagram.
Organizarea UDP este dat n fig.10.3.
socket()
bind()
recfrom()
sento()
close()
socket()
bind()
sendto()
recfrom()
close()
Server UDP Client UDP
cerere
rspuns
Sisteme de operare 307
Fig.11.3. Organigrama UDP
Apelurile folosite sunt:
recfrom() cu sintaxa:
#include<sys/types.h>
#include<sys/socket.h>
int recvfrom(int sockd.void*buf,size_t len,
int flags,struct sockaddr*from,socklen.t*fromlen);
sendto() cu sintaxa:
#include<sys/types.h>
#include<sys/socket.h>
int sendto(intsockd,const void*msg,size_t len,
int flags, const struct sockadd*to,socklen_t
tolen);
2) Desfurarea lucrrii
serverudp.c
/*server UDP iterativ (echo)
Ateapt un mesaj de la clieni;
Mesajul primit este trimis napoi.*/
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<errno.h>ss
#include<unistd.h>
/*portul folosit*/
#define PORT 8081
/*codul de eroare returnat de anumite
apeluri*/
extern int errno;
Sorin Adrian Ciureanu 308
/*programul*/
int
main()
{
/*structurile folosite de server i client*/
struct sockaddr-in adresa;
struct sockaddr client;
char buffer[100]; /*mesajul trimis de
client*/
int sd; /*descriptorul de socket*/
/*lansm serverul n fundal*/
switch(fork())
{
case 1: /*eroare la fork*/
perror(Fork error\n;
return errno;
case 0: /*copilultriete*/
break;
default: /*printele moare*/
print(serverul a fost lansat n
fundal\n);
exit(0);
}
/*creem un socket*/
if ((sd=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
perror(Eroare la socket().\n);
return errno;
}
/*pregtim structura folosit de server*/
adresa.sin_family=AF_INET;
/*stabilirea familei de socket-uri*/
adresa.sin_addr.s_addr=htonl)INADDR_ANY);
/*acceptm orice adres*/
adresa.sin_port=htons(PORT);
/*utilizm un port utilizator*/
/*atam socketul*/
int (bind(sd,struct sockaddr*)&adresa,
Sisteme de operare 309
sizeof(struct sockaddr))==-1)
{
perror(Eroare la bind().\n);
return errno;
}
/*servim n mod iterativ clienii*/
while(1)
{
int bytes;
int length=sizeof(client);
/*citim mesajul primit de la client*/
if(bytes=recvfrom(sd,buffer,100,0,
&client,&length))<0)
{
perror(Eroare la recvfrom()de la
client.\n);
return errno;
}
/*..dup care l trimitem napoi*/
if(sendto(sd,buffer,bytes,0,&client,length)<0)
{
perror(Eroare la sendto()spre client.\n);
return errno;
}
} /*while*/
} /*main*/
clientudp.c
/*Client UDP (echo)
Trimite un mesaj unui server;
Mesajul este recepionat de la server.*/
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
Sorin Adrian Ciureanu 310
#include<errno.h>
#include<netdb.h>
#include<string.h>
/*codul de eroare returnat de anumite apeluri*/
extern int errno;
/*portul de conectarela server*/
int port;
/*programul*/
int
main(int argc,char*argv[])
{
/*descriptorul de socket*/
int sd;
/*structura folosit pentru conectare*/
struct sockaddr_in server;
/*mesajul trimis*/
char buffer[100];
int length;
/*exist toate argumentele n linia de
comand?*/
if(arg!=3)
{
printf(sintaxa:%s<adresa-server><port>\n,
argv[0];
return -1;
}
/*stabilim portul*/
port=atoi(argv[2];
/*creem socketul*/
if((sd=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
perror(Eroare la socket().\n);
return errno;
}
Sisteme de operare 311
/*umplem structura folosit pentru realizarea
dialogului cu serverul*/
server.sin_family=AF_INET;
/*familia socketului*/
server.sin_addr.s_addr=inet.addr(argv[1];
/*adresa IP a serverului*/
server.sin_port=htons(port);
/*portul de conectare*/
/*citirea mesajului de la intrarea standard*/
bzero(buffer,100);
printf(introducei mesajul:);
fflush(stdout);
read(0,buffer,100;
length=sizeof(server);
/*trimiterea mesajului ctre server*/
if(sendto(sd,buffer,strlen(buffer),0,
&server,length)<0)
{
perror(Eroare la sendto()spre server.\n);
return errno;
}
/*citirea rspunsului dat de server (ne blocm
pn cnd serverul rspunde)*/
if(recvfrom(sd,buffer,100,0,&server.&length)<0
{
perror(Eroare la recvfrom() de la server.\n);
return errno;
}
printf(Mesajul primit este:%s.\n,buffer);
/*nchidem socketul, am terminat*/
close(sd);
return 0;
}
Clientul va necesita dou argumente n linia de comand,
semnificnd adresa IP a serverului i portul de conectare la serverul UDP.
Sorin Adrian Ciureanu 312
Dac ambele programe ruleaz pe aceeai main, atunci vom putea
introduce:
$gcc o serverudp serverudp.c
$gcc o clientudp clientudp.c
$./serverudp
$./clientudp 127.0.0-18081
Serverul va rula automat n fundal (adoptnd postura de daemon ) .
3) Tem.S se scrie un program n care un client va trimite un ir de
numere ntregi serverului iar acesta va returna ctre client numerele primite
n ordine invers.
Sisteme de operare 313
Bibliografie
1.D. Cramer, Interworking with TCP-IP, vol.1, Prentice Hall, New
-Jersey,1991.
2.Andrew S. Tanenbaum, Modern Operating Systems, Prentice
Hall,1992.
3.Iosif Ignat, Emil Muntean, Kalman Pustzai, Microinformatica,
1992.
4.B. Chapman, E.D. Zwicky, Building Internet Firewalls,
O'Reilly&Associates, 1995.
5.Traian Ionescu, Daniela Saru, John Floroiu, Sisteme de
operare-principii i funcionare, Editura tehnic, Bucureti, 1997.
6.R. Stevens, UNIX Network Programming, vol. 1, Networking,
Prentice Hall, 1998
7.Felicia Ionescu, Principiile calculului paralel,Editura Tehnic,
Bucureti, 1999.
8.Interprocess Communications, Prentice Hall, N.J. 1999.
9.A. Silberschatz, P.B. Galvin, G.Gagne, Applied Operating
System Concepts, Wiley, New-York,200.
10.Liviu Miclea, Noiuni de sisteme de operare i reeele de
calculatoare (LINUX), Universitatea Tehnic Cluj-Napoca, 2001.
11.Dan Cosma, UNIX. Aplicaii, Ed. de Vest, Timioara, 2001.
12.Ioan Jurc, Sisteme de operare, Editura de Vest, Timioara,
2001.
13.Sabin Buraga, Gabriel Ciobanu, Atelier de programare n
reele de calculatoare, Editura Polirom, Iai, 2001.
14.Drago Acostchioaie, Securitatea sistemelor LINUX, Editura
Polirom, Iai, 2001.
15. Andrew Tanenbaum, Sisteme de Operare Moderne, Editura
Byblos, Bucureti, 2004.
17. Cristian Vidracu, http://www.infoiai.ro/~vidracu.
18. Mihai Budiu, Alocarea memoriei n nucleul sistemului de
operare, http://www.cs.cmu.edu/mihaib, 1998.
19. http://www.oreilly.com/catalog/opensources/book/
Sorin Adrian Ciureanu 314
linus. html
20. Rzvan Daniel Zota, Elemente de arhitectur a sistemelor de
calcul i operare, Ed-ASE, Bucureti, 2005.
Sisteme de operare 315
Sorin Adrian Ciureanu 316
CUPRINS
Pg.
1. INTRODUCERE... 3
1.1. SISTEME DE OPERARE. DEFINIIE.. 4
1.2. LOCUL UNUI SISTEM DE OPERARE NTR-UN SISTEM DE
CALCUL.. 4
1.3. FUNCIILE UNUI SISTEM DE OPERARE. 6
1.3.1. Asigurarea interfeei cu utilizatorul.. 6
1.3.1.1. Monitoare... 6
1.3.1.2. Interfee n linie de comand...... 7
1.3.1.3. Interfee grafice.. 7
1.3.2. Gestionarea proceselor i procesoarelor... 8
1.3.3. Gestionarea memoriei... 8
1.3.4. Gestionarea perifericelor.. 9
1.3.5. Gestionarea fiierelor.... 9
1.3.6. Tratarea erorilor.... 9
1.4. CARACTERISTICILE SISTEMELOR DE OPERARE.... 10
1.4.1. Modul de introducere a programelor n sistem..... 10
1.4.2. Modul de planificare a lucrrilor pentru execuie. 10
1.4.3. Numrul de programe prezente simultan n memorie.. 10
1.4.4. Gradul de comunicare a proceselor n multiprogramare.. 11
1.4.5. Numrul de utilizatori simultani ai SO. 11
1.4.6. Modul de utilizare a resurselor. 11
1.4.7. SO pentru arhitecturi paralele... 12
1.5. COMPONENTELE SISTEMELOR DE OPERARE. 12
1.5.1. Partea de control... 12
1.5.2. Partea de serviciu. 13
1.6 Structura sistemelor de operare... 13
2 PLANIFICAREA PROCESOARELOR (UC).. 15
2.1 SCHEMA GENERAL DE PLANIFICARE 15
2.2. CRITERII DE PERFORMAN A PLANIFICRII... 16
2.3. ALGORITMI DE PLANIFICARE UC.. 17
2.3.1. Algoritmul FCFS (First Come First Served)... 17
2.3.2. Algoritmul SJF (Shortest Job First).. 17
2.3.3. Algoritmi bazai pe prioritate 18
2.3.4. Algoritmi preemptivi 18
2.3.5. Algoritmul Round-Robin. 19
2.3.6. Ali algoritmi de planificare. 20
3. GESTIUNEA PROCESELOR... 21
3.1. NOIUNI GENERALE DE PROCESE I THREAD-URI.. 21
3.1.1. Definiia procesului... 21
3.1.2. Starea procesului... 22
3.1.3. Comutarea proceselor... 24
3.1.4. Crearea i terminarea proceselor25
Sisteme de operare 317
3.2. PROCESE I THREAD-URI N UNIX.25
3.2.1. Procese n UNIX....25
3.2.2. Thread-uri n UNIX.. 29
3.3. PROCESE I THREAD-URI N WINDOWS30
3.3.1. Procese n WINDOWS. 30
4. COMUNICAIA I SINCRONIZAREA NTRE PROCESE... 31
4.1. PROBLEMA SECIUNII CRITICE I A EXCLUDERII MUTUALE.31
4.1.1. Suportul hardware pentru implementarea excluderii mutuale... 33
4.1.1.1. Invalidarea/validarea ntreruperilor. 33
4.1.1.2. Instruciunea Test and Set (TS).. 34
4.1.1.3. Protocoale de ateptare n excluderea mutual34
4.1.1.4. Mecanisme de sincronizare ntre procese (obiecte de
sincronizare).. 34
4.2. INTERBLOCAREA (DEADLOCK).. 39
4.2.1. Resurse.. 39
4.2.1.1. Clasificarea resurselor din punct de vedere al
interblocrii... 39
4.2.1.2. Etapele parcurse de un proces pentru utilizarea unei
resurse.... 40
4.2.2. Condiii necesare pentru apariia interblocrii.. 40
4.2.3. Graful de alocare a resurselor.... 41
4.2.4. Rezolvarea problemei interblocrii... 42
4.2.4.1. Prevenirea interblocrii42
4.2.4.2. Evitarea interblocrii44
4.2.4.3. Detectarea interblocrii i revenirea din ea. 47
4.2.4.4. Rezolvarea interblocrii n practic. 50
4.3. COMUNICAIA NTRE PROCESE COOPERANTE.. 50
4.3.1. Comunicaie direct i indirect.52
4.3.1.1. Comunicaie direct. 52
4.3.1.2. Comunicaie indirect.. 52
4.3.2. Linii de comunicaii i tipuri de mesaje. 53
4.3.2.1. Linii de comunicaii. 53
4.3.2.2. Tipuri de mesaje.. 54
4.3.3. Excepii n comunicaia interprocese.... 54
4.3.4. Aplicaii ale IPC-urilor.. 55
4.4. PROBLEME CLASICE DE COORDONAREA I
SINCRONIZAREA PROCESELOR.. 56
4.4.1. Problema productor-consumator. 56
4.4.1.1. Rezolvarea problemei productor-consumator cu
ajutorul semafoarelor 56
4.4.1.2. Rezolvarea problemei productor-consumator prin
transmitere de mesaje58
4.4.2. Problema brbierului somnoros. 60
4.4.3. Problema cititori/scriitori. 63
4.4.4. Problema cinei filozofilor chinezi.62
4.4.5. Probleme propuse pentru implementare67
4.4.5.1. Problema rezervrii biletelor67
4.4.5.2. Problema grdinii ornamentale67
Sorin Adrian Ciureanu 318
4.4.5.3. Problema emitor-receptor. 68
5 GESTIONAREA MEMORIEI... 69
5.1. IERARHII DE MEMORIE. 69
5.2. OPTIMIZRI N NCRCAREA I EXECUIA UNUI PROGRAM
N MEMORIE.. 71
5.2.1. ncrcarea dinamic... 71
5.2.2. Overlay-uri. 71
5.2.3. Legarea dinamic... 71
5.3. ALOCAREA MEMORIEI... 72
5.3.1. Alocarea memoriei n limbaje de programare... 72
5.3.2. Caracteristici ale alocatoarelor.. 73
5.3.3. Tipuri de alocare a memoriei. 74
5.3.4. Scheme de alocare a memoriei 74
5.3.4.1. Alocare unic... 75
5.3.4.2. Alocare cu partiii fixe (alocare static).. 75
5.3.4.3. Alocare cu partiii variabile. 76
5.3.4.4. Alocare prin swapping. 77
5.4. PAGINAREA MEMORIEI. 78
5.4.1. Suportul hardware. 78
5.4.2. Implementarea tabelei de pagini.. 80
5.4.3. Concluzii privind paginarea... 81
5.4.4. Segmentarea memoriei.. 82
5.4.5. Segmentarea paginat 83
5.4.6. Memorie virtual83
5.4.6.1. Paginare la cerere. 83
5.4.7. Algoritmi de nlocuire a paginii. 86
5.4.7.1. Algoritmul FIFO.. 86
5.4.7.2. Algoritmul LRU (Least Recently Used).. 87
5.4.7.3. Algoritmul LFU (Least Frequently Used)... 88
5.4.7.4. Algoritmul Real Paged Daemon.. 88
5.4.7.5. Fenomenul trashing.. 89
5.4.7.6.. Concluzii privind paginarea la cerere.. 89
5.5. ALOCAREA SPAIULUI LIBER. TIPURI DE ALOCATOARE... 90
5.5.1. Alocatorul cu hri de resurse 90
5.5.2. Alocatorul cu puteri ale lui doi (metoda camarazilor)... 91
5.5.3. Alocatorul Fibonacci.. 92
5.5.4. Alocatorul Karels-Mckusick. 92
5.5.5. Alocatorul slab.. 93
5.6. GESTIUNEA MEMORIEI N UNELE SISTEME DE OPERARE... 94
5.6.1. Gestiunea memoriei n Unix.. 94
5.6.1. Gestiunea memoriei n Linux. 98
5.6.2. Gestiunea memoriei n WINDOWS . 100
6. GESTIUNEA SISTEMULUI DE INTRARE/IEIRE.. 103
6.1. DEFINIREA SISTEMULUI DE INTRARE/IEIRE.. 103
6.2. CLASIFICAREA DISPOZITIVELOR PERIFERICE 104
6.3. STRUCTURA HARD A UNUI SISTEM DE INTRARE/IEIRE. 104
6.4. STRUCTURA SOFT A UNUI SISTEM DE INTRARE/IEIRE... 107
6.4.1. Rutine de tratare a ntreruperilor107
Sisteme de operare 319
6.4.2. Drivere... 109
6.4.3. Programe-sistem independente de dispozitive.. 112
6.4.4. Primitive de nivel utilizator... 112
6.5. MBUNTIREA OPERAIILOR DE INTRARE/IEIRE... 113
6.5.1. Factorul de ntreesere114
6.5.2. Cache-ul de hard disc.115
6.5.3. Crearea de ctre SO a unui hard disc cu performane
superioare...115
6.5.4. Construirea unui hard disc prin tehnica RAID (Redundant
Arrays of Indpendent Disck)..119
6.6. GESTIUNEA SISTEMULUI I/E N UNELE SO 120
6.6.1. Gestiunea sistemului I/E n UNIX. 120
6.6.1.1. Fiiere speciale de tip bloc 121
6.6.1.2. Fiiere speciale de tip caracter.. 121
6.6.2. Gestiunea sistemului I/E n LINUX 123
6.6.3 Gestiunea sistemului I/E n WINDOWS.. 123
6.6.3.1. Structura general a sistemului I/E n WINDOWS.. 123
6.6.3.2. Drivere n WINDOWS. 125
7. GESTIUNEA RESURSELOR LOCALE. 126
7.1. NOIUNI INTRODUCTIVE. 126
7.2. CLASIFICAREA FIIERELOR... 127
7.2.1. Clasificarea fiierelor dup structur. 127
7.2.1.1. Secvene de octei ... 127
7.2.1.2. Secvene de nregistrri... 127
7.2.1.3. Structura arborescent..127
7.2.2. Clasificarea fiierelor dup tip.. 127
7.2.2.1. Fiiere normale.127
7.2.2.2. Directoare.128
7.2.2.3. Fiiere speciale de tip caracter / bloc... 128
7.2.3. Clasificarea fiierelor dup suportul pe care sunt rezidente.. 128
7.2.4. Clasificarea fiierelor dup acces.. 128
7.2.4.1. Fiiere cu acces secvenial... 128
7.2.4.2. Fiiere cu acces direct.. 129
7.2.4.3. Fiiere cu acces indexat... 129
7.3. ATRIBUTE I OPERAII CU FIIERE129
7.3.1. Atribute.. 129
7.3.2. Operaii cu fiiere.. 129
7.4. IMPLEMENTAREA SISTEMULUI DE FIIERE.130
7.4.1. Alocarea fiierelor pe disc. 130
7.4.1.1. Alocarea contigu130
7.4.1.2. Alocarea nlnuit.. 131
7.4.1.3. Alocarea indexat132
7.4.2. Evidena blocurilor libere.. 134
7.4.3. Eficiena i performana sistemului de fiiere135
7.4.4. Fiabilitatea sistemelor de fiiere135
7.4.4.1. Evitarea distrugerii informaiei136
7.4.4.2. Recuperarea informaiei n urma unei erori hard sau
soft..136
Sorin Adrian Ciureanu 320
7.4.4.3. Asigurarea consistenei sistemului de fiiere 137
7.4.5. Protecia fiierelor..138
7.4.6. Organizarea fiierelor pe disc139
7.4.6.1. Organizarea fiierelor ce folosesc FAT... 139
7.4.6.2. Organizarea fiierelor n HPFS. 139
7.4.6.3. Organizarea fiierelor n NTFS141
7.5. FIIERE N DIFERITE SISTEME141
7.5.1. Sisteme de fiiere pentru CD-ROM-uri 141
7.5.1.1. Sistemul de fiiere ISO9660.. 141
7.5.1.2. Extensia ROCK RIDGE. 143
7.5.1.3. Extensia JOLIET143
7.5.2. Sistemul de fiiere n UNIX.. 143
7.5.2.1. Sistemul de fiiere rapid Berkeley. 144
7.5.2.2. Sistemul de fiiere n LINUX. 144
7.5.2.3. Sistemul de fiiere de reea NFS... 145
7.5.3. Sistemul de fiiere WINDOWS. 147
7.5.3.1. Sistemul de fiiere NTFS... 147
8. SISTEME DE OPERARE PENTRU CALCULATOARE PARALELE.153
8.1. NOIUNI INTRODUCTIVE.153
8.2. SISTEME DE OPERARE N REEA155
8.3. SISTEME DE OPERARE CU MULTIPROCESOARE.155
8.3.1. Programarea paralel.156
8.3.1.1. Memoria partajat ntre procese.. 156
8.3.1.2. Exemple de programare paralel.157
8.4. SISTEME DE OPERARE DISTRIBUITE..161
8.4.1. Structura unui sistem de operare distribuit163
8.4.1.1. Comunicare sistem client / server163
8.4.1.2. Apeluri de proceduri la distan...166
8.4.1.3. Comunicare n grup..167
8.4.2. Exemple de sisteme de operare distribuite.181
8.4.2.1. Sistemul de operare AMOEBA... 181
8.4.2.2. Sistemul de operare GLOBE... 184
9. SECURITATEA SISTEMELOR DE OPERARE.187
9.1. NOIUNI INTRODUCTIVE187
9.2. ATACURI ASUPRA SISTEMULUI DE OPERARE I MSURI
DE PROTECIE MPOTRIVA LOR190
9.2.1. Depirea zonei de memorie tampon (Buffer Overflow).191
9.2.2. Ghicirea parolelor (Password guessing)191
9.2.3. Interceptarea reelei192
9.2.4. Atacul de refuz al serviciului (Denial Of Service)192
9.2.5. Atacuri cu bomba e-mail194
9.2.6. Falsificarea adresei expeditorului (e-mail spoofing). 194
9.2.7. Cai troieni (Trojan Horses)195
9.2.8. Ui ascunse (Back dors and traps). 195
9.2.9. Virui..195
9.2.10
Viermi196
9.3. MECANISME DE PROTEC IE197
9.3.1. Criptografia197
Sisteme de operare 321
9.3.1.1. Criptografia cu chei secrete (Criptografia simetric). 197
9.3.1.2. Criptografia cu chei publice (Criptografia asimetric) 199
9.3.2. Dispozitive firewall200
9.3.2.1. Tipuri de firewall.201
9.3.2.2. Funciile unui firewall..202
9.3.2.3. Forewall-uri n sistemele de operare Windows... 202
9.3.2.4. Firewall-uri n sistemul de operare Linux203
9.3.3. Sisteme de ncredere.. 205
9.3.3.1. Monitorul de referin.. 205
9.3.3.2. Modelul Liste de Control al Accesului (ACL)206
9.3.3.3. Modelul Bell-La Padula.. 207
9.3.3.4. Modelul Biba... 209
9.3.3.5. Modelul securitii Crii Portocalii209
9.3.4. Securitatea n sistemele de operare Windows211
9.3.4.1. Concepte fundamentale de securitate n Windows.. 212
9.3.4.2. Implementarea securitii.214
9.3.5. Securitatea n Linux214
9.3.5.1. Open Source.. 214
9.3.5.2. Programe ce depisteaz i corecteaz vulnerabiliti 215
9.3.5.3. Auditarea sistemului. 216
10 STRUCTURA SISTEMELOR DE OPERARE...219
10.1 SISTEME DE OPERARE MONOLITICE...219
10.2 SISTEME DE OPERARE STRUCTURATE PE NIVELURI. 220
10.3 MAINI VIRTUALE221
10.4 SISTEME DE OPERARE CU MICROKERNEL.. 223
10.5 SISTEME DE OPERARE CU EXOKERNEL. 224
10.6 SISTEME DE OPERARE CU NANOKERNEL..225
10.7 STRUCTURA UNUI SO UNIX/LINUX. 226
10.7.1. Structura nucleului UNIX227
10.8 STRUCTURA UNUI SO WINDOWS229
10.8.1. Implementarea obiectelor n WINDOWS237
11 SISTEME DE OPERARE LINUX. APLICAII... 241
11.1 SCURT ISTORIC... 241
11.2 DISTRIBUII IN LINUX.242
11.2.1 Distribuia SLACWARE.. 242
11.2.2 Distribuia REDHAT242
11.2.3 Distribuia DEBIAN.243
11.2.4 Distribuia MANDRAKE.243
11.2.5 Distribuia LYCORIS... 244
11.2.6 Distribuia SUSE.. 244
11.3 APLICAII LINUX244
11.3.1 Comenzi LINUX245
11.3.2 Crearea proceselor.247
11.3.3 Comunicare ntre procese.. 251
11.3.3.1. Comunicarea ntre procese prin PIPE i FIFO.. 251
11.3.3.2. Comunicarea ntre procese prin semnale. 262
11.3.3.3. Comunicarea ntre procese prin sistem V IPC.
Cozi de mesaje. 273
Sorin Adrian Ciureanu 322
11.3.3.4. Comunicarea ntre procese prin sistem V IPC.
Semafoare.. 282
11.3.3.3. Comunicarea ntre procese prin sistem V IPC
Memorie partajat.. 285
11.3.3.6. Comunicarea ntre fire de execuie... 289
11.3.3.7. Interfaa SOCKET. 290
11.3.3.8. Modelul client / server TCP 293
11.3.3.9. Modelul client / server UDP. 300
BIBLIOGRAFIE.. 307
Sisteme de operare 323
Sorin Adrian Ciureanu 324
DICIONAR
DE TERMENI I PRESCURTRI
Algoritm -de planificare a proceselor:
FCFS=First Come First
Served
Primul venit primul servit
FIFO=First Input First
Output
Primul intrat primul ieit
SJF=Shortest Job First Cea mai scurt sarcin mai nti
-de alegere a spaiului de
memorie liber:
FFA=First Fit Algorithme Algoritm de prima potrivire
BFA=Best Fit Algorithme Alg. de cea mai bun portrivire
WFA=Worst Fit Algorithme) Alg. de cea mai proast potrivire
-de nlocuire a paginii de
memorie
FIFO=First Input First
Output
Primul intrat primul ieit
LRU=Least Recently Used Ultimul folosit
LFU=Least Frequenzly Used Cel mai puin utilizat
Algoritm real- Paged
daemon
Pregtete sistemul pentru
evacuarea de pagini
ACE Acces Control Entries Intrri de control al accesului
ACL Acces Control List List de control al accesului
AES Application Environnement
Specification
Specificaie a serviciilor utilizabile
de ctre o aplicaie client/server
APC Application Procedure Call Apelul unei proceduri de aplicaie
APC Asynchronous Procedure
Call
Apel de procedur asincron
API Application Programing
Interface
O intefa ce conine definiia
tipurilor de date i funciilor apel
n WINDOWS
APT Advanced Package Toll Utilitar pentru pachete deb
Atribute Caracteristici ale fiierelor Nume, tip, locaie, protecie etc.
BCP Bloc Cotrol Process Descriptor de proces
BIOS Basic I/O System Un sistem de memrie pentru
dispozitive intrare/ieire
Boot Proces Boot Un proces care iniializeaz SO
Boot Block Bloc de Boot Conine proceduri i funcii pentru
iniializarea sistemului de fiiere
Booting Botare Creare de procese care s
porneasc SO
BSD Berkeley System
Distribution
Versiune a sistemuluide operare
UNIX
Broadcast Emisie, emitere
Sisteme de operare 325
Bug defect n hard i n soft
Bussy Ocupat
Bussy-sleep Ateptare dormant Protocol de ateptare n excluderea
mutual
Bussy-wait Ateptare ocupat Protocol de ateptare n excluderea
mutual
CACHE Memorie rapidn Parte din memoria principal
CBC Cipher Bloc Chainning Mod de criptare cu nlnuire
CFB Cipher Feed Back Mod de criptare cu reacie
Checksumm Sum de verificare Suma biilor mesajelor
Circuit Level
Gateways
Portie de circuit
CList Capabilities List List de capabiliti
Coad Structur de date Funcioneaz dup principiul
FIFO, cu comenzile POP i PUSH
CODE RED Numele unui vierme
CORBA Common Object Request
Broker Arhitecture
Sistem bazat pe derularea
obiectelor
CPU Central Processing Unit Unitate central de procesare
CRE Cluster tools Runtime
Environement
Mediu de lansare n execuie n
MPI
DACL Discretionary ACL List de acces discreionar
Daemon Demon Un proces care st n fundal,
pentru manevrarea diferitelor
activiti
Deadlock Impas Interblocare n comunicaia
proceselor
DEC Distributed Environement
Corporation
Consoriu
DEC Digital Equipement
Corporation
Consoriu
DES Data Encryption Standard Standard de incriptare a datelor
bazat pe chei secrete
DESX Data Encryption Standard X Tip de DES
DI/EI Invalidare/validare
ntreruperi
Director (Catalog) Un fiier sistem care gestioneaz
structura sistemului de fiiere
DMA Direct Acces Memory Mod de transfer de date n unitatea
de I/E
Disck cache O seciune a memoriei
principale
Pentru blocurile de disc cele mai
des utilizate
DNS Domain Name System Schem de baz de date care
mapeaz ncod ASCII numele
gazdelor pe adresele lor IP
DOS Disck Operating System
DPC Deferred Procedure Call Apelul procedurii de amnare
Sorin Adrian Ciureanu 326
Driver Fiier ce conine comenzi
specifice unui periferic
Partea de SO care depinde de
perifericul asociat
ECB Electronic Code Bloc Mod de criptare cu carte de coduri
Eveniment (Semnal) Mecanism de comunicare ntre
procese
FAT File Alocation Tabel Tabel de alocare a fiierulor
Firestar n UNIX Interfa grafic pentru iptables
Firewall Perete de foc Sistem ce separ o reea protejat
de una neprotejat
Firewall
Builder
n UNIX Interfa grafic pentru iptables
Fiier Entitatea de baz a unui SO Pstreaz informaia
Fragle Atac cu pachete UDP la portul 7 al
adresei broadcast
Free behind Liber n urm Tehnic de optimizare a accesului
secvenial
Handle O intrare n tabelul de
resurse
Entitate de identificare a unui
proces n Windows
HMAC H Message Autentification
Code
Cod de autentificare a mesajelor
bazat pe funcia de dispersie H
HPFS High Performance File
System
Sistem de fiiere de nakt
performan
HTTP Hiper Text Transfer Protocol
I/O Input/Output = Intrare / Ieire
ICMP Protocol de transmitere a
pachetelor de date
Id Identificator proces n Windows
i-nod Nod de indexare
IP Internet Protocol
IP sniffing Atac asupra IP Intercepteaz o reea
IPC Inter Process
Communication
Comunicaie ntre procese
IPspoofing Falsificarea adresei IP Tip de atac
Iptables Firewall n UNIX
IRP I/O Request Packet
ISA Instructions Set Architecture Arhitetura setului de instruciuni
ISR Interrupt Service Routine Rutin de ntrerupere
JDK JAVA Developement Kit
Kernel Nucleu
Land craft Aterizare forat Tip de atac
LIFO Last Input First Out Ultimul intrat, primul ieit
List Structur de date ir de noduri ntr-o relaie de
ordine
LSF Lood Sharing Facility Mediu de lansare n execuie n
MPI
MAC Message Autentification
Code
Cod de autentificare a mesajelor
Sisteme de operare 327
MBR Master Boot Record
MFT Master File System Fiier de informaii asupra
fiierelor de pe volumul respectiv
MP Message Passing Transmisie de mesaje
MPI Message Passing Inteface Intefa n transmisia de mesaje
MORRIS Numele primului vierme inventat
MS-DOS Microsoft Disck Operating
System
Un sistem de operare mai vechi
Mutex Mutual exclusive Obiect de sincronizare
NAT Network Adress Translation Firewall n Windows
NESSUS n UNIX Program de scanare care
determin vulnerabilitile unei
maini
Network
Browser
Aplicaie ce permite
interconectarea cu alte sisteme
UNIX sau WINDOWS
NFS Network File System Sistem de fiiere de reea
NTFS New Tehnology File System Noua tehnologie a sistemului de
fiiere- sistem de organizare a
fiierelor
Obiect n unele limbaje de
programare ca C
++
, JAVA,
CORBA
O colecie de variabile legate ntre
ele printr-un set de proceduri
numite metode; n loc de fiiere
sau documente
OFB Out Feed Back Mod de criptare cu reacie la
ieire
Ofline n afara SO Tip de metod pentru
determinarea blocurilor defecte
ONC Open Network Computing Reea deschis de computere
Online n cadrul SO Tip de metod pentru
determinarea blocurilor defecte
Open Sources Surse deschise Comunitatea sistemelor de operare
libere
Overhead Costul comutrii procesului
Overlay Suprapunere
Packet flood Potop de pachete Bombardarea unei reele cu
pachete de date
Page daemon Demon de paginare Pregtete sistemul pentru
evaccuarea de pagini
Paging Paginarea memoriei
PVM Parallel Virtual Machine
Periferic Dispozitiv aflat n afara UC Ex: hard disc, imprimanta modem,
scanner,CD ROM
PFF Packet Filtering Firewalls Firewall-uri cu filtrare de pachete
PID Process Identificator Identificator de proces UNIX
Ping flood Tip de atac
Ping of death Tip de atac
Sorin Adrian Ciureanu 328
Pipe conduct Un pseudofiier pentru
comunicaia unidirecional
ntredou procese
PRAM Parallel Random Acces
Machines
Maini cu acces ntmpltor
paralel
Proces Program n execuie Sub controlul SO
Proces Switch Comutarea procesului
Program
Counter
Registru special vizibil
utilizatorului
Conine adresa de memorie a
urmtoarei instruciuni de utilizat
Proxies Proxi-uri de aplicaii
PSW Program Status Word
RAID Redundant Array of
Independent Discks
O mulime redundant de discuri
independente
RAM-disc Random Memory Disk O poriune de memorie principal
declarat ca disc virtual
Read ahead Citete nainte Tehnic de optimizare a accesului
secvenial
RPC Remote Process
Comunication
RO Read Only=numai citire Segment de cod
SACL System Acces Control
Scrambling nvlmeal Alterarea i amestecarea mesajelor
Semafor Obiect de sincronizare
Shel n UNIX Interpretor de comenzi
SID Security identificator Identificator de securitate
SIGUSR n UNIX Tip de semnal
Smarf Atac de tipul ICMF asupra adresei
brodcast a reelei
SMI Stateful Multilayer
Inspections
Firewall-uri cu inspecii multistrat
SMTP Simple Mail Transfer
Protocol
Protocol de transfer al mesajelor
Sniffer Adulmecare Program de interceptarea traficului
de reea
SO Sistem de operare
SPAM E.Mail spamming
Spoofing E-Mail spoofing Falsificarea adresei expeditorului
Stack Pointer Registru special vizibil
utilizatorului
Pointeaz pe partea de sus a stivei
curente de memorie
Stiv Structur de date Funcioneaz dup principiul
LIFO
Streamer Nucleu n spaiul utilizator
(analog pipelines-urilor)
Conecteaz dinamic un proces
utilizator la driver
Swapping Deplasare, micare Deplasarea proceselor de pe
memoria principal pe hard disc
Synchronous
calls
Apeluri sincrone Apeluri blocante
Sisteme de operare 329
SYNCOOKIES Un mecanism de prevenire a
atacurilor DOS
SYNflood Potop de pachete SYN Bombardare cu pachete care au
setat numai bitul SYN
SYSTEM V Versiune de UNIX Se bazeaz pe Berkeley UNIX
System calls Apeluri sistem
System Shadow Sistem de umbrire mpiedic accesarea fiierului de
parole
Task (Job) Sarcin
TCB Trusted Computing Base Baz de calcul de ncredere
TCP Transmission Control
Protocol
Protocol de control al transmisiei
pachetelor de date
TCP/IP Transmission Control
Protocol / Internet Protocol
Protocol de control al transmisiei
pachetelor de date
Tear drop Tip de atac TCP
TELNET Television Netwok Reea de televiziune
Thread Fir de execuie Subunitate a unui proces
Time out Timp depit Rezultat al atacului SYNflood
TITAN In UNIX Program de scanare care
determin i corecteaz
vulnerabilitile unei maini
Trashing Devalorizare Cnd procesele folosesc mai mult
timp pentru paginare dect pentru
execuie
Tripwire n UNIX Program de auditare
TS Test and Set Suport hard pentru
validare/invalidare de ntreruperi
sau instruciuni
UC Unitatea Central
UDP User Datagram Protocol Protocol de transmitere a
pachetelor de date
URL Uniform Resource Locator Adresa unic a unei pagini Web
WWW World Wide Web Larg reea mondial
Web Reea, estur Un mare graf orientat de
documente care pointeaz spre alte
documente
Web page Pagin Web Document n reeaua Web
Zombie Stare a unui proces Proces terminat, n ateptarea
terminrii printelui
Zone Allarm
Pro
n WINDOWS Program de instalare a unui
firewall
Sorin Adrian Ciureanu 330
Sisteme de operare 331

You might also like