Documente Academic
Documente Profesional
Documente Cultură
n aceste sisteme multiprocesor, comunicarea ntre procesoare are loc fie prin zone de memorie comune (partajate), fie prin canale. Algoritmi de calcul paralel (care determin soluia unei probleme prin descompunerea ei n subprobleme independente, rezolvabile n paralel pe procesoare distincte); de exemplu este evident c suma a doi vectori, calculat prin:
for i:=1 to n do c[i]:=a[i]+b[i]
se efectueaz mai rapid dac avem la dispoziie n procesoare, fiecare capabil s efectueze o adunare.
anumit tip i le plaseaz pe o band. Consumatorul ia cte un obiect de pe band i l "consum". Se cere s se simuleze aceste activiti, evitndu-se ncercrile productorului de a plasa un articol pe band cnd aceasta este plin, precum i ncercrile consumatorului de a lua un obiect de pe band cnd aceasta este goal (dificultatea const deci n realizarea unei sincronizri).
este echivalent cu a doua instruciune. n programarea concurent secvena de mai sus nu are nimic redundant. ntr-adevr, n intervalul de timp dintre executarea celor dou instruciuni (n cadrul aceluiai proces) este posibil ca celelalte procese s execute diferite instruciuni care s foloseasc efectiv faptul c un anumit interval de timp (asupra lungimii cruia nu putem face nici o ipotez) valoarea lui i este egal cu 1.
if i=1 then j:=j+i
2) Efectul instruciunii:
n cazul n care valoarea lui i era 1 la nceputul executrii acestei instruciuni condiionale nu const neaprat n mrirea cu o unitate a valorii lui j, deoarece ntre momentul efecturii comparaiei i momentul efecturii atribuirii valoarea lui i poate fi eventual modificat de un alt proces. Analog, dac ntr-un proces apare secvena de instruciuni: i:=1; if i=1 then instr atunci pe de o parte nu este neaprat adevrat c este ndeplinit condiia i=1 din instruiunea if, iar pe de alt parte nu este neaprat adevrat c n momentul executrii instruciunii instr valoarea lui i este egal cu 1; n schimb afirmaia valoarea lui i a fost egal cu 1 la un moment de timp anterior" este adevrat i poate fi util (de exemplu n a demonstra c procesul are o anumit evoluie).
Este uor de observat c aceste comportri "anormale" din punctul de vedere al programrii secveniale i au cauza n utilizarea de ctre mai multe procese a unei arii (comune) de memorie. De aceea, aa cum vom vedea n capitolele urmtoare, multe abordri ale programrii concurente evit comunicarea ntre procese prin intermediul variabilelor globale, nlocuind-o cu alte mecanisme. Programarea concurent se mai deosebete de programarea secvenial i prin faptul c programele pot avea comportare nedeterminist: "la executri diferite pentru acelai set de date de intrare, rezultatele nu vor fi neaprat aceleai". Pentru executarea proceselor concurente s-a ales modelul aleator, care const n repetarea ciclic a urmtoarelor aciuni de ctre fiecare procesor fizic: 1) alege aleator unul dintre procesele concurente crora nu le este asociat un procesor fizic; 2) execut, pe parcursul unui interval de timp ales aleator, instruciuni ale sale.
elibereaz bilet
end else write('Alta optiune: ') until rez forever
Este uor de observat c aceast modalitate este incorect. Vom numi seciune critic o secven de instruciuni a cror executare trebuie s se supun urmtoarei reguli: n momentul n care un proces P ncepe executarea primei instruciuni din secven, toate celelalte procese i ntrerup temporar activitatea pn la terminarea executrii ultimei instruciuni din secven de ctre procesul P. n aceste condiii spunem c are loc o excludere reciproc (cel mult un proces se poate afla ntr-o seciune critic). S observm c dac n codul de mai sus ataat instruciunii if primele patru aciuni (linii de cod) ar forma o seciune critic, atunci modalitatea de rezervare de mai sus ar fi corect.
Problema grdinilor ornamentale. Intrarea n grdinile ornamentale ale unui ora oriental se face prin dou pori. Se pune problema inerii evidenei numrului de persoane care au intrat n grdin. Se introduce variabila global n, a crei valoare curent reprezint numrul persoanelor ce au intrat n grdini. Fiecrei pori i se asociaz n mod natural un proces, cele dou procese urmnd a fi executate concurent. n cadrul fiecrui proces valoarea variabilei n este mrit cu o unitate de fiecare dat cnd o persoan intr n grdini pe poarta asociat procesului. La fiecare executare a lui rezultatul va fi altul! Explicaia const n primul rnd n faptul c instruciunea n:=n+1 nu este nedivizibil (nu este o aciune "atomic"), iar n al doilea rnd n modul de executare al programelor concurente. ntr-adevr, instruciunea n:=n+1 este n realitate format din trei instruciuni n cod main:
LOAD n,r INC r STORE r,n
Fie r1 i r2 registrele unitii centrale folosite de cele dou procese. Atunci n cazul n care pe fiecare poart intr trei persoane, este posibil urmtoarea succesiune de aciuni: Pentru exemplificare, s considerm cazul a dou pori (procese) P1 i P2. Fie r1 i r2 registrele unitii centrale folosite de cele dou procese. Atunci n cazul n care pe fiecare poart intr trei persoane, este posibil (printre multe altele) urmtoarea succesiune de aciuni (urmtorul scenariu): Aciune
P1 ncarc P1 incrementeaz P2 ncarc P2 incrementeaz P2 salveaz P2 ncarc P2 incrementeaz P2 salveaz P1 salveaz 2 1 1 1 2 total 0 0 1 0 1 r1 r2
urmat de o succesiune analoag n care se interschimb P1 cu P2. Rezultatul final va fi 2, mai mic chiar dect numrul persoanelor ce intr prin fiecare poart! S observm c dac instruciunea n:=n+1 (mai corect spus cele trei instruciuni main n care se descompune) ar forma o seciune critic, programul ar fi corect.
Modelul aleator
Fiecare procesor: 1) alege aleator un proces "liber" 2) execut un interval de timp aleator instruciuni ale sale 3) goto 1)
Excludere reciproc
Forma fiecrui proces Pi :
repeat
ER (exclucere reciproc propriu-zis) cel mult un proces este n SC a sa CC (competiie constructiv) dac mai multe procese vor s intre in SC a lor, nu se mpiedic unul pe altul CL (conexiune liber) dac un proces "ntrzie" n SNC a sa, celelate nu sunt mpiedicate s intre de oricte ori n SC a lor ============ === ===== Varianta_1
process P1; repeat while ales=2 do; SC1 ales:=2; SNC1 until false end; ales:=1; { P1; P2 } process P2; repeat while ales=1 do; SC2 ales=1; SNC2 until false end;
Varianta_2
process P1; process P2;
6 1. INTRODUCERE N PROGRAMAREA CONCURENT repeat while ind2 do; ind1:=true; SC1 ind1:=false; SNC1 until false end; ind1:=false; ind2:=false; { P1; P2 } repeat while ind1 do; ind2:=true; SC2 ind2:=false; SNC2 until false end;
======================================================
process P1; repeat ind1:=true; while ind2 do; SC1 ind1:=false; SNC1 until false ind1:=false; ind2:=false; { P1; P2 }
process P2; repeat ind2:=true; while ind1 do ; SC2 ind2=false; SNC2 until false
Varianta_4
process P1; repeat ind1:=true; while ind2 do begin ind1:=false; ind1:=true end; SC1 ind1:=false; SNC1 until false ind1:=false; ind2:=false; { P1; P2 } process P2; repeat ind2:=true; while ind1 do begin ind2:=false; ind2:=true end; SC2 ind2:=false; SNC2 until false
n1 : numrul de ordine al primei persoane (iniial = 0); n2 : numrul de ordine celei de a doua (iniial = 0);
Procesul P1
repeat n1 n2+1; while (n2<>0) and (n2<n1) do ; SC1 n1 0 SNC1 until false
Procesul P2
repeat n2 n1+1; while (n1<>0) and (n1<=n2) do ; SC2 n2 0 SNC2 until false
Observaii: - Se poate ntmpla ca n1=n2=1, deci ca ambele procese s aib acelai numr de ordine (de exemplu dac nti se calculeaz membrii drepi ai atribuirilor); - Se poate ntmpla ca ambele procese s intre n SC a lor: P2 : calculeaz membrul drept=1; P1 : calculeaz membrul drept =1 P2 : n2 1 i intr n SC2 P1 : n1 1 intr n SC1 (datorit faptului c P1 "gndete mai greu"). A doua form (corect)
calcul1 prima persoan i calculeaz numrul de ordine (iniial false); calcul2 a doua persoan i calculeaz numrul de ordine (iniial false).
Procesul P1
repeat calcul1 true; n1 n2+1; calcul1 false; while calcul2 do ; while (n2<>0) and (n2<n1) do ; SC1 n1 0 SNC1 until false
Procesul P2
repeat calcul2 true; n2:=n1+1; calcul2 false; while calcul1 do ; while (n1<>0) and (n1<=n2) do ; SC2 n2 0 SNC2 until false
CC : Dac ambele vor s intre n SC a lor, nseamn c n1 0 i n2 0. Atunci una dintre condiiile n2<n1 i n1 n2 este ndeplinit. CL : Cnd P1 ntrzie n SNC1, avem n1=0 i calcul1=false . Atunci cele dou instruciuni while din P2 sunt echivalente cu instruciunea vid i P2 poate trece de oricte ori prin SC2. Cealalt situaie este analoag. ER : Doar una dintre condiiile n2<n1 i n1 n2 este ndeplinit.
care stabilete dac procesul i este preferat procesului j; aceasta se ntmpl n situaiile: - 0<nr[i]<nr[j] ; - 0<nr[i]=nr[j] i i<j .
Procesul Pi
repeat calcul[i] true; nr[i] max; calcul[i] false; for j:=1 to np do while calcul[j] do ; while preferat(j,i) do ; end; SCi nr[i] 0 SNCi until false