Sunteți pe pagina 1din 17

Universitatea Transilvania Braov Facultatea de Inginerie Electric i tiina Calculatoarelor Departamentul de Electronic i Calculatoare

Sisteme de operare
curs 5

!" #!$# %

&#l# dr# ing# 'ert(s) Csa*a+,olt-n

#$# .ro*leme I.C clasice

pro*leme elementare ale sistemelor multiprogramate cu comunicaie /ntre procese mai multe pro*leme propuse i re)olvate de+a lungul timpului ori de c0te ori se propune o nou primitiv de sincroni)are se testea) 1uncionarea pe aceste pro*leme

#$#"# .ro*lema cinei 1ilo)o1ilor

propus de Di23stra /n "455 5 1ilo)o1i sunt ae)ai la o mas rotund 1iecare 1ilo)o1 are /n 1a o 1ar1urie cu spag6e7i pentru a m0nca spag6e7i un 1ilo)o1 are nevoie de dou 1urculie /ntre dou 1ar1urii e8ist o 1urculi 95 /n total: viaa unui 1ilo)o1 const din perioade /n care g0ndete i perioade c0nd mn0nc

.ro*lema cinei 1ilo)o1ilor

c0nd un 1ilo)o1 devine 1lm0nd /ncearc s ia 1urculiele din st0nga i din dreapta; dac reuete atunci va m0nca un anumit timp dup care pune 1urculiele la locul lor
#define N 5 void philosopher(int i) { while (TRUE) { think(); take_fork(i); //blo k !ntil fork present take_fork((i"#)$N); eat(); p!t_fork(i); p!t_fork((i"#)$N); % %

.ro*lema cinei 1ilo)o1ilor

pro*leme cu aceast soluie<

dac toi ridic 1urculia din st0nga simultan<

deadlock

putem modi1ica programul ast1el /nc0t dup preluarea 1urculiei din st0nga; s se veri1ice dac 1urculia din dreapta este disponi*il; iar dac nu atunci se pune /napoi cea din st0nga

dac toi ridic 1urculia din st0nga simultan; vor vedea 1urculia din dreapta indisponi*il; vor pune /napoi 1urculia din st0nga i se reia din /nceput

starvation

=e)olvarea pro*lemei cinei 1ilo)o1ilor

putem introduce un timp aleator de ateptare /ntre ridicarea 1urculielor; dar nu putem *a)a pe evoluia aleatoare a programului o soluie determinist 1r deadloc3 i 1r starvation este o*inut prin prote2area celor cinci instruciuni de dup t6in3 cu un sema1or *inar<

/nainte de a lua 1urculiele 1ilo)o1ul e8ecut down; iar dup ce pune /napoi 1urculiele e8ecut up per1ormana nesatis1ctoare 9un singur 1ilo)o1 mn0nc la un moment de timp:

Implementarea cinei 1ilo)o1ilor


#define #define #define #define #define #define N 5 &E'T ((i(#)$N) R)*+T ((i"#)$N) T+)N,)N* +UN*R. # E/T)N* 0 void take_forks(int i) { down(72!te5); state3i4 6 +UN*R.; test(i); !p(72!te5); down(7s3i4); % void p!t_forks(int i) { down(72!te5); state3i4 6 T+)N,)N*; test(&E'T); test(R)*+T); !p(72!te5); % void test(int i) { if (state3i4 66 +UN*R. 77 state3&E'T4 86 E/T)N* 77 state3R)*+T4 86 E/T)N*) { state3i4 6 E/T)N*; !p(7s3i4); % %

t1pedef int se2aphore; int state3N4; se2aphore 2!te56#; se2aphore s3N4; void philosopher(int i) { while (TRUE) { think(); take_forks(i); eat();; p!t_forks(i); % %

.ro*lema scriitor>cititor

propus de Courtois /n "4%" modelea) accesul la o *a) de date avem o *a) de date mare 9de e8# sistemul de re)ervare a *iletelor de avion: i mai multe procese care doresc s scrie sau s citeasc /n>din *a)a de date se accept posi*ilitate ca mai multe procese s citeasc deodat; dar dac un proces accesea) pentru scriere nici un alt proces nu poate accesa nici pentru scriere; nici pentru citire

