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.

Rešenje je sledeć e: svakoj uslovnoj promenljivoj pridružujemo po jedan semafor koji se<br />

inicijalizuje na nulu.<br />

U treć em sluč aju, jednostavno treba pozvati proceduru LeaveNormally, koja ć e probuditi jednog<br />

procesa koji č eka na ulazak u k.o, ako takav proces postoji (i ostavić e mutex odgovarajuć eg monitora na<br />

nuli), a ako takav proces ne postoji poveć ava vrednost mutexa (pošto je mutex binarni semafor, bić e<br />

mutex=1), što ć e znač iti da nema nikoga unutar k.o.<br />

PROCEDURE LeaveNormally ( mutex ) ;<br />

BEGIN<br />

Up ( mutex )<br />

END LeaveNormally;<br />

U sluč aju poziva naredbe Wait (c), treba pozvati sledeć u proceduru:<br />

PROCEDURE Wait ( mutex,c ) ;<br />

BEGIN<br />

Up ( mutex ) ;<br />

Down ( c )<br />

END Wait;<br />

Naredba Up ( mutex ) radi sledeć e: ako postoji neki proces koji spava na mutexu, bić e<br />

probuđen, ako ne, mutex postaje 1, što označ ava da se ni jedan proces ne nalazi “ unutar” odgovarajuć eg<br />

monitora. Naredbom Down ( c ) dobijamo da se proces blokira na semaforu c.<br />

U sluč aju da se procedura završava naredbom Signal (c), potrebno je pozvati sledeć u proceduru:<br />

PROCEDURE LeaveWithSignal ( c ) ;<br />

BEGIN<br />

Up ( c )<br />

END LeaveWithSignal ;<br />

Ova procedura probuđuje procesa koji č eka na signal c. Pažnja!! Ovde se pretpostavlja sledeće:<br />

iz procedure monitora izlazimo sa operacijom Signal (c), samo ako je to potrebno, tj. samo ako smo<br />

sigurni da postoji neki proces koji čeka na taj signal. U tom sluć aju, ne treba nam Up ( mutex ), tj, ne<br />

treba javiti da nema nikoga unutar kritič ne oblasti, jer je to netač no: kako neko č eka na signal c, to znač i<br />

da je pozvao proceduru Wait ( mutex,c ) unutar kritič ne oblasti i taj proces ć e nastaviti svoj rad unutar<br />

k.o., pa mora ostati mutex=0.<br />

Implementacija semafora pomoću monitora<br />

Sada ć emo pretpostaviti da operativni sistem podržava monitore i uslovne promenljive za<br />

sinhronizaciju lakih procesa, pa ć emo na osnovu njih implementirati semafore. Ideja je sledeć a: za svaki<br />

semafor treba nam po jedan brojač buđenja i jedna uslovna promenljiva. Rešenje je dat u obliku pseudokoda<br />

koji se oslanja na karakteristike programskog jezika Modula-2:<br />

41

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

Saved successfully!

Ooh no, something went wrong!