Sunteți pe pagina 1din 21

2.3.

Mecanisme de control a concurenei, comunicare i sincronizare


n practic, aplicaiile concurente, att la nivel de sistem de operare, ct
i la nivel de program s-au proiectat i implementat folosindu-se diverse
mecanisme de control al concurenei.
Se vor defini, la nivel conceptual, cteva astfel de mecanisme i se vor
analiza relaiile dintre aceste mecanisme.
2.3.1. Semafoare
Conceptul de semafor a fost introdus de Dijkstra, pentru a facilita
sincronizarea proceselor, prin protejarea seciunilor critice i
asigurarea accesului exclusiv la resursele pe care procesele le
acceseaz.
Seciunile critice sunt secvene de instruciuni care pot genera race
condition i a cror execuie de ctre mai multe procese trebuie controlat.
Formal, un semafor se poate defini ca o pereche (v(s),c(s)) unde:
-v(s) este valorea semaforului- un nr. ntreg a crui valoare poate varia pe
durata execuiei diferitelor procese. Iniializabil cu 1 sau 0 (TRUE sau
FAlSE);
-c(s) o coad de ateptare la semafor - conine referine la procesele care
ateapt la semaforul s. Iniial coada este vid, iar disciplina cozii depinde
de sistemul de operare (LIFO, FIFO, prioriti, etc.).
Fiecrei seciuni critice trebuie s i se aloce un semafor.

Semafoare
Gestiunea semafoarelor: prin 2 operaii indivizibile
P(s) este apelat de ctre procese care doresc s acceseze o regiune
critic pt a obine acces.
Efect: - dac v(s) este 1(TRUE), execuia lui P(s) are ca efect accesul
procesului apelant la seciunea critic i trecerea semaforului pe zero.
- dac v(s) este 0 (False), procesul ce dorete execuia lui P(s)
ateapt
V(s)
Efect : modificarea valorii semaforului i trecerea sa din 0 (FALSE) n 1
(TRUE). Ac funcie se apeleaz la sfritul seciunii critice i semnific
eliberarea acesteia pt. alte procese.
IMPLEMENTAREA SEMAFOARELOR: El. Hardware ale CPU
El. A sist. de operare
Succesiune instruc.:
P(s)
regiune critic
V(s)
Rest. procesului

Operaiile P i V pot fi exprimate n pseudo cod

Operaiile P i V pot fi exprimate n pseudo cod


Dac procesul execut regiunea critic nseamn c la intrarea sa n proces avem:
v(s)=0 sau mai mare.

n UNIX
- Noiunea de semafor a fost generalizat prin posibilitatea de a executa
mai multe operaii asupra unui semafor inclusiv incrementare decrementare
cu valori diferite de 1.
-Se lucreaza cu multimi de semafoare care sunt descrise de structuri de
date ce contin o alta structura reprezentind permisiunile proceselor la
semafoare, un pointer la primul semafor din set, momentul de timp la care a
avut loc ultima operatie asupra setului de semafoare.
- Accesul unui proces la un set de semafoare este controlat; doar procesele
cu anumite caracteristici fiind capabile sa modifice semafoarele.

Semaforul este un instrument fundamental al concurenei


n UNIX noiunea de semafor a fost generalizat prin posibilitatea de a
executa mai multe operaii asupra unui semafor inclusiv incrementare
decrementare cu valori diferite de 1.
Notatie adoptata pentru definirea si atribuirea valorii initiale a unui semafor:

primete valoarea iniial v0(s)=x

2.3.2. Variabile mutex


Variabila mutex (mutual exclusion):
- un instrument util pentru protejarea unor resurse partajate, accesate
concurent de mai multe thread-uri.
- sunt folosite, de asemenea, pentru implementarea seciunilor critice i a
monitoarelor (notiuni pe care le vom defini n seciunile imediat urmtoare).
- are dou stri posibile: blocat (este proprietatea unui thread) sau
neblocat (nu este proprietatea nici unui thread)

Un task care vrea s

obin o variabil mutex blocat de alt task, trebuie s atepte pn cnd


