A SPIN használata, példák II

Hasonló dokumentumok
Az előadás vázlata. A SPIN modellellenőrző rendszer. Motivációk. (,,Ha a Microsoft autókat gyártana )

Webprogramozás szakkör

BUDAPESTI MÛSZAKI EGYETEM Méréstechnika és Információs Rendszerek Tanszék. SPIN Mérési útmutató. Készítette: Jávorszky Judit

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Occam 1. Készítette: Szabó Éva

2016, Diszkrét matematika

Alapszintű formalizmusok

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

2018, Funkcionális programozás

2018, Diszkre t matematika. 8. elo ada s

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

1.1. Definíció. Azt mondjuk, hogy a oszója b-nek, vagy más szóval, b osztható a-val, ha létezik olyan x Z, hogy b = ax. Ennek jelölése a b.

7. fejezet: Mutatók és tömbök

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

Gyakorló feladatok Gyakorló feladatok

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Dicsőségtabló Beadós programozási feladatok

Algoritmusok és adatszerkezetek II.

Funkcionális Nyelvek 2 (MSc)

2017, Diszkrét matematika

Objektumorientált Programozás III.

Időzített rendszerek és az UPPAAL II

Automatikus tesztgenerálás modell ellenőrző segítségével

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

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

7. Laboratóriumi gyakorlat, 1. rész : Vezérlési szerkezetek II.

2018, Diszkre t matematika. 10. elo ada s

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

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

Hatványozás. A hatványozás azonosságai

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Dénes Tamás matematikus-kriptográfus

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

A modell-ellenőrzés gyakorlata UPPAAL

KNX távirat nyugtázása. Épületinformatika. KNX távirat példa. KNX távirat példa

UNIX: folyamatok kommunikációja

Programozás I. 5. Előadás: Függvények

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Felvételi tematika INFORMATIKA

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

SzA XIII. gyakorlat, december. 3/5.

Vezérlési szerkezetek

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

START. Billentyűzár ki. Üss be egy számot. Beütöttem az összes számot. Hívás. Várakozás. felveszik. Beszélek. Befejezem a beszélgetést.

Sapientia Egyetem, Matematika-Informatika Tanszék.

Számelméleti alapfogalmak

Kongruenciák. Waldhauser Tamás

S z á m í t ó g é p e s a l a p i s m e r e t e k

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Számítógépes Hálózatok

2. Visszalépéses keresés

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

Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Prímszámok statisztikai analízise

Programozás II. ATM példa Dr. Iványi Péter

Programozási segédlet

Diszkrét matematika 1. estis képzés. Komputeralgebra Tanszék ősz

Ütemezési problémák. Kis Tamás 1. ELTE Problémamegoldó Szeminárium, ősz 1 MTA SZTAKI. valamint ELTE, Operációkutatási Tanszék

7. Számelmélet. 1. Lehet-e négyzetszám az a pozitív egész szám, amelynek tízes számrendszerbeli alakjában 510 darab 1-es és valahány 0 szerepel?

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Programozás I. házi feladat

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

1. Egészítsük ki az alábbi Python függvényt úgy, hogy a függvény meghatározza, egy listába, az első n szám faktoriális értékét:

Következik, hogy B-nek minden prímosztója 4k + 1 alakú, de akkor B maga is 4k + 1 alakú, s ez ellentmondás.

Java programozási nyelv

Logika és informatikai alkalmazásai

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

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

Komputeralgebra Rendszerek

A modell-ellenőrzés gyakorlata

A félév során előkerülő témakörök

Logika és informatikai alkalmazásai

6. A Pascal nyelv utasításai

Share wave 4: 50+ in Europe - Coverscreenwizard version 4.8.6

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

Dinamikus programozás - Szerelőszalag ütemezése

Programozási nyelvek JAVA EA+GY 1. gyakolat

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

INFORMATIKAI ALAPISMERETEK

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Kriptográfia 0. A biztonság alapja. Számítás-komplexitási kérdések

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

BASH script programozás II. Vezérlési szerkezetek

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Informatika terméktervezőknek

Diszkrét matematika I.

Számelmélet. Oszthatóság

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

Átírás:

A SPIN használata, példák II Dr. Németh L. Zoltán (zlnemeth@inf.u-szeged.hu) SZTE, Informatikai Tanszékcsoport 2008/2009 I. félév 2008.10.18/2 MODELL 9 1

