Creeaza.com - informatii profesionale despre


Cunostinta va deschide lumea intelepciunii - Referate profesionale unice
Acasa » scoala » informatica
Sincronizare cu monitoare

Sincronizare cu monitoare


Sincronizare cu monitoare

Un monitor este o colectie de structuri de date, variabile si proceduri, grupate impreuna intr-un modul sau pachet. Procesele pot apela procedurile dintr-un monitor ori de cate ori au nevoie, dar nu pot accesa direct structurile de date interne monitorului prin proceduri declarate in afara acestuia ( conceptul de incapsulare).

Monitoarele au o proprietate importanta care le fac utile pentru implementarea excluderii mutuale : in fiecare moment, un singur proces poate fi activ intr-un monitor.

Monitoarele sunt constructii de limbaj, deci compilatorul stie ca sunt speciale, tratand apelurile procedurilor monitorului diferit de apelurile obisnuite de proceduri. Astfel, cand un proces apeleaza o procedura a unui monitor, primele cateva instructiuni verifica daca mai este un alt proces activ in interiorul monitorului. Daca da, procesul curent este suspendat pana se elibereaza monitorul. Daca nu, procesul poate "intra" in monitor. Astfel, scriind (implementand) sectiunile critice in interiorul monitorului, suntem siguri ca nu vor fi doua procese care executa in acelasi timp sectiunile lor critice.

Excluderea mutuala nu este suficienta. Avem nevoie de un mecanism pentru blocarea proceselor atunci cand nu mai pot continua (asteapta eliberarea monitorului). Acest lucru se realizeaza prin introducerea variabilelor de conditie impreuna cu doua operatii ce se pot executa asupra lor : WAIT si SIGNAL. Cand procedura monitorului descopera ca nu mai poate continua, executa(??) un WAIT pe variabila de conditie. Aceasta determina blocarea procesului pana cand un alt proces executa SIGNAL pe aceeasi variabila de conditie. Dupa executarea lui SIGNAL, procesul trebuie sa iese imediat din monitor (deci SIGNAL trebuie sa apara la sfarsitul procedurii monitorului). Daca SIGNAL este executat pe o variabila de conditie pe care sunt blocate mai multe procese, planificatorul va alege doar unul din acestea pentru a-i continua executia.

Exemplu : Problema producatorului si consumatorului.

Se considera un tablou de N elemente si 2 procese: un proces producator care produce un element si incearca sa-l introduca in tablou si un proces consumator care incearca sa extraga un element din tablou cu scopul de a-l consuma. Procesul producator nu poate introduce elemente intr-un tablou plin, iar procesul consumator nu poate extrage elemente dintr-un tablou gol.

Implementarea cu monitoare :

monitor ProducerConsumer

condition full, empty;

integer count;

procedure enter;

begin

if count=N then wait(full);



enter_item;

count:=count+1;

if count=1 then signal(empty);

end;

procedure remover;

begin

if count=0 then wait(empty);

remove_item;

count:=count-1;

if count=N-1 then signal(full);

end;

count=0;

end monitor;

procedure producer;

begin

while true do begin

produce_item;

ProducerConsumer.enter;

end

end;

procedure consumer;

begin

while true do begin

ProducerConsumer.remove;

consume_item;

end

end;

Variabilele de conditii nu cunt contoare. Ele nu acumuleaza semnalele sosite (cum fac semafoarele). Astfel, daca se executa un SIGNAL pe o conditie pe care nimeni nu asteapta (n-a executat WAIT), semnalul este pierdut.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.