Sunteți pe pagina 1din 19

Utilizarea Sistemelor de Operare

Procese i fire de execuie

- Curs 4 27.10.2005

Universitatea POLITEHNICA Bucureti

2.1 Procese Conceptul central n orice SO este procesul. Acesta este o abstractizare a unui program n execuie ntr-un sistem multiprogramat, CPU comut de la un program la altul, executndu-l pe fiecare un timp limitat. Astfel n orice moment de timp CPU ruleaz un singur program Apare noiunea de pseudoparalelism, n contrast cu paralelismul hard al sistemelor multiprocesor

Utilizarea Sistemelor de Operare

2.1.1 Modelul proces n acest model, orice component soft executabil este organizat ntr-un numr de procese secveniale Comutarea rapid a CPU de la un proces la altul se numete multiprogramare Fiecare proces i are propriul contor logic de program. Acesta este ncrcat n contorul fizic de program n momentul n care CPU execut respectivul proces. Cnd execuia procesului se termin, contorul fizic este salvat n cel logic Diferena dintre proces i program: un proces reprezint o activitate de un anumit fel. El conine un program, date de I/O i o stare.
Utilizarea Sistemelor de Operare 3

2.1.2 Crearea proceselor n SO complexe este necesar o modalitate de a crea i termina procesele n funcie de necesitile din timpul funcionrii Exist patru evenimente principale ce determin crearea proceselor:
Iniializarea sistemului Execuia unui apel de sistem pentru crearea unui proces de ctre un proces n execuie O cerere a utilizatorului pentru crearea unui nou proces Iniierea unui job n fundal

Utilizarea Sistemelor de Operare

2.1.2 Crearea proceselor (2) La iniierea SO sunt create mai multe procese:
Procese de prim-plan (foreground) Procese de fundal (background). Procesele de fundal care se ocup de diverse activiti (e-mail, pagini Web) se numesc demoni.

Crearea de procese este util atunci cnd sarcina de ndeplinit poate fi descompus n mai multe procese nrudite, independente, care interacioneaz n UNIX exist un singur apel de sistem pentru crearea de procese noi: fork. Acesta creeaz o clon exact a procesului apelant. Noul proces ruleaz apoi execve pentru a-i schimba imaginea memoriei sau a rula un nou program
Utilizarea Sistemelor de Operare 5

Crearea proceselor n Windows n Win32 exist o singur funcie, CreateProcess, care creaz un nou proces i ncarc un nou program n acesta. Att n UNIX ct i n Windows, procesele printe i copil au spaii de adrese diferite. Nu se partajeaz memorie care s se poate scrie.

Utilizarea Sistemelor de Operare

2.1.3 Terminarea proceselor n general un proces se termin datorit uneia dintre condiiile:
Ieire normal (terminare voluntar) Ieire cu eroare (terminare voluntar) Eroare fatal (terminare voluntar) Terminare de ctre un alt proces (terminare involuntar)

Utilizarea Sistemelor de Operare

2.1.3 Terminarea proceselor (2)


1. Ieirea normal are loc atunci cnd procesul i-a terminat sarcina 2. Ieirea eroare se petrece atunci cnd, spre exemplu, unul dintre parametrii comenzii lipsete. 3. Al treilea mod de terminare este datorat unei erori cauzate de proces, care cel mai adesea se gsete n program (ex: citire dintr-o zon de memorie nepermis, mprire la zero, etc) 4. Al patrulea mod de terminare este datorat unui alt proces care execut un apel de sistem kill (n UNIX) sau TerminateProcess (n Windows). n ambele cazuri, procesul uciga trebuie s aib autorizaia necesar pentru a termina procesul ucis

Utilizarea Sistemelor de Operare

2.1.4 Ierarhii de procese n UNIX, atunci cnd un proces creeaz un altul, devine printele acestuia din urm. Procesul copil astfel creat poate deveni printe la rndul su, crendu-se n acest fel o ierarhie de procese. n cazul UNIX, rdcina ierarhiei de procese este procesul init. Acesta este prezent n imaginea de boot i este pornit la iniializarea sistemului. n Windows nu exist conceptul de ierarhie de procese. Procesul printe primete un descriptor de fiier (handle) cu care poate controla procesul copil. Acest descriptor poate fi ns transmis altui proces, invalidnd astfel ierarhia
Utilizarea Sistemelor de Operare 9

