analisi .2
This commit is contained in:
parent
cbcafef95d
commit
4950a08fff
24 changed files with 726 additions and 8 deletions
BIN
anno3/vpc/c05.pdf
Normal file
BIN
anno3/vpc/c05.pdf
Normal file
Binary file not shown.
1
anno3/vpc/consegne/3/.#3.2.b.smv
Symbolic link
1
anno3/vpc/consegne/3/.#3.2.b.smv
Symbolic link
|
@ -0,0 +1 @@
|
|||
user@thinkgentoo.14302:1588838104
|
10
anno3/vpc/consegne/3/3.2-Measures.solution/PT.bnd
Normal file
10
anno3/vpc/consegne/3/3.2-Measures.solution/PT.bnd
Normal file
|
@ -0,0 +1,10 @@
|
|||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
2
anno3/vpc/consegne/3/3.2-Measures.solution/PT.ctl
Normal file
2
anno3/vpc/consegne/3/3.2-Measures.solution/PT.ctl
Normal file
|
@ -0,0 +1,2 @@
|
|||
% MEASURE0
|
||||
AG ( (#Wait_P==1 || #Wait_Q == 1) -> AF (#Critical_P == 1 || #Critical_Q == 1))
|
3
anno3/vpc/consegne/3/3.2-Measures.solution/PT.def
Normal file
3
anno3/vpc/consegne/3/3.2-Measures.solution/PT.def
Normal file
|
@ -0,0 +1,3 @@
|
|||
|256
|
||||
%
|
||||
|
|
2
anno3/vpc/consegne/3/3.2-Measures.solution/PT.ilpbnd
Normal file
2
anno3/vpc/consegne/3/3.2-Measures.solution/PT.ilpbnd
Normal file
|
@ -0,0 +1,2 @@
|
|||
0
|
||||
0
|
96
anno3/vpc/consegne/3/3.2-Measures.solution/PT.net
Normal file
96
anno3/vpc/consegne/3/3.2-Measures.solution/PT.net
Normal file
|
@ -0,0 +1,96 @@
|
|||
|0|
|
||||
|
|
||||
f 0 10 0 10 0 0 0
|
||||
Begin_P 1 2.0 1.3333333333333333 2.008125 0.945625 0
|
||||
Wait_P 0 2.0 2.8333333333333335 2.122708333333333 2.6122916666666667 0
|
||||
Critical_P 0 2.0 4.5 2.1175 4.195625 0
|
||||
Done_P 0 2.0 5.833333333333333 2.27375 5.612291666666667 0
|
||||
Turn_P 1 3.5 3.0 3.3674999999999997 2.6122916666666667 0
|
||||
Turn_Q 0 6.0 4.666666666666667 6.028958333333333 4.945625 0
|
||||
Begin_Q 1 8.0 6.666666666666667 7.252916666666667 6.362291666666667 0
|
||||
Wait_Q 0 8.0 4.666666666666667 7.278958333333333 4.445625 0
|
||||
Critical_Q 0 8.0 3.1666666666666665 7.02375 2.8622916666666662 0
|
||||
Done_Q 0 8.0 1.8333333333333333 7.268541666666667 1.695625 0
|
||||
T0 1.0 0 0 1 0 2.0 2.1666666666666665 1.9791666666666667 1.9739583333333333 2.0833333333333335 2.234375 0
|
||||
1 1 0 0
|
||||
1
|
||||
1 2 0 0
|
||||
0
|
||||
T1 1.0 0 0 2 0 2.0 3.6666666666666665 1.9791666666666667 3.4739583333333335 2.0833333333333335 3.734375 0
|
||||
1 2 0 0
|
||||
1 5 1 0
|
||||
2.6666666666666665 3.0
|
||||
2
|
||||
1 3 0 0
|
||||
1 5 1 0
|
||||
2.75 3.0833333333333335
|
||||
0
|
||||
T3 1.0 0 0 2 0 2.0 7.0 1.9791666666666667 6.807291666666667 2.0833333333333335 7.067708333333333 0
|
||||
1 4 0 0
|
||||
1 5 1 0
|
||||
3.5 6.333333333333333
|
||||
2
|
||||
1 1 2 0
|
||||
1.0833333333333333 7.0
|
||||
1.0833333333333333 1.3333333333333333
|
||||
1 6 1 0
|
||||
5.0 6.916666666666667
|
||||
0
|
||||
T2 1.0 0 0 2 0 2.0 5.166666666666667 1.9791666666666667 4.973958333333333 2.0833333333333335 5.234375 0
|
||||
1 3 0 0
|
||||
1 5 1 0
|
||||
2.9166666666666665 4.666666666666667
|
||||
2
|
||||
1 4 0 0
|
||||
1 5 1 0
|
||||
3.0833333333333335 4.833333333333333
|
||||
0
|
||||
T4 1.0 0 0 1 0 8.0 5.333333333333333 7.979166666666667 5.140625 8.083333333333334 5.401041666666667 0
|
||||
1 7 0 0
|
||||
1
|
||||
1 8 0 0
|
||||
0
|
||||
T5 1.0 0 0 2 0 8.0 4.0 7.979166666666667 3.8072916666666665 8.083333333333334 4.067708333333333 0
|
||||
1 8 0 0
|
||||
1 6 1 0
|
||||
7.25 4.833333333333333
|
||||
2
|
||||
1 9 0 0
|
||||
1 6 1 0
|
||||
7.25 4.583333333333333
|
||||
0
|
||||
T7 1.0 0 0 2 0 8.0 0.8333333333333334 7.979166666666667 0.640625 8.083333333333334 0.9010416666666666 0
|
||||
1 10 0 0
|
||||
1 6 1 0
|
||||
6.416666666666667 2.25
|
||||
2
|
||||
1 7 2 0
|
||||
8.75 0.8333333333333334
|
||||
8.75 6.666666666666667
|
||||
1 5 1 0
|
||||
5.583333333333333 1.1666666666666667
|
||||
0
|
||||
T6 1.0 0 0 2 0 8.0 2.5 7.979166666666667 2.3072916666666665 8.083333333333334 2.5677083333333335 0
|
||||
1 9 0 0
|
||||
1 6 1 0
|
||||
6.916666666666667 3.1666666666666665
|
||||
2
|
||||
1 10 0 0
|
||||
1 6 1 0
|
||||
6.75 3.0833333333333335
|
||||
0
|
||||
T8 1.0 0 0 1 1 3.1666666666666665 1.3333333333333333 3.1458333333333335 1.140625 3.25 1.4010416666666667 0
|
||||
1 1 1 0
|
||||
2.5833333333333335 1.0833333333333333
|
||||
1
|
||||
1 1 1 0
|
||||
2.5833333333333335 1.5833333333333333
|
||||
0
|
||||
T9 1.0 0 0 1 1 8.0 7.833333333333333 7.979166666666667 7.640625 8.083333333333334 7.901041666666667 0
|
||||
1 7 1 0
|
||||
8.5 7.25
|
||||
1
|
||||
1 7 2 0
|
||||
7.583333333333333 7.416666666666667
|
||||
7.583333333333333 7.333333333333333
|
||||
0
|
5
anno3/vpc/consegne/3/3.2-Measures.solution/PT.pba
Normal file
5
anno3/vpc/consegne/3/3.2-Measures.solution/PT.pba
Normal file
|
@ -0,0 +1,5 @@
|
|||
3
|
||||
4 1 1 1 2 1 3 1 4
|
||||
2 1 5 1 6
|
||||
4 1 7 1 8 1 9 1 10
|
||||
0
|
5
anno3/vpc/consegne/3/3.2-Measures.solution/PT.pin
Normal file
5
anno3/vpc/consegne/3/3.2-Measures.solution/PT.pin
Normal file
|
@ -0,0 +1,5 @@
|
|||
3
|
||||
4 1 7 1 8 1 9 1 10
|
||||
2 1 5 1 6
|
||||
4 1 1 1 2 1 3 1 4
|
||||
0
|
135
anno3/vpc/consegne/3/3.2.PNPRO
Normal file
135
anno3/vpc/consegne/3/3.2.PNPRO
Normal file
File diff suppressed because one or more lines are too long
|
@ -22,6 +22,8 @@ CTLSPEC -- no individual starvation
|
|||
AG (p.state = wait -> AF p.state = critical)
|
||||
CTLSPEC
|
||||
AG (q.state = wait -> AF q.state = critical)
|
||||
CTLSPEC
|
||||
AG (q.state = wait -> EF q.state = critical)
|
||||
|
||||
MODULE proc(turn, id) -- Model a process taking turn
|
||||
VAR
|
||||
|
@ -32,7 +34,7 @@ ASSIGN
|
|||
case
|
||||
state = begin: {begin, wait};
|
||||
state = wait & turn = id: critical;
|
||||
state = critical: critical;
|
||||
state = critical: done;
|
||||
state = done: begin;
|
||||
TRUE: state;
|
||||
esac;
|
BIN
anno3/vpc/consegne/3/3.2.jpg
Normal file
BIN
anno3/vpc/consegne/3/3.2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
6
anno3/vpc/consegne/3/3.5-Measures.solution/PT.bnd
Normal file
6
anno3/vpc/consegne/3/3.5-Measures.solution/PT.bnd
Normal file
|
@ -0,0 +1,6 @@
|
|||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 -1
|
||||
0 -1
|
8
anno3/vpc/consegne/3/3.5-Measures.solution/PT.ctl
Normal file
8
anno3/vpc/consegne/3/3.5-Measures.solution/PT.ctl
Normal file
|
@ -0,0 +1,8 @@
|
|||
% MEASURE1
|
||||
AG(!(#Done_P == 1) || !(#Done_Q == 1))
|
||||
% MEASURE2
|
||||
AG ((#Await_P==1 || #Await_Q == 1) -> AF (#Done_P == 1 || #Done_Q == 1))
|
||||
% MEASURE3
|
||||
AG ((#Await_P==1 ) -> AF (#Done_P == 1))
|
||||
% MEASURE4
|
||||
AG ((#Await_Q==1 ) -> AF (#Done_Q == 1))
|
3
anno3/vpc/consegne/3/3.5-Measures.solution/PT.def
Normal file
3
anno3/vpc/consegne/3/3.5-Measures.solution/PT.def
Normal file
|
@ -0,0 +1,3 @@
|
|||
|256
|
||||
%
|
||||
|
|
4
anno3/vpc/consegne/3/3.5-Measures.solution/PT.ilpbnd
Normal file
4
anno3/vpc/consegne/3/3.5-Measures.solution/PT.ilpbnd
Normal file
|
@ -0,0 +1,4 @@
|
|||
2
|
||||
4 1
|
||||
5 1
|
||||
0
|
66
anno3/vpc/consegne/3/3.5-Measures.solution/PT.net
Normal file
66
anno3/vpc/consegne/3/3.5-Measures.solution/PT.net
Normal file
|
@ -0,0 +1,66 @@
|
|||
|0|
|
||||
|
|
||||
f 0 6 0 6 0 0 0
|
||||
Await_P 1 1.8333333333333333 1.0 2.164375 0.8622916666666667 0
|
||||
Done_P 0 1.8333333333333333 2.6666666666666665 1.6070833333333334 2.278958333333333 0
|
||||
Turn_P 1 3.0 1.3333333333333333 3.1174999999999997 1.6122916666666667 0
|
||||
Turn_Q 0 3.3333333333333335 2.8333333333333335 3.4456249999999997 3.1122916666666662 0
|
||||
Await_Q 1 4.833333333333333 3.3333333333333335 5.075833333333333 3.3622916666666662 0
|
||||
Done_Q 0 4.833333333333333 1.6666666666666667 5.185208333333333 1.6122916666666667 0
|
||||
T0 1.0 0 0 2 1 1.8333333333333333 1.8333333333333333 1.8125 1.640625 1.9166666666666667 1.9010416666666667 0
|
||||
1 1 1 0
|
||||
1.25 1.4166666666666667
|
||||
1 3 0 0
|
||||
2
|
||||
1 2 1 0
|
||||
1.3333333333333333 2.25
|
||||
1 3 1 0
|
||||
2.5833333333333335 1.8333333333333333
|
||||
0
|
||||
T1 1.0 0 0 2 1 1.8333333333333333 3.3333333333333335 1.8125 3.140625 1.9166666666666667 3.4010416666666665 0
|
||||
1 2 1 0
|
||||
1.4166666666666667 3.0833333333333335
|
||||
1 3 2 0
|
||||
2.25 3.0833333333333335
|
||||
2.25 2.4166666666666665
|
||||
2
|
||||
1 1 2 0
|
||||
1.0833333333333333 3.3333333333333335
|
||||
1.0833333333333333 1.0
|
||||
1 4 1 0
|
||||
3.0 3.3333333333333335
|
||||
0
|
||||
T2 1.0 0 0 1 1 1.8333333333333333 0.3333333333333333 1.8125 0.140625 1.9166666666666667 0.4010416666666667 0
|
||||
1 1 1 0
|
||||
1.4166666666666667 0.5
|
||||
1
|
||||
1 1 1 0
|
||||
2.1666666666666665 0.5
|
||||
0
|
||||
T3 1.0 0 0 1 1 4.833333333333333 4.166666666666667 4.8125 3.9739583333333335 4.916666666666667 4.234375 0
|
||||
1 5 1 0
|
||||
4.416666666666667 3.9166666666666665
|
||||
1
|
||||
1 5 1 0
|
||||
5.166666666666667 3.9166666666666665
|
||||
0
|
||||
T4 1.0 0 0 2 1 4.833333333333333 2.5 4.8125 2.3072916666666665 4.916666666666667 2.5677083333333335 0
|
||||
1 5 1 0
|
||||
5.333333333333333 2.9166666666666665
|
||||
1 4 0 0
|
||||
2
|
||||
1 6 1 0
|
||||
5.333333333333333 2.0
|
||||
1 4 1 0
|
||||
4.0 2.5
|
||||
0
|
||||
T5 1.0 0 0 2 1 4.833333333333333 1.0 4.8125 0.8072916666666666 4.916666666666667 1.0677083333333333 0
|
||||
1 6 1 0
|
||||
5.333333333333333 1.25
|
||||
1 4 3 0
|
||||
4.416666666666667 1.5
|
||||
4.5 2.25
|
||||
3.4166666666666665 2.5
|
||||
1
|
||||
1 3 0 0
|
||||
0
|
4
anno3/vpc/consegne/3/3.5-Measures.solution/PT.pba
Normal file
4
anno3/vpc/consegne/3/3.5-Measures.solution/PT.pba
Normal file
|
@ -0,0 +1,4 @@
|
|||
2
|
||||
2 1 1 1 2
|
||||
2 1 3 1 4
|
||||
0
|
4
anno3/vpc/consegne/3/3.5-Measures.solution/PT.pin
Normal file
4
anno3/vpc/consegne/3/3.5-Measures.solution/PT.pin
Normal file
|
@ -0,0 +1,4 @@
|
|||
2
|
||||
2 1 3 1 4
|
||||
2 1 1 1 2
|
||||
0
|
125
anno3/vpc/consegne/3/3.5.PNPRO
Normal file
125
anno3/vpc/consegne/3/3.5.PNPRO
Normal file
File diff suppressed because one or more lines are too long
BIN
anno3/vpc/consegne/3/3.5.jpg
Normal file
BIN
anno3/vpc/consegne/3/3.5.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
40
anno3/vpc/consegne/3/3.5.smv
Normal file
40
anno3/vpc/consegne/3/3.5.smv
Normal file
|
@ -0,0 +1,40 @@
|
|||
MODULE main
|
||||
VAR
|
||||
turn: 1..2;
|
||||
p: proc(turn, 1);
|
||||
q: proc(turn, 2);
|
||||
ASSIGN
|
||||
init(turn) := 1;
|
||||
next(turn) := case
|
||||
p.state = done: 2;
|
||||
q.state = done: 1;
|
||||
TRUE: turn;
|
||||
esac;
|
||||
|
||||
CTLSPEC -- no mutual exclusion
|
||||
AG (p.state != done | q.state != done)
|
||||
|
||||
CTLSPEC -- no deadlock
|
||||
AG ((p.state = await | q.state = await) -> AF (p.state = done | q.state = done))
|
||||
|
||||
CTLSPEC -- no individual starvation
|
||||
AG (p.state = await -> AF p.state = done)
|
||||
CTLSPEC
|
||||
AG (q.state = await -> AF q.state = done)
|
||||
|
||||
CTLSPEC -- prova: path senza starvation
|
||||
AG (q.state = await -> EF q.state = done)
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE proc(turn, id)
|
||||
VAR
|
||||
state: {await, done};
|
||||
ASSIGN
|
||||
init(state) := await;
|
||||
next(state) := case
|
||||
turn = id: {await, done};
|
||||
state = await: await;
|
||||
state = done: await;
|
||||
esac;
|
52
anno3/vpc/consegne/3/3.6.smv
Normal file
52
anno3/vpc/consegne/3/3.6.smv
Normal file
|
@ -0,0 +1,52 @@
|
|||
MODULE main
|
||||
VAR
|
||||
wantP: boolean;
|
||||
wantQ: boolean;
|
||||
p: proc(wantP, wantQ);
|
||||
q: proc(wantQ, wantP);
|
||||
ASSIGN
|
||||
init(wantP) := FALSE;
|
||||
init(wantQ) := FALSE;
|
||||
|
||||
next(wantP) := case
|
||||
p.state = setTrue: TRUE;
|
||||
p.state = setFalse: FALSE;
|
||||
TRUE: wantP;
|
||||
esac;
|
||||
next(wantQ) := case
|
||||
q.state = setTrue: TRUE;
|
||||
q.state = setFalse: FALSE;
|
||||
TRUE: wantQ;
|
||||
esac;
|
||||
|
||||
CTLSPEC -- no mutual exclusion
|
||||
AG (p.state != critical | q.state != critical)
|
||||
|
||||
CTLSPEC -- no deadlock
|
||||
AG ((p.state = await | q.state = await) -> AF (p.state = critical | q.state = critical))
|
||||
|
||||
CTLSPEC -- no individual starvation
|
||||
AG (p.state = await -> AF p.state = critical)
|
||||
CTLSPEC
|
||||
AG (q.state = await -> AF q.state = critical)
|
||||
|
||||
CTLSPEC -- prova: path senza starvation
|
||||
AG (q.state = await -> EF q.state = critical)
|
||||
|
||||
CTLSPEC
|
||||
EF(p.state = await -> AG(!(p.state = critical)))
|
||||
|
||||
|
||||
MODULE proc(mine, other)
|
||||
VAR
|
||||
state: {local, await, critical, setTrue, setFalse};
|
||||
ASSIGN
|
||||
init(state) := local;
|
||||
next(state) := case
|
||||
state = local: {local, await};
|
||||
state = await & other = FALSE: setTrue;
|
||||
state = await: await;
|
||||
state = setTrue: critical;
|
||||
state = critical: setFalse;
|
||||
state = setFalse: local;
|
||||
esac;
|
|
@ -1,8 +1,34 @@
|
|||
* TODO [1/4]
|
||||
# SCHELETRO:
|
||||
|
||||
# * Algoritmo 3.5
|
||||
# Due processi iterano all'infinito seguendo questo pseudocodice
|
||||
|
||||
# #+BEGIN_SRC
|
||||
# #+END_SRC
|
||||
|
||||
# ** NuSMV
|
||||
# Si e` deciso di modellare l'algoritmo usando per ognuno dei due
|
||||
# processi ...
|
||||
# | CODE
|
||||
# #+include 3.2.b.smv
|
||||
|
||||
# ** GreatSPN
|
||||
# ** TODO CCS
|
||||
# ** Risultati
|
||||
|
||||
Nella tabella mostriamo i risultati ottenuti
|
||||
| | NuSMV | GreatSPN |
|
||||
|---------------------+-------+----------|
|
||||
| Mutua Esclusione | | |
|
||||
| Assenza di deadlock | | |
|
||||
| No Starvation | | |
|
||||
* TODO [1/7]
|
||||
- [X] Cosa significa FAIRNESS running alla fine dei .smv
|
||||
- [ ] Completa tabelle e immagine con greatspn
|
||||
- [ ] Riformula liveness
|
||||
- [ ] chiedi a lei di safety, liveness, fairness
|
||||
- [ ] Vedi necessita` di Sync e /
|
||||
- [ ] Finisci tutto con algebra dei processi
|
||||
- [ ] Reachability graph vs Derivation Graph
|
||||
|
||||
* TODO Proprieta` del modello
|
||||
|
||||
|
@ -42,14 +68,23 @@ while true:
|
|||
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
|
||||
** GreatSPN
|
||||
Il codice utilizzato per le proprieta` CTL e` il seguente:
|
||||
#+BEGIN_SRC
|
||||
AG(!(#Critical_P == 1) || !(#Critical_Q == 1)) = true
|
||||
AG ((#Wait_P==1 || \#Critical_Q == 1) -> AF (#Critical_P == 1 || \#Critical_Q == 1)) = false
|
||||
AG (#Wait_P==1 -> AF (#Critical_P == 1)) = false
|
||||
#+END_SRC
|
||||
[[./3.2.jpg]]
|
||||
** TODO CCS
|
||||
** Risultati
|
||||
Nella tabella mostriamo i risultati ottenuti
|
||||
| | NuSMV | GreatSPN |
|
||||
|---------------------+-------+----------|
|
||||
| Mutua Esclusione | True | |
|
||||
| Assenza di deadlock | True | |
|
||||
| No Starvation | False | |
|
||||
| Mutua Esclusione | True | True |
|
||||
| Assenza di deadlock | False | False |
|
||||
| No Starvation | False | False |
|
||||
Il risultato della possibilita` di deadlock non deve
|
||||
stupire: la specifica non obbliga un processo a terminare la fase
|
||||
begin.
|
||||
|
@ -70,8 +105,118 @@ Trace Type: Counterexample
|
|||
-> 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.
|
||||
La rete modellata con GreatSPN ci conferma quanto visto con NuSMV.
|
||||
|
||||
Prendiamo in considerazione la seguente formula CTL
|
||||
| AG (wₚ -> EF cₚ)
|
||||
Sia GreatSPN che NuSMV ci mostrano che il sistema modellato rispetta
|
||||
questa proprieta`. Questo significa che un processo in attesa di
|
||||
entrare nella sezione critica ha la possibilita` di compiere
|
||||
progresso, ma solo nel caso in cui, come si intuisce dal controesempio
|
||||
precedente, l'altro processo decida di entrare in attesa a sua volta.
|
||||
|
||||
* Algoritmo 3.5
|
||||
Due processi iterano all'infinito seguendo questo pseudocodice
|
||||
|
||||
#+BEGIN_SRC
|
||||
while true:
|
||||
await turn = ID
|
||||
turn <- (ID%2)+1
|
||||
#+END_SRC
|
||||
|
||||
** NuSMV
|
||||
Si e` deciso di modellare l'algoritmo usando per ognuno dei due
|
||||
processi un'enumerazione di due stati e un contatore di turni intero
|
||||
| state: {await, done};
|
||||
#+include 3.5.b.smv
|
||||
|
||||
** GreatSPN
|
||||
Il codice utilizzato per le proprieta` CTL e` il seguente:
|
||||
#+BEGIN_SRC
|
||||
AG(!(#Await_P == 1) || !(#Await_Q == 1)) = true
|
||||
AG ((#Wait_P==1 || \#AWait_Q == 1) -> AF (#Done_P == 1 || \#Done_Q == 1)) = false
|
||||
AG (#Await_P==1 -> AF (#Done_P == 1)) = false
|
||||
#+END_SRC
|
||||
[[./3.5.jpg]]
|
||||
** TODO CCS
|
||||
** Risultati
|
||||
Nella tabella mostriamo i risultati ottenuti
|
||||
| | NuSMV | GreatSPN |
|
||||
|---------------------+-------+----------|
|
||||
| Mutua Esclusione | true | true |
|
||||
| Assenza di deadlock | false | false |
|
||||
| No Starvation | false | false |
|
||||
I risultati confermano il fatto che questo algoritmo e` solamente una
|
||||
versione semplificata del precedente (/begin/ e /wait/ sono stati fusi
|
||||
in await e /done/ rimosso) e pertanto il trace di controesempio
|
||||
fornito da NuSMV e da GreatSPN presentano riflettono i risultati di
|
||||
questa semplificazione.
|
||||
- Possibilita` di deadlock:
|
||||
#+BEGIN_SRC
|
||||
– specification AG ((p.state = await | q.state = await) -> AF (p.state = done | q.state = done)) is false
|
||||
– as demonstrated by the following execution sequence
|
||||
Trace Description: CTL Counterexample
|
||||
Trace Type: Counterexample
|
||||
– Loop starts here
|
||||
-> State: 1.1 <-
|
||||
turn = 1
|
||||
p.state = await
|
||||
q.state = await
|
||||
-> State: 1.2 <-
|
||||
#+END_SRC
|
||||
- Possibilita` di starvation: i processi non compiono progresso
|
||||
iterando infinite volte su /await/.
|
||||
#+BEGIN_SRC
|
||||
– specification AG (p.state = await -> AF p.state = done) is false
|
||||
– as demonstrated by the following execution sequence
|
||||
Trace Description: CTL Counterexample
|
||||
Trace Type: Counterexample
|
||||
– Loop starts here
|
||||
-> State: 2.1 <-
|
||||
turn = 1
|
||||
p.state = await
|
||||
q.state = await
|
||||
-> State: 2.2 <-
|
||||
#+END_SRC
|
||||
#+BEGIN_SRC
|
||||
– specification AG (q.state = await -> AF q.state = done) is false
|
||||
– as demonstrated by the following execution sequence
|
||||
Trace Description: CTL Counterexample
|
||||
Trace Type: Counterexample
|
||||
– Loop starts here
|
||||
-> State: 3.1 <-
|
||||
turn = 1
|
||||
p.state = await
|
||||
q.state = await
|
||||
-> State: 3.2 <-
|
||||
– specification AG (q.state = await -> EF q.state = done) is true
|
||||
#+END_SRC
|
||||
- Possibilita` di compiere progresso:
|
||||
#+BEGIN_SRC
|
||||
specification AG (q.state = await -> EF q.state = done) is true
|
||||
#+END_SRC
|
||||
|
||||
* Algoritmo 3.6
|
||||
Due processi iterano all'infinito seguendo questo pseudocodice
|
||||
#+BEGIN_SRC
|
||||
while true:
|
||||
non-critical section
|
||||
await wantQ = false
|
||||
wantP <- true
|
||||
critical section
|
||||
wantP <- false
|
||||
#+END_SRC
|
||||
|
||||
** NuSMV
|
||||
Si e` deciso di modellare l'algoritmo usando per ognuno dei due
|
||||
processi ...
|
||||
| CODE
|
||||
#+include 3.6.smv
|
||||
|
||||
** GreatSPN
|
||||
** TODO CCS
|
||||
** Risultati
|
||||
|
|
Loading…
Reference in a new issue