Operativni Sistemi - Univerzitet u Novom Sadu
Operativni Sistemi - Univerzitet u Novom Sadu
Operativni Sistemi - Univerzitet u Novom Sadu
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