Atomi műveletek őrfeltételének meghatározása. Konkrét program elkészítése. 1. Példa: Számítógép labor használata.

Hasonló dokumentumok
... S n. 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.

Termelő-fogyaszt. fogyasztó modell

6. Közös változóval rendelkező párhuzamos program, Közös változó,

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

Osztott rendszer. Osztott rendszer informális definíciója

S0-01 Szintézis és verifikáció (Programozás elmélet)

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Operációs rendszerek Folyamatközi kommunikáció 1.1

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

8. Komponens elvű programfejlesztés. Ágens, akció, cél, kontraktus.

Programkonstrukciók A programkonstrukciók programfüggvényei Levezetési szabályok. 6. előadás. Programozás-elmélet. Programozás-elmélet 6.

Kiterjesztések sek szemantikája

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

PROGRAMOZÁS MÓDSZERTANI ALAPJAI I. TÉTELEK ÉS DEFINÍCIÓK

Az optimális megoldást adó algoritmusok

Programok értelmezése

C++ programozási nyelv

Programozási módszertan. Mohó algoritmusok

Előadás_# Az első ZH megírása

Szálak szinkronizálása (Ro- Sincronizarea threadurilor)

Algoritmusok bonyolultsága

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Gráfelméleti feladatok. c f

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Bevezetés az informatikába

Időzített átmeneti rendszerek

Dinamikus modell: állapotdiagram, szekvencia diagram

A modell-ellenőrzés gyakorlata UPPAAL

Programozási módszertan

Alapszintű formalizmusok

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Struktúra nélküli adatszerkezetek

Rendszermodellezés. Modellellenőrzés. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Tartalomjegyzék. Előszó... 10

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Operációs rendszerek Folyamatok 1.1

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Turing-gépek. Számításelmélet (7. gyakorlat) Turing-gépek 2009/10 II. félév 1 / 1

Tartalom. Operációs rendszerek. Precedencia. 3.2 Szinkronizáció. 3.1 Folyamatokból álló rendszerek. Együttműködő folyamatok használatának indokai

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Előadó: Dr. Oniga István DIGITÁLIS TECHNIKA 3

Chomsky-féle hierarchia

Algoritmizálás, adatmodellezés tanítása 6. előadás

ZH feladatok megoldásai

Logika és informatikai alkalmazásai kiskérdések február Mikor mondjuk, hogy az F formula a G-nek részformulája?

Alap fatranszformátorok II

Időzített rendszerek és az UPPAAL II

Osztott jáva programok automatikus tesztelése. Matkó Imre BBTE, Kolozsvár Informatika szak, IV. Év 2007 január

Operációs rendszerek II. Folyamatok ütemezése

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Algoritmusok bonyolultsága

Gyakorló feladatok: Formális modellek, temporális logikák, modellellenőrzés. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

UNIX: folyamatok kommunikációja

Rekurzió. Dr. Iványi Péter

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Csima Judit november 15.

angolul: greedy algorithms, románul: algoritmi greedy

A számítógépes nyelvészet elmélete és gyakorlata. Automaták

Szoftver karbantartási lépések ellenőrzése

Matematikai és Informatikai Intézet. 4. Folyamatok

Diszkrét matematika 2.C szakirány

Csak felvételi vizsga: csak záróvizsga: közös vizsga: Mérnök informatikus szak BME Villamosmérnöki és Informatikai Kar január 4.

Assembly. Iványi Péter

AWK programozás, minták, vezérlési szerkezetek

Maximum kiválasztás tömbben

Hardver és szoftver rendszerek verifikációja Röviden megválaszolható kérdések

ALGORITMUSOK ÉS BONYOLULTSÁGELMÉLET Matematika MSc hallgatók számára. 11. Előadás

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Operációs rendszerek MINB240

Architektúra, megszakítási rendszerek

Programozási nyelvek 6. előadás

Modellek és Algoritmusok - 2.ZH Elmélet

Első lépések. File/New. A mentés helyét érdemes módosítani! Pl. Dokumentumok. Fájlnév: pl. Proba

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Csima Judit október 24.

Operációs rendszerek MINB240

10. Előadás. 1. Feltétel nélküli optimalizálás: Az eljárás alapjai

Számításelmélet. Második előadás

Csima Judit BME, VIK, november 9. és 16.

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

Operációs rendszerek. Folyamatok ütemezése

Programozási Nyelvek: C++

A logikai következmény

LabView Academy. 4. óra párhuzamos programozás

2018, Funkcionális programozás

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Intellio Video System 2. Csatlakozási útmutató a demószerverhez

OE-NIK 2010/11 ősz OE-NIK ősz

Autóipari beágyazott rendszerek. Komponens és rendszer integráció


Programfejlesztési Modellek

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

