Sunteți pe pagina 1din 321

Sisteme de operare

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.

Sorin Adrian Ciureanu

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; -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 i UNIX. 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.

Sisteme de operare
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

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 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 Li i Li+1 , se poate trece din Li+1 n Li prin interpretare sau prin traducere. Interpretare. Programul scris n Li+1 este executat pas cu pas, n sensul c instruciunile din Li+1 se execut pe rnd, fiecare instruciune din Li+1 fiind o dat de intrare pentru Li . Instruciunea din Li+1 are o secven echivalent de instruciuni care se execut n Li . Nu se genereaz un nou program n Li . Traducere. ntreg programul din Li+1 se nlocuiete cu un nou program n Li , generat prin nlocuirea fiecrei instruciuni din Li+1 cu o secven echivalent n Li .

Sorin Adrian Ciureanu

Considernd un sistem de calcul cu 6 niveluri, SO se plaseaz ca n urmtoarea schem: Nivel 5 Nivel 4 Nivel 3 Nivel 2 Nivel 1 Nivel 0
NIVELUL LIMBAJULUI ORIENTAT PE PROBLEM Traducere (compilator) NIVELUL LIMBAJULUI DE ASAMBLARE Traducere(asamblor) NIVELUL SISTEMULUI DE OPERARE Interpretare parial NIVELUL ARHITECTURII SETULUI DE INSTRUCIUNI
(ISA)

Interpretare(microprogram) sau executare direct NIVELUL MICROARHITECTURII Hard NIVELUL LOGIC DIGITAL

Dup Tanenbaum, calculatorul este foarte flexibil iar hardul i softul sunt echivalente sau, aa cum spunea Lenz, hardul este soft 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.

Sisteme de operare

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 urmtoarele 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. 1.3.1.2. Interfee 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

Sorin Adrian Ciureanu

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 Interfee 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 menuurile i ferestrele interfeei. -Interfaa ascunde anumite detalii legate de preluarea

Sisteme de operare

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

10

Sorin Adrian Ciureanu

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

Sisteme de operare

11

SO 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 SO. Unele erori sunt transparente utilizatorului, altele trebuiesc neaprat semnalate. De asemenea unele erori sunt fatale i duc la oprirea SO. Mecanismul principal de tratare a erorilor este ca SO 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 SO moderne acord un rol foarte important conceptului de siguran n funcionare i de protecie a informaiei. 1.4. CARACTERISICILE SISTEMELOR DE OPERARE Formulm n continuare cele mai importante caracteristici ale 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

12

Sorin Adrian Ciureanu

Exist: -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


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

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 WINDOWS 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 ).

Sisteme de operare

13

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. 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) ;

14

Sorin Adrian Ciureanu

-la distan (prelucrarea se face asupra unor date distribuite i dispersate geografic).

1.4.7. SO pentru arhitecturi paralele


SO paralele, folosite n multe procesoare SO distribuite , folosite n multe calculatoare. 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 etc. 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 etc.; -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

Sisteme de operare

15

Partea de control realizeaz interfaa direct cu hardul. Ea conine proceduri pentru: -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;

16

Sorin Adrian Ciureanu

-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 ; -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. 1.7. DEZVOLTAREA ISTORIC A SISTEMELOR DE OPERARE

n dezvoltarea istoric a sistemelor de operare, dup apariia lor, s-au adus multe mbuntiri, att n strategia SO ct i n implementarea SO. (De exemplu; multiprogramare, multitasking, timesharing etc.). Un lucru este acum evident: puternica interdependen hardsoft, adic ntre arhitectura sistemului de calcul i arhitectura SO. Au existat perioade n care sistemul de calcul avea performane mai sczute iar SO venea s suplineasc aceste neajunsuri (ex. procesoare 8bii, 8080, i sisteme de operare CP/M); n alte perioade situaia este invers, adic un sistem de calcul are performane puternice iar sistemul de operare nu reuete s utilizeze la maxim toate facilitile hard (de exemplu

Sisteme de operare

17

situaia actual, cnd sistemele de operare, att WINDOWS ct i UNIX, nu reuesc s utilizeze n modul cel mau eficient toate facilitile procesoarelor PENTIUM). Interdependena ntre arhitectura sistemelor de calcul i structura sistemelor de operare const i n faptul c, cel mai adesea, s-a implementat n hard o parte a funciilor SO. Exemple: a) Actuala component BIOS (Basic I/Osystem) dintr-un PC era o component a sistemului de operare CP/M. b) Managementul de memorie este actualmente implementat ca modul hard n procesor. Pentru generaiile trecute era o component a sistemului de gestiune a memoriei dintr-un SO. c) Memoria CACHE, foarte utilizat astzi i implementat exclusiv n memoria intern, n hard discuri etc, era o component a sistemului de operare UNIX n administrarea fiierelor. n noile sisteme de operare, a aprut o nou noiune, aceea de micronucleu (microkernel). n sistemele clasice cu kernel, acesta era o component rezident permanent n memorie, n sensul c era o parte indivizibil a SO. Ins un astfel de nucleu este foarte mare i greu de controlat. De aceea, constructorii de SO au nlocuit nucleul cu un micronucleu, o component de dimensiuni mai mici, rezident n memorie i indivizibil. n micronucleu au rmas serviciile eseniale, cum ar fi : repornirea unui proces, facilitile de comunicare ntre procese prin mesaje, rudimente de management de memorie, cteva componente de intrare-ieire de nivel foarte jos. Restul serviciilor, inclusiv driverele, au fost mutate n afara micronucleului, n zona de aplicaii utilizator . SO cu micronucleu funcioneaz 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

18

Sorin Adrian Ciureanu

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 proprii de ctre utilizatori. n concluzie, SO cu micronucleu au avantajul unei viteze mai mari, obinute 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 de 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 inter-schimbarea proceselor, tratarea ntreruperilor, servicii de reea de 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.

Sisteme de operare

19

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.
PLANIFICARE DE PERSPECTIV PLANIFICARE IMEDIAT U C DISPECER NCHEIEREA EXECUIEI

IR READY P1 P2 P3.Pn

I/ O

P1 P2 P3..Pn

20

Sorin Adrian Ciureanu

SIR DE ATEPTARE I/O

Fig. 2.1. Schema general de planificare a proceselor.

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

Sisteme de operare

21

-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. 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 Inpout First Output= Primul Intrat Primul Ieit). Exemplu: Proces Durata Durata UC 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.

22

Sorin Adrian Ciureanu

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 1 2 3 4 5 Durata UC 10 29 3 7 12 Proces 3 4 1 5 2 Durata UC 3 7 10 12 29 Durata de ateptare 0 3 10 20 32

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 ;

Sisteme de operare

23

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

24

Sorin Adrian Ciureanu

Exemplu: Proces 1 2 3 Momentul sosirii n irul READY 0 3 4 Durata ciclului rafal 12 3 6

n SJF fr preempie : Ordine P1(12) P2(3) P3(6) Ateptare 0 9 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

Sisteme de operare

25

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 1 2 3 4 5 Durata ciclului rafal 10 29 3 7 12

P1 ateapt

Dac cuanta de timp este de 10 ms, atunci ordinea n UC este urmtoarea: 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

26

Sorin Adrian Ciureanu

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 :
P1 P2..Pn P1 P2..Pn UC

P1(n) P2 (n)Pn(n) ( ..Pn

Sisteme de operare

27

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

28

Sorin Adrian Ciureanu

algoritm care s determine cnd s fie oprit procesul curent i s fie derulat altul. 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 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;

Sisteme de operare

29

-dac algoritmul folosit este preemptiv (de exemplu timesharing , 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.
In sistem

1 Planificatorul pe
Pregtit termen lung

5
Blocat

3 4

2 Planificatorul pe
termen scurt (UC) Rulare

6
Terminat

Fig. 3.1. Diagrama strilor unui proces.

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. 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.
Identificator al procesului (PID) Program Counter Stack Pointer Pregtire UC
HARD

Prioritate Zon pentru salvarea strii la prelevarea resursei procesor Pointer spre lista procselor aflate n aceeai stare

30

Sorin Adrian Ciureanu

Fig 3.2. Structura BCP a unui proces.

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

Sisteme de operare

31

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.

Spaiu utilizator Execuie proces PX Eveniment ce duce la comutare Mod de comutare Salvarea strii hard n BCPX i actualizarea strii procesului PX n BCPX . [ SCRIEREA EVENIMENTULUI] Planificarea urmtorului Proces PY. Restaurarea strii hard din BCPY . Mod de comutare Execuie proces PY

Fig.3.3 Schem de comutare a proceselor.

3.1.4. Crearea i terminarea proceselor

32

Sorin Adrian Ciureanu

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. Creerea unui proces se face prin apelul sistem:
fork()

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.

Sisteme de operare

33

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 i1 i2 i3 . . ik momentul apelului fork() Proces fiu ik+1 ik+1 ik+2 ik+2 . . . . in in

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 ? Sunt create 7 procese, plus procesul iniial, vor fi 8 procese. Cifrele arat dup al ctelea fork() au fost create.

34

Sorin Adrian Ciureanu

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 2n-1 fii.
Proces iniial

A B C B C C C

A B C C

B 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 21 ori; linia care scrie B este afiat de 22 ori; linia care scrie C este afiat de 23 ori. Numrul total de linii afiate este 21+22+23=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;

Sisteme de operare pidf,

35

n codul printelui, unde pidf este identificatorul de proces al fiului nou creat. 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().

36

Sorin Adrian Ciureanu

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

Sisteme de operare

37

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 portabilitate Procese UNIX fork()standard Pthreaduri POSIX interfa standard portabilitate Relativ mic Foarte mic Partajat Partajare implicit Semafoare, mutexuri POSIX Tabele de fiiere unice

Cost de creare Mare Cost de comutare Mare Spaiu de aches Separat Memorie partajat Partajare explicit Obiecte de excludere Semafoare, mutexuri mutual UNIX Fiiere i stringuri de Tabele de fiiere I/O separate Un pthread se creeaz cu ajutorul funciei int pthread create (list de parametri).

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

38

Sorin Adrian Ciureanu

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 nsemn 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

39

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.

40

Sorin Adrian Ciureanu

Exemplu: Un proces execut o operaie de incrementare a variabilei partajate x dup secvena cod:
LOAD R x /ncrcarea lui x n registrul R; 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

Sisteme de operare

41

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; -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; -atunci cnd unul sau mai multe procese doresc s intre ntr-o seciune critic, unul din ele trebuie s obin accesul n timp finit. 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

42

Sorin Adrian Ciureanu

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. 4.1.1.2. Instruciunea 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.

Sisteme de operare

43

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 i mai mult folosite. Ele au fost introduse de Dijkstra n 1968.

44

Sorin Adrian Ciureanu

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++);}

Operaia signal(s) este atomic (indivizibil).

Sisteme de operare

45

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

46

Sorin Adrian Ciureanu

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

Sisteme de operare

47

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

48

Sorin Adrian Ciureanu

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.
Date accesate n comun P1 P2 Pn

Coad de intrare n monitor Proc 1 Proc 2 Proceduri Variabile partajate

Proc n

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

Sisteme de operare

49

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:

50

Sorin Adrian Ciureanu

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

Sisteme de operare

51

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. P1P2P3Pn-1Pn

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 :
Ri

Procesul cu indice j :
P
j

Arcele grafului sunt orientate i sunt de dou feluri: a) arce cerere, care reprezint faptul c procesul Pj fcut o cerere de alocare a resursei Ri i ateapt dobndirea ei;
P
j

Ri

52 c)

Sorin Adrian Ciureanu

arce alocare, care reprezint faptul c procesului Pj i-a fost alocat resursa Ri .
P
j

Ri

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.
P
1

R1 P
2 2

R2

Fig.4.2. Graf de resurse.

n graful de mai sus, procesului P1 i este alocat resursa R1 i procesului P2 resursa R2 . Procesul P1 a fcut o cerere de alocare a resursei R2 deinut de P2 iar P2 a fcut o cerere de alocare a resursei R1 deinut de P1 . 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.

Sisteme de operare
P
1

53

R1 P
2 2

R2

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; b) metod n care se permite sistemului de operare s intre n interblocare i apoi se ncearc scoaterea sa din aceast stare n cadrul primei metode se face prevenirea sau evitarea interblocrii. n cadrul celei de-a doua metode 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. b) Ocupare i ateptare

54

Sorin Adrian Ciureanu

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 muimea numerelor naturale, astfel nct fiecare resurs este identificat orintr-un numr natural. De exemplu: hard disc .1