2. példa: Egy osztott algoritmus Pl. legyen ez az Eratoszhenészi szita Eratoszthenész (Küréné, i. e. 276 Alexandria, i. e. 194) hellenisztikus matematikus, földrajztudós, csillagász, filozófus, költő, zenész jól ismert algoritmus (és programozási gyakorlat) prímszámok előállítására http://hu.wikipedia.org/wiki/eratoszthenész_szitája Mivel a PROMELA modellek csak végesek lehetnek meg kell adnunk egy felső korlátot a legnagyobb egész számra aminek a prímségét tesztelni akarjuk Legyen ez MAX. Mivel a SPIN elsősorban nem számítási problémák (hanem protokollok) ellenőrzésére van ne várjuk tőle, hogy hatalmas korlátokkal is megbirkózik. Kezdjük 2008.10.18/2 mondjuk MAX = MODELL 25-tel. 9 2

Párhuzamos megvalósítás az egyik folyamat végezze minden páros szám kihúzását (tesztelését) a második folyamat minden hárommal oszthatóét, stb. a folyamatoknak dinamikusan kell létrehozniuk egymást, így például, miután az 5 számot se az osztható 2-vel?, se az osztható 3-mal folyamat nem szűri ki az osztható 3-mal folyamat létrehozza az osztható 5- tel? folyamatot ez az új folyamat az osztható 3-mal folyamat gyermek folyamata lesz, tőle kapja majd a számokat tesztelésre 2008.10.18/2 MODELL 9 3

Egy folyamat működése minden folyamat egyik paramétere egy prime prímszám, mellyel való oszthatóságot hivatott tesztelni másik paramétere egy csatorna neve: c, amelyen a tesztelendő számokat kapja a szülő folyamatától ha egy szám amit kapott osztható prime-mal, akkor nincs további teendő ha nem osztható, akkor a folyamat tovább küldi a gyermek folyamatának tesztelésre 2008.10.18/2 MODELL 9 4

Egy folyamat működése II ha még nincs gyermek folyamata, akkor létre kell azt hozni, mégpedig a tesztelendő számmal és egy csatornával (ez utóbbi neve a folyamat lokális változója) ilyenkor persze a tesztelendő számról tudjuk, hogy prím, mert minden folyamat szűrőjén átment ezért a létrehozott folyamatnak az első dolga az lesz, hogy a saját prime paraméterét kiírja, mint prímszámot ezen felül kell még egy init folyamat, mely létrehozza az első tesztelő folyamatot prime=2 értékkel és aztán sorra adogatja neki a számokat, 3-tól MAX-ig 2008.10.18/2 MODELL 9 5

Az algoritmus befejezése miután init az összes számot MAX-ig beadta,,osztható 2-vel? -nek elküldi neki az eof üzenetet, hogy fejezze be a működését ezt az üzenetet,,osztható 2-vel? továbbadja gyermek folyamatának,,osztható 3-mal? -nak és így tovább azaz minden folyamat az eof üzenetet továbbküldi (ha van gyereke), majd véget ér mint mindig a folyamatok most is csak keletkezésükkel ellentétes sorrendben tudnak kihalni, de ez nem probléma. 2008.10.18/2 MODELL 9 6

Megvalósítás I. eratosthenes.pml /* The Sieve of Eratosthenes (c. 276-196 BC) Prints all prime numbers up to MAX */ #define MAX 25 mtype = { number, eof }; Az üzenetek típusa: szám vagy vége jelzés chan root = [0] of { mtype, int }; Az első szinkorn (randevú) csatorna a 2. komponens a szám értéke, eof üzenetnél 0 lesz. 2008.10.18/2 MODELL 9 7

init { int n = 2; run sieve(root, n); do Megvalósítás II. :: (n < MAX) -> n++; root!number(n) :: (n >= MAX) -> root!eof(0); break od } A legelső prím a 2. Sorra küldi a gyerek folyatának a számokat. A végén (eof,0) az üzenet. 2008.10.18/2 MODELL 9 8

Megvalósítás III. proctype sieve(chan c; int prime) { chan child = [0] of { mtype, int }; bool haschild; int n; printf("msc: %d is prime\n", prime); do :: c?number(n) -> if :: (n%prime) == 0 -> printf("msc: %d = %d*%d\n", n, prime, n/prime) :: else -> if ::!haschild -> /* new prime */ fi haschild = true; run sieve(child, n); :: else -> child!number(n) fi; lokális változó amin a gyerekével kommunikál Van-e már gyereke vagy ő az utolsó folyamat? Ha n osztható prime-al, akkor nem prímszám. Ha ő az utolsó folyamat, új prímet találtunk. Különben a számot továbbküldjük a gyerekének. 2008.10.18/2 MODELL 9 9

Megvalósítás IV. :: c?eof(0) -> break od; if :: haschild -> child!eof(0) :: else fi } Vége. Ha eof üzenet jött kilépünk a ciklusból. Ha van gyerek folyamatunk, továbbadjuk neki az eof üzenetet. 2008.10.18/2 MODELL 9 10

