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`:
|
||||
Siano /p/ e /q/ due generici processi,
|
||||
1. Mutua esclusione (safety): garantisce che al piu` un solo processo e` nella
|
||||
sezione critica ad ogni istante
|
||||
| G (¬cₚ∨¬c_{q})
|
||||
|
@ -10,15 +17,61 @@ Ogni modello successivamente mostrato rispetta le seguenti proprieta`:
|
|||
| G(wₚ → F(cₚ∨c_{q})
|
||||
3. Assenza di starvation individuale (strong fairness): ogni qualvolta un processo e` in
|
||||
attesa di entrare nella sezione critica, eventualmente gli verra` concesso
|
||||
| GFcₚ
|
||||
| G(wₚ → Fcₚ)
|
||||
Possiamo convertire queste tre formule LTL in formule equivalenti CTL
|
||||
anteponendo l'operatore di stato A:
|
||||
| AG (¬cₚ∨¬c_{q})
|
||||
| AG(wₚ → AF(cₚ∨c_{q})
|
||||
| AGAFcₚ
|
||||
| AG(wₚ → AFcₚ)
|
||||
Benche` non tutte le formule LTL possono essere convertite in una
|
||||
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.
|
||||
[ ] Chiedi a galla` se e` giusto in termini di liveness safety e fairness
|
||||
* Algoritmo 3.2
|
||||
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
|
||||
- [X] chiedi della riduzione
|
||||
- [ ] calcolo semiflussi come da mail
|
||||
- [X] calcolo semiflussi come da mail
|
||||
- [ ] chiedi dell'esame
|
||||
- [X] Es1: definizioni
|
||||
- [ ] rete A, b, c, d
|
||||
|
@ -23,11 +23,10 @@
|
|||
- [X] Scrivile per date di esame
|
||||
|
||||
|
||||
* TODO Tesi [2/4]
|
||||
* TODO Tesi [4/6]
|
||||
- [X] segreteria: tesi inglese
|
||||
- [ ] Gatti: inglese
|
||||
- [ ] Gatti: Coppo mio relatore?
|
||||
- [X] scrivi di nuovo a coppo
|
||||
- [X] Gatti: inglese
|
||||
- [X] Gatti: Coppo mio relatore
|
||||
- [ ] correzioni Coppo
|
||||
- [ ] Gabriel: finisci
|
||||
HALP
|
||||
|
|
Loading…
Reference in a new issue