primul o elibereaz.
Operaiile posibile asupra variabilelor mutex:
- iniializarea (static sau dinamic);
- blocarea (pentru obinerea accesului la resursa protejat);
- deblocarea (pentru eliberarea resursei protejate);
- distrugerea variabilei mutex.

Variabile mutex

Din punct de vedere conceptual, o variabil mutex este echivalent cu un


semafor s, care poate lua dou valori: 1 pentru starea neblocat i 0 pentru
starea blocat. (Un astfel de semafor se va numi semafor binar).
Operaiile asupra unei variabile mutex m se definesc, cu ajutorul
semafoarelor, astfel:
Iniializare: se definete un semafor m astfel nct v0(m) = 1.
Blocare: (dup o eventual deblocare de ctre alt thread): P(m).
Deblocare: V(m).
Distrugere: distrugerea semaforului m.

2.3.3. Variabile condiionale


Definiie, caracteristici
- Sunt obiecte de sincronizare i comunicare ntre task-urile care
ateapt satisfacerea unei condiii i task-ul care o realizeaz.
- Au asociate: un predicat d condiia ce trebuie s se realizeze i
care de obicei implic date partajate;
o variabil mutex - asigur faptul c verificarea condiiei i
intrarea n ateptare, sau verificarea condiiei i semnalarea ndeplinirii ei s fie executate ca i operaii atomice.
Operaiile posibile asupra variabilelor condiionale sunt:
Iniializare: care poate fi static sau dinamic;
Ateptare (wait): threadul este pus n ateptare pn cnd i se va
semnala din exterior ndeplinirea condiiei;
Semnalare (notify, broadcast, notifyall): threadul curent anun unul dintre
thread-urile ce ateapt ndeplinirea condiiei, sau toate thread-urile ce
ateapt ndeplinirea condiiei;
Distrugere;

2.3.4. Conceptul de monitor

Un monitor este o construcie similar cu un tip de date abstract. Scopul


su principal este de a ncapsula variabilele partajate i operaiile asupra
acestora. Astfel, toate seciunile critice sunt concentrate n aceast structur la care, la un moment dat, are acces unul singur dintre task-uri.
Seciunile critice sunt extrase din task-urile obinuite i devin
proceduri sau funcii ale monitorului.

In modelul lui Hoare (1974), un monitor poate fi descris ca un obiect care


conine:
1. datele partajate;
2. procedurile care acceseaz aceste date;
3. o metod de iniializare a monitorului;

Conceptul de monitor
OBS
- Fiecare grup de proceduri este controlat de un monitor;
- n momentul rulrii programului multi-thread, monitorul permite unui singur
thread s execute o procedur controlat de el. In aceast situaie, vom
spune c threadul a ocupat monitorul;
- Dac alte thread-uri invoc monitorul n timp ce acesta este ocupat, ele
sunt suspendate pn cnd procedura monitor apelat de thread-ul
respectiv i ncheie activitatea, ceea ce coincide cu eliberarea monitorului
de ctre thread.

Conceptul de monitor
Implementri ale conceptului de monitor
Pascal Concurent
Mesa
Java - o variant de monitor cu ajutorul modificatorului synchronised.
Monitorul este un concept mai uor de manevrat dect semaforul.
Din punct de vedere conceptual, un monitor poate fi descris simplu folosind
un singur semafor binar, cu valoarea iniial 1. Fiecare procedur a
monitorului ncepe cu P(s) i se ncheie cu V(s):

2.3.5. Seciune i resurs critic; excludere mutual

Prin excludere mutual a dou procese se exprim faptul c n fiecare


moment numai unul dintre procese poate s fie activ.
Prin resurs critic este indicat o resurs care poate fi ocupat i folosit
la un moment dat numai de ctre un singur proces.
Prin seciune critic se indic o poriune de cod care nu poate fi executat
la un moment dat dect de un singur task i care seciune, odat iniiat,
execuia ei trebuie s fie terminat fr a fi ntrerupt de un alt task.
OBS
- Seciunile critice trebuie s fie, de regul, ct mai scurte posibil
deoarece toate celelalte task-uri sunt ntrziate pn la terminarea
execuiei unei asemenea seciuni critice.
-Problema seciunii critice prezint un interes deosebit, att din punct
de vedere teoretic, ct i din punct de vedere practic. Majoritatea
"subtilitilor" programrii concurente se leag, ntr-un fel sau altul de
ea.