Sisteme de operare

55

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. 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 P1 , P2 , ..Pn exact n aceast ordine. Spunem c aceast secven este sigur dac pentru orice proces Pi 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

56

Sorin Adrian Ciureanu

numrul resurselor obinute din nsumarea resurselor disponibile cu resursele eliberate de procesele Pj cu j i. 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: P1 P2 P3 P4 P5 P1 P2 P3 P4 P5 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 P1 P2 P3 P4 P5 . P1 la cerere maxim de resurse ar avea nevoie de 10-5 = 5 resurse < 10 resurse disponibile P2 15-5 = 10 resurse < 5(eliberate de P1 ) + 10(disponibile) P3 20-10=10 resurse < 5(P1 ) + 5(P2) +10(disponibile) P4 25-10=15 resurse < 5(P1) + 5(P2) + 10(P3) + 10 (disponibile) P5 30-20=10 resurse < 5(P1)+5(P2)+10(P3)+10(P4)+10(dispon.) Deci aceast secven este sigur. S analizm secvena P4 P5 P1 P2 P3 . P4 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.

Sisteme de operare

57

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 Pi ar mai avea nevoie de t elemente din resursa rj . 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 Pi dorete t elemente

din resursa rj . Algoritmul banchetului are urmtorii pai: Pas 1 Procesul Pi 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. Precizm c V1[n] < V2[n] , dac V1[i] < V2[i] pentru oricare i=1.n if cerere[i][x]<=necesar[i][x] x= 1........m , Pas2 else eroare
if cerere[i][x]<=disponibil[x] se trece la pas 3 else wait (resursele nu sunt disponibile)

Pas 2

58

Sorin Adrian Ciureanu

Pas 3 Se simuleaz alocarea resurselor cerute de procesul Pi , 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:

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 generalitate. Principalul su dezavantaj este numrul mare de operaii pe care l cere.

terminat[i]=true pentru i=1n ,

Sisteme de operare

59

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 Pi s revendice n viitor resursa Rj . Ca mod grafic de reprezentare , el este trasat cu linie ntrerupt. Cnd procesul Pi cere resursa Rj , arcul revendicare (PiRj) se transform n arc cerere (PiRj). Cnd resursa Rj este eliberat de procesul Pj ,arcul alocare (PiRj) este transformat n arc revendicare (PiRj). Pentru a determina strile nesigure, se caut n graf bucle n care intr arcuri revendicare. O astfel de bucl reprezint o stare nesigur. Exemplu:
P1

R1

R2

P2
2

Fig. 4.4. Graf de alocare cu arcuri revendicative.

n graful de mai sus, procesului P1 i este alocat resursa R1, iar procesului P2 i este alocat resursa R2 . n acelai timp procesul P1 poate s cear n viitor resursa R2 ceea ce n graf se concretizeaz prin arcul revendicare (P1R2). La fel, Procesul P2 poate revendica resursa R1 prin arcul (P2R1). Se observ c exist o bucl (P1R2P2R1), 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:

60

Sorin Adrian Ciureanu

-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: -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 (Rj) i contopirea arcelor corespunztoare. n acest caz, un arc (PiPj) arat c Pi ateapt ca Pj s elibereze resursa care i este necesar.
P
1 2

P
2 2

P
3 2

P
4 2

P
5 2

R1

R2

R3

R4

R5

Fig. 4.5.Graf de alocare a resurselor.

n acest caz, existena buclei nu nseamn interblocare.


P
1 2

P
2 2

P
3 2

P
4 2

P
5 2

Fig.4.6.Graf WAIT FOR.

Algoritmul WAIT FOR se poate aplica numai pentru resurse simple.

Sisteme de operare

61

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

62

Sorin Adrian Ciureanu

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

Sisteme de operare

63

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; 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

64

Sorin Adrian Ciureanu

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, adic dac linia este unidirecional sau bidirecional; -dimensiunea mesajelor care poate fi fix sau variabil.

Sisteme de operare

65

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.

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

66

Sorin Adrian Ciureanu

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

Sisteme de operare

67

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 P1 transmite un mesaj procesului P2 , atunci urmtoarea secven de mesaje face ca P1 s tie c mesajul su a fost transmis:
send(p2, mesaj) receive(p1,mesaj) send(p1,confirmare) receive(p2,mesaj) procesul procesul procesul procesul P1 P2 P2 P1

68

Sorin Adrian Ciureanu

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 interprocese


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 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 P1, destinatar, ateapt un mesaj de la un proces emitent P2 , care i-a terminat execuia, atunci P1 va rmne n starea blocat. Pentru ca P1 s nu se blocheze exist dou posibiliti: -sistemul de operare termin forat procesul P1 ; -sistemul de operare comunic procesului P1 c procesul P2 s-a ncheiat.

Sisteme de operare

69

Dac un proces P1 este emitent trimind un mesaj unui proces P2 care i-a ncheiat execuia, exist urmtoarele posibiliti: -dac linia de comunicaie este limitat sau nelimitat, nu se ntmpl nimic; procesul P1 i continu execuia; -dac linia de comunicaie este de capacitate zero, atunci P1 se blocheaz; pentru ca P1 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 chechsums-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.

70

Sorin Adrian Ciureanu

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

Sisteme de operare

71

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

Vom considera urmtoarele variabile, semafoare i mutexuri: 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. 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

72

Sorin Adrian Ciureanu

blocate. Se intr ntr-o excludere mutual cu protocolul bussywait 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, tastatur; while(1) { valoare=scanf(%d,&tastatura); wait(semscriere) ; lock(mutexscriere) ; tampon[scriere]=valoare ; scriere=(scriere+1)%n ; unlock(mutexscriere) ; signal(semcitire) ;}

//Procese Consumator
int valoare; while(1)

Sisteme de operare {wait(semcitire); lock(mutexcitire); valoare=tampon[citire]; citire=(citire+1)%n; unlock(mutexcitire); signal(semscriere);}

73

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.

74

Sorin Adrian Ciureanu

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 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 /*o funcie care mesaj(&m,val); 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

75 Sisteme de operare 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*/ 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

76

Sorin Adrian Ciureanu

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: 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

Sisteme de operare

77

ateapt i unul din ei va ocupa mutexul, fiind servit la rndul su. Iat mai jos implementarea acestui algoritm.
#define scaune 20 type def int semafor; type def int mutex ; semafor clienti=0; /*se definete numrul de scaune*/ /*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); 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.

78

Sorin Adrian Ciureanu

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; contorcitire o variabil care are rolul de a ine evidena numrului de procese existente n cursul citirii;

Sisteme de operare

79

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: gndete

80

Sorin Adrian Ciureanu

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 5 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:

Sisteme de operare

81

-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. 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 ridic beior(i) este funcia care asigur pentru filozoful i ridicarea ambelor beioare; funcia pune beior i este funcia care asigur pentru fiecare filozof i punerea ambelor beioare pe mas;

82

Sorin Adrian Ciureanu funcia test(i) este funcia care testeaz n ce stare

este filozoful i. Implementarea este:


#define n 5 #define stang(i+n-1)%n #define drept(i+1)%n #define gandeste 0 #defineinfometat 1 #define mananca 2 typedef int semafor; typedef int mutex; int stare[n]; mutex mutexfil=1 semafor sem[n]; void filozof(int i) while(i) { gandeste(); ridicabetisor(i); mananca(); punebetisor(i); /*am definit numrul de filozofi*/ /*numrul vecinului din stnga filozofului i*/ /*numrul vecinului din stnga filozofului i*/

/*filozoful i gndete*/ /*filozoful i ridic cele dou beioare*/ /*filozoful i mnnc*/ /*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

83 Sisteme de operare 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); stare [i]=gandeste; test(stang);

test(drept);

signal(mutexfil); } void test(int i); {if stare [i]== infometat&&stare[stang]!= mananca&&stare[drept]!= mananca) {stare[i]=mananca; signal(sem[i]);}}

/*se intr n regiunea critic*/ /*filozoful i a terminat de gndit*/ /*se testeaz dac vecinul din stnga filozofului i mnnc*/ /*se testeaz dac vecinul din dreaptafilozofului i mnnc*/ /*se iese din regiunea critic*/

84

Sorin Adrian Ciureanu

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 dintren). 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. 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 unproces ( o persoan care intr n grdin) . Dac, la un moment dat, pe una din pori intr o persoan, atunci, n acel moment, pe nici oalt poart nu mai intr vreo persoan n grdin. Aceast problem face parte din problema excluderii reciproce.

Sisteme de operare

85

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.

86

Sorin Adrian Ciureanu

Sisteme de operare

87

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;

88

Sorin Adrian Ciureanu

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

Procesor

registre generale

Memorie principal (RAM)

Memorie secundar (hard disc)

Memoria cache

Fig.5.1. Schema principal hard a unui sistem de memorie.

Parametrii principali ai unei memorii sunt: - timpul de acces la memorie (timp necesar pentru operaia de citire a memoriei); - capacitatea memoriei. 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

Sisteme de operare

89

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.

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

90

Sorin Adrian Ciureanu

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, cnd este apelat, este nlocuit cu rutina respectiv ce se i execut. 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.

Sisteme de operare

91

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 punct 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 ;

92

Sorin Adrian Ciureanu

-exist sigurana c n orice moment, o zon de memorie utilizat nu este dealocat. Dezavantajele limbajului: -alocarea este impredictibil n timp, adic nu se tie exact n care moment se va produce; -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; -fragmentare intern; Fragmentarea extern apare ori de cte ori exist o partiie de memorie disponibil, dar nici un program nu ncape n ea.

Sisteme de operare

93

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.

5.3.3. Tipuri de alocare


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

94

Sorin Adrian Ciureanu

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; -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 se 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). a)-Pentru sistemele cu alocare contigu, exist schemele: -alocare unic; -alocare cu partiii fixe ( alocare static);

Sisteme de operare

95

-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

96

Sorin Adrian Ciureanu

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

Sisteme de operare

97

-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. -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 evacuae din memorie pe disc ? Exist un algoritm bazat pe prioriti, numit Rollout-Rollin, conform cruia, la apariia unui proces cu

98

Sorin Adrian Ciureanu

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 (harddiscul) 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. O alt problem apare atunci 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 se 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.

Sisteme de operare

99

Trebuie menionat c nc suntem n modul de alocare contiguu, deci spaiul de adresare al unui proces nu poate depi capacitatea memoriei interne. 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.
1 Memoria principal

P P2

Memoria secundar
swapaut (evacuare)

Pn

Imaginea lui Imaginea lui

P1 P2

P1 P2

Imaginea lui

Pn

Pn

Fig.5.2. Mecanismul swapping.

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.

100

Sorin Adrian Ciureanu

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

Sisteme de operare
l d d f

101

f d

Tabel de pagini

Memoria fizic

Fig.5.3. Corespondena dintre adresa logic i cea fizic.

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

102

Sorin Adrian Ciureanu

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-s 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. Alte mbuntiri ale implementrii tabelei de pagini folosesc: a)-tabele de pagini pe nivele multiple; b)-tabele de pagini inverse.

Sisteme de operare

103

a) Pentru un spaiu de adresare foarte mare, tabelele de pagini pot avea dimensiuni mari. De exemplu, pentru o memorie principal de 4 GO (232octei), 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 32 de 2 octei, o adres logic arat astfel:
numrul de pagin 20 bii deplasament 12 bii

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:
numrul de seciune 2 bii numrul de pagin 18 bii deplasament 12 bii

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

104

Sorin Adrian Ciureanu

Principalul avantaj al paginrii este eliminarea complet a fragmentrii externe. Nu dispare ns i fragmentarea intern, deoarece 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 vedere 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

Sisteme de operare

105

segmente. Fiecrui segment de memorie i corespunde o unitate funcional a programului.


Program Program principal Funcia 1 Funcia 2 Procedura Matrice 1 Matrice 2 Vector Memorie

Segment Segment Segment Segment Segment Segment Segment

1 2 3 4 5 6 7

Fig. 5.4. Principiul segmentrii.

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

106

Sorin Adrian Ciureanu

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. 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 intregime n memorie. n fig. 5.5. se d o organigram a paginrii la cerere.

Sisteme de operare

107

Referire pagin memorie

NU Eroare de accesare

referin valid

DA

NU (BITVALID=0)

Bit valid =1

DA

Eroare pagin Pagin prezent n memorie i se acceseaz

Se execut PFI= Page Fault Interrupt

Rutin de tratare a ntreruperii

Fig. 5.6. Organigrama 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 harddisc 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. 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.

108
NU

