26.02.2015 Views

Operativni Sistemi - Univerzitet u Novom Sadu

Operativni Sistemi - Univerzitet u Novom Sadu

Operativni Sistemi - Univerzitet u Novom Sadu

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Down ( mutex ) ;<br />

states [ i ] := thinking ;<br />

Test ( left ( i ) ) ;<br />

Test ( right ( i ) ) ;<br />

Up ( mutex )<br />

END PutForks ;<br />

// ulazak u k.o.<br />

// filozof prestaje da jede,<br />

// počinje razmišljati<br />

// javimo levom filozofu<br />

// javimo desnom filozofu<br />

// izlaz iz k.o.<br />

PROCEDURE Test ( i : CARDINAL ) ;<br />

// i označava redni broj filozofa<br />

BEGIN<br />

IF ( states [ i ] = hungry ) AND // ako je naš filozof gladan,<br />

( states [ left ( i ) ] eating ) AND // a ni levi filozof,<br />

(states[ right ( i ) ] eating) // ni desni filozof ne jede,<br />

THEN<br />

states[i] := eating ; // naš filozof može slobodno jesti<br />

END<br />

END Test ;<br />

Up ( s [ i ] )<br />

BEGIN<br />

Init ( mutex,0 );<br />

Init ( s[1],1 ); states[1]:=thinking;<br />

...<br />

Init ( s[n],1 ); states[n]:=thinking;<br />

PARBEGIN ;<br />

Philosopher ( 1 ) ;<br />

...<br />

Philosopher ( n ) ;<br />

PAREND<br />

END Philosophers.<br />

// pa ga treba probuditi<br />

Analiza: Posmatrajmo rad programa. Neka neki filozof (A) postane gladan, tada pogleda levog i<br />

desnog suseda, ako ni jedan od njih ne jede, to znač i da je i leva i desna viljuška slobodna, pa može da<br />

jede (to se odvija u proceduri Test) i pošalje signal na svoj semafor, da ne bi zaspao pri izlasku iz<br />

procedure TakeForks. Ako bar jedan od suseda jede, ne može uzeti obe viljuške, pa ne može ni jesti, zato<br />

ć e č ekati na svom semaforu – to obezbeđuje Down operacija na kraju procedure TakeForks.<br />

Pretpostavimo sada da je ovaj naš filozof (A) uspeo da uzme obe viljuške i poč eo da jede. Neka sada<br />

ogladi filozof (B) pored njega. Taj isto javi da je gladan i ode da testira susede. Vidi da filozof (A) pored<br />

njega jede, pa ne može uzeti viljušku (filozofi su vrlo miroljubivi, pa neć e silom oduzeti viljušku od<br />

suseda) zato ć e da zaspi na svom semaforu. Nakon izvesnog vremena filozof A prestaje da jede, i kaže<br />

ostalima: idem ja da razmišljam. Ali pre nego što izađe iz procedure PutForks, javi susedima da mu<br />

viljuške više nisu potrebne, tako što ć e pozvati Test i za levog i za desnog suseda. Kada pozove Test za<br />

filozofa B (koji gladan č eka na svom semaforu), uz pretpostavku da ni drugi sused od B ne jede, B ć e<br />

poč eti da jede (state[B]:=eating) i dobija signal na svom semaforu da može izać i iz procedure<br />

TakeForks i nastaviti svoj rad.<br />

Problem jedućih filozofa je koristan za modeliranje procesa koji se takmiče za ekskluzivan<br />

pristup nekim resursima (tj. datim resursima istovremeno može pristupiti samo jedan proces).<br />

45

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!