2.1.5 Strile unui proces Un proces se poate afla n una din strile:
n execuie (folosete CPU n acel moment) Gata de execuie (poate fi executat, ns este oprit pentru a lsa un alt proces s se execute) Blocat (nu se poate executa pn cnd nu apare un eveniment extern)

ntre aceste stri sunt posibile patru tranziii:


n execuie 1 3 Blocat
1. 2. 3. 4.
Utilizarea Sistemelor de Operare

Gata de execuie

Procesul se blocheaz n ateptarea datelor de intrare Modulul de planificare alege un alt proces Modulul de planificare alege acest proces Datele de intrare devin disponibile
10

2.1.6 Implementarea proceselor Pentru a implementa modelul proces, SO folosete o tabel de procese, care conine informaiile despre proces ce trebuiesc salvate atunci cnd procesul trece n una din cele trei stri posibile Rularea secvenial a mai multor procese pe un singur CPU are la baz un vector de ntreruperi. Acesta conine adresele rutinelor de tratare a diferitelor ntreruperi asociate dispozitivelor de I/O

Utilizarea Sistemelor de Operare

11

Tabela de procese
Proces
Regitri PC, PSW, SP Starea procesului Prioritate Parametrii de progr. ID proces ID proces printe ID grup proces Semnale Timp de pornire proces Timp utilizare CPU Timp utilizare de ctre copii Alarme
Utilizarea Sistemelor de Operare

Memorie Referin la: segment de cod segment de date segment de stiv

Fiiere Director rdcin Director de lucru Descriptori fiiere ID utilizator ID grup

12

2.2.1 Modelul firelor de execuie Modelul proces se bazeaz pe dou concepte diferite: gruparea resurselor i execuia. Un proces are
Un spaiu de adrese (textul programului, date) i alte resurse (fiiere deschise, procese copil, etc.) Un fir de execuie (thread) care conine un contor program, registre, o stiv i o stare

Procesele i firele de execuie pot fi tratate separat:


Procesul grupeaz resurse Firul de execuie este planificat pentru execuia n cadrul CPU
Utilizarea Sistemelor de Operare 13

Fire de execuie multiple Un proces poate avea mai multe fire de execuie, caz n care acestea partajeaz spaiul de adrese, fiierele deschise, etc. (multithreading) Cnd un proces cu mai multe fire de execuie ruleaz pe un sistem cu un singur CPU, CPU comut rapid ntre ele crend impresia de paralelism Nu exist protecie ntre datele partajate de firele de execuie asociate unui aceluia i proces deoarece:
Este imposibil Nu ar trebui sa fie nesesar
Utilizarea Sistemelor de Operare 14

Primitivele firelor de execuie


Ca i un proces, un fir de execuie se poate afla n una din strile: n execuie, blocat, gata de execuie sau terminat Procesele ncep de obicei cu un singur fir de execuie. Acesta poate crea apoi noi fire de execuie apelnd o procedur (de ex. thread_create). Firul creator primete un identificator pentru firul creat La ndeplinirea sarcinii, un fir de execuie se poate termina cu thread_exit Cu thread_wait se poate atepta pn cnd execuia unui alt fir se ncheie Un apel des ntlnit este thread_yield. Acesta permite renunarea voluntar la deinerea CPU pentru a lsa un alt fir s se execute
Utilizarea Sistemelor de Operare 15

Componentele unui fir de execuie

Comune (la nivel de proces) Spaiul de adrese Variabile globale Fiiere deschise Procese copii Alarme armate Semnale

Private (la nivel de fir de execuie) PC Regitri Stiva Starea

Utilizarea Sistemelor de Operare

16

2.2.2 Utilizarea firelor de execuie Avantajele firelor de execuie:


Se pot crea i termina mai rapid dect procesele Posed modaliti de comunicare mai eficiente dect comunicarea inter-proces

Desfurarea mai multor activiti simultan asupra aceluiai obiect electronic Aduc un ctig de performan mai ales n cazul unui numr mare de operaii cu dispozitivele de I/E Sunt folositoare n cazul sistemelor multiprocesor