Sorin Adrian Ciureanu


DA Exist cadru liber Se alege un cadru victim = cadrux

Se plaseaz pagina adus de pe disc n cadrul liber din memorie DA

NU

Bit tranzit=1

Pagina e n curs de ncrcare i se alege alt cadru victim

DA

Bit dirty cadrux= 1

NU (bit dirty =0) Pagina nu a fost modificat i nu trebuie salvat pe harddisc

Pagina a fost modificat i trebuie salvat pe harddisc Se alege un algoritm de nlocuire a paginilor: LRUINRU, FIFO

Politica de plasare n memorie: WFA, FFA, BFA, Buddy-System

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 setat la 1 ori de cte ori se face o modificare n pagin. Deci acest bit arat dac pagina a

Sisteme de operare

109

fost modificat sau nu la nivel de memorie. Dac nu a fost modificat, atunci nu are rost salvarea ei pe harddisc, unde exist deja aceast pagin. Dac a fost modificat, atunci ea trebuie salvat pe harddisc. 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 creeat un algoritm statistic care ncerca, pe baze probabilistice, s rezolve aceast problem, dar rezultatul algoritmului nu a fost din 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.

110

Sorin Adrian Ciureanu

Secvena de alocare a paginilor 543254154321


Secvena 3 cadre

5 5 -

4 4 5 -

3 3 4 5

2 2 3 4

5 5 2 3

4 4 5 2

1 1 4 5

Situaii de nenlocuire a paginilor 4 cadre

5 1 4 5 * 5 1 2 3

4 1 4 5 * 4 5 1 2

3 3 1 4

2 2 3 1

1 2 3 1 *

r 3=75%

5 -

4 5 -

3 4 5 -

2 3 4 5

Situaii de nenlocuire a paginilor

2 3 4 5 * *

2 3 4 5

1 2 3 4

3 4 5 1

2 3 4 5

1 2 3 r4=83% 4

Rata erorilor de pagin este, pentru folosirea a trei cadre, de: r3= r4 =
9 % = 75% 12 10 = 83% 12

iar pentru folosirea a patru cadre : 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.

Sisteme de operare
5.4.7.2.

111

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.
Secvena 3 cadre

5 5 -

4 4 5 -

3 3 4 5

2 2 3 4

5 5 2 3

4 4 5 2

1 1 4 5

Situaii de nenlocuire a paginilor 4 cadre

5 5 1 4 * 5 1 4 2 *

4 4 5 1 * 3 5 1 4

3 3 4 5

2 2 3 4

1 1 2 3 r3= 10 =
12

83% 3 4 1 4 * 2 3 5 1 1 2 3 r=7= 4 12 5 * 58%

5 -

4 5 -

3 4 5 -

2 3 4 5

Situaii de nenlocuire a paginilor

5 2 3 4 *

4 5 2 3 *

1 4 5 2

112

Sorin Adrian Ciureanu

Se observ c odat cu creterea numrului de cadre scade rata erorilor de pagin, deci anomalia Belady nu mai apare. Se 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. Exist mai multe feluri de implementare ale algoritmului LRU: a) LRU cu contor de accese b) LRU cu stiv c) LRU cu matrice de referine. 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 linia cu cele mai puine cifre de 1, indicele acestei linii fiind numrul paginii fizice aleas ca victim.

Sisteme de operare

113

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

114

Sorin Adrian Ciureanu

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

Sisteme de operare

115

-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 Lungime Situaia nceput a (baii) blocului blocului (hexa) 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.

116

Sorin Adrian Ciureanu

Harta memoriei
0 64 96 16E

3FE 482

(a) 16E (b)


Fig. 5.9. Hri de memorie n alocatorul cu hri de resurse.

5B4 100

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

Sisteme de operare

117

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 (metoda camarazilor)


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 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 2k octei. Tehnica de alocare este urmtoarea: dac dimensiunea unei cereri sde 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 2k i 2k+1, se alege zona cu dimensiunea 2k+1. Metoda se mai numete i metoda njumtirii, pentru c, practic, dac exist o cerere de alocare de dimensiunea 2k i aceasta nu exist, atunci se alege o zon liber de dimensiune 2k+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 2k pentru care exist cel puin o zon liber. Mai trebuie menionat faptul c, atunci cnd dou zone nvecinate de dimensiune 2k devin libere, ele sunt regrupate pentru a forma o singur zon liber de dimensiune 2k+1 . De aici i numele de metoda camarazilor.

5.5.3. Alocatorul Fibonacci

118

Sorin Adrian Ciureanu

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 ai este: ai = ai-1 + ai-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. 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

Sisteme de operare

119

(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 iniialiate din nou. Atunci cnd un alocator nu mai are memorie la dispoziie, el cere o nou pagin n care scrie obiecte noi. Pentru c

120

Sorin Adrian Ciureanu

obiectele nu au fost niciodat iniializate , alocatorul cheam constructorul pentru a iniializa un nou obiect.
Alocatorul de fiiere Alocatorul de noduri

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.

Sisteme de operare

121

5.6.

GESTIUNEA MEMORIEI N UNELE SISTEME DE OPERARE

5.6.1.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 referie 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.

5.6.2.Gestiunea memoriei n Windows NT


Administratorul de memorie din sistemul de operaie Windows lucreaz cu procese nu cu threaduri. Se utilizeaz paginarea la cerere, cu pagini de dimensiune fix, maximum de 64 Kb ( la Pentium se utilizeaz o pagin de 4Kb). O pagin poate fi n urmtoarele stri: -liber -rezervat -angajat (commutted).

122

Sorin Adrian Ciureanu

Paginile libere i cele rezervate au pagini shadow pe disc, iar accesul la ele provoac ntotdeauna eroare de pagin. SO WINDOWS poate utiliza maximum 16 fiiere de swap. De menionat c segmentarea nu este utilizat. 4GB Neutilizat SO (cu d zone de date obiecte sistem) 2Gb Date sistem (contoare i timere) Zona privat (datele i codul programului) neutilizat 64 k Zon read only numai pentru procesele sistem

Partajate read only de toi utilizatorii 64 k

Fig. 5.11.Schema general de administrare a memoriei WINDOWS.

Sisteme de operare

123

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.

124

Sorin Adrian Ciureanu

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; - 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

Sisteme de operare

125

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

126

Sorin Adrian Ciureanu

-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: -controllerul; -perifericul propriu zis. Controllerul este alctuit dintr-o serie de registre de comenzi i de date. Pentru un periferic simplu, ca tastatura sau

Sisteme de operare

127

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.
CONTROLLER UC PERIFERIC

Registru comenzi 1 Registru comenzi 2

Registru comenzi n

Dispozitiv de comand

UC/ UMEMORIE

Registru de date

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 bus-ului 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

128

Sorin Adrian Ciureanu

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

Sisteme de operare

129

proces

Iniiere operaie I/E

Rutina de tratare a ntreruperilor

Periferic

ready

wait

signal

Fig.6.2. Rutina de tratare a ntreruperilor.

periferic

Rutina identific sursa ntreruperii.

Linia de ntrerupere

Reiniializeaz linia de ntrerupere.

Memoreaz starea perifericului.

Proces ready

signal

Trezete procesul cnd operaia de I/E este gata.

Fig.6.3. Reprezentarea rutinei de ntrerupere.

Se observ c sarcinile principale ale rutinei de tratare a ntreruperilor sunt:

130

Sorin Adrian Ciureanu

- 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); -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.

Sisteme de operare

131

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 fig. 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:
cap numr bloc adresa cilindru sec tor

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

132
C1 C2

Sorin Adrian Ciureanu


Cn-1 Cn Coad de ateptare pentru driverul respectiv Desfacerea parametrilor

DA

Paramet ri valizi

NU

Translaie Termeni abstracitermeni concrei

eroare

NU

Ready dispzitiv periferic

DA

Lansarea operaiei efective

Dispozitiv periferic

Blocare driver (wait)

Trezire driver (signal)

operaie terminat Dispozitiv periferic

citire

Citire/scrie re

scriere

Zona de memorie disponibil Date disponibile

Preluarea cererii urmtoare

Fig. 6.4. Schema de funcionare a unui driver.

Sisteme de operare

133

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.
cerere citirea blocului 1123 de pe hard discul C

adresa numr bloc operaie

hard disc C 1123 citire date

translaie bloc 1123

poziionare pe cap 2, cilindru 40, sector 2 i sector 3 citire date

dispozitiv periferic dispozitiv periferic

Blocar e driver (wait)

trezire driver (signal )

citire date de pe sector 2 i 3 cap 2, cilindru 40

date disponibile memorie preluarea cererii urmtoare

Fig. 6.5. Schema funcionrii unui driver pentru o comand de citire a unui bloc logic.

134

Sorin Adrian Ciureanu

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

Sisteme de operare

135

sunt legate de utilizarea bufferului de date. Procesul iniator 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.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 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 edificative 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

136

Sorin Adrian Ciureanu

sector. Deci, pentru citirea sector cu sector, era necesar o rotaie pentru citirea unui sector. O iedee 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.
8 7 6 5 4 1 2

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.
6 3 8 5 2 1 4

Fig. 6.7. Hard discul dup trei rotaii.

Sisteme de operare

137

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), timpul necesar pentru micarea mecanic a capului de scriere/citire pn la pista specificat; - latena de rotaie ( rotational latency) este timpul de ateptare necesar pentru ca sectorul specificat s ajung sub capul de scriere/citire; - timpul de transfer ( transfer time) este timpul necesar pentru a citi informaia de pe sectorul specificat; Planificarea accesului la disc are n vedere dou lucruri:

138

Sorin Adrian Ciureanu

- reorganizarea cererilor la disc pentru a minimiza timpul de cutare; - un mod de plasare a informaiilor pe disc care s minimizeze latena de rotaie. 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.

Sisteme de operare

139

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
140 spaiul parcurs (uniti convenionale) 120 100 80 60 40 20 0 0 25 50 75 100 125 150 175 200 225 250 timpul de cutare (numr de cilindri parcuri) (a)

120 spaiul parcurs (uniti convenionale) 100 80 60 40 20 0 0 25 50 75 100 125 150 175 200 225 250 timpul de cutare (numr de cilindri parcuri) (b)

140
spaul parcurs (uniti convenionale) 120 100 80 60 40 20 0 0 25

Sorin Adrian Ciureanu

50

75 100 125 150 175 200 225 250

timpul de cutare (numr de cilindri parcuri) (c)

250 spaiul parcurs (uniti convenionale) 200 150 100 50 0 0 25 50 75 100 125 150 175 200 225 250 timpul de cutare (numr de cilindri parcuri) (d)

(a)FCFS=n ordinea sosirii ; (b) SSTF=spre cel mai apropiat cilindru ; (c) SCAN ; (d) C SCAN

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-

Sisteme de operare

141

44)+(144-143)==150+100+75+225+100+6+1=657 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)+(144143)+(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

Observaii: - Cel mai timp de cutare ofer algoritmul SSTF, unul din cei mai utilizai, 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. - 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.

142

Sorin Adrian Ciureanu

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

Sisteme de operare

143

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:

144

Sorin Adrian Ciureanu

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

Sisteme de operare

145

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; -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 Sunt nite fiiere sistem destinate gestionrii structurii sistemului de fiiere. 7.2.2.3. Fiiere speciale de tip caracter/bloc Sunt destinate utilizrii n conjuncie cu dispozitivele periferice.

146

Sorin Adrian Ciureanu

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. 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, B-arbori, 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.

Sisteme de operare

147

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

148

Sorin Adrian Ciureanu

-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 operaii 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.
marker de accesare a unui octet
Octet 1 Octet 2 Octet 3 . Octet k Octet n

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: -alocare contigu; -alocare nlnuit; -alocare secvenial.

Sisteme de operare

149

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: -este un tip de alocare foarte simplu, 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 -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:

150

Sorin Adrian Ciureanu

-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. 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.
Zon date Bloc 29 pointer Bloc 70 Zon date Bloc 29 pointer Bloc 200 Zon date Bloc 200 pointer Bloc 1234 Zon date Bloc 1234 pointer

Fig. 7.3. Reprezentarea unui fiier cu 4 blocuri. Alocare nlnuit.

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.

Nume fiier test

Nr. bloc nceput 29

Nr. bloc sfrit 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).

Sisteme de operare

151

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. 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. 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; -al treilea bloc, dup indirectarea dat de primele 2 blocuri, pentru bloc de indirectare tripl.

152

Sorin Adrian Ciureanu

atribute

1 2 3 4 5 6 7 8 9 10 11 12 13