Dualitás Dualitási tételek Általános LP feladat Komplementáris lazaság 2017/ Szegedi Tudományegyetem Informatikai Intézet

A digitális számítás elmélete

Fordítás Kódoptimalizálás

Operációs rendszerek. Folyamatok

Átírás:

Funkcionalitás és szinkronizáció SZINKRONIZÁCIÓS KÓD SZINTÉZISE A konkurens programokkal megoldandó feladatok jelentős részénél a szinkronizációs problémák megoldása (és az ehhez szükséges szinkronizációs kód előállítása) elválasztható a funkcionális probléma megoldásától. 3 Szinkronizációs kód szintézisének lépései Modell alkotás Feladat Modell Absztrakt program Konkrét program Elemzés Követelmények leírása Statikus modell Dinamikus modell Változók kezdeti értékei Folyamatok szerkezete Atomi műveletek kijelölése Szemaforok bevezetése Egyszerűsítés, ha lehet Kijelöljük a feladat megoldásának folyamatait, és az azok által közösen használt erőforrásokat, a folyamatok egymáshoz viszonyított szerepét (osztálydiagram). Meghatározzuk a folyamatok és az erőforrások lehetséges állapotait (állapotdiagram). A folyamatok állapotai aktív állapotok, tehát tevékenységekre (köztük az erőforrásokra irányuló tevékenységekre) utalnak. Az erőforrások állapotai a folyamatok tevékenységei közötti szinkronizációs feltételeiket tükrözik. Ha a folyamatoknak különböző prioritásaik is lehetnek, akkor a magasabb prioritásúak számára speciális állapotokat vezetünk be a korrekt ütemezés érdekében. 4 5 Modell alkotás Meghatározzuk az állapot-átmenetek műveleteit, az előfeltételeikkel együtt különös tekintettel az aktív állapotok be- (entry) és kilépési (exit) fázisaira (ezek őrfeltételes atomi műveletek lesznek majd az absztrakt programban), illetve az erőforrás-igénylést elindító (request) tevékenységre. Töröljük azokat a műveleteket, amelyek nem eredményeznek állapot-átmenetet. Absztrakt program tervezése A rszer állapotait jellemző változókat vezetünk be. Az állapotok invariánsát felírjuk a változók segítségével. Meghatározzuk az így bevezetett változók kezdeti értékeit. Elkészítjük a folyamatok vázát a kezdeti értékadásokkal együtt. Az osztott változókon dolgozó értékadásokat (az állapotdiagram műveleteit) a folyamatokhoz reljük úgy, hogy a folyamatok önmagukban helyes eredményt adjanak. Az értékadó utasításokat (ha kell őrfeltételes) atomi tevékenységekké fogjuk össze, ha azok csak kölcsönös kizárással hajthatók végre. (lásd külön a következő dián) Igazoljuk a az egyes folyamatok helyességét. 6 7 1

Atomi műveletek őrfeltételének meghatározása Konkrét program elkészítése <await β then S ta> 1. Az S művelet a modell egy aktív folyamatának művelete, amely olyan, úgynevezett szinkronizációs feltétellel van ellátva, amelyik egy közös erőforrás állapotától függ. Ekkor ez a feltétel lesz a β őrfeltétel. 2. Kezdetben csak az S műveletet és az ahhoz tartozó I invariánst (a közös, osztott változókra hivatkozó predikátum) ismerjük. Először meghatározzuk a {K} <S> {L} tételt úgy, hogy a K és L csak az S-re lokális változókra hivatkozhatnak. Ellenőrizzük, hogy az egyes folyamatok bizonyításai ezzel nem interferálnak. A β őrfeltételre az alábbinak kell teljesülni: K I β lf(s, L I) Szemaforokat relünk az őrfeltételes utasításokhoz. Definiáljuk a szemaforok kezdeti értékeit. Implementáljuk az őrfeltételes utasításokat a szemaforokat használó sémákkal. Ha lehetséges, akkor egyszerűsítjük a programot. 8 9 1. Példa: Számítógép labor használata (Sike Sándor és Varga László esettanulmánya) Egy számítógép laborban számítógépek vannak van. Hallgatók a tanulmányaikhoz számítógépet is használnak. Ha nincs szabad gép, akkor a laboron kívül várakoznak, amíg fel nem szabadul egy. A számítógép-használat befejeztével elhagyják a labort, és mással foglalkoznak, amíg újra nincs szükségük számítógépre. A labor karbantartását rszergazdák látják el. Bármelyik rszergazda kezdeményezhet karbantartást, de egy adott pillanatban csak egy végezhet karbantartást. A karbantartás addig nem kezdhető meg, amíg hallgató tartózkodik a laborban. Szimuláljuk ennek a rszernek a működését! Osztály diagram System * * Crew maintain use Lab 0..1 0..cap Student cap {exclude} 10 12 Dinamikus modell Állapotok: a rszer állapotát a rszergazdák állapota, a hallgatók állapota és a labor állapota együttesen határozza meg. Hallgatók dinamikus modellje Egy hallgató kétféle állapotban lehet: o Számítógépet használ (do/use). o Egyéb tevékenységet folytat (do/work). system crew i lab student j student j use.ent[φ 1 ] do / work use.ex do / use 13 14 2