Utilizarea Sistemelor de Operare

17

2.2.3 Implementarea firelor de execuie n spaiul utilizator

Funcionalitatea firelor de execuie poate fi implementat n spaiul utilizator sau n kernel n cazul n care pachetul firelor de execuie este pus n ntregime n spaiul utilizator, kernelul nu tie nimic de existena lor i gestioneaz doar procese cu un singur fir de execuie Pentru a le gestiona n spaiul utilizator, fiecare proces are nevoie de o tabel de fire de execuie

Utilizarea Sistemelor de Operare

18

2.2.3 Implementarea firelor de execuie n spaiul utilizator

Avantaje:
Firele de execuie n spaiul utilizator pot fi implementate n SO care nu suport fire de execuie Pentru gestiunea firelor de execuie nu sunt necesare capcane, comutri de context, golirea cache-ului, etc

Dezavantaje:
Apelurile de sistem blocante vor bloca ntreg procesul, deci i celelalte fire de execuie n cazul apariiei unui page fault situaia este similar cu cea de la apelurile blocante Daca un fir nu renun la folosirea CPU n mod voluntar, nici un altul din cadrul procesului nu poate rula
Utilizarea Sistemelor de Operare 19

2.2.4 Implementarea firelor de execuie n kernel

n kernel se gsete o tabel de fire care menine evidena tuturor firelor din sistem. Nucleul menine i evidena proceselor La blocarea unui fir, kernelul alege ntre a rula un alt fir din cadrul aceluiai proces, sau unul dintr-un alt proces Costul crerii i distrugerii firelor n kernel este ridicat. De aceea unele SO recicleaz firele de execuie Exist implementri hibride, folosind fire la nivelul kernel-ului care apoi sunt multiplexate n spaiul utilizator
Utilizarea Sistemelor de Operare 20

10

2.2.6 Fire de execuie pop-up Considernd un sistem ce trebuie s trateze mesajele sosite, exist dou posibiliti:
Un proces sau fir de execuie este blocat pe un apel de sistem receive. La sosirea mesajului, el l va accepta i procesa n cazul sosirii mesajului, sistemul creeaz un nou fir de execuie (fir de execuie pop-up).
Crearea acestuia este mai rapid dect restaurarea unuia deja existent Noul fir de execuie va procesa mesajul Este de preferat ca firul de tip pop-up s fie plasat n spaiul kernel (uurin mai mare n implementare, execuie mai rapid, acces la dispozitivele de I/O). Dezavantajul este dat de faptul c apariia unei erori poate cauza probleme n spaiul kernel
Utilizarea Sistemelor de Operare 21

2.3 Comunicarea interprocese Deseori procesele trebuie s comunice unele cu altele Apar trei probleme:
Cum poate un proces s transmit informaie ctre altul Evitarea afectrii reciproce a execuiei activitilor critice (de ex. alocarea de memorie) Serializarea corect a execuiei proceselor

Utilizarea Sistemelor de Operare

22

11

2.3.1 Condiii de curs Situaiile n care dou sau mai multe procese citesc sau scriu date partajate li rezultatul final depinde de cine se execut i cnd sunt numite condiii de curs. Exemplu:
Procesul A vrea sa tipreasc un fiier. El citete prima poziie liber din directorul de tiprire (de ex. 7) i o memoreaz. n acest moment el este oprit i CPU comut la procesul B Procesul B vrea si el s tipreasc un fiier. El citete aceeai valoare 7 i n dreptul ei trece numele fiierului. n acest moment, controlul este redat lui A A va suprascrie fiierul lui B cu propriul fiier deoarece a reinut aceeai prim poziie liber
Utilizarea Sistemelor de Operare 23

2.3.2 Regiunile critice (1) Partea de program n care memoria partajat este accesat se numete regiune critic sau seciune critic. Pentru a evita regiunile critice, trebuie asigurat faptul c dac un proces folosete date partajate, celelalte procese nu vor putea face acest lucru (excludere mutual) Dac procesul A se afl n regiunea lui critic, i procesul B ncearc sa acceseze date partajate cu A, atunci B este blocat pn cnd A iese din regiunea critic