Seciune i resurs critic; excludere mutual


O seciune critic bine definit trebuie s ndeplineasc urmtoarele
condiii:
1.
2.
3.
4.

la un moment dat, numai un singur proces este n seciunea critic; orice


alt proces solicit accesul la ea, l va primi numai dup ce procesul
ocupant a terminat de executat instruciunile seciunii critice;
vitezele relative ale proceselor care acceseaz seciunea critic sunt
necunoscute;
oprirea oricrui proces trebuie s aib loc numai n afara seciunii critice;
nici un proces nu va atepta indefinit pentru a intra n seciunea critic.
Exist diverse modele de implementare a seciunii critice. Implicit, toate
acestea rezolv excluderea mutual i resursele critice.
O seciune critic trebuie implementat, la fel ca i la monitor, folosind un
semafor binar s, cu valoarea iniial 1.

2.3.6. Regiuni critice condiionale


Prin regiune critic condiional se nelege o seciune critic plus o
resurs critic plus verificarea unei condiii nainte de execuia efectiv.

Fiecrei regiuni critice i se asociaz o resurs constnd din toate variabilele care
trebuie protejate n regiune. Declararea ei se face astfel:

unde r este numele resursei, iar v1 , ..., vn sunt numele variabilelor de


protejat.
O regiune critic condiional se specific astfel:

- unde r este numele unei resurse declarate ca mai sus, B este o expresie
boolean, iar S este secvena de instruciuni corespunztoare regiunii critice.
- dac este prezent opiunea when, atunci S este executat numai dac B
este adevrat.

Descrierea prin semafoare a unei regiuni critice condiionale este dat


n figura 2.10. Pentru descriere sunt necesare dou semafoare i un numr
ntreg

Semaforul sir reine in coada lui toate procesele care solicit acces la regiune.
Semaforul exclus asigur accesul exclusiv la anumite seciuni ale implementrii.
Intregul nr reine cte procese au cerut acces la regiune, la un moment dat.

2.3.7. Conceptul de ntlnire (rendez-vous)


Conceptul de ntlnire (rendez-vous) este introdus de limbajul Ada pentru a facilita
comunicarea ntre dou task-uri.
a) Procesul B este gata s transmit informaiile, dar procesul A nu le-a cerut nc. In
acest caz, procesul B rmne n ateptare pn cnd procesul A i le cere.
b) Procesul B este gata s transmit informaiile cerute, iar procesul A cere aceste
date. In acest caz, se realizeaz un rendez-vous, cele dou procese lucreaz sincron
pn cnd i termin schimbul, dup care fiecare i continu activitatea independent.
c) Procesul A a lansat o cerere, dar procesul B nu este n msur s-i furnizeze
informaiile solicitate. In acest caz, A rmne n ateptare pn la ntlnirea cu B.

Mecanismul se poate descrie folosind un semafor, s. Procesul A execut o operaie


P(s) nainte de punctul de ntlnire, iar procesul B execut o operaie V(s) nainte de
punctul de ntlnire.

2.4 Implementri ale mecanismului de excludere reciproc


Modalitile practice de implementare a mecanismului de excludere
reciproc opereaz prin:
inhibarea ntreruperilor,
excluderea reciproc prin programare,
instruciunea de interschimbare,
semafoare binare,
regiuni critice simple,
monitoare.
2.4.1 Inhibarea ntreruperilor
Este o soluie hardware. Cnd un program ajunge ntr-o seciune definit
critic, se genereaz o ntrerupere care, prin hardware, inhib celelalte
ntreruperi (prin mascare), pe durata execuiei seciunii critice.
Este o metod simpl i eficient, ns presupune o inhibare neselectiv a
tuturor ntreruperilor ce poate duce la ntrzieri semnificative n executarea
celorlalte task-urilor.

2.4.2 Excluderea reciproc prin programare