Implementarea scriitor>cititor
t1pedef int se2aphore; se2aphore 2!te56#; se2aphore db6#; int r 6-; void reader(void) { while (TRUE) { down(72!te5); r 6 r "#; if (r 66 #) down(7db); !p(72!te5); read_database(); down(72!te5); r 6 r (#; if (r 66-) !p(7db); !p(72!te5); !se_data(); % % void writer(void) { while (TRUE) { think_!pdate(); down(7db); write_database(); !p(7db); % %

.ro*lema sleeping *ar*er

/ntr+o 1ri)erie e8ist " 1ri)er; " scaun pentru 1ri)er i n scaune pentru clieni care ateapt c0nd nu sunt clieni care ateapt 1ri)erul st pe scaunul lui i doarme c0nd apare un client; aceasta va tre*uie s tre)easc 1ri)erul dac mai apare un client /n timp ce 1ri)erul tunde un client; aceasta va tre*ui s atepte pe un scaun 9dac este li*er unul: sa va prsi 1ri)eria

Implementarea sleeping *ar*er


#define 9+/)R: 5 t1pedef int se2aphore; se2aphore 2!te56#; se2aphore !sto2ers6-; se2aphore barbers6-; int waitin;6-; void barber(void) { while (TRUE) { down(7 !sto2ers); down(72!te5); waitin; 6 waitin;(#; !p(7barbers) !p(72!te5); !t_hair(); % %

void !sto2er(void) { down(72!te5); if (waitin; < 9+/)R:) { waitin; 6 waitin; " #; !p(7 !sto2ers); !p(72!te5); down(7barbers); ;et_hair !t(); % else { !p(72!te5); % %

#?# @6read+uri

un t6read 91ir de e8ecuie: este o unitate de e8ecuie de *a) a unui C.U i const din .C; un set de registre i un spaiu pentru stiv

se mai numete i lig6tAeig6t process 9BC.:

seciunea de cod; cea de date i resursele SD 91iiere desc6ise; semnale: vor Ei parta2ate /ntre t6read+urile care aparin unui proces parta2area resurselor determin timpi de comutare mult mai mici dec0t a proceselor

Fodele de t6readuri

e8ist mai multe modele de t6readuri /n 1uncie cum sunt mapate /ntre user space i 3ernel space t6readurile la user level sunt tratate de procesul crora le aparin 1r intervenia 3ernelului t6readurile la 3ernel level sunt tratate de ctre 3ernel similar cu procesele e8ist relaii /ntre t6readuri user level i 3ernel level<

multe la unu; unu la unu; multe la multe

@6read+uri user level

unele sisteme 1olosesc user+level t6reads< acest tip de t6read+uri sunt implementate 1olosind *i*lioteci multit6reading

implementarea se 1ace 1r a se 1olosi apeluri de sistem deci la comutarea conte8tului /ntre t6readuri nu este necesar intervenia SD comutarea se reali)ea) independent de SD deci 1oarte rapid un t6read user+level poate *loca tot procesul sigurana /ntre t6reduri este lsat pe seama programatorului

@6read+uri 3ernel level

toate SD moderne o1er suport pentru t6readuri 3ernel level toate t6readurile sunt tratate la nivelul plani1icatorului de procese e8ist siguran ridicat /ntre t6readuri impune un over6ead la crearea i sc6im*area /ntre t6readuri Binu8< pt6reads 9.DSIG t6reads:< *i*liotec de 1uncii standard pentru manipularea t6readurilor

Sincroni)area t6readurilor

i /n ca)ul t6read+urilor pot apare condiii de concuren care se pot re)olva ca /n ca)ul proceselor pentru pt6reads e8ist e8tensii care permit 1olosirea sema1oarelor i a mutecilor e8ist suport i pentru *locarea accesului la )onele de memorie parta2ate

.rocese vs# t6read+uri

procesele pot opera independent< e8ist protecie /ntre procese 1iecare proces are propriul .C; S. i spaiu de adrese< utili)ea) multe resurse

t6read+urile nu sunt complet independente< nu e8ist protecie /ntre t6read+uri parta2ea) resursele< utili)ea) mai puine resurse