Bloc

Bloc de indirectar e simplu

Bloc de indirectar e dublu

Bloc de indirectar e triplu

Fig. 7.4. Structura unui i-nod ( nod de indexare)

7.4.2. Evidena blocurilor libere

Sisteme de operare

153

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.
Bloc liber Bloc liber Bloc liber Bloc liber

Fig. 7.5. Lista simplu nlnuit a blocurilor libere din disc.

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.

154

Sorin Adrian Ciureanu

Bl. 1 1

2 0

3 0

4 0

5 0

6 1

7 1

8 1

9 1

1 0 0

1 1 0

1 2 1

1 3 0

1 4 0

15 0

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.

Sisteme de operare

155

b)-Recuperarea informaiilor n urma unor erori hard sau soft. 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

156

Sorin Adrian Ciureanu

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

Sisteme de operare

157

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. C2 Situaie aprut Corecie 0 Se irosete un bloc ce nu va putea fi Se face C2 = 1 alocat 1 Exist riscul ca blocul s fie alocat Se face C2=0 mai multor fiiere; pot aprea suprancrcri de date >1 Bloc alocat mai multor fiiere Se face C2=1 0 Blocul este ters ntr-unul din fiiere; Se aloc C1-1 el va fi trecut n lista de noduri libere blocuri libere n i, eventual, alocat altui fiier. care se copiaz Celelalte C1-1 referine la blocul coninutul respectiv vor adresa o informaie blocului incorect invalid ntruct e posibil ca el s fie adresat.C1-1 alocat unui fiier nou creat. dintre referinele ctre blocul respectiv vor fi nlocuite ctre copiile acestuia.

C1 0 1 0 >1

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:

158

Sorin Adrian Ciureanu

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. i trei tipuri de operaii: citire, scriere i execuie. 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 inodul asociat.
Proprietarul fiierului 1 Ciitire 1 Scriere 1 Execuie Utilizatori, membri ai grupului 1 0 1 Citire Scriere Execuie Ali utilizatori 1 Citire 0 Scriere 0 Execuie

Fig. 7.7. Implementarea sistemului de protecie n UNIX.

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.

Sisteme de operare

159

Metoda utilizat n sistemul WINDOWS este ce 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 n sistemul de operare UNIX n UNIX exist urmtoarea organizare a sistemului de fiiere: Blocul de Superblocul Lista de i-noduri Blocuri de date BOOT 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 i-noduri, primul din list este destinat gestiunii blocurilor diferite iar al doilea are directorul de rdcini.

160

Sorin Adrian Ciureanu

Blocurile de date conin att date utilizator ct i date folosite de sistemul de fiiere. 7.4.6.2. Organizarea fiierelor n SO ce folosesc FAT n SO care utilizeaz mecanisme de tip FAT, structura unei intrri de director este: Nume Extensie Atribute Rezerva fiier t 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.3. 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. 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

Sisteme de operare

161

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.

Pentru descrierea fiierelor se utilizeaz F-noduri. Director Intrare n director F-nod Antet Nume fiier Atribute Arbore de alocare Extensie 1 Extensie 7 Extensie 8

Fig. 7.9. Descrierea fiierelor cu F-noduri.

F-nodurile sunt structuri de date care conin atributele i informaiile legate de localizarea pe disc a fiierelor. Fiecare F-

162

Sorin Adrian Ciureanu

nod are cel mult 8 extensii. Extensiile sunt entiti distincte, fiecare din ele putnd adresa blocuri de maxim 16MB. 7.5.6.4. 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.

Sisteme de operare

163

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; nici n ziua de astzi nu lucrurile nu sunt prea clare n ceea ce privete rolul fiecruia.

164

Sorin Adrian Ciureanu

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, folosit n multicalculatoare. 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

Sisteme de operare

165

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

166

Sorin Adrian Ciureanu

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. n astfel e sistem hardul este mai dificil de realizat dect sistemul de operare. 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.

Sisteme de operare

167

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.

168

Sorin Adrian Ciureanu

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;

Sisteme de operare

169

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. 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 inalt (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).

170

Sorin Adrian Ciureanu

Program paralel de difuziune Operaia de difuziune (broadcast) const din transmiterea unei date ctre toate procesele din sistem. Dac exist o dat ntro 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 P2 M P X Pn

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

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 P0 . -n primul pas , la iteraia j=0, procesorul P1 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 P2 i P3 citesc data din a[0] i a[1], o nscriu n memoria local i n locaiile a[2] i a[3].

Sisteme de operare
j

171

- n general, n iteraia j, procesoarele i, cu condiia 2 i<2j+1 , citesc data de difuzat de la locaiile a[i-2j], 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] 100 100 P0 P1 P2 Primul pas (iteraia j=0) a[0] a[1] a[2] 100 100 100 100 P0 P1 P2 Al doilea pas (iteraia j=1) a[0] a[1] a[2] 100 100 100 P3 a[3] P4 a[4] P5 a[5] P6 a[6] P7 a[7]

P3 a[3] 100

P4 a[4]

P5 a[5]

P6 a[6]

P7 a[7]

100 100 100 100 P0 P1 P2 P3 Al treilea pas (iteraia j=2) a[0] a[1] a[2] a[3] 100 100 100 100 100 P0 100 P1 100 P2 100 P3

P4 a[4] 100 100 P4

P5 a[5] 100 100 P5

P6 a[6] 100 100 P6

P7 a[7] 100 100 P7

172

Sorin Adrian Ciureanu

Deoarece la fiecare iteraie se dubleaz numrul de procesoare care au recepionat data de difuzat, sunt necesare log2n iteraii. ntr-o iteraie j, sunt active 2j procesoare, cele cu indice i avnd 2ji<2j+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(2j<=i<2j+1) {citete valoarea din a[i-2j]; memoreaz valoarea n memoria local a lui Pi 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

Sisteme de operare

173

vector a[n], pentru simplificare lundu-se n ca multiplu de doi. Paii sunt urmtorii: - n primul pas, iteraia j=0, toate procesoarele Pi(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 Pi , 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 log2n , deci avem un timp de execuie de tip O(log n), un algoritm sublinear. Dm mai jos un exemplu de implementare pentru n=8 .
P0 Iteraie j=0 j=1 j=2 a[0] a[0] a[0] a[0] a[1] a[2] a[2] P1 a[3] a[4] a[4] a[4] P2 a[5] a[6] a[6] P3 a[7]

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 2j+1==0) a[2i]=a[2i+2j]; endfor

174

Sorin Adrian Ciureanu

8.4. SISTEME DE OPERARE DISTRIBUITE


Aceste sisteme fac parte din categoria - hardware slab cuplat (multicalculatoare) - 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, 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

Sisteme de operare

175

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

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.

176

Sorin Adrian Ciureanu

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
clieni

rspuns

servere

Kernel SO

Kernel SO

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.

Sisteme de operare

177

Avantajul principal al acestui tip de comunicaie este dat de eficiena i simplitatea execuiei. Comunicaia are loc fr s se stabileasc mai 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 Nivelul soclurilor Nivelul protocoalelor TCP i IP Nivelul driverelor Reea
Fig. 8.4. Implementarea comunicaiei prin socluri.

Proces server Nivelul soclurilor Nivelul protocoalelor TCP i IP Nivelul driverelor

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.

178

Sorin Adrian Ciureanu

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. Nucleul sistemului de operare memoreaz date despre linia de comunicaie deschis ntre cele dou procese. Exemplu de sistem distribuit bazat pe modelul clientserver Sistemul din acest exemplu (fig. 8.5.) are un client, care este procesul aplicaie, i cteva servere care ofer diferite servicii. NOD 1 Proces aplicaii
Server de tranzacii Server de nume Server de recuperare Server de obiecte Server de comunicaie

NOD 2 Proces aplicaii


Server de comunicaie Server de tranzacii Server de nume Server de recuperare Server de obiecte

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.

Sisteme de operare

179

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, Sabotate Voluntar de procesul de aplicaii sau involuntar la cderea unui nod. Exist cte un server pentru fiecare obiect. 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

180

Sorin Adrian Ciureanu

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.
Despachetarea parametrilor mpachetarea parametrilor CALL

SERVER

CALL

Kernel CLIENT

client de apeluri
Despachetarea rezultatului

mpachetarea Kernel server rezultatutlui

de apeluri RETURN

RETURN

KERNEL SO CLIENT

KERNEL SO SERVER

Fig. 8.6. Schema de principiu a funcionrii RPC.

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.

Sisteme de operare

181

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; 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 folsind 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.

182

Sorin Adrian Ciureanu

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

Sisteme de operare

183

-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); -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

184

Sorin Adrian Ciureanu

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

Sisteme de operare

185

-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); delete , elimin gazde din maina virtual; halt , termin toate procesele PVM, inclusiv consola i oprete maina virtual; id , afieaz identificatorul de task al consolei;

186

Sorin Adrian Ciureanu jobs kill mstat pstat quit

afieaz lista taskurilor n execuie; termin un task PVM; afieaz starea gazdelor specificate; afieaz starea unui task specificat; 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 PVM 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 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;

, , , , ,

Sisteme de operare

187

-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 PVM conine 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 dependenr de sistemul de operare i de main. 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 proptocol 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.

188

Sorin Adrian Ciureanu

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 necsit 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 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:

Sisteme de operare

189

- 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 mesalejor 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 . pvm-setopt

Apoi se lanseaz funcia 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 pvm-delh.sts pvm-halt

Alte staii pot fi excluse prin funcia Funcionarea mainii se oprete prin Controlul proceselor. Pentru ataarea unui proces la maina virtual PVM se apeleaz funcia
pvm-mytid

190

Sorin Adrian Ciureanu

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,ntask,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

Sisteme de operare

191

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

192

Sorin Adrian Ciureanu

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

Sisteme de operare

193

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

194

Sorin Adrian Ciureanu

int pvm reduce(int operation,void*myrols,int dim, int type,int msgtag,cher*groupe-name, int root);