Rszergazdák dinamikus modellje Egy rszergazda háromféle állapotban lehet: o Pihen (do/rest) o Karbantartási igénye van (requesting). o Karbantart (do/maintain) crew i request do / rest requesting maintain.ex do / maintain maintain.ent[φ 2 ] Labor dinamikus modellje A labor állapotát a benn tartózkodó hallgatók száma (t), a karbantartási igényt benyújtó rszergazdák száma (r), és a karbantartást végző rszergazdák száma (w) határozza meg. Az állapot átmeneteket a Student és a Crew műveletek végzik. use.ent use.ent[φ 3 ] empty normal full use.ex[φ 4 ] use.ex t=0 0<t<cap t=cap lab request maintain.ent OK requested maintained r=0 w=0 maintain.ex[φ 6 ] r>0 w=0 maintain.ex[φ 5 ] w=1 15 17 Állapot-átmenetek feltételei A diagrammokban feltüntettük, hogy hol van szükség őrfeltételre: o φ 1 (use.ent) : in full in OK o φ 2 (maintain.ent) : in empty in maintained o φ 3 (use.ent) : t = cap 1 o φ 4 (use.ex) : t = 1 o φ 5 (maintain.ex) : r>0 o φ 6 (maintain.ex) : r = 0 A fentiek közül a φ 1 és φ 2 szinkronizációs feltétel is egyben. o φ 1 (use.ent) :t cap w=0 r=0 o φ 2 (maintain.ent) : w=0 t=0 Megoldás váza t, r, w :=0, 0, 0; parbegin crew 1 crew n student 1 student m par változók t, r, w : N crew i : request; student j : tevékenység feltétel atomi utasítás request igaz <r := r+1> maintain.ent φ 1 w=0 t=0 <r := r1; w := w+1> maintain.ex igaz <w := w1> use.ent φ 2 t cap w=0 r=0 <t := t+1> use.ex igaz <t := t1> 18 19 Megoldás váza t, r, w :=0, 0, 0; parbegin crew 1 crew n student 1 student m par A rszer invariánsa: I 0 t cap r 0 (w=0 w=1) crew i : <r := r+1> <w=0 t=0 r := r1; w := w+1> <w := w1> student j : <t cap w=0 r=0 t := t+1> <t := t1> Absztrakt program crew i : await igaz then r := r+1 ta; await w=0 t=0 then r := r1; w := w+1 ta; await igaz then w := w1 ta; student j : await t cap w=0 r=0 then t := t+1 ta; await igaz then t := t1 ta; 20 21 3

