Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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.

Hasonló előadás


Az előadások a következő témára: "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."— Előadás másolata:

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

2 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. y i, i= 1,2; az igénylés nyilvántartása. t: a másik folyamat letiltása. 1. y i ="true":az i.edik folyamat igényli az erőforrást, 2. y i ="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.

3 y1  "false"; y2  "false"; t  1; parbegin P1  P2 parend; while "true" do nem kritikus szakasz1; (y1, t)  ("true", 1); while y2  t  2 do nil od; kritikus szakasz1; y1  "false" od; P1: while "true" do nem kritikus szakasz2; ( y2, t)  ("true",2); while y1  t  1 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.

4 t változó használata azt a konfliktust hivatott feloldani, hogy mindkettő az aktív várakozás állapotában várakozzon: Például: (y1, t)  ("true", 1); while y2  t  2 do nil od; kritikus szakasz1; ( y2, t)  ("true",2); while y1  t  1 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.

5 y1  "false"; y2  "false"; t  1; parbegin P1  P2 parend; while "true" do nem kritikus szakasz1; (y1, t)  ("true", 1); wait y2  t  2 ta; kritikus szakasz1; y1  "false" od; P1: while "true" do nem kritikus szakasz2; ( y2, t)  ("true",2); wait y1  t  1 ta; kritikus szakasz2; y2  "false" od; P2: Aktív várakozás helyett várakozás (wait utasítás).

6 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: y1  1; V3: y2  1; U4: wait (y2=0)  (s  1); V4: wait (y1=0)  (s  2); U5: kritikus szakasz1; V5: kritikus szakasz2; U6: y1  0; V6: y2  0; od; P1:P2:

7 P1 U0: while "true" do; U1: nem kritikus szakasz1; U2: s  1; U3: y1  1; U4: wait (y2=0)  (s  1); U5: kritikus szakasz1; P2 V0: while "true" do V1: nem kritikus szakasz2; V2: s  2; V3: y2  1; V4: wait (y1=0)  (s  2); V5: kritikus szakasz2; s y1 y Baj van: mindkét folyamat kritikus szakaszba került!

8 A Peterson féle algoritmus egy másik változata. Mi történik, ha az (y 1,s)  (1,1); (y 2,s)  (2,1); vektor műveletek nem hajthatók végre atomi utasításként?

9 s  1; y1  0; y2  0; parbegin P1  P2 parend Előbb y-nak értékadás: P1P2 while "true" do while "true" do nem kritikus szakasz1; nem kritikus szakasz2; y1  1; y2  2; s  1; s  1; wait (y2=0)  (s  1); wait (y1=0)  (s  2); kritikus szakasz1; kritikus szakasz2; y1  0; y2  0; od; A program helyessége formálisan bizonyítható.

10 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: begin in1  "true"; do in2  in1  "false"; in1  "true"; od; kritikus szakasz1; in1  "false"; nem kritikus szakasz1; end; S2: begin in2  "true"; do in1  in2  "false"; in2  "true"; od; kritikus szakasz2; in2  "false"; nem kritikus szakasz2; end; Igénybejelentés. Elengedés.

11 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;

12 Egy lehetséges divergencia: in1  "true"; in2  in1  "false"; in1  "true"; 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";) 

13 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: P 0, P 1,...,P n-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.

14 1. kísérlet: U0: while "true" do U1: nem kritikus szakasz; U2: jel[i]  1; U3: wait (  j, 1  j  n  j  i )(jel[j]=0) tw; U4: kritikus szakasz; U5: jel[i]  0; od; P i : Kölcsönös kizárás teljesül: Ha P i kritikus szakaszban van, akkor jel(i ) =1, ezért P j, j  i nem tud belépni. Holtpontmentesség nem teljesül: Ha mindnyájan egyszerre hajtják végre U2-t, akkor (  j, 1  j  n )(jel[j]=1)!

15 2. kísérlet: U0: while "true" do U1: nem kritikus szakasz; U2: jel[i]  1; U3: wait (  j, 1  j  n) (jel[j]=0)  jel[j]=1) tw; U4: jel[i]  4; U5: wait (  j, 1  j  i )(jek[j]=0  jel[j]=1) tw; U6: kritikus szakasz; U7: jel[i]  0; od; P i : 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).

16 2. kísérlet: U0: while "true" do U1: nem kritikus szakasz; U2: jel[i]  1; U3: wait (  j, 1  j  n) (jel[j]=0)  jel[j]=1) tw; U4: jel[i]  4; U5: wait (  j, 1  j  i )(jek[j]=0  jel[j]=1) tw; U6: kritikus szakasz; U7: jel[i]  0; od; P i : 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

17 3. kísérlet:Pi:Pi: U0: while "true" do U1: nem kritikus szakasz; U2: jel[i]  1; U3: wait (  j, 1  j  n)(jel[j]=0  jel[j]=1  jel[j] =2); U4: if (  j, 1  j  n)(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]=0  jel[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!

18 4. kísérlet: U0: while "true" do U1: nem kritikus szakasz; U2: jel[i]  1; U3: wait (  j, 1  j  n )(jel[j]=0  jel[j]=1  jel[j]=2) tw; U4: jel[i]  3; U5: if (  j, 1  j  n)(jel[j]=1) then U6: jel[i]  2; U7: wait (  j,1  j  n)(jel[j] = 4) tw; fi; U8: jel[i]  4; U9: wait (  j, 1  j  n )(jel[j]=0  jel[j]=1) tw; U10: kritikus szakasz; U11: jel[i]  0; Prioritás nem teljesül! Pi:Pi: P1 P2 j1 j2 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 3 U4 V6 1 3 U4 V7 1 2 U5 V7 3 2 U8 V7 3 2 U9 V7 4 2 U10 V7 4 2 U11 V7 4 2 U1 V7 0 2 U2 V7 0 2 U3 V7 1 2 U4 V7 1 2

19 5. kísérlet: U0: while "true" do U1: nem kritikus szakasz; U2: jel[i]  1; U3: wait (  j, 1  j  n )(jel[j]  3) tw; U4: jel[i]  3; U5: if (  j, 1  j  n)(jel[j]=1) then U6: jel[i]  2; U7: wait (  j,1  j  n)(jel[j] = 4) tw; fi; U8: jel[i]  4; U9: wait (  j, 1  j  i)(jel[j]  2) tw; U10: kritikus szakasz; U11: wait (  j, i  j  n)(jel[j]  2  jel[j]  3) tw; U12: jel[i]  0; od; Pi:Pi: Ez már helyes megoldás, feltéve, hogy a kiértékelések U3, U5, U7, U9, U11 utasítások meg nem szakítható utasítások. Ha ezt nem tesszük fel, lehet példát találni arra, hogy nem teljesül a kölcsönös kizárás.

20 Feladat. Bizonyos tulajdonságú objektum párhuzamos keresése felosztott adatbázisban. X j, j  {..., -2,-1,0,1, 2,...}, nagyon hosszú vektor. Feltevésünk az, hogy  (j  {...,-2,-1,0,1, 2,...})(X i [j] = e), pontosan egy; S :k  e; parbegin S 1  S 2 parend; z = if X[j] = e then j else i fi;

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

22 S1 V2 V3 V4 V2 S2 U0 U1 U2 B "F" "T" "F" j a a a a+1 i B  (X[a] = e); a  a+1; B  "F"; i  0; Végtelen ciklus! (a könyvben 4-5 próbálkozás)


Letölteni ppt "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."

Hasonló előadás


Google Hirdetések