Utilizarea Sistemelor de Operare

24

12

2.3.2 Regiunile critice (2) Pentru ca dou procese paralele s coopereze corect i eficient, folosind date partajate, trebuie ndeplinite condiiile:
Oricare dou procese nu se pot afla simultan n regiunile lor critice Nici o presupunere nu se poate face asupra vitezei sau numrului de CPU-uri Nici un proces care ruleaz n afara regiunii lui critice nu poate bloca alte procese Nici un proces nu trebuie s atepte la infinit pentru a intra n regiunea lui critic

Utilizarea Sistemelor de Operare

25

2.3.3 Excluderea mutual folosind ateptare activ

Soluii pentru obinerea excluderii mutuale Dezactivarea ntreruperilor


Imediat dup ce un proces intr n regiunea critic, dezactiveaz toate ntreruperile i le reactiveaz la ieirea din aceast regiune Comutarea ntre procese se face utiliznd sistemul de ntreruperi i astfel comutarea procesorului la un alt proces nu va fi posibil Dezavantaje:
un proces poate s nu mai reactiveze ntreruperile i n acest caz SO nu mai poate funciona Dac sistemul este multiprocesor, dezactivarea ntreruperilor afecteaz doar procesorul care a executat instruciunea disable, celelalte rulnd n continuare i putnd accesa memoria partajat
Utilizarea Sistemelor de Operare 26

13

2.3.3 Excluderea mutual folosind ateptare activ (2)

Variabile zvor
Exist o variabil partajat, variabil zvor, care are valoarea 0 dac nici un proces nu se afl n regiunea critic i 1 dac exist un astfel de proces Ideea conine ns exact problema aprut la directorul de tiprire:
un proces citete valoarea 0, i nainte de a o nlocui cu 1 un altul este activat Cel de-al doilea proces citete i el 0 i modific valoarea variabilei n 1 Cnd primul proces este continuat, se va afla n acelai timp n regiunea critic cu al doilea deoarece verificarea valorii variabilei s-a fcut deja

Utilizarea Sistemelor de Operare

27

2.3.3 Excluderea mutual folosind ateptare activ (3)

Alternarea strict
Se folosete o variabil de tip integer, turn, care decide al cui i este rndul s intre n regiunea critic
while(TRUE) { while(turn!=0); critical_region(); turn=1; noncritical_region(); } while(TRUE) { while(turn!=1); critical_region(); turn=0; noncritical_region(); }

Verificarea n continuu a unei variabile pn cnd are o valoare dorit se numete ateptare ocupat. Ea devine folositoare doar atunci cnd probabilitatea ca ateptarea s fie scurt este rezonabil Dezavantaj: programul din dreapta este blocat atta timp ct cel din stnga se afl n regiunea noncritic
Utilizarea Sistemelor de Operare 28

14

2.3.3 Excluderea mutual folosind ateptare activ (4)

Soluia lui Peterson


#Define FALSE 0 #Define TRUE 1 #Define N 2 int turn; int interested[N]; void enter_region(int process) { int other; other = 1-process; interested[process] = TRUE; turn =process; while (turn==process&&interested[other]==TRUE); } void leave_region(int process) { interested[process] = FALSE; }

nainte de a folosi variabilele partajate, fiecare proces apeleaz enter_region cu numrul su de ordine ca parametru (0 sau 1). La terminare apeleaz leave_region cu acelai parametru
Utilizarea Sistemelor de Operare 29

2.3.4 Sleep i Wakeup Unele dintre cele mai simple primitive de comunicare interprocese este perechea sleep i wakeup. sleep blocheaz apelantul pn cnd un alt proces l trezete. wakeup are un singur parametru, procesul ce trebuie trezit Problema Productor-Consumator:
Dou procese mpart o zon de memorie tampon comun. Unul dintre ele pune date n zona tampon (productorul), iar cellalt le scoate (consumatorul) Cnd productorul vrea s introduc un element n zona tampon i aceasta este plin, l trezete pe consumator i se suspend Cnd consumatorul nu mai are elemente de scos, l trezete pe productor i se suspend
Utilizarea Sistemelor de Operare 30

15

