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.
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