Egy futás lehetséges eredménye >spin eratosthenes.pml MSC: 2 is prime MSC: 3 is prime MSC: 4 = 2*2 MSC: 5 is prime MSC: 6 = 2*3 MSC: 8 = 2*4 MSC: 7 is prime MSC: 9 = 3*3 MSC: 10 = 2*5 MSC: 12 = 2*6 MSC: 14 = 2*7 MSC: 11 is prime MSC: 15 = 3*5 MSC: 16 = 2*8 MSC: 13 is prime MSC: 18 = 2*9 MSC: 20 = 2*10 MSC: 17 is prime MSC: 22 = 2*11 MSC: 21 = 3*7 MSC: 24 = 2*12 MSC: 19 is prime MSC: 25 = 5*5 MSC: 23 is prime 2008.10.18/2 MODELL 9 11

Szimuláció Maga az algoritmus determinisztikus De a folyamatok ütemezése nem Ezért az üzenetküldések sorrendje és így a pírmek felfedezésének sorrendje is változhat. Végül mind a 10 folyamat befejeződik. Ezek a következők: az init folyamat és a 9 prímszám teszt folyamata MAX= 25-ig: 2, 3, 5, 7, 11, 13, 17, 19, 23 2008.10.18/2 MODELL 9 12

(Spin Version 5.1.6 -- 9 May 2008) + Partial Order Reduction Verifikáció Full statespace search for: never claim - (not selected) assertion violations - (disabled by -A flag) cycle checks - (disabled by -DSAFETY) invalid end states + State-vector 280 byte, depth reached 288, errors: 0 2093 states, stored 478 states, matched 2571 transitions (= stored+matched) 0 atomic steps hash conflicts: 0 (resolved) 2.891 memory usage (Mbyte) Minden rendben. 2008.10.18/2 MODELL 9 13

Az állapotszám csökkenthető az állapotszám robbanás ellen az egyik hatékony eszköz a részbenrendezési redukció (partial order reduction) alkalmazásával csökkenteni tudjuk a megvizsgálandó állapotok számát ezt a technikát segíthetjük ha a csatornák használatára feltételezéseket közlünk (közben a feltételezéseket is ellenőrizni fogjuk) exclusive read: xr csat = csak az adott folyamat olvas a csat nevű csatornából exclusive send: xs csat = csak az adott folyamat küld üzenetet a csat nevű csatornába Esetünkben: a sieve folyamatban: xr c; xs child az init folyamatban xs root igaz feltételezés. 2008.10.18/2 MODELL 9 14

Az állapotszám csökkenthető II. Csak az a gond, hogy ezek a csatorna feltételezések nem alkalmazhatók randevú csatornákra. A,,Check xr/xs Assertion opciót bekapcsolva: chan root (0), sndr proc :init: (0) pan: xs chans cannot be used for rv (at depth 0) pan: wrote pan_in.trail errors: 1 Át kell térnünk ezért 1 üzenetet tároló csatornákra: chan root = [1] of { mtype, int }; chan child = [1] of { mtype, int }; De ez önmagában (csatorna-feltételezések nélkül) több mint tízszeresére, 24548-ra növeli az állapotszámot eratosthenesb.pml ellenőrzése 2008.10.18/2 MODELL 9 15

Az állapotszám csökkenthető III. Mégis, csatorna-feltételezésekkel együtt: (Spin Version 5.1.6 -- 9 May 2008) + Partial Order Reduction eratosthenesc.pml ellenőrzése Full statespace search for: never claim - (not selected) assertion violations - (disabled by -A flag) cycle checks - (disabled by -DSAFETY) invalid end states + State-vector 280 byte, depth reached 288, errors: 0 289 states, stored 0 states, matched 289 transitions (= stored+matched) 0 atomic steps hash conflicts: 0 (resolved) 2.501 memory usage (Mbyte) Ami a csatornafeltételezések meglepő hatékonyságát mutatja. 2008.10.18/2 MODELL 9 16