Helyesség Parciális helyesség: Interferencia-mentesség: crew i crew j? student i student j? crew i student j? student j : { I } { I } await t cap w=0 r=0 then t := t+1 ta; { I t>0 w=0 } await igaz then t := t1 ta; { I t < cap } I 0 t cap r 0 (w=0 w=1) crew i : { I } { I } await igaz then r := r+1 ta; { I r>0 } await w=0 t=0 then r := r1; w := w+1 ta; { I t =0 w=1} await igaz then w := w1 ta; { I } 22 Új annotáció Kisegítő változók: w k, r k : {0,1} k=1..n t k : {0,1} k=1..m Új invariáns: I régi w = Σ k=1..n w k t = Σ k=1..m t k r = Σ k=1..n r k student j : { I } w i = 0 r i = 0 t j = 0 { I } t j = 0 await t cap w=0 r=0 then t := t+1 ta; t t { I t>0 w=0} j = 1 j :=1 await igaz then t := t1 ta; t j :=0 { I } t j = 0 crew i : { I } w i = 0 r i = 0 w i = 0 r i = 0 { I } await igaz then r := r+1 ta; r i :=1 { I r>0 } w i = 0 r i = 1 await w=0 t=0 then r := r1; w := w+1 ta; { I t =0 w=1} w i = 1 r i = 0 await igaz then w := w1 ta; { I} r i :=0; w i :=1 w i :=0 23 Parciális helyesség crew i : { I w i =0 r i = 0 } { I w i =0 r i = 0 } await igaz then r:=r+1; r i :=1 ta; { I r>0 w i =0 r i = 1 } await w=0 t=0 then r:=r1 ; r i :=0; w:=w+1; w i :=1 ta; { I t=0 w=1 w i =1 r i = 0 } await igaz then w:=w1; w i :=0 ta; student j : { I t j =0 } { I t j =0 } await t cap w=0 r=0 then t:=t+1; t j :=1 ta; { I t>0 w=0 t j =1} await igaz then t:=t1; t j :=0 ta; I 0 t cap (w=0 w=1) w = Σ k=1..n w k t = Σ k=1..m t k r = Σ k=1..n r k 24 Interferencia mentesség crew i crew j student i student j crew i student j student j : { I t j =0 } { I t j =0 } await t cap w=0 r=0 then t:=t+1; t j :=1 ta; { I t>0 w=0 t j =1} await igaz then t:=t1; t j :=0 ta; crew i : { I w i =0 r i = 0 } { I w i =0 r i = 0 } await igaz then r:=r+1; r i :=1 ta; { I r>0 w i =0 r i = 1 } await w=0 t=0 then r:=r1 ; r i :=0; w:=w+1; w i :=1 ta; { I t=0 w=1 w i =1 r i = 0 } await igaz then w:=w1; w i :=0 ta; 25 Kölcsönös kizárás use maintain maintain i maintain j legfeljebb cap darab use j crew i : await igaz then r:=r+1 ta; await w=0 t=0 then r:=r1; w:=w+1; w i :=1 ta; { I t=0 w=1 w i =1} await igaz then w:=w1; w i :=0 ta; student j : await t cap w=0 r=0 then t:=t+1; t j :=1 ta; { I t>0 w=0 t j =1} await igaz then t:=t1; t j :=0 ta; I 0 t cap (w=0 w=1) w = Σ k=1..n w k t = Σ k=1..m t k r = Σ k=1..n r k Kiéheztetés lehet 26 Holtpontmentesség student j : { I t j =0 } await t cap w=0 r=0 then t:=t+1; t j :=1 ta; await igaz then t:=t1; t j :=0 ta; i=1..n ( I w i =0 (w 0 t 0)) I 0 t cap (w=0 w=1) w = Σ k=1..n w k t = Σ k=1..m t k r = Σ k=1..n r k crew i : await igaz then r:=r+1 ta; { I w i =0 } await w=0 t=0 then r:=r1; w:=w+1; w i :=1 ta; await igaz then w:=w1; w i :=0 ta; j=1..m (I t j =0 (t=cap w 0 r 0 )) t=0 w=0 t 0 27 4