Este o metod software bazat pe ipoteza c accesele individuale la locaiile de
memorie sunt indivizibile.
Soluii de implementare software a excluderii reciproce ntre dou task-uri ciclice,
fiecare avnd cte o seciune critic:
1 - prin utilizarea unei variabile comune speciale pentru protejarea seciunilor critice,
variabil denumit poart, care poate avea dou stri (valori) deschis i,
respectiv, nchis. Dac valoarea variabilei este nchis nseamn c unul dintre
task-uri se gsete n seciunea ei critic;
-deschis - nseamn c task-ul poate executa seciunea sa critic;
-simultan deschis ambele task-uri iniiaz execuia seciunii critice proprii.
OBS: nu garanteaz excluderea reciproc corect ntre dou task-uri concurente.
2 - prin utilizarea unei variabile comune speciale pentru a dirija cele dou task-uri
concurente n momentul n care ele ncearc s execute seciunile lor critice. Astfel, o
variabil ntreag, numit comutator,
valoarea 1 = task-ul 1 poate executa seciunea sa critic
valoarea 2 = task-ul 2 poate executa seciunea sa critic
se garanteaz excluderea reciproc a celor dou task-uri concurente
OBS: impune o execuie alternant obligatorie a seciunilor critice ale celor dou task-uri
(tot timpul n ordinea 1,2,1,2,...).

Excluderea reciproc prin programare


3 - Prevederea pentru fiecare task n parte a unei variabile proprii locale care poate
avea doar valorile interior i respectiv exterior.
-interior = task-ul respectiv dorete s execute seciunea sa critic;
-exterior = task-ul respectiv este n afara seciunii sale critice;
- fiecare dintre task-urile concurente poate examina valoarea variabilei corespunztoare task-ului concurent nainte de a trece la execuia seciunii critice.
-nu exist nici o variabil manipulat n comun;
OBS - asignarea simultan a valorii interior variabilelor proprii = bucl infinit
4 - task-ul care detecteaz faptul c ambele task-uri concurente ncearc s treac la
execuia seciunilor critice proprii, va modifica valoarea variabilei locale de control
= atunci bucla infinit va fi evitat.
OBS Situaie critic dac cele dou task-uri deruleaz exact n acelai ritm ( doi
abonai telefonici se apeleaz reciproc n acelai moment de timp).

Excluderea reciproc prin programare


5

- Combinarea ultimelor dou propuneri.


Variabil proprie, care indic dorina de a trece la execuia seciunii critice
iar n cazul n care ambele task-uri doresc simultan acest lucru.
Se utilizeaz o variabil ntreag auxiliar pentru rezolvarea acestui
conflict.
Fiecare task acioneaz doar asupra variabilei celuilalt task concurent
doar dac variabila proprie are valoarea interior.
El va trece la executarea seciunii critice proprii numai dac task-ul
concurent este n afara seciunii sale critice.
Variabila ntreag comutator este folosit pentru a rezolva conflictele ntre
task-urile concurente permind task-ului, al crui numr este n acel
moment atribuit ca valoarea variabilei comutator, s intre n execuia
seciunii sale critice.
La ieirea din seciunea critic, task-ul va modifica valoarea variabilei
comutator i cellalt task va putea, astfel, s treac la execuia seciunii
sale critice.

Excluderea reciproc prin programare

Condiii generale pentru realizarea corect a excluderii reciproce a


task-urilor concurente:
La un moment dat, cel mult un singur task se poate gsi n
seciunea sa critic;
Oprirea unui task n afara seciunii sale critice nu trebuie s
afecteze celelalte task-uri;
Nu se poate face nici o ipotez asupra vitezei relative de
desfurare a task-urilor;
Task-urile ce sunt pe cale de a trece la execuia seciunilor lor
critice, nu trebuie s se blocheze reciproc la infinit.

2.4.3 Instruciunea de interschimbare

Metodele anterioare de rezolvare prin software a problemei excluderii


reciproce, presupun doar indivizibilitatea acceselor singulare la locaiile
de memorie.
????? S-ar putea executa 2 operatii anumite (interschimbarea
continutului unei locatii de memorie cu cel al unui registru local) fara a
fi intrerupte

2.4.3 Instruciunea de interschimbare