Funcia de reducere

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 ntr 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 creaz 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, *&,NTASKS-1,tids); printf(groupid=%d spawned%d tasks\n,

195 Sisteme de operare 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 sincronizarea 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

196

Sorin Adrian Ciureanu

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 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 programulpoate 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() PMI-Finalize MPI-Comm-SIZE /*iniializeaz biblioteca MPI*/ /*nchide biblioteca MPI*/ /*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;

Sisteme de operare

197

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*/ sum=mytid; /*Sincronizarea cu toate procesele s fie lansat*/ MPI-barrier(MPI-COMM-WORLD); MPI-reduce(MPI-SUM,&sum,1,MPI-INT,1,MPIWORLD,0); /*Rezultatul reducerii se afl n procesorul =*/ 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.

198

Sorin Adrian Ciureanu

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 mpkill mpps mpinfo /*execut programe MPI*/ /*termin programele*/ /*afieaz informaii despre programele lansate*/ /*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

Sisteme de operare

199

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 get-request put-reply /*un client transmite o cerere spre server*/ /*severul i anun disponibilitatea*/ /*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 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.

200

Sorin Adrian Ciureanu

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 secveniatorul 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

Sisteme de operare

201

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

202

Sorin Adrian Ciureanu

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 conone 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. Concluzii. 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

Sisteme de operare

203

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.

204

Sorin Adrian Ciureanu

Sisteme de operare

205

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

206

Sorin Adrian Ciureanu

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). Alte dou comcepte 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.

Sisteme de operare

207

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. Dac prima parol secret este p, atunci prima parol de unic folosin este dat de legea: Parola1=P1=f(f(f(f(s))) )
n ori n-1 ori n ori n-1 ori

Parola2=P2=f(f(f(f(s))) ) . . . Parolan=Pn=f(s) Dac Pi (cu 1 i n) este o parol de unic folosin la a i-a alegere, atunci: Pi-1=f(Pi) 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.

208

Sorin Adrian Ciureanu

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

Sisteme de operare

209

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

210

Sorin Adrian Ciureanu

Exist numeroase tipuri de atacuri asupra unui sistem de operare i, implicit, mai multe clasificri. O clasificare a atacurilor const n: -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

Sisteme de operare

211

(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; -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.

212

Sorin Adrian Ciureanu

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. d) 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.

Sisteme de operare

213

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

214

Sorin Adrian Ciureanu

aa fel ca numrul iniial de secven din server s creasc puin mai repede dect numrul iniial de secven de pe client; -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.

Sisteme de operare

215

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 ntrun singur punct precum i instalarea unui firewall.

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

216

Sorin Adrian Ciureanu

Un virus este o secven de cod care se autoinsereaz ntro 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. 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;

Sisteme de operare

217

-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 utilzeaz 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. 9.3. MECANISME DE PROTECIE

218

Sorin Adrian Ciureanu

n acest subcapitol vom prezenta principalele mecanisme de protecie folosite n sistemele de operare. Ne vom ocupa de dou mecanisme de protecie curente , crptografia 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;

Sisteme de operare

219

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

220

Sorin Adrian Ciureanu

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, Macurile 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 poatefi 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. -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 consecituv; -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

Sisteme de operare

221

(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) 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=me mod n, unde (e,n) reprezint cheia public a destinatarului; -la decriptare, destinatarul calculeaz m=cd mod n .

222

Sorin Adrian Ciureanu

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; -una direcionat ctre reeaua intern pe care o protejeaz.

Sisteme de operare

223

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

224

Sorin Adrian Ciureanu

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 pemite 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 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 enduser-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;

Sisteme de operare

225

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

226

Sorin Adrian Ciureanu

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 (maquerading). 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.

Sisteme de operare

227

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

228

Sorin Adrian Ciureanu

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

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

Sisteme de operare

229

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 coli.
Proces utilizator Toate apelurile sistem trec prin monitorul de referine, pentru verificare de securitate.

USER

MONITOR DE REFERINE

KERNEL

TCB TCB

Fig. 9.2. Schema unui monitor de referine

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,

230

Sorin Adrian Ciureanu

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 1 2 3 Fiier 1 citire Fiier 2 citire scriere citire scriere scriere scriere Fiier 3 Imprimanta 1 Imprimanta 2

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

Sisteme de operare

231

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 2 Fiier 3 Imprimant 1 Imprimant 2 Fiier 1:c Fiier 2:cs Fiier 3:cse Imprimant 1:s Imprimant2:s

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-Padula aparine acestui sistem, el avnd reguli despre cum poate circula informaia. -Proprietatea simpl de securitate: un proces rulnd la nivelul de securitate k poate citi doar obiecte la nivelul su sau mai jos.

232

Sorin Adrian Ciureanu

-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 securitat e

4 3 2 1

2 Proces

citire

B Obiect

2 Proces

scriere

B 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

Sisteme de operare

233

toat informaia circul doar orizontal sau n sus, orice informaie ce pornete de la nivelul k nu poate s apar la un 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 firealizate simultan. 9.3.3.5. Modelul securitii Crii Portocalii n 1985 Departamentul Aprrii Statelor Unite ale Americii a publicat undocument 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. D C1 C2 B1 B2 B3 A1 CRITERIU Politica de securitate Control discretitabil al accesului x x x

234

Sorin Adrian Ciureanu

Refolosirea obiectului Etichete Integritatea catalogrii Exportare a informaiei catalogate Catalogarea ieirii lizibile Control obligatoriu al accesului Catalogri ale senzitivitii subiectului Etichete ale dispozitivelor Posibilitatea de contabilizare Identificare i autentificare Audit Cale de ncredere Asigurare Arhitectura sistemului Integritatea sistemului Testarea securitii Specificrile i verificarea modelului Analiza canalului camuflat
Administrarea caracterului de ncredere

x x x x x x

x x x x x x x x x x x x x

x x

x x

x x x x x x x x x x x x x x x x x x

x x x x x x x x

Administrarea configuraiei Recuperarea de ncredere Distribuire de ncredere Documentare Ghid pentru aspecte de securitate
Manual al caracteristicilor de ncredere

Documentaie de testare Documentaie de proiectare Legend : x - sunt noi cerine; - cerinele pentru urmtoarea categorie inferioar se aplic i aici. S analizm categoriile de securitate i s subliniem cteva dintre aspectele importante.

x x x x x x x

x x x

Sisteme de operare

235

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 minim cantitate de auditare. Protecia rwh din Unix este de tipul C1 dar nu de tipul C2. Nivelele B i A necesit ca tuturor utilizatorilor i obiectelor controlate s le fie asociat o catalogare de securitate de genul: neclasificat, 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:

236

Sorin Adrian Ciureanu

-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. Protecia spaiului de adrese nseamn c fiecare proces utilizator are propriul su spaiu virtual de adrese protejat i inaccesibil pentru alte procese neautorizate. Paginile noi trebuie umplute cu zerouri pentru ca procesul curent s nu poat gsi informaii vechi puse acolo de proprietarul anterior. nregistrrile de securitate permit administratorului de sistem s produc un jurnal cu anumite evenimente legate de securitate.

Sisteme de operare

237

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-uri restricionate este un cmp care permite proceselor care 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.

238

Sorin Adrian Ciureanu

n concluzie jetonul de acces indic proprietarul procesului i ce setri implicite i mputerniciri sunt asociate cu el. Cnd un utilizator se nregisteaz, winlogon ofer procesului iniial un jeton de acces. De obicei, procesele ulterioare motenesc acest jeton de-a lungur 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. 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 exeist 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 executt de George asupra fiierului va fi nregistrat. Antet

Sisteme de operare

239

Fiier

Antet SID proprietar SID grup DACL SACL Descriptor de securitate

Refuz Dan 111111 Permite Irina 110000 Permite Andrei 111111 Permite Roxana 100000

ACE

ACE

ACE

ACE

Antet nregistreaz George ACE 111111 Descriptor de securitate


Fig. 9.6. Descriptoare de securitate Windows.

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 Initilize Security Descrptor, funcie care scrie i antetul;

240

Sorin Adrian Ciureanu

-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: -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

Sisteme de operare

241

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 bugurilor 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 descoperitre, bug-urile sunt reparate foarte rapid; de exemplu, cnd a aprut bug-ul Ping O Death, n Unix crearea unui patch 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 online, 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 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.

242

Sorin Adrian Ciureanu

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, recomanadat 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 afost 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

243

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.

244

Sorin Adrian Ciureanu

Sisteme de operare

245

10. SISTEMUL DE OPERARE LINUX. APLICAII


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

246

Sorin Adrian Ciureanu

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

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

10.2.2. Distribuia REDHAT

Sisteme de operare

247

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.

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

248

Sorin Adrian Ciureanu

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 ART(Advanced Package Tool).

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

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

Sisteme de operare

249

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.

10.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 disribuie. 10.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. 3) Tema pentru lucru individual, care, de obicei, propune crearea de diferite programe n contextul lucrrii respective.

250

Sorin Adrian Ciureanu

10.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 3260 3452 4509 5120 TTY p3 p4 p3 p9 STAT R W Z S TIME 0:00 1:21 5:35 8:55 COMMAND bash ps ps 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) S(Sleeping) I(Idle) W(Swapped out) Z(Zombie) N(Nice) = = = = = = n execuie adormit pentru mai puin de 20 secunde inactiv, adormit pentru mai mult de 20 secunde scos afar din memoria principal i trecut pe hard disc terminat i ateapt ca printele s se termine proces cu prioritate redus

A patra coloan (TIME) indic timpul de procesor folosit de proces pn n prezent.

Sisteme de operare

251

A cincia coloan (COMMAND) listeaz programului executat de fiecare proces. Dintre opiunile acestei comenzi amintim: Opiunea $ps -u, cu urmtorul rspuns:
USER 500 500 pid 3565 3597 USER %CPU %MEM START RSS F 0 0 S S UI D 500 %CPU 0.0 0.0 = = = = = MEM 1.4 0.7 VSZ 4848 3824 RSS 1336 688 TTY pts/0 pts/0
STAT START

numele

S R

19:15 19:37

CMD. bash ps-u

unde cmpurile noi reprezint:


Numele proprietarului fiierului Utilizarea procesorului de ctre proces Procentele de memorie real folosite de proces Ora la care procesul a fost creat Dimensiunea real n memoria procesului(kB) PPI D 356 3 356 5 = = = = = = C PP I 0 76 0 78 N I 0 0 ADD R SZ 121 2 119 6 WCHA N TT Y pts/ 0 pts/ 0 TIM E
00:00: 00 00:00: 00

Opiunea $ps -l , cu urmtorul rspuns:


PID 356 5 359 9 CM D bash ps

R 500

unde cmpurile noi reprezint:


UID F PPID NI SZ WCHAN Identificatorul numeri al proprietarului procesului Fanioane care indic tipul de operaii executate de proces Identificatorul procesului printe Incrementul de planificare al proceului Dimensiunea segmentelor de date al stivei 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 Ion Ion TTY 0 pts/0 FROM 0:0 LOGING 7:13pm 7:15pm IDLE ? 0,00s JLPU 0,00s 0,06s PCPU 0,32s 0,01s WHAT jusr/bin/gnome 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.

252

Sorin Adrian Ciureanu

b) Comenzi pentru operaii generale asupra fiierelor i cataloagelor: Comanda $pwd , pentru afiarea numelui catalogului curent. 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. 10.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

Sisteme de operare

253

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_twaitpid(pid_t pid, int*status, int flags) 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.

254

Sorin Adrian Ciureanu

$ . /a.out 2)Desfurarea lucrrii Se vor executa urmtoarele programe: -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);} exit(1)} else {wait(&status); printf(am pornit printele\n); for(i=1;i<=25;i++) {fflush(stdout); printf(1);}}} fork().

Aceasta este o schem posibil de apelare a funciei

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

Sisteme de operare

255

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)} 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 sorin1c astfel: $gcc -o sorin1 sorin1c Fiierul sorin 1c are coninutul: #include<stdio.h> main() {int i; for(i=1;i<=25;1++)

256

Sorin Adrian Ciureanu 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 sorin 1 care, de fapt, realizeaz acelai lucru ca la programul anterior. Rezultatul rulrii va fi:
am pornit printele 0000000000000000000000000 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 excut 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); 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 :

Sisteme de operare

257

$ ./zombie & Dac se lanseaz comanda : $ps -a se poate observa ct timp st fiul n starea zombie, pn l preia procesul init(), 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.

10.3.3. Comunicare ntre procese


10.3.3.1. Comunicarea ntre procese prin PIPE-uri i FIFO 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 pipeul unidirecional prin cel bidirecional. Astfel la SOLARIS pipeurile 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

258

Sorin Adrian Ciureanu

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]

PROCES

KERNEL PIPE

Fig. 10.1. Schema unui pipe unidirecional.

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

Sisteme de operare

259

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/tipes.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);} eose {close(fd[1]);/*fiu*/ 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.
#include<stdio.h> main() {int child pid,pipe1[2],pipe2[2]; if(pipe(pipe1)<0 pipe(pipe2)<0 perror(nu pot crea pipe); if((childpid=fork())<0

260

Sorin Adrian Ciureanu perror(nu pot crea fork); else if(childpid>0) /*printe*/ {close(pipe1[0]); close(pipe2[1]); client(pipe2[0],pipe[1]); while(wait((int*)0)!=childpid 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);}}

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<stdlib.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(o);} 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*/

261 Sisteme de operare 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 { /*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];

262

Sorin Adrian Ciureanu FILE*ip; FILE*pp; Spr int f(command,sort>%s,argv[2]); ip=fopen(argv[1],r); pp=open(command,w); while(fgets(buf,80,ip))fputs(bif,pp); pclose(pp); fclose(ip); exit(0)}

Programul se compileaz cu $gcc -o pope pope.c i se lanseaz $./ pope fiierintrare fiierieire Program e 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.
#include<stdio.h> #include<stdlib.h> #define FIFO-FILEMY FILO int main(int argc,char*argv[]) {FILE*fp; if(argc!=2){print(utilizare:fifoc[sir]\n); exit(1);} if((fp=fopen(FILO-FILE,w))=NULL) {perror(fopen); exit(1);} fputs(argv[1],fp) felse(fp); return 0;}

Programul se compileaz cu $gcc/o fifoc i se lanseaz n execuie serverul cu $ ./fifos

Sisteme de operare

263

Apoi, dac s-a lansat serverul n background, se d umtoarea comand de la acela terminal. Dac s-a lansat serverul n foreground, se d comanda de la alt terminal. $ ./fifoc sir de curire afiat la server 3) Tem a)S se creeza 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. 10.3.3.2. Comunicarea ntre procese prin semnale 1)Consideraii teoretice 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.

264

Sorin Adrian Ciureanu

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

Sisteme de operare

265

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*/ unsiged long sa_flags; /*flaguri speciale*/

266

Sorin Adrian Ciureanu void(*sa_restorer)(void); /*pointer captare de semnal*/ };

la

funcie

