1 / 22

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)

Download Presentation

Kommunikáció és szinkronizáció.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  7. P1 U0: while "true" do; P2 V0: while "true" do s y1 y2 1 0 0 U1: nem kritikus szakasz1; 1 0 0 V1: nem kritikus szakasz2; 1 0 0 U2: s  1; 1 0 0 U2: s  1; 1 0 0 V2: s  2; U3: y11; V2: s  2; 1 0 0 U3: y11; V3: y2 1; 2 0 0 U3: y11; V4: wait (y1=0)(s2); 2 0 1 U3: y11; V5: kritikus szakasz2; 2 0 1 U4: wait (y2=0)(s1); V5: kritikus szakasz2; 211 U5: kritikus szakasz1; V5: kritikus szakasz2; 21 1 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 (y1,s)  (1,1); (y2,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: P1 P2 while "true" dowhile "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; 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  "true"; in2  in1  "false"; in1 kiértékelése; in1  "true"; kritikus szakasz2; in2 = "false"; in2 kiértékelése; nem kritikus szakasz2; kritikus szakasz1; end; in1  "false"; nem kritikus szakasz1; end;

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

  14. 1. kísérlet: Pi : 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; Kölcsönös kizárás teljesül: Ha Pi kritikus szakaszban van, akkor jel(i ) =1, ezért Pj, 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: 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) 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; 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: 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) 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; 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 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!

  17. 3. kísérlet: 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: 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 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!

  19. 5. kísérlet: Pi: 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; 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. 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  S2parend; 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. i S1 S2 B j U0 0 V2 "F" a 0 B  (X[a] = e); V3 U0 "F" a 0 V4 U1 "T" a a  a+1; B "F"; i  0; 0 V2 U2 "F" a+1 Végtelen ciklus! (a könyvben 4-5 próbálkozás)

More Related