Osztott rendszer Osztott rendszer informális definíciója Egymástól elkülönülten létező program-komponensek egy halmaza. A komponensek egymástól függetlenül dolgoznak saját erőforrásukkal. A komponensek időről-időre egymásnak üzeneteket küldenek a közös feladat megoldása érdekében. Osztott programrendszer végrehajtása Párhuzamosan futó folyamatoknak egy halmaza. Minden folyamat rendelkezik saját változókkal. A különböző folyamatokhoz tartozó változók halmazai diszjunktak. A folyamatok egymással üzenetek révén kommunikálnak.
Osztott rendszer folyamat 1 lokális változók folyamat 2 lokális változók folyamat n lokális változók csatorna üzenetek Üzenet formában történő kommunikáció Szinkron kommunikáció Aszinkron kommunikáció Kommunikáció csatornán keresztül A kommunikációs csatorna nem irányított A kommunikációs csatornának nincsen típusa
Kommunikáci ciós s csatorna Input utasítás Szintaxis: C?x C csat, csat csatornák halmaza x egyszerű változó. Jelentés Output utasítás Azt fejezi ki, hogy az utasítást kiadó program x változója egy értéket fogadjon a C csatornán keresztül. Ha ez teljesül, akkor x változó felveszi az értéket. Szintaxis: C!e C csat, ahol csat a csatornák halmaza e: a C!e utasítást kiadó programnak lokális változóival képezett aritmetikai kifejezés, Jelentés Azt fejezi ki, hogy az utasítást kiadó program az e kifejezés értékét elküldje a C csatornán keresztül.
Kommunikáci ciós s csatorna Őrfeltétellel ellátott csatornautasítás Szintaxis b;c?x; illetve b;c!e, ahol b logikai kifejezés. Jelentés Az I/O csatorna utasítás kiegészül egy tesztelési függvénnyel, amely folyamatosan vizsgálja, hogy lehetséges-e a kommunikáció a C csatornán keresztül. Jelölések Amíg ez nem következik be, a b kifejezés kiértékelése "false értéket eredményez. Ha bekövetkezik, "true" értéket eredményez. A "true";c?e illetve "true"; C!e rövid jelölése: C?e var(s): channel(s): összes változó + csatorna nevek csatornanevek S-ben C!e
Kommunikáci ciós s csatorna b 1 ;C?u és b 2 ;C!e utasítások egymáshoz illeszthetőek azonos csatornára hivatkoznak e kifejezés és u változó típusa azonos b 1 és b 2 őrfeltételek kiértékelése igaz értéket szolgáltat Az α 1 :C?u, α 2 : C!e illesztés eredménye: u e; Szinkron kommunikáció jelentése C csatornán keresztül a b 1 ;C?u, b 2 ;C!e egymáshoz illeszthető utasítás pár esetén Várakozás Mindkét kérés teljesítésének várnia kell, amíg a másik nem jelenik meg. Egyidejűség Mindkét kérés végrehajtása egyszerre történik meg. Értékadás A kommunikáció eredménye az, hogy az u e értékadás megtörténik.
Osztott rendszer Definíciók Az osztott rendszer S 1 és S 2 folyamatai diszjunktak, ha change(s 1 ) var(s 2 ) = var(s 1 ) change(s 2 ) = { } Az S i és S j (i j) folyamatokat a C csatorna összeköti, ha C channel(s i ) channel(s j ) A S 1,..., S n folyamatok pontról pontra összekötöttek, ha 1 i < j < k n : channel(s i ) channel(s j ) channel(s k ) { } Osztott program parbegin S 1... S n parend; S 1,..., S n folyamatok páronként diszjunktak Bármely 1 i < j < k n esetén az S i, S j, S k folyamatok pontról pontra összekötöttek S végrehajtása befejeződik, ha mindegyik S j befejeződik.
Komponens elvű programfejlesztés C. B. Jones A pre/post specifikációkat minden sc komponens (shared component) esetén egészítsük ki megbízhatósági / garancia (rely / garantee) előírással is: { p, r } sc { g, q } Előfeltétel: p: Σ Σ Utófeltétel: q: Σ Σ Σ Megbízhatósági feltétel: r: Σ Σ Σ Garancia feltétel: g: Σ Σ Σ Probléma A programfejlesztés alávetése a szekvencializációs szabályoknak!
Komponens elvű programfejlesztés Modellalkotás 1990-es évek végén: Warmer J., Kleppe A.: The Object Constraint Language Precise Modelling with UML Lényege: Probléma megoldásának modelljei + korlátozások Forgatókönyv (scenario) készítésekor rögzítjük a komponensekre vonatkozó megállapodásokat: contracts, scenario, prototype. Probléma megoldás számítógépes hálózaton keresztül A problémát ágensek oldják meg úgy, hogy összehangolt akciókkal kívánják a közös célt elérni.
Komponens elvű programfejlesztés Ágens Akció Cél Felhasználó, program, rendszer, stb. Tevékenységek végrehajtása. Például: Gomb megnyomása, üzenet, algoritmus végrehajtása, stb. A rendszer kívánt állapotának elérése egy jövőbeli időpontban. Összehangolás Kontraktus alapján (komponensek közötti szerződés) Kontraktus, megállapodás Dokumentum, specifikáció, program szövege Probléma Adott a kontraktus, és az ágensek egy halmaza. Kérdés: Egy adott célt képesek-e elérni az ágensek az adott kontraktussal?
Kontraktus felhasználó és s gép g p közöttk Batch feldolgozás Választás a számítógépé (belső nem determinisztikus választás) Dijkstra: abort = {false} user Ha abort-ot hajtott végre a felhasználó, jelzi, hogy a felhasználó megsértette a megállapodást. Ugyanis a számítógép felhatalmazást kapott a további rész akár hibás végrehajtásra is. Interaktív program Példa A felhasználónak van választási lehetősége a végrehajtásnál. (Alternatívák közül választhat) A számítógép belső döntéseket hozó mechanizmus szerint dolgozik. S = S 1 ; S 2 a felhasználó b számítógép S 1 = (x : = x + 1 a x: = x + 2 ); S 2 = (x : = x - 1 b x: = x - 2 );
Kontraktus a felhasználó és s a gép g p közöttk S = S 1 ; S 2 a felhasználó b számítógép S 1 = (x : = x + 1 a x: = x + 2 ); S 2 = (x : = x - 1 b x: = x - 2 ); A felhasználó választása attól függ, hogy mit akar elérni: x 0 vagy x 0 a x:= x+1 x:= x+2 b b x:= x - 1 x:= x - 2 x:= x-1 x:= x-2 x = 0 x = -1 x = 1 x = 0
Ágens rendszerek Legyen Ω az ágensek egy összessége, A az ágensek egy halmaza és a, b, c A. Ekkor az ágens rendszer = (A, S, I ct, Q). A : a rendszer ágenseinek véges halmaza S : S 0 ; do b 1 S 1 a... a b n S n a S E ; exit; od; S 0, S 1,..., S n ; nem determinisztikus programok. S 0 : rendszer indulása előtt elvégzendő feladatok végrehajtására szolgáló program (inicializálás). I ct : a A : Q : kontraktust rögzítő invariáns ágens a megfelelő komponens kiválasztásáért felelős az ágens rendszer végrehajtása során elérendő célállítás
Példa: Kecske, farkas és s káposztak átszállítása a folyón Kontraktus A farkas a kecskével csak akkor lehet együtt, ha a hajós is ott van: fa = ke ha = fa A kecske a káposztával csak akkor lehet együtt, ha a hajós is ott van: A kontraktus invariánsa ( l ct ): Kiindulási állapot: Q Cél állapot: Ágens(ek): a hajós (fa = ke ha = fa) (ke = ká ha = ke) ( n { fa, ke, ká, ha })(n bool) ke = ká ha = ke ha = F fa = F ke = F ká = F ha = T fa = T ke = T ká = T
Példa: Kecske, farkas és s káposztak átszállítása a folyón átkelés = ha := F; fa := F; ke := F; ká := F; do od; ha = fa (ha, fa) := ( ha, fa); a ha = ke (ha, ke) := ( ha, ke); a ha = ká (ha, ká) := ( ha, ká); a ha = ha; a skip; exit a: hajós;
Példa: Raktár r szimuláci ció Egy raktárban háromféle áru raktározható Áruféleségek: Raktár kapacitása: Kikötések A, B, C N B és C áru vegyesen tárolható. A és C áru vegyesen tárolható. A és B áru nem tárolható vegyesen. Nem determinisztikus módon érkeznek/távoznak az árúk. Készítsük el a helyes működésének szimulációját. Adott áruból raktáron lévő mennyiség n A = cont(a,ent) - count(a,ex) n B = cont(b,ent) - count(b,ex) n C = cont(c,ent) - count(c,ex)
Példa: Raktár r szimuláci ció Kontraktus B és C áru vegyesen tárolható, ha nincs a raktárban A áru N n B + n C 0 n A = 0 A és C áru vegyesen tárolható, ha nincs a raktárban B áru N n A + n C 0 n B = 0 Komponensek közötti megállapodást rögzítő I ct (N, n A, n B, n C ) invariáns ((N n 0 n A = 0) (N n 0 n B = 0)) (n = n A + n B + n C )
Példa: Raktár r szimuláci ció raktár = (n A 0; n B 0; n C 0; n N; raktároz; raktároz = do beszállít a elszállít a skip; exit od; a, b, c A', ágenshalmaz beszállít = if (N > n 0 n B = 0) ( binsert(r, A); (n A, n) ( n A + 1, n + 1) ) b (N > n 0 n A = 0) ( binsert(r, B); (n B, n) ( n B + 1, n + 1) ) b (N > n 0) ( binsert(r, C); (n C, n) ( n C + 1, n + 1) ) fi; elszállít = if (n A > 0) ( bdelete(r, A); (n A, n) ( n A - 1, n - 1) ) c (n B > 0) ( bdelete(r, B); (n B, n) ( n B - 1, n - 1) ) c (n C > 0) ( bdelete(r, C); (n C, n) ( n C - 1, n - 1) ) fi;
Fair tulajdonság Példa nem fair programra S 1 jel:= "false"; do ~ jel következő sor nyomtatása ~ jel jel:= "true" od; // nyomtatás // kilépés A nem determinisztikus program szemantikája nem garantálja, hogy a második sor megkapja a vezérlést. Gyenge fair követelmény A do od ciklusban minden olyan őrfeltételes utasítás, amely valamely időponttól folyamatosan készen áll a végrehajtásra, annak végtelen sokszor aktiválódni kell. Az első komponens ilyen feltétel esetén nem aktiválódhatott volna kizárólagosan, ha a második komponens kész a végrehajtásra.
Fair tulajdonság Példa erősen fair programra S 2 jel:= "false"; lap := "false"; i := 0; do ~ jel következő sor nyomtatása; i := (i+1) mod 30; lap := (i=0) ~ jel lap jel:= "true" od; Most is az első tud aktiválódni először, de 30 nyomtatás után a második komponens indulásának feltétele folyamatosan teljesül, így a második ág végrehajtásra kerül. A második ág végrehajtása után egyik komponens belépési feltétele sem teljesül, ezért az iteráció befejeződik. Ezt az esetet nevezik erős fair (strong fairness) tulajdonságnak.
Fair tulajdonság Egyszerű, egyszintű nem determinisztikus program S 0 ; do α 1 S 1... α n S n od; S 0, S 1,..., S n determinisztikus komponensek. Fair nem determinisztikus szemantika definíciója S egyszintű, nem determinisztikus program esetén σ Σ kezdőállapot mellett M fair [S](σ) = { τ < S, σ > * < E, τ > } { S divergálhat σ kezdő állapotból egy fair kiszámítás esetén } { fail S hibás eredményre juthat σ kezdő állapotból } M tot [S](σ) és M fair [S](σ) közötti különbség