Cteva flaguri: 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
SA_NOCLDSTOP -

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 int int int int sigempzyset(sigset_t*set); sigfillset(sigset_t*set); sigaddset(sigset_t*set,int signo); sigdelset(sigset_t*set,int signo); sigismember(const sigset_t*set, int signo)

Sisteme de operare

267

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

268

Sorin Adrian Ciureanu

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 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:

Sisteme de operare

269

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;

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:

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
SI_ASYNCIO 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 :

270

Sorin Adrian Ciureanu 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; 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);

Sisteme de operare printf(SIGUSR1 a aprut de %d ori\n, nsigusfl1); return 0; }

271

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<> #include<> #include<> sig_atomic_t copil_stare_exit; 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;

272

Sorin Adrian Ciureanu 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);} 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

Sisteme de operare

273

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

274

Sorin Adrian Ciureanu 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*/ 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;

Sisteme de operare #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);}

275

3) Tem S se scrie un program care terge n 10 minute, toate fiierele temporare, (cu extensie.bak), din directorul curent. 10.3.3.3. Comunicaie ntre procese prin sistem V IPC. 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 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

276

Sorin Adrian Ciureanu

pathname unic ntre clieni i server i dac sunt necesare mai multe calale se utilizeaz mai multe id-uri. Structura ipc-perm 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

O structur nsoete fiecare obiect IPC

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:

Sisteme de operare

277

-permisiunile dec read sau/i write pentru user, grup i

alii:

0400 0200 0040 0020 0004 0002 -cuid i efectiv i

read de ctre user write de ctre user read de ctre grup write de ctre grup read de ctre alii write de ctre alii cgid (id-urile creator) sunt setai la uid-ul 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:

278

Sorin Adrian Ciureanu

$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. 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 readwrite 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);

Sisteme de operare

279

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

280

Sorin Adrian Ciureanu

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]; };

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.

Sisteme de operare

281

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

int msgctl(int msqid,int cmd,struct msqid_ds*buf);

Prototipul funciei este;

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

282

Sorin Adrian Ciureanu

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> #include <sys/stat.h> struct my_buf{

Sisteme de operare long mytype; char mytext[400];

283

}; 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 Se lanseaz scrierea: $./scriere-q nivel

284

Sorin Adrian Ciureanu 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); while(1){/*citire mesaj nu se termin niciodat*/ if(msgrcv(msqid, (struct msgbuf*)&buf,

285 Sisteme de operare 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. 10.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 {struct struct ushort semid_ds ipc_perm sem_perm; sem*sem_base;/*primul semafor*/ sem_usems; /*numrul semafoarelor din

286

Sorin Adrian Ciureanu set*/ time_tsem_otime; /*timpul ultimei operaii*/ 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 semnum arg);

semid,int

semnum,intcmd,union

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

Sisteme de operare

287

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> #include<sys/sem.h> #include<errno.h> #define SEMPERM 0100 #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(errmo==EEXIST) semid=semget(semkey,1,0);} else {semun arg; arg.val=1; status=semet1(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._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; v_buf.sem_num=0; v_buf.sem_op=1; v_buf.sem_flg=SEM_UNDO;

288

Sorin Adrian Ciureanu if(semop(semid,&v_buf,1)==-1) {perror(v(semid)failed);exit(1);} return 0;} /*procese concurente ce folosesc semaforul*/ int semid; pid_t pid=getpid(); if((semid=init_sem(skey))<0) exit(1); printf(proces %d inaintea seciunii critice\n,pid); p(semid);printf(procesul %d n seciune critic\n, pid); sleep(5);/*se desfoar operaiile critice*/ printf(procesul %d prsete seciunea critic\n,pid); v(semid); printf(procesul %d iese\n,pid); exit(0);} /*programul principal*/ main() {key_t semkey=0x200; int i; for(i=0);i<3;i++)if(fork()==0)procsem(semkey); }

3)Tem S se implementeze problema productor-consumator folosind semafoarele. 10.3.3.5.Comunicaia ntre procese prin sistem V IPC. 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:

289 Sisteme de operare 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);

#include<stdio.h> #include<signal.h> #include<sys/tipes.h> #include<sys/ipc> #include<sys/sem.h> #define SHMKEY1(key_t)0x100

2) Desfurarea lucrrii Program a

/*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*/ struct databuf {int d_nread; char d_buf[SIZ];}; typedef union_semun {int val; struct semid_ds*buf;

290

Sorin Adrian Ciureanu ushort*array;} semun; /*rutinele de iniializare*/ #define IFLAGS(IPC_CREAT|IPC_EVCL) #define ERR ((struct databuf*)-1) static int shmid1,shmid2,semid; /*se creeaz segmentele de memorie partajat*/ void getseg(struct databuf**p1,struct databuf p2) {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|FLAGS))==-1) {perror(semget error); exit(1);} /*se iniializeaz valorile semafoarelor*/ if(semct1(semid,0,SETVAL,x)==-1) {perror(semct error); exit(1);} return semid;} /*rutina pentru tergerea identificatorilor memoriei partajate i semafoarelor*/ void remobj(void) {if(shmct1(shmid1,IPC-RMID,NULL)==-1 {perror(semct 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)

Sisteme de operare {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 procesul writer*/ if(buf1d_nread<=0) return; buf2d.nread=read(0,buf2d-buf,SIZ); semop(semid,&p1,1); semop(semid,&v2,1); if(buf2 d_nread<=0) return; write(1,buf2d_buf,buf2d_nread);}} /*program principal*/ main() {int semid; pid_t pid; struct databuf*buf1,*buf2) semid=getsem(); switch(pid=fork()) {case-1;perror(fork error); exit(1); case 0; /*proces fiu*/ writer(semid,buf1,buf2); remobj(); brech; default:/*proces printe*/ reader(semid,buf1,buf2); brech;} exit(0);}

291

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

292

Sorin Adrian Ciureanu

#include<pthreads.h> int pthread_create(pthread_t*thread,const pthread_ attrt*attr,void*(start_routine)(void*),void arg);

Crearea unui fir de execuie se face prin comanda:

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, 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);

#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(),

2) Desfurarea lucrrii Program a

Sisteme de operare

293

global); global=10; pthread_join(copil,NULL); printf(nucopil,global=%d\n,global);} Programul se va compila astfel $gcc -D-REENTRANT -o sorin sorin.c -epthread unde sorin.c este fiierul surs iar constanta REENTRANT

specific execuia n paralel a fiilor. 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. 10.3.3.7. Interfaa 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.

294

Sorin Adrian Ciureanu

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>

295 Sisteme de operare #include<unistd.h> #include<string.h> #include<sys/wait.h> main() {int sd[2]; /*mesajele folosite*/ char*p=sunt printele; 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); brech; case 0: /*fiu*/ /*citim din socket mesajul*/ if(read(sd[1],buf,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*/ else sd[1]; exit(0); default :/*printe*/ /*trimitem mesajulprintelui*/ if(writw(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)

296

Sorin Adrian Ciureanu {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 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 deal doilea va returna primului socket caracterele ordonate dup alfabetul ASCII. 10.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. Server TCP 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.

Sisteme de operare

297

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.

SERVER TCP
socket()

CLIENT TCP
socket()

bind() listen() accept() connect()

read()

write()

write()

read()

close()

close()

Fig. 10.2. Schema de funcionare client/server-TCP.

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.

298

Sorin Adrian Ciureanu

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

Primitivele utilizate n acest protocol sunt:

informaia de adres pentru orice tip de socket-uri.Este definit astfel:


struct sockaddr {unsignet short sa_family; char sa_data[16] }

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*/ 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

n cazul INTERNET-ului structura utilizat este:

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,

Sisteme de operare soclen_t*addrlen)

299

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.
#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*/ 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)); server.sin_family=AF-INET;/*familia de socketuri*/ server.sin_addr.s_addr=htonl(INADOR-ANY); server.sin_port=htons(PORT); /*se ataeaz socketul*/ if(bind(sd,(struct sockaddr*)&server, sizeof((struct sockaddr))==-1)

Server C

300

Sorin Adrian Ciureanu {perror(eroare 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); /*se accept un client*/ /*serverul se blocheaz pn la realizarea conexiunii*/ client=acept(sd,(struct sockaddr*)&from,&length); if(client<0) {perror(eroare client\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 read\n);close(client)continue;} /*s-a nchis conexiunea cu clientul*/ printf(mesaj recepionat, trimitem mesaj napoi); /*se returneaz mesajul clientului*/ if(write(client,tampon,100)<=0) {perror(eroare write\n);continue;} else printf(transmitere cu succes\n); /*am terminat cu acest client, se nchide conexiunea*/ close(client)}} Client C /*retransmite serverului mesajul primit de la acesta*/ #include<sys/types.h> #include<sys/socket.h> #include<etinet/in.h> #include<errno.h> #include<unistd.h>

301 Sisteme de operare #include<stdlib.h> #include<netdb.h> #include<stoing.h> extern int errno;/*codul de eroare*/ int port; /*portulde conectare la server*/ int main(int argc,char*argv[]) {int sd; /*descriptorul de socket*/ /*structura utilizat la conectare*/ struct sockaddr_in server; char tampon[100]; /*mesaj transmis*/ /*testarea argumentelor din linia de comand*/ if(argc!=3) {perror(eroare argumente\n);return-1;} port=atoi(argv[2]); /*se creeaz socketul*/ if((sd=socket(AF_INET,SOCK_STREAM,0))==-1) {perror(eroare socket\n);return errno;} 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*/ if(connect(sd,(struct sockaddr))==-1 {perror(eroare connect\n);return errno;} /*citirea mesajului i transmiterea ctre server*/ bzero(tampon,100); printf(introducei mesajul)fflush(stdout); read)0,buffer,100); if(writw(sd,tampon,100)<=0) {perror(eroare scriere\n);return errno;} /*afiarea mesajului primit*/ printf(mesajul primit este%s\n,tampon); close(sd);}

Pentru compilarea clientului i a serverului vom folosi comenzile: $gcc -o server server.c $gcc -o client client.c Pentru execuia programelor: $ ./server

302

Sorin Adrian Ciureanu

$ ./client 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). 10.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.
SERVER UDP
socket()

CLIENT UDP
socket()

bind()

bind()

CERERE
recfrom() sendto()

RSPUNS
sento() recfrom()

close()

close()

Fig.10.3. Organigrama UDP

Apelurile folosite sunt:

recfrom() cu sintaxa: #include<sys/types.h> #include<sys/socket.h>

