kommunikáció és szinkronizáció
DESCRIPTION
Kommunikáció és szinkronizáció. 1.) Kommunikáció: Lehetőség arra, hogy egyik folyamat befolyásolja a másik folyamat lefutását. Kommunikáció eszközei: közös változók, üzenet küldés. 2.) Szionkronizáció: Kölcsönös kizárás. (kritikus szakasz) - PowerPoint PPT PresentationTRANSCRIPT
Kommunikáció és szinkronizáció.
1.) Kommunikáció: Lehetőség arra, hogy egyik folyamat
befolyásolja a másik folyamat lefutását.
Kommunikáció eszközei: közös változók, üzenet küldés.
2.) Szionkronizáció:
• Kölcsönös kizárás. (kritikus szakasz)
• Feltételtől függő szinkronizáció. (megvárakoztatás állapot
alapján)
• Szinkron kommunikáció. (kommunikáció szinkronizált
csatornákon keresztül)
Asszinkron kommunikáció.
A kölcsönös kizárásra Peterson által adott megoldás.
A megoldás az aktív várakozás (busy wait) technikájának
alkalmazását szemlélteti, közös változókkal történő megoldás
esetén.
yi , i= 1,2; az igénylés nyilvántartása.
t: a másik folyamat letiltása.
1. yi ="true": az i.edik folyamat igényli az erőforrást,
2. yi ="false": az i.edik folyamat nem tart igényt az erőforrásra;
i{1,2} .
3. t = 1 : az első megtiltja az erőforrás lekötését a 2. folyamatnak.
4. t = 2 : a második megtiltja az erőforrás lekötését az
1. folyamatnak.
y1"false"; y2"false"; t1; parbegin P1 P2 parend;
while "true" do
nem kritikus szakasz1;
(y1, t) ("true", 1);
while y2 t2 do nil od;
kritikus szakasz1;
y1"false"
od;
P1:
while "true" do
nem kritikus szakasz2;
( y2, t) ("true",2);
while y1 t1 do nil od;
kritikus szakasz2;
y2 "false"
od;
P2:
Igénybejelentés;
Tiltás;
Aktív várakozás (busy waiting).
Tiltás feloldása.
t változó használata azt a konfliktust hivatott feloldani, hogymindkettő az aktív várakozás állapotában várakozzon:
Például:
(y1, t) ("true", 1);
while y2 t2 do nil od;
kritikus szakasz1;
( y2, t) ("true",2);
while y1 t1 do nil od;
kritikus szakasz2;
y2 "false"
• Aki előbb állította be t értékét, az : aktív várakozás,
a másik belépés.• Aki később, az kilépéskor : kinyitja a kaput a másiknak.
y1"false"; y2"false"; t1; parbegin P1 P2 parend;
while "true" do
nem kritikus szakasz1;
(y1, t) ("true", 1);
wait y2 t2 ta;
kritikus szakasz1;
y1"false"
od;
P1:
while "true" do
nem kritikus szakasz2;
( y2, t) ("true",2);
wait y1 t1 ta;
kritikus szakasz2;
y2 "false"
od;
P2:
Aktív várakozás helyett várakozás (wait utasítás).
s 1; y1 0; y2 0;
parbegin P1 P2 parend;
Előbb s-nek értékadás:
U0: while "true" do V0: while "true" do
U1: nem kritikus szakasz1; V1: nem kritikus szakasz2;
U2: s 1; V2: s 2;
U3: y11; V3: y2 1;
U4: wait (y2=0)(s1); V4: wait (y1=0)(s2);
U5: kritikus szakasz1; V5: kritikus szakasz2;
U6: y10; V6: y20;
od; od;
P1: P2:
P1
U0: while "true" do;U1: nem kritikus szakasz1;
U2: s 1;
U2: s 1;
U3: y11;
U3: y11;
U3: y11;
U3: y11;
U4: wait (y2=0)(s1);
U5: kritikus szakasz1;
P2
V0: while "true" do
V1: nem kritikus szakasz2;
V2: s 2;
V2: s 2;
V3: y2 1;
V4: wait (y1=0)(s2);
V5: kritikus szakasz2;
V5: kritikus szakasz2;
V5: kritikus szakasz2;
s y1 y2
1 0 0 1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
2 0 0
2 0 1
2 0 1
2 1 1
2 1 1
Baj van: mindkét folyamat kritikus szakaszba került!
A Peterson féle algoritmus egy másik változata.
Mi történik, ha az (y1,s) (1,1); (y2,s) (2,1); vektor műveletek nem
hajthatók végre atomi utasításként?
s 1; y1 0; y2 0;
parbegin P1 P2 parend
Előbb y-nak értékadás:
P1 P2
while "true" do while "true" do
nem kritikus szakasz1; nem kritikus szakasz2;
y1 1; y2 2;
s 1; s 1;
wait (y2=0)(s1); wait (y1=0)(s2);
kritikus szakasz1; kritikus szakasz2;
y10; y20;
od; od;
A program helyessége formálisan bizonyítható.
Dijkstra példája aktív várakozással történő szinkronizációra
Kölcsönös kizárás. (1968)
parbegin S1 S2 parend;
S1:beginin1 "true";doin2 in1 "false"; in1 "true";od;kritikus szakasz1;in1 "false";nem kritikus szakasz1;end;
S2:beginin2 "true";doin1 in2 "false"; in2 "true";od;kritikus szakasz2;in2 "false";nem kritikus szakasz2;end;
Igénybejelentés. Elengedés.
Egy lehetséges helyes lefutás.
in1 "true";
in2 in1 "false";
in1 "true";
in2 kiértékelése;
kritikus szakasz1;
in1 "false";
nem kritikus szakasz1;
end;
in2 "true";
in1 kiértékelése;
kritikus szakasz2;
in2 = "false";
nem kritikus szakasz2;
end;
Egy lehetséges divergencia:
in1 "true";
in2 in1 "false"; in1 "true";
in2 in1 "false"; in1 "true";
in2 "true";
in1 in2 "false"; in2 "true";
in1 in2 "false"; in2 "true";
...Nem tudnak kilépni a do ... od ciklusból!
in1 "true"; in2 "true";
(in2 in1 "false"; in1 "true";
in1 in2 "false"; in2 "true";)
A kölcsönös kizárás Szymanski modellje.
Készítsünk olyan párhuzamos rendszert, amelyben minden
folyamat azonos algoritmust valósít meg.
Folyamatok: P0, P1, ... ,Pn-1;
Változóik rendre: jel[0], jel[1], ... ,jel[n-1].
• Minden közös változó értékét, minden folyamat ki tudja
olvasni.
• Közülük csak egy tudja annak értékét egyidejűleg felülírni.
A kritikus szakaszba történő belépésnél a várakozásuk idejének
sorszámukkal arányosnak kell lennie.
1. kísérlet:
U0: while "true" do
U1: nem kritikus szakasz;
U2: jel[i]1;
U3: wait (j, 1j n ji )(jel[j]=0) tw;
U4: kritikus szakasz;
U5: jel[i]0;
od;
Pi :
Kölcsönös kizárás teljesül: Ha Pi kritikus szakaszban van, akkor
jel(i ) =1, ezért Pj, ji nem tud belépni.
Holtpontmentesség nem teljesül:
Ha mindnyájan egyszerre hajtják végre U2-t, akkor
(j, 1j n )(jel[j]=1)!
2. kísérlet:
U0: while "true" do
U1: nem kritikus szakasz;
U2: jel[i]1;
U3: wait (j, 1j n) (jel[j]=0) jel[j]=1) tw;
U4: jel[i] 4;
U5: wait (j, 1ji )(jek[j]=0 jel[j]=1) tw;
U6: kritikus szakasz;
U7: jel[i]0;
od;
Pi :
Akit igénybejelentés elsőnek továbbenged az megjelöli magát: U4.Beütemezés: Mindig a legkisebb indexű léphessen be elsőnek:U5.(ez felel meg az index-szel arányos várakozás követelményének).
2. kísérlet:
U0: while "true" do
U1: nem kritikus szakasz;
U2: jel[i]1;
U3: wait (j, 1j n) (jel[j]=0) jel[j]=1) tw;
U4: jel[i] 4;
U5: wait (j, 1ji )(jek[j]=0 jel[j]=1) tw;
U6: kritikus szakasz;
U7: jel[i]0;
od;
Pi :
P2 beléphet, de utána az ütemezés szerint P1 is!
Nem teljesül a kölcsönös kizárás!
Ha valaki (jel[i] 4;), akkor az utána jövő várjon!
P1 P2 j(0) j(1)
U0 V0 0 0
U1 V0 0 0
U1 V1 0 0
U2 V1 0 0
U2 V2 0 0
U3 V2 1 0
U3 V3 1 1
U4 V3 1 1
U4 V4 1 1
U4 V5 1 4
U4 V6 1 4
U5 V6 4 4
U6 V6 4 4
3. kísérlet: Pi:
U0: while "true" do
U1: nem kritikus szakasz;
U2: jel[i]1;
U3: wait (j, 1jn)(jel[j]=0jel[j]=1jel[j] =2);
U4: if (j, 1jn)(jel[j]=1) then
U5: jel[i]2;
U6: wait (j, 1 j n)(jel[j]=4) tw; fi;
U7: jel[i]4;
U8: wait (j, 1 j i )(jel[j]=0jel[j]=1);
U9: kritikus szakasz;
U10: jel[i]0;
od;
P1 P2 j1 j2
U0 V0 0 0
U1 V1 0 0
U2 V2 0 0
U3 V3 1 1
U4 V4 1 1
U5 V5 1 1
U6 V6 2 2
Holtpont!
4. kísérlet:
U0: while "true" do
U1: nem kritikus szakasz;
U2: jel[i] 1;
U3: wait (j, 1j n )(jel[j]=0jel[j]=1jel[j]=2) tw;
U4: jel[i] 3;
U5: if (j, 1jn)(jel[j]=1) then
U6: jel[i] 2;
U7: wait (j,1jn)(jel[j] = 4) tw; fi;
U8: jel[i] 4;
U9: wait (j, 1j n )(jel[j]=0jel[j]=1) tw;
U10: kritikus szakasz;
U11: jel[i] 0;Prioritás nem teljesül!
Pi: P1 P2 j1 j2
U1 V0 0 0U1 V1 0 0U2 V1 0 0U2 V2 0 0U3 V2 1 0U3 V3 1 1U4 V3 1 1U4 V4 1 1U4 V5 1 3U4 V6 1 3U4 V7 1 2U5 V7 3 2U8 V7 3 2U9 V7 4 2U10 V7 4 2U11 V7 4 2U1 V7 0 2U2 V7 0 2U3 V7 1 2U4 V7 1 2
5. kísérlet:
U0: while "true" do
U1: nem kritikus szakasz;
U2: jel[i] 1;
U3: wait (j, 1j n )(jel[j]3) tw;
U4: jel[i]3;
U5: if (j, 1jn)(jel[j]=1) then
U6: jel[i] 2;
U7: wait (j,1jn)(jel[j] = 4) tw; fi;
U8: jel[i]4;
U9: wait (j, 1j i)(jel[j]2) tw;
U10: kritikus szakasz;
U11: wait (j, ijn)(jel[j]2jel[j]3) tw;
U12: jel[i]0;
od;
Pi:
Ez már helyes megoldás,feltéve, hogy a kiértékelésekU3, U5, U7, U9, U11utasítások meg nemszakítható utasítások.
Ha ezt nem tesszük fel, lehetpéldát találni arra, hogy nemteljesül a kölcsönös kizárás.
Feladat. Bizonyos tulajdonságú objektum párhuzamos keresése
felosztott adatbázisban.
Xj , j{..., -2,-1,0,1, 2,...}, nagyon hosszú vektor.
Feltevésünk az, hogy (j{...,-2,-1,0,1, 2,...})(Xi[j] = e), pontosan
egy;
S : k e;
parbegin S1 S2 parend;
z = if X[j] = e then j else i fi;
S : k e;
parbegin S1 S2 parend;
z = if X[j] = k then j else i fi;
S1: V0:
V1: B F; j 0;
V2: while B = "false" do
V3: B (X[j] = k);
V4: j j+1;
od;
V5:
S2: U0:
U1: B "false"; i 0;
U2: while B = "false" do
U3: B (X[i] = k);
U4: i i -1;
od;
U5:
Feltevés: pontosan egy olyan "a" indexérték van, amelyre
X[a] = e és (~i(i=a)(X[i] = e).
S1
V2
V3
V4
V2
S2
U0
U0
U1
U2
B
"F"
"F"
"T"
"F"
j
a
a
a
a+1
i
0
0
0
0
B (X[a] = e);
a a+1; B "F"; i 0;
Végtelen ciklus!
(a könyvben 4-5 próbálkozás)