2.3.5 Semafor Un semafor este o variabil de tip ntreg care contorizeaz numrul de semnale de trezire salvate pentru folosire n viitor (Dijkstra, 1965) Asupra unui semafor sunt posibile dou operaii: down. Dac semafor > 0, valoarea semaforului fa vi
decrementat. Dac semafor == 0, procesul va fi suspendat fr a se termina operaia down

up. Dac exist procese suspendate care ateapt terminarea operaiei down pe acel semafor, atunci
unul dintre ele va termina operaia. Dac nu exist astfel de procese, semafor va fi incrementat

Verificarea valorii, modificarea acesteia i suspendarea / trezirea procesului sunt efectuate ca o singur aciune atomic, indivizibil
Utilizarea Sistemelor de Operare 31

2.3.6 Mutex (1) Un mutex este o variabil care se poate afla n una dintre cele dou stri posibile: deschis sau nchis. Este o variant mai simpl de semafor Pentru reprezentarea ei se folosete n practic un ntreg: 0 = deschis, celelalte valori = nchis Cnd un fir de execuie (proces) trebuie sa acceseze o regiune critic, efectueaz un apel mutex_lock. Dac mutex-ul este deschis, firul de execuie este liber s intre n regiunea critic. Dac mutex este nchis, firul de execuie apelant este suspendat pn cnd firul de execuie aflat n regiunea critic a terminat i efectuat apelul mutex_unlock
Utilizarea Sistemelor de Operare 32

16

2.3.6 Mutex (2) Dac mai multe fire de execuie sunt blocate la mutex, este ales aleator cel cruia i va fi permis s obin nchiderea apelului mutex_lock

Utilizarea Sistemelor de Operare

33

2.3.7 Monitoare Un monitor reprezint o primitiv de sincronizare de nivel nalt. El este o colecie de proceduri, variabile i structuri de date, toate grupate ntr-un modul special Procesele pot accesa direct procedurile din monitor, dar nu pot accesa direct structurile de date interne acestuia Doar un singur proces poate fi activ n interiorul unui monitor n orice moment Prin transformarea tuturor regiunilor critice n proceduri de monitor, se obine excluderea mutual
Utilizarea Sistemelor de Operare 34

17

2.3.8 Transferul de mesaje (1) Aceast metod de comunicare interprocese folosete dou primitive, send i receive, care sunt mai mult apeluri de sistem dect construcii de limbaj. Ele pot fi uor aranjate sub forma unor proceduri de bibliotec:
send(destination, &message); receive(source, &message);

Primul apel trimite un mesaj ctre o anumit destinaie, iar al doilea primete un mesaj de la o surs. Dac nici un mesaj nu este disponibil, receptorul se poate bloca pn la primirea unui mesaj
Utilizarea Sistemelor de Operare 35

2.3.8 Transferul de mesaje (2) Emitorul i receptorul se pot afla se maini diferite Pentru a rezolva problema mesajelor pierdute, receptorul trebuie s trimit un mesaj de confirmare (acknowledgement). Dac emitorul nu primete confirmarea, va retrimite mesajul

Utilizarea Sistemelor de Operare

36

18

2.3.9 Bariere (1) Barierele sunt mecanisme de sincronizare folosite pentru grupuri de procese, n cazul unor aplicaii mprite pe etape. Pentru aceste aplicaii, nici un proces nu poate trece la urmtoarea etap pn cnd toate procesele nu sunt gata pentru urmtoarea etap Prin aezarea unei bariere la sfritul fiecrei etape, cnd un proces ajunge la aceasta, este suspendat pn cnd toate procesele ajung la barier

Utilizarea Sistemelor de Operare

37

2.3.9 Bariere (2) Exemplu:


calcularea produsului a n matrice. Elementele matricei rezultat sunt calculate folosind procese paralele. Nici un proces nu poate ncepe iteraia k+1 pn cnd iteraia k nu este complet, adic pn cnd toate procesele nu au terminat de calculat elementele matricei rezultat parial de ordin k

La terminarea calculului dintr-o etap, un proces execut o operaie barrier i apoi este suspendat pn cnd toate procesele vor ajunge la sfritul etapei respective

Utilizarea Sistemelor de Operare

38

19