303 Sisteme de operare 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 Server 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 d anumite apeluri*/ extern int errno; /*programul*/ ini main() { /*structurile folosite de server i client*/ struct sockaddr-in adresa; struct sockaddr client; char buffer[10 /*mesajul trimis de client*/ int sd /*descriptorul de socket*/

304

Sorin Adrian Ciureanu /*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);

} /*crem un socket*/ if ((sd=socket(AF_INET,SOCK_DGRAM,0))==-1) {perror(eroare socket().\n);return errno;} /*s 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, 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().\n);

305 Sisteme de operare 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*/

Client UDP(echo)
/*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> #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*/ if(arg!=3) {printf(sintaxa:%s<adresa-server><port>\n, argv[0];return-1}

306

Sorin Adrian Ciureanu /*stabilim portul*/ port=atoi(argv[2];

/*crem socketul*/ id((sd=socket(AF_INET,SOCK_DGRAM,0))==-1) {perror(eroare la socket().\n);return errno;} /*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 mesakului de la intrareastandard*/ 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 sento()spre server.\n); return errno;} printf(mesajul primit este:%s.\n,buffer); /*nchidem socketul, am terminat*/ close(sd) }

Clientul va necesita dou argumente n linia de comand, semnificnd adresa IP a serverului i portul de conectare la serverul UDP. Dac ambele programe ruleaz pe aceeai main, atunci vom putea introduce: $./server -udp

Sisteme de operare

307

$./client -udp 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.

308

Sorin Adrian Ciureanu

Sisteme de operare

309

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.

310

Sorin Adrian Ciureanu

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. 17. http://www.oreilly.com/catalog/opensources/book/ linus. html

Sisteme de operare

311

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. 7 1.3.1. Asigurarea interfeei cu utilizatorul.. 7 1.3.1.1. Monitoare... 7 1.3.1.2. Interfee n linie de comand...... 7 1.3.1.3. Interfee grafice.. 8 1.3.2. Gestionarea proceselor i procesoarelor... 9 1.3.3. Gestionarea memoriei... 9 1.3.4. Gestionarea perifericelor.. 10 1.3.5. Gestionarea fiierelor.... 10 1.3.6. Tratarea erorilor.... 11 1.4. CARACTERISTICILE SISTEMELOR DE OPERARE.... 11 1.4.1. Modul de introducere a programelor n sistem..... 11 1.4.2. Modul de planificare a lucrrilor pentru execuie. 12 1.4.3. Numrul de programe prezente simultan n memorie.. 12 1.4.4. Gradul de comunicare a proceselor n multiprogramare.. 12 1.4.5. Numrul de utilizatori simultani ai SO. 13 1.4.6. Modul de utilizare a resurselor. 13 1.4.7. SO pentru arhitecturi paralele... 14 1.5. COMPONENTELE SISTEMELOR DE OPERARE. 14 1.5.1. Partea de control... 14 1.5.2. Partea de serviciu. 15 1.6 Structura sistemelor de operare... 15 1.7. DEZVOLTAREA ISTORIC A SISTEMELOR DE OPERARE. 16 PLANIFICAREA PROCESOARELOR (UC).. 19 2.1 SCHEMA GENERAL DE PLANIFICARE. 19 2.2. CRITERII DE PERFORMAN A PLANIFICRII... 20 2.3. ALGORITMI DE PLANIFICARE UC.. 21 2.3.1. Algoritmul FCFS (First Come First Served)... 21 2.3.2. Algoritmul SJF (Shortest Job First).. 22 2.3.3. Algoritmi bazai pe prioritate 22 2.3.4. Algoritmi preempivi. 23 2.3.5. Algoritmul Round-Robin. 25 2.3.6. Ali algoritmi de planificare. 26 GESTIUNEA PROCESELOR... 27 3.1. NOIUNI GENERALE DE PROCESE I THREAD-URI.. 27 3.1.1. Definiia procesului... 27 3.1.2. Starea procesului... 28 3.1.3. Comutarea proceselor... 30 3.1.4. Crearea i terminarea proceselor32

3.

312
3.2.

Sorin Adrian Ciureanu


PROCESE I THREAD-URI N UNIX.32 3.2.1. Procese n UNIX....32 3.2.2. Thread-uri n UNIX.. 37 3.3. PROCESE I THREAD-URI N WINDOWS 37 3.3.1. Procese n WINDOWS. 38 COMUNICAIA I SINCRONIZAREA NTRE PROCESE... 39 4.1. PROBLEMA SECIUNII CRITICE I A EXCLUDERII MUTUALE.. 39 4.1.1. Suportul hardware pentru implementarea excluderii mutuale...42 4.1.1.1. Invalidarea/validarea ntreruperilor. 42 4.1.1.2. Instruciunea Test and Set (TS).. 42 4.1.1.3. Protocoale de ateptare n excluderea mutual43 4.1.1.4. Mecanisme de sincronizare ntre procese (obiecte de sincronizare).. 43 4.2. INTERBLOCAREA (DEADLOCK).. 49 4.2.1. Resurse.. 49 4.2.1.1. Clasificarea resurselor din punct de vedere al interblocrii... 49 4.2.1.2. Etapele parcurse de un proces pentru utilizarea unei resurse.... 50 4.2.2. Condiii necesare pentru apariia interblocrii.. 50 4.2.3. Graful de alocare a resurselor.... 51 4.2.4. Rezolvarea problemei interblocrii... 53 4.2.4.1. Prevenirea interblocrii53 4.2.4.2. Evitarea interblocrii55 4.2.4.3. Detectarea interblocrii i revenirea din ea. 59 4.2.4.4. Rezolvarea interblocrii n practic. 63 4.3. COMUNICAIA NTRE PROCESE COOPERANTE.. 63 4.3.1. Comunicae direct i indirect. 65 4.3.1.1. Comunicaie direct. 65 4.3.1.2. Comunicaie indirect.. 66 4.3.2. Linii de comunicaii i tipuri de mesaje.67 4.3.2.1. Linii de comunicaii. 67 4.3.2.2. Tipuri de mesaje.. 68 4.3.3. Excepii n comunicaia interprocese.... 68 4.3.4. Aplicaii ale IPC-urilor.. 70 4.4. PROBLEME CLASICE DE COORDONAREA I SINCRONIZAREA PROCESELOR.. 70 4.4.1. Problema productor-consumator. 70 4.4.1.1. Rezolvarea problemei productor-consumator cu ajutorul semafoarelor 71 4.4.1.2. Rezolvarea problemei productor-consumator prin transmitere de mesaje 73 4.4.2. Problema brbierlui somnoros... 75 4.4.3. Problema cititori/scriitori. 77 4.4.4. Problema cinei filozofilor chinezi. 79 4.4.5. Probleme propuse pentru implementare 84 4.4.5.1. Problema rezervrii bileteor 84

4.

Sisteme de operare
5

313

6.

4.4.5.2. Problema grdinii ornamentale84 4.4.5.3. Problema emitor-receptor. 85 GESTIONAREA MEMORIEI... 87 5.1. IERARHII DE MEMORIE. 87 5.2. OPTIMIZRI N NCRCAREA I EXECUIA UNUI PROGRAM N MEMORIE.. 89 5.2.1. ncrcarea dinamic... 89 5.2.2. Overlay-uri. 90 5.2.3. Legarea dinamic... 90 5.3. ALOCAREA MEMORIEI... 91 5.3.1. Alocarea memoriei n limbaje de programare... 91 5.3.2. Caracteristici ale alocatoarelor.. 92 5.3.3. Tipuri de alocare a memoriei. 93 5.3.4. Scheme de alocare a memoriei 94 5.3.4.1. Alocare unic... 95 5.3.4.2. Alocare cu partiii fixe (alocare static).. 95 5.3.4.3. Alocare cu partiii variabile. 96 5.3.4.4. Alocare prin swapping. 97 5.4. PAGINAREA MEMORIEI. 99 5.4.1. Suportul hardware. 100 5.4.2. Implementarea tabelei de pagini.. 101 5.4.3. Concluzii privind paginarea...104 5.4.4. Segmentarea memoriei.. 104 5.4.5. Segmentarea paginat 105 5.4.6. Memorie virtual106 5.4.6.1. Paginare la cerere.106 5.4.7. Algoritmi de nlocuire a paginii.109 5.4.7.1. Algoritmul FIFO.. 109 5.4.7.2. Algoritmul LRU (Least Recently Used)..111 5.4.7.3. Algoritmul LFU (Least Frequently Used)... 113 5.4.7.4. Algoritmul Real Paged Daemon..113 5.4.7.5. Fenomenul trashing..114 5.4.7.6.. Concluzii privind paginarea la cerere.. 114 5.5. ALOCAREA SPAIULUI LIBER. TIPURI DE ALOCATOARE. .. 115 5.5.1. Alocatorul cu hri de resurse 115 5.5.2. Alocatorul cu puteri ale lui doi (metoda camarazilor)...117 5.5.3. Alocatorul Fibonacci..118 5.5.4. Alocatorul Karels-Mckusick. 118 5.5.5. Alocatorul slab.. 119 5.6. GESTIUNEA MEMORIEI N UNELE SISTEME DE OPERARE... 121 5.6.1. Gestiunea memoriei n Linux.121 5.6.2. Gesiunea memoriei n WINDOWS NT.121 GESTIUNEA SISTEMULUI DE INTRARE/IEIRE.. 123 6.1. DEFINIREA SISTEMULUI DE INTRARE/IEIRE..123 6.2. CLASIFICAREA DISPOZITIVELOR PERIFERICE 125 6.3. STRUCTURA HARD A UNUI SISTEM DE INTRARE/IEIRE. 126 6.4. STRUCTURA SOFT A UNUI SISTEM DE INTRARE/IEIRE...128

314

Sorin Adrian Ciureanu


6.4.1. Rutine de tratare a ntreruperilor128 6.4.2. Drivere... 130 6.4.3. Programe-sistem independente de dispozitive.. 134 6.4.4. Primitive de nivel utilizator... 134 6.5. MBUNTIREA OPERAIILOR DE INTRARE/IEIRE...135 6.5.1. Factorul de ntreesere135 6.5.2. Cache-ul de hard disc.137 6.5.3. Crearea de ctre SO a unui hard disc cu performane superioare...137 6.5.4. Construirea unui hard disc prin tehnica RAID (Redundant Arrays of Indpendent Disck)..141 GESTIUNEA RESURSELOR LOCALE. 143 7.1. NOIUNI INTRODUCTIVE. 143 7.2. CLASISFICAREA FIIERELOR... 144 7.2.1. Clasificarea fiierelor dup structur. 144 7.2.1.1. Secvene de octei ... 144 7.2.1.2. Secvene de nregistrare... 144 7.2.1.3. Structura arborescent..145 7.2.2. Clasificarea fiierelor dup tip..145 7.2.2.1. Fiiere normale.145 7.2.2.2. Directoare.145 7.2.2.3. Fiiere speciale de tip caracter / bloc...145 7.2.3. Clasificarea fiierelor dup suportul pe care sunt rezidente.. 146 7.2.4. Clasificarea fiierelor dup acces.. 146 7.2.4.1. Fiiere cu acces secvenial... 146 7.2.4.2. Fiiere cu acces direct..146 7.2.4.3. Fiiere cu acces indexat... 146 7.3. ATRIBUTE I OPERAII CU FIIERE146 7.3.1. Atribute.. 146 7.3.2. Operaii cu fiiere.. 147 7.4. IMPLEMENTAREA SISTEMULUI DE FIIERE.148 7.4.1. Alocarea fiierelor pe disc. 149 7.4.1.1. Alocarea contigu 149 7.4.1.2. Alocarea nlnuit.. 149 7.4.1.3. Alocarea indexat 151 7.4.2. Evidena blocurilor libere.. 153 7.4.3. Eficiena i performana sistemului de fiiere154 7.4.4. Fiabilitatea sistemelor de fiiere 154 7.4.4.1. Evitarea distrugerii informaiei155 7.4.4.2. Recuperarea informaiei n urma unei erori hard sau 156 soft.. 7.4.4.3. Asigurarea consistenei sistemului de fiiere 156 7.4.5. Protecia fiierelor..158 7.4.6. Organizarea fiierelor pe disc 159 7.4.6.1. Organizarea fiierelor n SO Unix... 159 7.4.6.2. Organizarea fiierelor ce folosesc FAT... 160 7.4.6.3. Organizaea fiierelor n HPFS. 160 7.4.6.4. Organizarea fiierelor n NTFS162

7.

Sisteme de operare
8.

315

9.

SISTEME DE OPERARE PENTRU CALCULATOARE PARALELE.163 8.1. NOIUNI INTRODUCTIVE. 163 8.2. SISTEME DE OPERARE N REEA 165 8.3. SISTEME DE OPERARE CU MULTIPROCESOARE. 166 8.3.1. Programarea paralel. 167 8.3.1.1. Memoria partajat ntre procese.. 167 8.3.1.2. Exemple de programare paralel. 168 8.4. SISTEME DE OPERARE DISTRIBUITE..174 8.4.1. Structura unui sistem de operare distribuit 175 8.4.1.1. Comunicare sistem cilent / server176 8.4.1.2. Apeluri de proceduri la distan...179 8.4.1.3. Comunicare n grup..182 8.4.2. Exemple de sisteme de operare distribuite.198 8.4.2.1. Sistemul de operare AMOEBA... 198 8.4.2.2. Sistemul de operare GLOBE... 201 SECURITATEA SISTEMELOR DE OPERARE. 205 9.1. NOIUNI INTRODUCTIVE 205 9.2. ATACURI ASUPRA SISTEMULUI DE OPERARE I MSURI DE PROTECIE MPOTRIVA LOR 210 9.2.1. Depirea zonei de memorie tampon (Buffer Overflow). 210 9.2.2. Ghicirea parolelor (Password guessing) 211 9.2.3. Interceptarea reelei211 9.2.4. Atacul de refuz al serviciului (Denial Of Service)212 9.2.5. Atacuri cu bomba e-mail214 9.2.6. Falsificarea adresei expeditorului (e-mail spoofing). 214 9.2.7. Cai troieni (Trojan Horses)215 9.2.8. Ui ascunse (Back dors an traps)... 215 9.2.9. Virui..216 9.2.10 Viermi 217 9.3. MECANISME DE PROTEC IE218 9.3.1. Criptografia218 9.3.1.1. Criptografia cu chei secrete (Criptografia simetric). 218 9.3.1.2. Criptografia cu chei publice (Criptografia asimetric) 221 9.3.2. Dispozitive firewall222 9.3.2.1. Tipuri de firewall. 223 9.3.2.2. Funciile unui firewall..224 9.3.2.3. Forewall-uri n sistemele de operare Windows... 225 9.3.2.4. Firewall-uri n sistemul de operare Linux226 9.3.3. Sisteme de ncredere.. 228 9.3.3.1. Monitorul de referin..229 9.3.3.2. Modelul Liste de Control al Accesului (ACL) 229 9.3.3.3. Modelul Bell-La Padula.. 231 9.3.3.4. Modelul Biba... 233 9.3.3.5. Modelul securitii Crii Portocalii 233 9.3.4. Securitatea n sistemele de operare Windows235 9.3.4.1. Concepte fundamentale de securitate n Windows.. 237 9.3.4.2. Implementarea securitii.239 9.3.5. Securitatea n Linux 240

316

Sorin Adrian Ciureanu


9.3.5.1. Open Source..240 9.3.5.2. Programe ce depisteaz i corecteaz vulnerabiliti241 9.3.5.3. Auditarea sistemului. 242 SISTEME DE OPERARE LINUX. APLICAII... 245 10.1 SCURT ISTORIC... 245 10.2 DISTRIBUII IN LINUX. 246 10.2.1. Distribuia SLACWARE.. 246 10.2.2. Distribuia REDHAT 247 10.2.3. Distribuia DEBIAN. 247 10.2.4. Distribuia MANDRAKE. 248 10.2.5. Distribuia LYCORIS... 248 10.2.5. Distribuia SUSE.. 249 10.3 APLICAII LINUX249 10.3.1. Comenzi LINUX250 10.3.2. Crearea proceselor. .252 10.3.3. Comunicare ntre procese.. 257 10.3.3.1. Comunicarea ntre procese prin PIPE i FIFO.. 257 10.3.3.2. Comunicarea ntre procese prin semnale. 263 10.3.3.3. Comunicarea ntre procese prin sistem V IPC. Cozi de mesaje. 275 10.3.3.4. Comunicarea ntre procese prin sistem V IPC. Semafoare.. 285 10.3.3.5. Comunicarea ntre procese prin sistem V IPC Memorie partajat.. 288 10.3.3.6. Comunicarea ntre fire de execuie... 291 10.3.3.7. Interfaa SOCKET. 293 10.3.3.8. Modelul cient / server TCP296 10.3.3.9. Modelul client / server UDP. 302 BIBLOGRAFIE 309

10

Sisteme de operare

317

Algoritm

ACE ACL AES APC API APT Atribute BCP BIOS Boot Boot Block Booting Broadcast Bug Bussy Bussy-sleep

DICIONAR DE TERMENI I PRESCURTRI -de planificare a proceselor: FCFS=First Come First Primul venit primul servit Served FIFO=First Input First Primul intrat primul ieit Output SJF=Shortest Job First Cea mai scurt sarcin mai nti -de alegere a spaiului de memorie liber: FFA=First Fit Algotithme 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 Primul intrat primul ieit Output LRU=Least Recently Used Ultimul folosit LFU=Least Frequenzly Used Cel mai puin utilizat Algoritm real- Paged Pregtete sistemul pentru daemon evacuarea de pagini Acces Control Entries Intrri de control al accesului Acces Control List List de control al accesului Application Environnement Specificaie a serviciilor utilizabile Specification de ctre o aplicaie client/server Application Procedure Call Apelul unei proceduri de aplicaie Application Programing O intefa ce conine definiia Interface tipurilor de date i funciilor apel n WINDOWS Advanced Package Toll Utilitar pentru pachete deb Caracteristici ale fiierelor Nume, tip, locaie, protecie etc. Bloc Cotrol Process Descriptor de proces Basic I/O System Un sistem de dispozitive intrare/ieire Proces Boot Un proces care iniializeaz SO Bloc de Boot Conine proceduri i funcii pentru iniializarea sistemului de fiiere Botare Creare de procese care s porneasc SO Emisie, emitere defect n hard i n soft Ocupat Ateptare dormant Protocol de ateptare n excluderea mutual

318
Bussy-wait CACHE CBC CFB Checksumm Circuit Level Gateways CList Coad CODE RED CORBA CPU CRE DACL Daemon Deadlock DEC DES DESX DI/EI Director Disck cache DNS DOS Driver ECB Eveniment FAT Firestar Firewall

Sorin Adrian Ciureanu


Ateptare ocupat Cipher Bloc Chainning Cipher Feed Back Sum de verificare Portie de circuit Capabilities List Structur de date Common Object Request Broker Arhitecture Central Processing Unit Cluster tools Runtime Environement Discretionary ACL Demon Impas Distributed Environement Corporation Data Encryption Standard Data Encryption Standard X Invalidare/validare ntreruperi (Catalog) O seciune a memoriei principale Domain Name System Disck Operating System Electronic Code Bloc (Semnal) File Alocation Tabel n UNIX Perete de foc Partea de SO care depinde de perifericul asociat Mod de criptare cu carte de coduri Mecanism de comunicare ntre procese Tabel de alocare a fiierului Interfa grafic pentru iptables Sistem ce separ o reea protejat de una neprotejat Protocol de ateptare n excluderea mutual Parte din memoria principal Mod de criptare cu nltuire Mod de criptare cu reacie Suma biilor mesajelor List de capabiliti Funcioneaz dup principiul FIFO, cu comenzile POP i PUSH Numele unui vierme Sistem bazat pe derularea obiectelor Unitate central de procesare Mediu de lansare n execuie n MPI List de acces discreionar Un proces care st n fundal, pentru manevrarea diferitelor activiti Interblocare n comunicaia proceselor Consoriu Standard de incriptare a datelor bazat pe chei secrete Tip de DES Un fiier sistem care gestioneaz structura sistemului de fiiere Pentru blocurile de disc cele mai des utilizate Schem de baz de date care mapeaz n ASCII numele gazdelor pe adresele lor IP

Sisteme de operare
Firewall Builder Fiier Fragle Free behind FTP Handle HMAC HPFS HTTP I/O ICMP Id i-nod IP IP sniffing IPC IPspoofing Iptables ISA JDK Kernel Land craft LIFO List LST MAC MBR MFT MP MPI MORRIS MS-DOS Mutex n UNIX Entitatea de baz a unui SO Liber n urm File Trabsfer Protocol O intrare n tabelul de resurse H Message Autentification Code High Performance File System Hiper Text Transfer Protocol Input/Output = Identificator proces Nod de indexare Internet Protocol Atac asupra IP Inter Process Communication Falsificarea adresei IP Instructions Set Architecture JAVA Developement Kit Nucleu Aterizare forat Last Input First Out Structur de date Lood Sharing Facility Message Autentification Code Master Boot Record Master File System Message Passing Message Passing Inteface Microsoft Disck Operating System Mutual exclusive Interfa grafic pentru iptables

319

Pstreaz informaia Atac cu pachete UDP la portul 7 al adresei broadcast Tehnic de optimizare a accesului secvenial Mod de tranfer al fisierelor Cod de autentificare a mesajelor bazat pe funcia de dispersie H Sistem de fiiere de nakt performan Intrare / Ieire Protocol de transmitere a pachetelor de date n Windows

Intercepteaz o reea Comunicaie ntre procese Tip de atac Firewall n UNIX Arhitetura setului de instruciuni

Tip de atac Ultimul intrat, primul ieit ir de noduri ntr-o relaie de ordine Mediu de lansare n execuie n MPI Cod de autentificare a mesajelor Fiier de informaii asupra fiierelor de pe volumul respectiv Transmisie de mesaje Intefa n transmisia de mesaje Numele primului vierme inventat Obiect de sincronizare

320
NAT NAT NESSUS Network Browser NFS bind NTFS Obiect

Sorin Adrian Ciureanu


Network Address Translation Network Adress Translation n UNIX Procedura de filtrare a pachetelor Firewall n Windows Program de scanare care determin vulnerabilitile unei maini Aplicaie ce permite interconectarea cu alte sisteme UNIX sau WINDOWS Tip de atac Noua tehnologie a sistemului de fiiere- sistem de organizare a fiierelor O colecie de variabile legate ntre ele printr-un set de proceduri numite metode; n loc de fiiere sau documente Mod de criptare cu reacie la ieire Tip de metod pentru determinarea blocurilor defecte Reea deschis de computere Tip de metod pentru determinarea blocurilor defecte Comunitatea sistemelor de operare libere Standard de transmisie

New Tehnology File System n unele limbaje de programare ca C++ , JAVA, CORBA Out Feed Back n afara SO Open Network Computing n cadrul SO Surse deschise Open Szstem Interconnect Costul comutrii procesului Suprapunere Potop de pachete Demon de paginare Paginarea memoriei Parallel Virtual Machine Dispozitiv aflat n afara UC Packet Filtering Firewalls Process Identificator

OFB Ofline ONC Online Open Sources OSI Overhead Overlay Packet flood Page daemon Paging PVM Periferic PFF PID Ping flood Ping of death Pipe PRAM Proces Proces Switch Program

Bombardarea unei reele cu pachete de date Pregtete sistemul pentru evaccuarea de pagini Biblioteca paralela Ex: hard disc, imprimanta modem, scanner,CD ROM Firewall-uri cu filtrare de pachete Identificator de proces UNIX Tip de atac Tip de atac Un pseudofiier pentru comunicaia unidirecional ntredou procese Maini cu acces ntmpltor paralel Sub controlul SO Conine adresa de memorie a

conduct Parallel Random Acces Machines Program n execuie Comutarea procesului Registru special vizibil

Sisteme de operare
Counter Proxies RAID RAM-disc Read ahead RPC RO SACL Scrambling Semafor Shel SID SIGUSR Smarf SMI SMTP Sniffer SO SPAM Spoofing Stack Pointer Stiv Streamer Swapping Synchronous calls SYNCOOKIES SYNflood SYSTEM V System calls System Shadow utilizatorului Proxi-uri de aplicaii Redundant Array of Independent Discks O poriune de memorie principal declarat ca disc virtual Citete nainte Remote Process Comunication Read Only=numai citire System Acces Control nvlmeal n UNIX Security identificator n UNIX Stateful Multilayer Inspections Simple Mail Transfer Protocol Adulmecare Sistem de operare E.Mail spamming E-Mail spoofing Registru special vizibil utilizatorului Structur de date Nucleu n spaiul utilizator (analog pipelines-urilor) Deplasare, micare Apeluri sincrone O mulime redundant de discuri independente

321

urmtoarei instruciuni de utilizat

Tehnic de optimizare a accesului secvenial Segment de cod Alterarea i amestecarea mesajelor Obiect de sincronizare Interpretor de comenzi Identificator de securitate Tip de semnal Atac de tipul ICMF asupra adresei brodcast a reelei Firewall-uri cu inspecii multistrat Protocol de transfer al mesajelor Program de interceptarea traficului de reea

Falsificarea adresei expeditorului Pointeaz pe partea de sus a stivei curente de memorie Funcioneaz dup principiul LIFO Conecteaz dinamic un proces utilizator la driver Deplasarea proceselor de pe memoria principal pe hard disc Apeluri blocante Un mecanism de prevenire a atacurilor DOS Bombardare cu pachete care au setat numai bitul SYN Se bazeaz pe Berkeley UNIX mpiedic accesarea fiierului de parole

Potop de pachete SYN Versiune de UNIX Apeluri sistem

322
Task TCB TCP TCP/IP Tear drop TELNET Thread Time out TITAN Trashing Tripwire TS UC UDP URL WWW Web Web page Winlogon Zombie Zone Allarm Pro

Sorin Adrian Ciureanu


Proces Trusted Computing Base Transmission Control Protocol Transmission Control Protocol / Internet Protocol Television Netwok Fir de execuie Timp depit In UNIX Devalorizare n UNIX Test and Set Unitatea Central User Datagram Protocol Uniform Resource Locator World Wide Web Reea, estur Pagin Web Stare a unui proces n WINDOWS Baz de calcul de ncredere Protocol de control al transmisiei pachetelor de date Protocol de control al transmisiei pachetelor de date Tip de atac TCP Reea de televiziune Subunitate a unui proces Rezultat al atacului SYNflood Program de scanare care determin i corecteaz vulnerabilitile unei maini Cnd procesele folosesc mai mult timp pentru paginare dect pentru execuie Program de auditare Suport hard pentru validare/invalidare de ntreruperi sau instruciuni Protocol de transmitere a pachetelor de date Adresa unic a unei pagini Web Larg reea mondial Un mare graf orientat de documente care pointeaz spre alte documente Document n reeaua Web Serviciu de securitate in Windows Proces terminat, n ateptarea terminrii printelui Program de instalare a unui firewall

Sisteme de operare

323