Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » scoala » informatica
Procese distribuite. Rendez-vous asimetric.

Procese distribuite. Rendez-vous asimetric.


Procese distribuite. Rendez-vous asimetric.

Comunicarea si sincronizarea intre programele concurente, in acest caz, se realizeaza similar cu apelarea prin nume de catre procesul emitator a unei proceduri incluse in procesul receptor, lista de parametri asociati acestui apel fiind folosita ca un canal de comunicare pentru transmiterea de date intre cele doua procese. Deci, doar programul apelant trebuie sa cunoasca numele programului apelat, nu si invers.

Pentru a putea provoca sincronizarea prin rendez-vous a celor doua programe, in programul apelat vor trebui inserate comenzi de acceptare , care vor avea forma unor proceduri de intrare apelabile de catre programele apelante.

Exemplul anterior de rendez-vous simetric poate fi scris, in cazul variantei de rendez-vous asimetric, astfel :

task B;



var y:date;

begin

accept send(in item:date);

y:=item

end;

end;

task A;

var x:date;

begin

B.send(x);

end;

In cadrul procesului emitent A, data x este transmisa procesului B prin executarea unui apel de procedura. In cadrul procesului receptor B, va trebui sa se execute instructiunea corespunzatoare de acceptare, pentru a realiza sincronizarea proceselor si apoi transmiterea de date dinspre procesul A spre procesul B. Aceasta transmitere a datelor are loc conform tehnicii uzuale folosite la apelarea de proceduri, adica valorile parametrilor furnizati la apel sunt preluati de parametrii formali specificati de instructiunea de acceptare. Dupa efectuarea transferului de informatii, cele doua procese vor ramane ina blocate in rendez-vous pana cand se executa instructiunile din blocul comenzii de acceptare (y:=item). Dupa terminarea executiei comenzii de accptare, ambele procese isi vor relua executia independenta.

Metoda de rendez-vous asimetric prezentata mai sus (adoptata si de catre lb.prog.ADA), introduce doua concepte noi. In primul rand, transferul de date este specificat prin parametri de apel de procedura. Se pot specifica oricati parametri ce pot fi de intrare, iesire sau de intrare/iesire, deci, printr-o singura actiune de sincronizare se poate realiza un transfer bidirectional de date. In al doilea rand, comanda de acceptare dispune de un bloc de instructiuni ce sunt efectiv executate ca o sectiune critica.

Totusi, aceste forme de rendez-vous nu sunt suficient de adecvate pentru programarea aplicatiilor reale. Sincronizarea mult prea stransa a proceselor impiedica orice operare asincrona a programelor si astfel inhiba avantajele potentiale ale unui paralelism dezvoltat. Acest neajuns se poate elimina, fara a compromite ideea de rendez-vous, prin introducerea posibilitatii de selectare nedeterminista a comenzilor de acceptare.

Pentru a exemplifica acest mecanism, consideram o variabila comuna var_com care trebuie sa fie accesibila oricarui program apelant atat pentru citire cat si pentru scriere, fiecare acces individual efectuandu-se in conditii de excludere reciproca. Una din solutii este de a plasa aceasta variabila intr-un program a carui functie unica este de a proteja corespunzator aceasta variabila :

task potectie_variabila;

var var_com:data;

begin

do

select

accept citeste(out x:data);

x:=var_com;

end

or

accept scrie(in x:data);

var_com:=x;

end

end select

end do

end;

Acest program va accepta apelurile de citire sau de scriere a variabilei comune, in orice ordine a acestor operatii. Functionarea este determinata de comanda select care a fost introdusa pentru a permite o selectare nedeterminista a comenzilor de acceptare.

Exista patru situatii :

o comanda de citire este deja in asteptare;

o comanda de scriere este deja in asteptare;

exsita in asteptare atat comenzi pentru citire cat si pentru scriere;

nu exista in asteptare nici o comanda de scriere sau citire.

In cazurile 1) si 2), comanda de acceptare corespunzatoare este imediat executata. In cazul 3), una din cele doua comenzi de acceptare, aleasa la intamplare, va fi executata imediat. In cazul 4), programul este suspendat pana ce va apare un apel de citire sau scriere.

In exemplul de mai sus se ilustreaza cazul in care executarea unei comenzi de acceptare depinde doar de existenta, in momentul respectiv, a unui apel la rendez-vous. In unele situatii este necesara verificarea si a altor conditii. Pentru aceasta, se admite ca o comanda de acceptare inclusa intr-o comanda de selectie sa fie precedata de o garda. Garda este o expresie booleana astfel incat o garda deschisa corespunde valorii "adevarat", iar o garda inchisa corespunde valorii "fals". La intalnirea unei comenzi de selectare, se evalueaza toate garzile si doar comenzile de acceptare precedate de carzi deschise sunt candidate pentru a fi selectate.

Exemplu : problema producatorului si consumatorului folosind metoda rendez-vous si comenzi garda pentru transmitere si receptie.

task intercomunicare;

var t:tampon;

begin

initializare t;

do

select

not plin

accept transmitere(in x:date);

scrie(x)

end

or

not gol

accept receptie(out x:date);

citeste(x)

end

end select

end do

end;

In mod normal, zona tampon este partial plina cu date, astfel incat ambele garzi sunt deschise, iar procesul va alege una dintre ele. Daca, insa, zona tampon este goala, garda comenzii de acceptare a receptiei este inchisa, iar procesul va astepta pana ce se va emite de catre un proces partener o apelare a procedurii de transmitere, chiar daca un apel al procedurii de receptie este in asteptare. Evident, daca ambele garzi sunt simultan inchise, procesul este pus in asteptare la infinit, situatie de blocare (deadlock), ce trebuie evitata printr-o programare adecvata.

Metoda de rendez-vous asimetric extins descrisa mai sus prezinta doua concepte de baza importante. In primul rand, interactiunea intre procese este total sincrona si este initiata intre un proces care emite un apel catre o comanda de acceptare si un alt proces ce executa comanda de acceptare. In al doilea rand, executia nedeterminista a comenzilor de acceptare (este esentiala si) poate fi implementata printr-o comanda de selectare. Dupa necesitati, se pot introduce conditii suplimentare de executie a comenzii de selectare, folosind blocurile de garda.

Metoda rendez-vous este aplicabila si pentru cazul sistemelor distribuite multiprocesor sau a sistemelor multiprocesor cu memorie comuna. Singurul dezavantaj mai important este ca solutiile de implementare ce folosesc aceasta metoda au tendinta de a conduce la existenta mai multor procese in comparatie cu solutiile de implementare ce folosesc celelalte metode (semafoare, monitoare). Aceasta poate conduce la o oarecare diminuare a performantelor de ansamblu, datorita necesitatilor de gestiune a unui numar mare de procese concurente.

Metoda rendez-vous ofera un mecanism flexibil ce poate fi utilizat in egala masura pentru sincronizarea programelor concurente (comenzi de acceptare neparametrizate), transmiterea de mesaje intre programele concurente (task-ul intercomunicare) si pentru controlul resurselor comune, partajate (task-ul protectie_variabila).





Politica de confidentialitate


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