Soluia: Variabila global excludere este iniializat cu o valoare
egal cu unitatea.
nainte de a se executa seciunea critic, task-ul trebuie s obin
valoarea unitii memorate de variabila excludere i s stabileasc
valoarea zero acestei variabile, ambele aciuni printr-o singur
operaie indivizibil.
La sfritul aciunii critice, task-ul va returna valoarea unitate
variabilei excludere.
Deoarece exist o singur valoare unitate n sistem, cel mult un singur
task l poate obine.
Dac un task nu este capabil s treac la execuia seciunii sale
critice, el va trebui s stea ntr-o bucl de ateptare (n mod continuu).
Cnd valoarea unitate a variabilei excludere este eliberat, una singur
dintre buclele de ateptare va putea s o foloseasc.
OBS Metoda este acceptabil dac exist o solicitare moderat a
resurselor i dac seciunile critice sunt scurte.

2.4.4 Semafoare binare


Caracteristic comun a metodelor anterioare:
- Dc un task dorete s execute o seciune a sa critic i nu i se permite
acest lucru, atunci el pierde dreptul de a utiliza CPU.
- Este preferabil ca un asemenea task s fie trecut n starea de blocat
urmnd s fie adus n starea gata de execuie n momentul n care este
posibil s treac la execuia seciunii sale critice.

Semafoare binare (booleene sau variabile mutex)

2.4.4 Semafoare binare


OPERARE:

1. Fiecrei seciuni critice i se asociaz un semafor (iniial avnd valoarea


1) iar task-ul care dorete s execute seciunea sa critic, va efectua o
operaie P; task-ului i se va permite execuia seciunii sale critice numai
dac valoarea actualizat (decrementat) a semaforului are valoarea zero.
n caz contrar, task-ul este trecut n starea blocat.
2. La ieirea din seciunea critic, task-ul va efectua o operaie de tip V
care va provoca incrementarea cu 1 a valorii variabilei semafor; dac exist
alte task-uri blocate, unul dintre aceste task-uri va putea trece la executarea
seciunii sale critice. Deci, un task va rmne blocat pn cnd un alt
task i va indica posibilitatea s continue.

Semafoare binare

Operaiile P i V sunt indivizibile i un singur task poate executa la un


moment dat una dintre ele asupra aceluiai semafor.
Operaiile P i V asupra semafoarelor se pot implementa i prin
hardware dar, de regul, ele sunt implementate prin software, fiind
protejate prin inhibarea ntreruperilor.
Pentru a evita ateptarea, prin buclare, se folosete de regul un ir de
ateptare n care se insereaz i se extrag task-urile ce se executau n
momentul inhibrii ntreruperilor.
Dezavantajul major al utilizrii semafoarelor este legat de necesitatea
unei programri foarte atente; dac, de exemplu, din neatenie se scrie o
operaie primitiv P n loc de V, atunci task-urile se vor bloca reciproc la
infinit.

2.4.5 Regiuni critice simple


Pentru a uura programarea corect a semafoarelor este posibil s se
utilizeze i o construcie de limbaj specific limbajelor de programare de
nivel nalt, cum este, de exemplu, regiunea critic simpl propus de
Hoare:

Permite ca instruciunile critice S s opereze asupra variabilei comune R.


Compilatorul respectiv va traduce aceast construcie n instruciuni de
program.
Aceast construcie evit necesitatea de a ncadra cu operaii P() i V()
toate seciunile critice i elimin necesitatea verificrii lor de la nceputul
i sfritul seciunilor critice.
Compilatorului verific totodat faptul c variabilele comune sunt utilizate doar n interiorul regiunii critice, actualizarea valorilor variabilelor comune fiind astfel protejat.

2.4.6 Monitoare
Dac un task dorete s execute seciunea sa critic va face apel la procedura corespunztoare a monitorului;
Condiii de lucru:
- unul singur dintre task-uri se admite la un moment dat s se bucure de
serviciile monitorului;
- toate celelalte apeluri la monitor atepapt eliberarea monitorului;
- ntr-un monitor asupra variabilelor partajate nu se pot executa dect
operaii "cunoscute" (declarate o dat cu definirea monitorului) pentru
care se asigur n mod automat condiiile de excludere mutual;
- nu exist posibilitatea accesului din exterior la datele locale monitorului
dect prin intermediul operaiilor;
- din acest motiv nu pot s apar erori de sincronizare;

