Párhuzamos programok Legyen S parbegin S 1... S n parend; program. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak. Folyamat a végrehajtás alatt lévő program. Kommunikáció jelentése a közös változók értékének párhuzamosan futó folyamatok általi kiolvasása, felülírása. Közös változóhoz egynél több folyamat is hozzáférhet, Lokális változóhoz csak egyetlen folyamat férhet hozzá.
Párhuzamos végrehajtv grehajtás követelményei Közös változóhoz való hozzáférés követelményei Hozzáférés közös változóhoz: a változó értékének kiolvasása vagy felülírása. A közös változókhoz való hozzáférések atomi operációnak tekintendők. Végrehajtás követelményei A végrehajtás sebessége minden, be nem fejeződött folyamat esetén pozitív és tetszőleges, (kivéve, ha a közös változóhoz való hozzáférésre vár). Közös változóhoz való hozzáférésre várakozás esetén a hozzáférés kellő idő után garantált és a végrehajtás folytatódhat. Az atomi műveletek (közös változóhoz való hozzáférések) lineárisan sorba rendezettek, de a sorrend véletlenszerű.
Párhuzamos végrehajtv grehajtás követelményei A közös változókhoz való hozzáférések lineárisan sorba rendezettek. Megvárakoztatás (blokkolt állapot) Garantált hozzáférés minden folyamat számára (holtpont mentesség) Folyamatok végrehajtási sebessége pozitív érték, kivéve közös erőforrásra várakozásnál (fair követelmény) Reynold féle kritérium Ha az 1., 2. követelmény teljesül, a párhuzamos komponensek végrehajtása során érvényes a program állapotára vonatkozóan a nem determinisztikus egymás utáni atomi végrehajtás, azaz logikai kiértékelés, felülírás (feltéve, hogy a logikai kiértékelés és felülírás közös változót tartalmaz).
Atomi művelet m és s végrehajtv grehajtása Atomi (primitív) művelet, utasítás végrehajtása meg nem szakíthatóan, vagy aszinkron módon. Atomi műveletek bool kifejezés kiértékelése, változó értékének kiolvasása, értékadás változónak. Atomi utasítás olyan S program szakasz, amelyet atomivá teszünk, de ciklust, illetve atomi utasítást nem tartalmaz. Jelölés: < S >;
Közös s változv ltozóval rendelkező determinisztikus párhuzamos p program Szintaxis S ::= skip y t S 1 ;S 2 if α then S 1 else S 2 fi while α do S 1 od parbegin S 1 S 2 parend; atomi program: S ; Más jelölés while α do S 1 od : do α S 1 od; Szemantika < S,σ > < E, τ> < S,σ > < E, τ> M[ S ]({p}) = M[S]({p})
Közös s változv ltozóval rendelkező determinisztikus párhuzamos p program Lemma A közös változóval rendelkező párhuzamos program blokkolás-mentes. Ugyanis, minden < S, σ > konfigurációnak S E és σ Σ esetén van rákövetkezője a reláció szerint. Lemma Minden S párhuzamos program és σ Σ esetén a < S, σ > konfigurációnak véges számú rákövetkezője van a reláció mellett. (Következik a szintaktikai axiómákhoz, szabályokhoz rendelt tranzakciók relációinak definícióiból.)
Atomi utasítások sok Programhelyesség bizonyításánál feltesszük Bool kifejezés, értékadás, skip, atomi régió mindegyike atomi akció, azaz Meg nem szakíthatók, vagy Egymás után hajtódnak végre, de a végrehajtás sorrendje nincs meghatározva. Egy hagyományos hardver ezt nem garantálja. Garancia Általában a kritikus hivatkozások atomi kezelését garantálja, kizárólagos írási vagy olvasási atomi hozzáférést garantál az egyszerű, vagy indexes változók esetében. y f(x,y) : < y f(x,y) >
Példa S parbegin x y y x parend; x y esetén atomi műveletek: y kiolvasása, x értékének felülírása. x = 1; y = 2; esetén lehetséges eredmények: x = y = 2; x = y = 1; x = 2 és y = 1. A parallel modell jelentése nem azonos a hagyományos hardware által nyújtott megoldással. Minden komponens program szoftver-akkumulátorok bevezetésével áttranszformálható egy olyan vele ekvivalens párhuzamos programmá, ahol minden atomi akció egy hozzáférést jelent a közös változóhoz. S parbegin AC 1 y; x AC 1 AC 2 x; y AC 2 parend; A párhuzamosság atomi egységére vonatkozó < x y > szemantikai meghatározás az egyszerű kezelés célját szolgálja a helyességbizonyításnál.
Atomi utasítások sok A párhuzamos program helyesség bizonyítását leegyszerűsíti a virtuális <S> atomi definíció. Minél kisebb egységre vonatkozik az atomi definíciónk annál inkább megfelel a valóságos végrehajtásnak. Minél nagyobb egységre vonatkozik az atomi definíciónk annál inkább megkönnyíti a program helyességének a bizonyítását.
Párhuzamos program szinkronizáci cióval A feltételes atomi utasítás szintaxisa: b S ; Dijkstra - féle jelölés await b then S ta; Speciális esetek await "true" then S ta; await b then skip ta; await b then ta; wait b tw; A Dijkstra - féle atomi szemafor utasítások P(s): s s -1; if s < 0 then állj be az s-hez rendelt várakozó sorba fi; V(s): s s+1; if s 0 then induljon el egy folyamat az s-hez rendelt várakozó sorból fi;
Dijkstra-féle szemafor utasítások sok Egyszerű implementáció P(s) : await s > 0 then s s -1 ta; V(s) : await "true" then s s+1 ta; Egy pontos implementáció P(s) : await "true" then begin s s-1; ta; await V[j] then ta end if s < 0 then V[j] "false" fi; V(s) : await "true" then begin s s+1; if s 0 then begin válassz i-t, ahol V[i] = "false"; fi end ta; end V[i] "true
Szemantika, holtpont állapot Szemantika Az őrfeltételes atomi utasítás jelentése σ(b) = "true" < S,σ > < E,τ > < b S,σ > < E,τ > σ(b) = "true" < S,σ > < E,τ > < await b then S ta,σ > < E,τ > Holtpont állapot informális definíciója Az S párhuzamos program holtpont állapotba jutott, ha a program végrehajtása nem fejeződött be és annak minden olyan komponense, amely nem fejeződött be, blokkolt állapotban van.
Párhuzamos program szinkronizáci cióval Szintaxis S ::= b y f(x,y) S 1 ; S 2 if b then S 1 else S 2 fi while b do S od parbegin S 1 S 2 parend; Feltételes meg nem szakítható (atomi) utasítás: b S ; amely nem tartalmazhat iterációt, vagy másik atomi utasítást. Jelölés parbegin S 1... S n parend; Más jelölések cobegin S 1... S n coend; [ S 1 S 2 ];
Párhuzamos program szinkronizáci cióval Lemma A párhuzamos program végrehajtása során, a σ állapotban, a p(σ) állítás mellett, az await b then S ta utasításnál blokkolt állapotba kerül, Definíció ha p(σ) ~b = "true". Legyen S párhuzamos program és annak egy σ állapotára p(σ) = "true". Az <S, σ> konfigurációt holtpontnak nevezzük, ha ~(S E); <S, σ> <S', σ'> tranzakció nem létezik. A holtpont virtuális állapot jele:. Az S program a σ állapotból holtpontra juthat, ha létezik olyan kiszámítás, amely holtpont konfigurációban végződik.
Párhuzamos program szinkronizáci cióval Az S program holtpontmentes, (p mellett) ha nem létezik olyan σ állapot p(σ) = "true" mellett, amelynél S holtpontra juthat. Az S párhuzamos program szemantikája Parciális helyességi szemantikája σ kiindulási állapot mellett M[S](σ) = { τ < S, σ > < E, τ > } Gyenge teljes helyességi szemantikája σ kiindulási állapot mellett M wtot [S] (σ) = M[S](σ) { S divergál σ kezdő állapotból } Teljes helyességi szemantikája σ kiindulási állapot mellett M tot [S] (σ) = M wtot [S] (σ) { S holtpontba jut σ kezdő állapotból} (,, fail Σ virtuális állapotok)
Példa: kölcsk lcsönös s kizárás Probléma Adott egy erőforrás, amelyet n > 0 db folyamat használ feladatainak megoldása során. Követelmények Kölcsönös kizárás Az erőforrást egy adott időpontban legfeljebb csak egy folyamat használhatja. Blokkolás mentesség A párhuzamos folyamatok futását a szinkronizáció ne függessze fel végtelen hosszú időre. Erőforráshoz való hozzáférhetőség Minden egyes folyamat, ha használni akarja az erőforrást, akkor véges időn belül használhassa azt.
Példa: kölcsk lcsönös s kizárás A követelmények formális megfogalmazása S: inicializálás; parbegin S 1... S n parend; ahol i, k, 1 i, k n i k esetén [( var(nk i ) var(eh i ))] [( var(ei k ) var(ef k ))] = { } (az előkészítés és erőforrás használatának változói különböznek az igénylés és a felszabadítás változóitól) Feltevés NK i és EH i nem tartalmaz őrfeltételes utasítást. Elnevezések NK Nem közös változókat használó programrész EI Erőforrás igénylés EH Erőforrást használó programrész EF Erőforrás felszabadítása S i while "true" do NK i ; EI i ; EH i ; EF i ; od ;
Kölcsönös s kizárás, blokkolás-mentess mentesség Triviális megoldás: Definíció Kölcsönös kizárás Az S végrehajtása során nem létezik olyan S j : while "true" do NK j ; EH j ; od; < parbegin R 1... R n parend, σ > konfiguráció, hogy valamely j, k {1,..., n}, j k esetén R j at(eh j in S j ) ; R k at(eh k in S k ) Blokkolás-mentesség Nincs olyan végrehajtás σ Σ : <S, σ> <T, > amely holtpont konfigurációban végződik.
Dijkstra féle f kölcsk lcsönös s kizárás out bool; S: out True; parbegin S 1... S n parend; P: passeren V: vrijgeven Szemaforral: s k; k > 0; P(out) await out then out False ta; V(out) out True; P(s) await s > 0 then s s - 1 ta; S i : while "true" do NK i ; P(out); EH i ; V(out); od;
Párhuzamos, nem determinisztikus program szinkronizáci cióval Szintaxis Nem determinisztikus kiválasztás if b 1 S 1... b n S n fi Nem determinisztikus iteráció do b 1 S 1... b n S n od Kilépéses nem determinisztikus iteráció do S B S E ; exit od S B : b 1 S 1... b n S n ; S ::= b y f(x,y) S 1 ; S 2 if b 1 S 1... b n S n if do b 1 S 1... b n S n od do S B S E ; exit od parbegin S 1 S 2 parend;