Három szemafor (s, bw, bt), két egész típusú változó (cw, ct): s ~ univerzális célú, sw, cw ~ await w=0 t=0 then r := r1; w := w+1 ta st, ct ~ await t cap w=0 r=0 then t := t+1 ta s, sw, cw, st, ct, t, r, w :=1, 0, 0, 0, 0, 0, 0, 0; parbegin crew 1 crew n student 1 student m par Használjuk majd az alábbi ütemezőt: if w =0 t =0 cw>0 cw := cw 1; V(sw) t cap w =0 r =0 ct>0 ct := ct1; V(st) crew i : r := r+1; if w 0 t 0 then cw := cw+1; V(s); P(sw) r := r1; w := w+1; w := w1; crew i : await igaz then r := r+1 ta; await w=0 t=0 then r := r1; w := w+1 ta; await igaz then w := w1 ta; 28 29 student j : if t=cap w 0 r 0 then ct := ct+1; V(s); P(st) t := t+1; t := t1; student j : await t cap w=0 r=0 then t := t+1 ta; await igaz then t := t1 ta; 30 Egyszerűsítés r-t elimináljuk, mert crew i : r és cw jelentése azonos 3 3 r := r+1; if w 0 t 0 then cw := cw+1; V(s); P(sw) 3 r := r1; w := w+1; V(s) 4 rszergazda igényét rögtön elégítsük ki vagy álljon be sw-hez itt nem teljesülhet w =0 w := w1; 3 cw =0 if w =0 t =0 cw>0 cw cw := := cw cw 1; 1; V(sw) t cap w =0 r =0 ct>0 ct ct := := ct1; V(st); 5 schedule helyett V(s) 1 itt nem teljesülhet r =0 (r:=r+1 miatt), sem w =0 t =0 cw>0 (ennek már a megelőző kritikus szakasz végén is fenn kellene állnia, ami nem lehet. Tfh lehet, de ekkor r>0 miatt az ottani schedule a V(sw) révén újabb kritikus szakaszt indít. V(s);P(s) helyett skip 2 31 Egyszerűsítés student j : cw 0 if t=cap w 0 r 0 then ct := ct+1; V(s); P(st) t := t+1; if w =0 t =0 cw>0 cw := cw 1; V(sw) t cap w =0 r =0 ct>0 ct := ct1; V(st) t := t1; elsif V(s) if w =0 t =0 cw>0 cw := cw 1; V(sw) t cap w =0 r =0 ct>0 ct := ct1; V(st) cw = 0 Konkrét program crew i : s, sw, cw, st, ct, t, w :=1, 0, 0, 0, 0, 0, 0; parbegin crew 1 crew n student 1 student m par if w 0 t 0 then cw := cw+1; V(s); P(sw) w := w+1; V(s); w := w1; if cw>0 cw := cw 1; V(sw) r =0 ct>0 ct := ct1; V(st) 32 33 5

Egyszerűsítés student j : if t=cap w 0 cw 0 then ct := ct+1; V(s); P(st) t := t+1; if t cap ct>0 ct := ct1; V(st) t := t1; if t =0 cw>0 cw := cw 1; V(sw) r =0 ct>0 ct := ct1; V(st); 2. Példa: kritikus szakaszok Egymással párhuzamosan hajtsunk végre olyan tevékenységeket, amelyekben lehetnek olyan (kritikus) szakaszok, amelyek egy erőforrást kizárólagos módon használnak, és olyan (nem kritikus) szakaszok, amelyek csak lokális adatokat használnak. Egy konkurens program minden folyamata ismétlődően hajtson végre egy kritikus és egy nem kritikus szakaszból álló tevékenységet. 34 35 Statikus modell Dinamikus modell system System client i server Server use 0..1 2.. * Client client i server do / otherjob unused use.ent[ in unused] use.ex use.ent use.ex do / use used 36 37 Megoldás váza parbegin client 1 client n par Legyen in:{0,1} n egy tömb, client i : otherjob; in k =1 ~ client k kritikus szakaszában (use) van A rszer invariánsa: I Σ k=1..n in k 1 Kritikus szakaszba lépés őrfeltétele (use.ent): Σ k=1..n in k = 0 in :=0 parbegin client 1 client n par client i : otherjob; <in i :=1> <in i :=0> Atomi értékadások őrfeltételei KIβ lf(s, LI) Tekintsük az <in i :=1> atomi utasítást. lf(in i :=1; in i =1 I) = (1=1 in 1 + +in i 1 +1+in i+1 + +in n 1 ) =(in 1 + +in i 1 +in i+1 + +in n =0 ) Ez nem következik az I-ből, ezért kell őrfeltétel: β= in 1 + +in i 1 +in i+1 + + in n =0 vagy helyette β = in 1 + + in n =0 Tekintsük az <in i :=0> atomi utasítást. lf(in i :=0; in i =0 I) = (0=0 in 1 + +in i 1 +0+in i+1 + +in n =0 1 ) Ez következik az I-ből, tehát nem kell őrfeltétel. 38 39 6

Absztrakt algoritmus in :=0 I Σ k=1..n in k 1 { I Σ k=1..n in k = 0 } parbegin client i : crew 1 crew otherjob; n par { I in i = 0 } await Σ k=1..n in k = 0 then in i :=1 ta ; { I in i = 1 } await igaz then in i :=0 ta ; { I in i = 0 } helyes (interferencia-mentes) kölcsönös kizárás, holtpontmentesség kiéheztetés lehet Konkrét algoritmus in :=0; s, sc, cc:= 1, 0, 0; parbegin client 1 client n par Vezessük be az s 1 Σ k=1..n in k mutexet, amelynek segítségével a várakozó utasításokat client i : másképpen is írhatjuk. otherjob; <s>0 s:=s 1; in i :=1>; <s:=s+1; in i :=0>; client i : otherjob; P(s) ; V(s) ; Ekkor in k (k=1 n) kisegítő változók feleslegessé válnak, és az < s>0 s:=s 1>-t P(s)-sel, az <s:=s+1>-t a V(s)-sel implementálhatjuk. 40 41 3. Példa: termelő fogyasztó probléma Kétféle fajtájú párhuzamosan futó tevékenység egyetlen egyelemű puffert használ: az egyik fajta beletesz (deposit) egy újabb elemet, feltéve hogy az üres (elem nem írható felül) A másik fajta kivesz (fetch) egy elemet, feltéve hogy nem üres (egy elemet csak egyszer lehet kivenni). Osztály diagram System 1.. n 1.. m Producer deposit fetch Buffer 0..1 0..1 Consumer 0 v cap {exclude} 43 44 Dinamikus modell producer i do/ produce system buffer d.ex d.ent f.ent f.ex d.ent [v=0] [v=1] f.ent [ in full] normal [ in empty] do/ deposit empty d.ent f.ent [v+1=cap] [v=cap ] full consumer j do/ process do/ fetch 45 Megoldás váza Változók: vol:n, free:{0,1}, p :{0,1} n, c:{0,1} m vol: a puffer feltöltöttsége. P i : produce; deposit; free: 0, ha valamelyik folyamat használja a puffert, különben 1. p i : 1, ha P i folyamat használja a puffert, különben 0. c j : 1, ha C j folyamat használja a puffert, különben 0. Invariáns: I 0 vol cap free=1 Σ k=1..n p k Σ l=1..m c l p, c, vol, free := 0, 0, 0, 1; parbegin P 1 P n C 1 C m par P i : produce; <p i :=1; free:=0; vol:=vol+1>; deposit; <p i :=0; free:=1> C j : fetch; process; C j : <c j :=1; free:=0; vol:=vol 1>; fetch; <c j :=0; free:=1> process; 46 7

Atomi értékadások őrfeltételei (termelő) QIβ lf(s, RI) {p j =0 vol=v } <p j :=1; free:=0; vol:=vol+1> {p j =1 free=0 vol=v +1} lf(p j :=1 ; free:=0; vol:=vol+1; p j =1 free=0 vol=v +1 I)= 1=1 0=0 vol+1=v +1 0vol+1cap 0=1 Σ k=1..n p k Σ l=1..m c l Ez nem következik az p j =0 vol=v I-ből, ezért kell őrfeltétel: β= vol<cap free=1 {p j =1} <p j :=0; free:=1> {p j =0 free=1 } lf(p j :=0 ; p j =0 free=1 I)= 0=0 1=1 0vol cap 1=1 Σ k=1..n p k Σ l=1..m c l Ez következik az I-ből, tehát itt nem kell őrfeltétel. I 0 vol cap free=1 Σ k=1..n p k Σ l=1..m c l Atomi értékadások őrfeltételei (termelő) QIβ lf(s, RI) {c j =0 vol=v } <c j :=1; free:=0; vol:=vol 1> {c j =1 free=0 vol=v 1} lf(c j :=1 ; free:=0; vol:=vol+1; c j =1 free=0 vol=v +1 I)= 1=1 0=0 vol 1=v 1 0vol 1cap 0=1 Σ k=1..n p k Σ l=1..m c l Ez nem következik az c j =0 vol=v I-ből, ezért kell őrfeltétel: β= vol>0 free=1 {c j =1} <c j :=0; free:=1> {c j =0 free=1 } lf(c j :=0 ; c j =0 free=1 I)= 0=0 1=1 0vol cap 1=1 Σ k=1..n p k Σ l=1..m c l Ez következik az I-ből, tehát itt nem kell őrfeltétel. I 0 vol cap free=1 Σ k=1..n p k Σ l=1..m c l 47 48 Absztrakt program P i : {I p i =0} e:= produce(); await vol<cap free=1 then p i := 1; free:=0; vol:=vol+1 ta; {I p i =1 free=0} deposit(e); await igaz then p i := 0; free:=1 ta; {I p i =0} helyes (interferencia) free=0 p i =1 c j =1 kölcsönös kizárás p i =1 c j =1 holtpontmentesség free=0 p i =0 c j =0 kiéheztetés lehet p, c, vol, free:= 0, 0, 0, 1; parbegin P 1 P n C 1 C m par C j : {I c j =0} await vol>0 free=1 then c j := 1; free:=0; vol:=vol 1 ta; {I c j =1 free=0} e:=fetch(); await igaz then c j := 0; free:=1 ta; {I c j =0} process(e); I 0 vol cap free=1 Σ k=1..n p k Σ l=1..m c l 49 Három szemafor (s, bw, bt) és két egész típusú változó (cw, ct): s ~ univerzális célú, sp, cp ~ await vol<cap free=1 sc, cc ~ await vol>0 free=1 Használjuk majd az alábbi ütemezőt: s, sp, cp, sc, cc, p, c, vol, free :=1, 0, 0, 0, 0, 0, 0, 0, 1; parbegin P 1 P n C 1 C m par if vol<cap free=1 cp>0 cp := cp1; V(sp) vol>0 free=1 cc>0 cc := cc1; V(sc) igaz V(s) 50 P i : e:= produce(); if vol=cap free=0 then cp:=cp+1; V(s); P(sp); fi p i := 1; free:=0; vol:=vol+1; deposit(e); p i := 0; free:=1; P i : e:= produce(); await vol<cap free=1 then p i := 1; free:=0; vol:=vol+1 ta; deposit(e); await igaz then p i := 0; free:=1 ta; C j : if vol=0 free=0 then cc:=cc+1; V(s); P(sc); fi c j := 1; free:=0; vol:=vol 1; e:=fetch(); c j := 0; free:=1; process(e); C j : await vol>0 free=1 then c j := 1; free:=0; vol:=vol 1 ta; e:=fetch(); await igaz then c j := 0; free:=1 ta; process(e); 51 52 8

Egyszerűsítés P i : e:= produce(); if vol=cap free=0 then cp:=cp+1; V(s); P(sp); fi p i := 1; free:=0; vol:=vol+1; deposit(e); V(s); p i := 0; free:=1; V(s); if vol<cap free=1 cp>0 cp := cp1; V(sp) vol>0 free=1 cc>0 cc := cc1; V(sc) Egyszerűsítés C j : if vol=0 free=0 then cc:=cc+1; V(s); P(sc); fi c j := 1; free:=0; vol:=vol 1; e:=fetch(); V(s); c j := 0; free:=1; process(e); if vol<cap free=1 cp>0 cp := cp1; V(sp) vol>0 free=1 cc>0 cc := cc1; V(sc); 53 54 4. Példa: Étkező filozófusok Osztály diagram Adott számú filozófus ül egy kör alakú asztal körül, az asztal közepén egy nagy tál étel, minden filozófus előtt egy tányér, attól jobbra illetve balra egy-egy villa, amelyet jobb illetve baloldali szomszédjukkal közösen, de nem egyszerre használhatnak. A filozófusok felváltva esznek és gondolkodnak. Ha enni akarnak, meg kell várniuk, hogy a tőlük jobbra illetve balra eső villa is szabad legyen, ezután megkezdhetik az evést, majd az evés végeztével visszateszik az asztalra villáikat. n Fork 0, 2 System use n Philosopher 55 56 Dinamikus modell philosopher i do/ think system fork j eat.ex eat i.ex eat.ent [ in free i eat i.ent eat i 1.ex in free i 1 ] eat i 1.ent do/ eat free used P i : Megoldás váza think; eat; Változók: p :{0,1} n, p k =1 k. filozófus eszik f :{0,1} n, f k =1 k. filozófustól balra eső villa használatban Invariáns: I k {1 n}: (p k =0 p k 1 =0) p k =1 (f k =1 f k 1 =1) f k =1 (f k 1 =1 f k 1 =1) p, f := 0, 0; parbegin P 1 P n par P i : think; < f i =0 f i 1 =0 p i := 1; f i :=1; f i 1 :=1>; eat; < p i := 0; f i :=0; f i 1 :=0 > 57 58 9

Absztrakt program I k {1 n}: (p k =0 p k 1 =0 ) p k =1 (f k =1 f k 1 =1) f k =1 (f k 1 =1 f k 1 =1) P i : { I p i =0 } think; await f i =0 f i 1 =0 then p, f := 0, 0; p i := 1; f i :=1; f i 1 :=1 ta; parbegin P 1 P n par { I p i = 1 f i =1 f i 1 =1 } eat; await igaz then p i := 0; f i :=0; f i 1 :=0 ta; { I p i =0 f i =0 f i 1 =0 } helyesség (interferencia) {(I p j =0) pre(u ik )} u ik {I p j =0} {(I p j = 1 f j =1 f j 1 =1 ) pre(u ik )} u ik {I p j = 1 f j =1 f j 1 =1 } kölcsönös kizárás (csak a szomszédos filozófusokra) (I p i = 1 f i =1 f i 1 =1) (I p i 1 = 1 f i 1 =1 f i 2 =1) holtpontmentesség (kiéheztetés lehet) i {1 n}: I p i = 0 (f i =1 f i 1 =1) Három szemafor (s, bw, bt) és két egész típusú változó (cw, ct): s ~ univerzális célú, sf, cf ~ await f i =0 f i 1 =0 p, f, s, se, ce:= 0, 0, 1, 0, 0, 0, 0; parbegin P 1 P n par Használjuk majd az alábbi ütemezőt: if f i =0 f i 1 =0 cf>0 then cf := cf1; V(sf) 59 60 P i : think; if f i 0 f i 1 0 then cf:=cf+1; V(s); P(se) p i := 1; f i :=1; f i 1 :=1; eat; p i := 0; f i :=0; f i 1 :=0; P i : think; await f i =0 f i 1 =0 then p i := 1; f i :=1; f i 1 :=1 ta; eat; await igaz then p i := 0; f i :=0; f i 1 :=0 ta; Példa (adatbázis) Egy adatbázist kétféle folyamat használhat n>0 darab író (writer) és m>0 darab olvasó (reader) Az író folyamatok egymást kölcsönösen kizárják az adatbázis használatából. Az olvasó folyamatok közül tetszőleges számú folyamat használhatja egyidejűleg az adatbázist. Egy író és egy olvasó folyamat kölcsönösen kizárja egymást az adatbázis használatából. parbegin W 1 W n R 1 R m par 61 62 Osztály diagram Dinamikus modell system System writer i database reader j 1.. n 1.. m Writer write read Database 0..1 * Reader reader j read.ex do / read read.ent[φ 1 ] do / work database {exclude} writer i write.ent[φ 2 ] do / work write.ex do / write write.ent read.ent unused used read.ex[φ 3 ] write.ex read.ex[φ 4 ] 63 64 10

Megoldás váza Az adatbázis állapotát az olvasás illetve írás flagjei (r, w : {0,1}), és az olvasást végző folyamatok száma (c : N) jellemzi. tevékenység feltétel atomi utasítás write.ent φ 1 w=0 r=0 <w := 1> write.ex igaz <w := 0> read.ent φ 2 w=0 <c := c+1; r:=1> read.ex igaz <c := c 1; if c=0 then r := 0 > w, r, c := 0, 0, 0; parbegin W 1 W n R 1 R m par W i : write; R j : read; Példa (adatbázis): segédváltozók Vezessünk be megfelelő annotáláshoz kisegítő változókat: w i :{0,1} ~ 1, ha az i-dik folyamat éppen ír (i=1...n) r j : {0,1} ~ 1, ha a j-dik folyamat éppen olvas (j=1...m) Invariáns állítás: I w=sgn( k=1..n w k ) c = k=1..m r k r=sgn(c) (w=0 r=0) w, r, c, w, r:=0, 0, 0, 0, 0; {I} parbegin W 1 W n R 1 R m par { } 65 66 Példa (adatbázis): annotálás és helyesség R j : { I r j =0 } await w=0 then c:=c+1; r:=1; r j :=1 ta; { I r j =1 r=1 c>0 } read; { I r j =1 r=1 c>0 } await igaz then c:=c 1; if c=0 then r := 0 r j :=0 ta; { I r j =0 } W i : { I w i =0 } { I w i =0 } await w=0 r=0 then w:=1; w i :=1 ta; { I w i =1 w=1 } write; { I w i =1 w=1 } await igaz then w:=0; w i :=0 ta; I w=sgn( k=1..n w k ) c = k=1..m r k r=sgn(c) (w=0 r=0) Példa (adatbázis): interferencia-mentesség { I r j =0 } await w=0 then c:=c+1; r:=1; r j :=1 ta; { I r j =1 r=1 cr>0 } await igaz then c:=c 1; if c=0 then r := 0 r j :=0 ta; { I w i =0 } await w=0 r=0 then w:=1; w i :=1 ta; { I w i =1 w=0 } await igaz then w:=0; w i :=0 ta { I r k =1 r=1 c>0 } { I r k =1 r=1 c>0 } { I r k =0 } { I w k =0 } { I w k =1 w=1 } { I w k =1 w=1 } { I r k =1 r=1 c>0 } { I r k =1 r=1 c>0 } { I r k =0 } { I w k =0 } { I w k =1 w=1 } { I w k =1 w=1 } I w=sgn( k=1..n w k ) c = k=1..m r k r=sgn(c) (w=0 r=0) 67 68 Példa (adatbázis): kölcsönös kizárás Egy író és egy olvasó folyamat kölcsönösen kizárják egymást az adatbázis használatából, azaz bármelyik i {1 n}-re és bármelyik j {1 m}-re: pre writei pre readj o [ I w i =1 w=1] [I r j =1 r=1 c>0] Az író folyamatok kölcsönösen kizárják egymást az adatbázis használatából, azaz bármelyik i,j {1 n}-re, ahol i j : pre writei pre writej o [ I w i =1 w=1] [ I w j =1 w=1] Példa (adatbázis): holtpontmentesség A holtpontmentességhez bizonyítani kell, hogy: i=1..n D(W i ) j=1..m D(R j ) ahol D(W i ) = I w i=0 (w=1 r=1) és D(R j ) = I r j=0 w=1 i=1..n D(W i ) j=1..m D(R j ) I k=1..n w k =0 w=1 I w=sgn( k=1..n w k ) c = k=1..m r k r=sgn(c) (w=0 r=0) I w=sgn( k=1..n w k ) c = k=1..m r k r=sgn(c) (w=0 r=0) 69 70 11

Példa (adatbázis): koplaltatás A rszer nem mentes a koplaltatástól. Lehet olyan helyzet hogy o minden író folyamat várakozik: i=1..n ( I w i =0 (w=1 r=1)) o mert az adatbázist olvasó folyamatok használják: I r=1 o és további olvasó folyamatok részére szabad az út a belépéshez: I r j =0 w=0 I w=sgn( k=1..n w k ) c = k=1..m r k r=sgn(c) (w=0 r=0) W i : if w 0 r 0 then cw:=cw+1;v(s); P(sw) w:=1; write; w:=0; W i : await w=0 r=0 then w:=1 ta; write; await igaz then w:=0 ta 71 72 R j : if w 0 then cr:=cr+1; V(s); P(sr) c:=c+1; r:=1; read; c:=c 1; if c=0 then r := 0 R j : await w=0 then c:=c+1; r:=1 ta; read; await igaz then c:=c 1; if c=0 then r := 0 fi ta; 73 12