Monitoare
n programarea cu monitoare se consider c un program conine dou
tipuri de module:
- procese active
- procese pasive.
Toate variabilele partajate sunt variabile locale monitoarelor.
Interaciunea dintre procese are loc numai prin intermediul monitoarelor.
Un monitor opereaz asupra a trei tipuri de variabile:
- variabile permanente - sunt de fapt variabilele partajate. Aceste
variabile i pstreaz valoarea ntre apelurile operaiilor asigurate de
monitor. Iniializarea acestor variabile se face la crearea monitorului.
- variabile locale - sunt variabile utilizate pentru realizarea operaiilor.
Au acelai tip de proprieti ca al variabilelor locale n proceduri.
- parametrii de apel - sunt parametrii operaiilor realizate de ctre monitor.

Monitoare
Trecerea unui proces printr-un monitor trebuie s dureze ct mai puin.
Ce se ntmpla ns dac un proces care ncepe execuia unei operaii
dintr-un monitor descoper c trebuie s se blocheze n ateptarea
unui eveniment extern ?
Abordri posibile
-Se poate interzice apariia unor astfel de situaii;
-Dac un proces se blocheaz (este n ateptarea unui eveniment) n timp
ce se afl n execuia unei operaii dintr-un monitor atunci un alt proces poate s fie lsat sa utilizeze monitorul.
Implicaii: s existe o "eviden" a proceselor care ateapt apariia
unui eveniment.
Pentru a asigura semnalizarea blocrii n ateptarea unui eveniment se
utilizeaz variabile condiie.

Monitoare-variabile condiie
Variabila condiie=variabil partajat, asupra creia se pot executa dou
tipuri de operaii primitive (atomice):
- wait (delay) : produce blocarea procesului care o invoc;
- signal (resume): anun posibilitatea deblocrii unuia dintre procesele
care a executat operaia wait pentru variabila respectiv;
OBS!!!- Atunci cnd un proces este blocat ca urmare a execuiei unei
operaii wait n corpul unei operaii dintr-un monitor, alte procese pot
s utilizeze monitorul.

-Operaiile wait i signal par s "semene" cu operaiile P i V.


- Deosebire important. Operaia signal nu are nici un efect dac nu
exista un proces care ateapt (ceea ce nu este cazul cu operaia V
care incrementeaz valoarea semaforului).
- Operaia wait blocheaz ntotdeauna procesul care o execut.

2.5 Sincronizarea explicit

Se consider situaiile n care task-urile concurente doresc s


coopereze ntre ele fiind astfel, ntr-un fel, interesate de
desfurarea celorlalte task-uri
Task-urile continu s se concureze pentru a obine dreptul de a intra n
execuia seciunii lor critice.
Odat obinut acest drept, aciunea task-ului n timpul execuiei seciunii
critice poate conduce la realizarea unei condiii care, anterior, determinase
suspendarea (sau ntrzierea) execuiei unui alt task.
REZULT:
-necesitatea existenei unei metode care s permit unui task s indice
(s semnaleze) c un anumit eveniment a avut loc sau s atepte pn
cnd are loc un anumit eveniment.
- asigurarea unor forme de cooperare ntre task-uri, spre avantajul lor reciproc; SINCRONIZARE. Dou programe se consider sincronizate nu
numai dac sunt lansate n execuie concomitent ci i dac se pot
stabili relaii reciproce temporale predictibile ntre anumite momente
ale desfurrii lor.

Sincronizarea explicit
Sensul general al sincronizrii este cel de coordonare n timp, de corelare,
presupunnd o relaie reciproc ntre task-uri, care au un caracter temporal i stabil.

Noiunea de sincronizare s-a extins i mai mult, incluznd i forma de


