kommunikáció és szinkronizáció

22
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

Upload: murphy-waters

Post on 03-Jan-2016

17 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Kommunikáció és szinkronizáció

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ó.

Page 2: Kommunikáció és szinkronizá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.

Page 3: Kommunikáció és szinkronizáció

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.

Page 4: Kommunikáció és szinkronizáció

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.

Page 5: Kommunikáció és szinkronizáció

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).

Page 6: Kommunikáció és szinkronizáció

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:

Page 7: Kommunikáció és szinkronizáció

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!

Page 8: Kommunikáció és szinkronizáció

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?

Page 9: Kommunikáció és szinkronizáció

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ó.

Page 10: Kommunikáció és szinkronizáció

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.

Page 11: Kommunikáció és szinkronizáció

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;

Page 12: Kommunikáció és szinkronizáció

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";)

Page 13: Kommunikáció és szinkronizáció

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.

Page 14: Kommunikáció és szinkronizáció

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)!

Page 15: Kommunikáció és szinkronizáció

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).

Page 16: Kommunikáció és szinkronizáció

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

Page 17: Kommunikáció és szinkronizáció

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!

Page 18: Kommunikáció és szinkronizáció

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

Page 19: Kommunikáció és szinkronizáció

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.

Page 20: Kommunikáció és szinkronizáció

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;

Page 21: Kommunikáció és szinkronizáció

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).

Page 22: Kommunikáció és szinkronizáció

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)