analisi
This commit is contained in:
parent
6140efd278
commit
7117cc6dce
5 changed files with 154 additions and 12 deletions
38
anno3/vpc/consegne/3/3.2.b.smv
Normal file
38
anno3/vpc/consegne/3/3.2.b.smv
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
MODULE main
|
||||||
|
VAR
|
||||||
|
turn: 1 .. 2;
|
||||||
|
p: proc(turn, 1);
|
||||||
|
q: proc(turn, 2);
|
||||||
|
ASSIGN
|
||||||
|
init(turn) := 1;
|
||||||
|
next(turn) :=
|
||||||
|
case
|
||||||
|
q.state = done: 1;
|
||||||
|
p.state = done: 2;
|
||||||
|
TRUE: turn;
|
||||||
|
esac;
|
||||||
|
|
||||||
|
CTLSPEC -- no mutual exclusion
|
||||||
|
AG (p.state != critical | q.state != critical)
|
||||||
|
|
||||||
|
CTLSPEC -- no deadlock
|
||||||
|
AG ((p.state = wait | q.state = wait) -> AF (p.state = critical | q.state = critical))
|
||||||
|
|
||||||
|
CTLSPEC -- no individual starvation
|
||||||
|
AG (p.state = wait -> AF p.state = critical)
|
||||||
|
CTLSPEC
|
||||||
|
AG (q.state = wait -> AF q.state = critical)
|
||||||
|
|
||||||
|
MODULE proc(turn, id) -- Model a process taking turn
|
||||||
|
VAR
|
||||||
|
state: {begin, wait, critical, done};
|
||||||
|
ASSIGN
|
||||||
|
init(state) := begin;
|
||||||
|
next(state) :=
|
||||||
|
case
|
||||||
|
state = begin: {begin, wait};
|
||||||
|
state = wait & turn = id: critical;
|
||||||
|
state = critical: critical;
|
||||||
|
state = done: begin;
|
||||||
|
TRUE: state;
|
||||||
|
esac;
|
37
anno3/vpc/consegne/3/3.2.smv
Normal file
37
anno3/vpc/consegne/3/3.2.smv
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
MODULE main
|
||||||
|
VAR
|
||||||
|
turn: 1..2;
|
||||||
|
p: process proc(turn, 1);
|
||||||
|
q: process proc(turn, 2);
|
||||||
|
ASSIGN
|
||||||
|
init(turn) := 1;
|
||||||
|
|
||||||
|
CTLSPEC -- no mutual exclusion
|
||||||
|
AG (p.state != critical | q.state != critical)
|
||||||
|
|
||||||
|
CTLSPEC -- no deadlock
|
||||||
|
AG (p.state = wait -> AF (p.state = critical | q.state = critical))
|
||||||
|
|
||||||
|
CTLSPEC -- no individual starvation
|
||||||
|
AG (p.state = wait -> AF p.state = critical)
|
||||||
|
|
||||||
|
MODULE proc(turn, id) -- Model a process taking turn
|
||||||
|
VAR
|
||||||
|
state: {begin, wait, critical, done};
|
||||||
|
ASSIGN
|
||||||
|
init(state) := begin;
|
||||||
|
next(state) :=
|
||||||
|
case
|
||||||
|
state = begin: {begin, wait};
|
||||||
|
state = wait & turn = id: critical;
|
||||||
|
state = critical: {critical, done};
|
||||||
|
state = done: begin;
|
||||||
|
TRUE: state;
|
||||||
|
esac;
|
||||||
|
next(turn) :=
|
||||||
|
case
|
||||||
|
state = done: (turn mod 2)+1;
|
||||||
|
TRUE: turn;
|
||||||
|
esac;
|
||||||
|
FAIRNESS
|
||||||
|
running
|
|
@ -1,6 +1,13 @@
|
||||||
* Proprieta` del modello
|
* TODO [1/4]
|
||||||
|
- [X] Cosa significa FAIRNESS running alla fine dei .smv
|
||||||
|
- [ ] Completa tabelle e immagine con greatspn
|
||||||
|
- [ ] Riformula liveness
|
||||||
|
- [ ] chiedi a lei di safety, liveness, fairness
|
||||||
|
|
||||||
|
* TODO Proprieta` del modello
|
||||||
|
|
||||||
Ogni modello successivamente mostrato rispetta le seguenti proprieta`:
|
Ogni modello successivamente mostrato rispetta le seguenti proprieta`:
|
||||||
|
Siano /p/ e /q/ due generici processi,
|
||||||
1. Mutua esclusione (safety): garantisce che al piu` un solo processo e` nella
|
1. Mutua esclusione (safety): garantisce che al piu` un solo processo e` nella
|
||||||
sezione critica ad ogni istante
|
sezione critica ad ogni istante
|
||||||
| G (¬cₚ∨¬c_{q})
|
| G (¬cₚ∨¬c_{q})
|
||||||
|
@ -10,15 +17,61 @@ Ogni modello successivamente mostrato rispetta le seguenti proprieta`:
|
||||||
| G(wₚ → F(cₚ∨c_{q})
|
| G(wₚ → F(cₚ∨c_{q})
|
||||||
3. Assenza di starvation individuale (strong fairness): ogni qualvolta un processo e` in
|
3. Assenza di starvation individuale (strong fairness): ogni qualvolta un processo e` in
|
||||||
attesa di entrare nella sezione critica, eventualmente gli verra` concesso
|
attesa di entrare nella sezione critica, eventualmente gli verra` concesso
|
||||||
| GFcₚ
|
| G(wₚ → Fcₚ)
|
||||||
Possiamo convertire queste tre formule LTL in formule equivalenti CTL
|
Possiamo convertire queste tre formule LTL in formule equivalenti CTL
|
||||||
anteponendo l'operatore di stato A:
|
anteponendo l'operatore di stato A:
|
||||||
| AG (¬cₚ∨¬c_{q})
|
| AG (¬cₚ∨¬c_{q})
|
||||||
| AG(wₚ → AF(cₚ∨c_{q})
|
| AG(wₚ → AF(cₚ∨c_{q})
|
||||||
| AGAFcₚ
|
| AG(wₚ → AFcₚ)
|
||||||
Benche` non tutte le formule LTL possono essere convertite in una
|
Benche` non tutte le formule LTL possono essere convertite in una
|
||||||
formula CTL equivalente anteponendo ad ogni operatore temporale
|
formula CTL equivalente anteponendo ad ogni operatore temporale
|
||||||
l'operatore di stato A, per queste tre proprieta` possiamo
|
l'operatore di stato A, per queste tre proprieta` possiamo.
|
||||||
|
|
||||||
[ ] Correggi LTL E CTL dell'ultima.
|
* Algoritmo 3.2
|
||||||
[ ] Chiedi a galla` se e` giusto in termini di liveness safety e fairness
|
Due processi iterano all'infinito seguendo questo pseudocodice
|
||||||
|
|
||||||
|
#+BEGIN_SRC
|
||||||
|
while true:
|
||||||
|
non-critical section
|
||||||
|
await turn = ID
|
||||||
|
critical section
|
||||||
|
turn <- (ID%2)+1
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
** NuSMV
|
||||||
|
Si e` deciso di modellare l'algoritmo usando per ognuno dei due
|
||||||
|
processi un'enumerazione di 4 stati ed una variabile turno di tipo intero.
|
||||||
|
| state: {begin, wait, critical, done};
|
||||||
|
|
||||||
|
#+include 3.2.b.smv
|
||||||
|
Nella tabella mostriamo i risultati ottenuti
|
||||||
|
| | NuSMV | GreatSPN |
|
||||||
|
|---------------------+-------+----------|
|
||||||
|
| Mutua Esclusione | True | |
|
||||||
|
| Assenza di deadlock | True | |
|
||||||
|
| No Starvation | False | |
|
||||||
|
Il risultato della possibilita` di deadlock non deve
|
||||||
|
stupire: la specifica non obbliga un processo a terminare la fase
|
||||||
|
begin.
|
||||||
|
Ne segue che anche l'assenza di starvation individuale non e`
|
||||||
|
garantita.
|
||||||
|
NuSMV conferma quanto detto mostrandoci un trace che fa da
|
||||||
|
controesempio alla formula CTL:
|
||||||
|
#+BEGIN_SRC
|
||||||
|
-- specification AG ((p.state = wait | q.state = wait) -> AF (p.state = critical | q.state = critical)) is false
|
||||||
|
-- as demonstrated by the following execution sequence
|
||||||
|
Trace Description: CTL Counterexample
|
||||||
|
Trace Type: Counterexample
|
||||||
|
-> State: 1.1 <-
|
||||||
|
turn = 1
|
||||||
|
p.state = begin
|
||||||
|
q.state = begin
|
||||||
|
-- Loop starts here
|
||||||
|
-> State: 1.2 <-
|
||||||
|
q.state = wait
|
||||||
|
-> State: 1.3 <-
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
Si vede che il processo q rimane nella fase begin e p, dopo essere
|
||||||
|
entrato nella regione critica una volta, rimane bloccato in begin.
|
||||||
|
Lo stesso trace mostra la possibilita` di starvation del processo.
|
||||||
|
|
15
anno3/vpc/consegne/3/prova.smv
Normal file
15
anno3/vpc/consegne/3/prova.smv
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
MODULE main
|
||||||
|
VAR
|
||||||
|
request: boolean;
|
||||||
|
status: {ready, busy};
|
||||||
|
ASSIGN
|
||||||
|
init(status) := ready;
|
||||||
|
next(status) := case
|
||||||
|
request: busy;
|
||||||
|
TRUE: {ready, busy};
|
||||||
|
esac;
|
||||||
|
|
||||||
|
LTLSPEC
|
||||||
|
G(request -> F status=busy)
|
||||||
|
LTLSPEC
|
||||||
|
G(request -> F status=ready)
|
11
todo.org
11
todo.org
|
@ -1,7 +1,7 @@
|
||||||
* VPC [3/11]
|
* VPC [4/11]
|
||||||
- [ ] sulle slide, quando si chiede come deve decidere il master
|
- [ ] sulle slide, quando si chiede come deve decidere il master
|
||||||
- [X] chiedi della riduzione
|
- [X] chiedi della riduzione
|
||||||
- [ ] calcolo semiflussi come da mail
|
- [X] calcolo semiflussi come da mail
|
||||||
- [ ] chiedi dell'esame
|
- [ ] chiedi dell'esame
|
||||||
- [X] Es1: definizioni
|
- [X] Es1: definizioni
|
||||||
- [ ] rete A, b, c, d
|
- [ ] rete A, b, c, d
|
||||||
|
@ -23,11 +23,10 @@
|
||||||
- [X] Scrivile per date di esame
|
- [X] Scrivile per date di esame
|
||||||
|
|
||||||
|
|
||||||
* TODO Tesi [2/4]
|
* TODO Tesi [4/6]
|
||||||
- [X] segreteria: tesi inglese
|
- [X] segreteria: tesi inglese
|
||||||
- [ ] Gatti: inglese
|
- [X] Gatti: inglese
|
||||||
- [ ] Gatti: Coppo mio relatore?
|
- [X] Gatti: Coppo mio relatore
|
||||||
- [X] scrivi di nuovo a coppo
|
|
||||||
- [ ] correzioni Coppo
|
- [ ] correzioni Coppo
|
||||||
- [ ] Gabriel: finisci
|
- [ ] Gabriel: finisci
|
||||||
HALP
|
HALP
|
||||||
|
|
Loading…
Reference in a new issue