sincronizare cu timpul absolut sau cel real (nelegnd prin aceasta c
un anumit task este lansat n execuie n fiecare zi la o or fix sau ciclic, de
exemplu, din or n or).
Sincronizarea trebuie s permit activarea i respectiv, inhibarea desfurrii unor programe (task-uri) att prin cereri iniiate de alte task-uri ct i
prin comenzi ale utilizatorilor, introduse de la terminale.
Momentele de timp n care se iniiaz aceste aciuni sunt momentele
de sincronizare efectiv.
Rezult
Sunt necesare funcii referitoare la evenimente, n sensul general al
cuvntului, i anume ateptarea pn la producerea evenimentului
specificat i anunarea faptului c acesta s-a produs.
funcii mai complexe: ateptarea primului eveniment dintr-o mulime
precizat de evenimente; ateptarea i tratarea selectiv a mai multor
evenimente ntr-o ordine eventual diferit de cea a apariiei lor;

Sincronizarea explicit
Metodele i mecanismele folosite pentru realizarea sincronizrii programelor sau task-urilor concurente se deosebesc sub mai multe aspecte:
- natura sincronizrii: sincronizare ntre programe sau task-uri sau sincronizare cu timpul;
- momentul sincronizrii: cu nceputul unui program, cu sfritul unui
program sau cu unpunct (moment) oarecare din interiorul programului;
- implementarea sincronizrii: prin faciliti specifice ale limbajelor de programare (i ale compilatoarelor asociate), ale limbajului de comand sau
prin faciliti (servicii) asigurate de un monitor.

Principalele tehnici i metode de implementare a sincronizrii


dintre task-uri concurente sunt prin:
2.5.1 Semafoare generale
Un semafor general este o variabil ntreag, ce poate lua doar valori
pozitive i singurele operaii ce se pot efectua asupra lui sunt operaiile
primitive P i V.
Dac semaforul are valoarea zero, un program (task) ce ncearc s
efectueze o operaie P asupra acestuia va fi suspendat (blocat) i va
atepta pn cnd un alt program va efectua asupra aceluiai semafor o
operaie V.

Modul de utilizare a semafoarelor generale


Exemplu:mai multe programe sau task-uri denumite productoare, doresc
s comunice o serie de date altor programe sau task-uri concurente,
denumite i consumatoare sau receptoare.
Necesar:- o zon de memorie tampon, de capacitate evident limitat, n
care productorii vor depune datele lor i din care consumatorii le vor
extrage cnd acestea devin disponibile.
- programele trebuiesc evident sincronizate, astfel nct productorii s nu depun date noi n zona tampon cnd aceasta este plin, iar
consumatorii s nu extrag date din zona tampon cnd aceasta este goal.
Rezult: nterptrundere a mecanismelor de sincronizare cu cele de
comunicare inter-programe (inter-proces) concurente.
Sincronizarea necesar ntre programe se poate realiza n acest caz
folosind semafoare generale care s reflecte condiiile posibile de
ateptare (condiia de tampon plin respectiv tampon gol).
Pentru a evita suprascrierile sau sriturile peste anumite date din zona
tampon, aceste operaii trebuiesc efectuate prin excludere reciproc. n
acest scop, dup cum s-a vzut, se poate introduce i un semafor binar.

Exemplu
Dac se folosete, un semafor general Plin pentru a reprezenta numrul de locaii
ncrcate (pline) ale zonei tampon, atunci un consumator va trebui ntrziat dac Plin
= 0.
Dac un task productor va efectua o operaie V asupra semaforului Plin, dup ce a
plasat o informaie n zona tampon, un task-consumator va fi servit n urma
efecturii unei operaii P (va avea acces la tampon i va putea consuma informaia
anterior introdus).
n mod similar, un al doilea semafor general Gol, poate fi folosit pentru a ntrzia
dup necesiti task-urile productor.
Concluzii
n general, dac un task dorete s atepte pn ce se realizeaz o anumit condiie,
acestei condiii de ateptare i se asociaz un semafor i orice task ce ar putea
provoca realizarea condiiei trebuie s aib responsabilitatea efecturii unei operaii V
asupra acestui semafor.
Programatorul va trebui s introduc n fiecare task instruciuni de sincronizare cu
celelalte task-uri, ceea ce presupune o atenie special de lucru cu semafoarele
generale.
Dac mai multe task-uri consumator ateapt, ele vor trebui planificate ntr-un mod
neutru sau dup unele criterii de prioritate ale task-urilor consumator.

2.5.2 Regiuni critice condiionale


Este o structur de programare de forma :

unde B este o expresie boolean iar S este o seciune critic ce opereaz


asupra variabilei comune R.
Aceast construcie specific faptul c seciunea critic de program S
trebuie executat doar dac condiia B este respectat.
2.5.3 Variabile de condiie
- dat ce poate fi utilizat doar n cadrul unui monitor.
- sunt folosite pentru a identifica irul de task-uri n ateptare
ce sunt manipulate prin operaiile ateptare i semnalare.
Operaia ateptare dezactiveaz task-ul i l trece ntr-un ir de ateptare
asociat variabilei de condiie respective, anulnd excluderea reciproc care
ar fi interzis ca un alt task s obin serviciile monitorului.
Operaia semnalare va produce reactivarea primului task din irul de
ateptare, asociat variabilei de condiie respective.

Sincronizarea explicit

Task-ul care efectueaz o operaie semnalare i provoac reactivarea


unui alt task (trecut anterior n ateptare) va fi, la rndul su, suspendat
pn n momentul n care task-ul activat va iei din monitor sau va executa
o operaie ateptare.
OBS!!!

Prin detalierea specific a condiiilor n care task-urile pot trece n


ateptare i, respectiv, pot fi reactivate se poate realiza mai simplu
i mai explicit planificarea task-urilor dect n cazul regiunilor critice
condiionale (unde erau nevoie evaluri repetate ale condiiilor) i
fiecare ir de ateptare asociat variabilei de condiie este tratat
dup strategia primul - venit, primul - servit de fiecare dat cnd
se execut o operaie semnalare asupra variabilei de condiie
respective.

2.5.4. Sincronizare prin comunicare


Comunicarea i sincronizarea sunt n realitate doar faete ale aceluiai
fenomen
Programele comunic ntre ele nu numai pentru a-i comunica informaii
sub form de mesaje ci i pentru a se sincroniza.
REZULT
Un semnal de sincronizare poate fi considerat i el c este un mesaj fr
coninut ce se transmite ntre programe.
Cum se realizeaz acest lucru?
a)Procese secveniale comunicante. Rendez-vous simetric.
task-ul A: o comand de emitere mesaj SUSPENDARE task-ul B: o
comand de recepie de mesaj;
task-ul B: o comand de recepie de mesaj SUSPENDARE task-ul A:
o comand de emisie de mesaj;
task-uri sincronizate datele (mesajul) sunt transferate

b) Procese distribuite. Rendez-vous asimetric


Comunicarea i sincronizarea ntre programele concurente se realizeaz n
acest caz similar cu apelarea prin nume de ctre programul emitor a
unei proceduri incluse n programul receptor, lista cu parametrii asociai
acestui apel fiind folosit ca un canal de comunicare pentru transmiterea
de date ntre cele dou programe. Doar programul apelant trebuie s
cunoasc numele programului apelat, nu i invers.

Implementare
Pentru a putea provoca sincronizarea prin rendez-vous a celor dou
programe, n programul apelat vor trebui inserate comenzi de acceptare,
care vor avea forma unor proceduri de intrare apelabile de ctre
programele apelante (task-ul apelat este suspendat n aceste puncte de
program).
DEZAVANTAJE
Tipul de rendez-vous este unul asimetric.
Aceste forme de rendez-vous nu sunt suficient de adecvate pentru programarea aplicaiilor reale.
Sincronizarea mult prea strns a task-urilor mpiedic orice operare asincron a programelor i astfel inhib avantajele poteniale ale unui paralelism
dezvoltat.

Procese distribuite. Rendez-vous asimetric


Eliminarea dezavantajelor:
Introducerea posibilitii de selectare nedeterminist a comenzilor
de acceptare. Este vorba despre un mecanism pe baza cruia un
program receptor poate evita executarea unei comenzi de acceptare
i s fie suspendat. Dup necesiti, se pot introduce condiii
suplimentare de execuie a comenzii de selectare.
Dup cum vom constata, exist i mecanisme mixte, care au att
caracter sincron, ct i caracter asincron.

S-ar putea să vă placă și