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)
|
AG (p.state = wait -> AF p.state = critical)
|
||||||
CTLSPEC
|
CTLSPEC
|
||||||
AG (q.state = wait -> AF q.state = critical)
|
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
|
MODULE proc(turn, id) -- Model a process taking turn
|
||||||
VAR
|
VAR
|
||||||
|
@ -32,7 +34,7 @@ ASSIGN
|
||||||
case
|
case
|
||||||
state = begin: {begin, wait};
|
state = begin: {begin, wait};
|
||||||
state = wait & turn = id: critical;
|
state = wait & turn = id: critical;
|
||||||
state = critical: critical;
|
state = critical: done;
|
||||||
state = done: begin;
|
state = done: begin;
|
||||||
TRUE: state;
|
TRUE: state;
|
||||||
esac;
|
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
|
- [X] Cosa significa FAIRNESS running alla fine dei .smv
|
||||||
- [ ] Completa tabelle e immagine con greatspn
|
|
||||||
- [ ] Riformula liveness
|
- [ ] Riformula liveness
|
||||||
- [ ] chiedi a lei di safety, liveness, fairness
|
- [ ] 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
|
* TODO Proprieta` del modello
|
||||||
|
|
||||||
|
@ -42,14 +68,23 @@ while true:
|
||||||
Si e` deciso di modellare l'algoritmo usando per ognuno dei due
|
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.
|
processi un'enumerazione di 4 stati ed una variabile turno di tipo intero.
|
||||||
| state: {begin, wait, critical, done};
|
| state: {begin, wait, critical, done};
|
||||||
|
|
||||||
#+include 3.2.b.smv
|
#+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
|
Nella tabella mostriamo i risultati ottenuti
|
||||||
| | NuSMV | GreatSPN |
|
| | NuSMV | GreatSPN |
|
||||||
|---------------------+-------+----------|
|
|---------------------+-------+----------|
|
||||||
| Mutua Esclusione | True | |
|
| Mutua Esclusione | True | True |
|
||||||
| Assenza di deadlock | True | |
|
| Assenza di deadlock | False | False |
|
||||||
| No Starvation | False | |
|
| No Starvation | False | False |
|
||||||
Il risultato della possibilita` di deadlock non deve
|
Il risultato della possibilita` di deadlock non deve
|
||||||
stupire: la specifica non obbliga un processo a terminare la fase
|
stupire: la specifica non obbliga un processo a terminare la fase
|
||||||
begin.
|
begin.
|
||||||
|
@ -70,8 +105,118 @@ Trace Type: Counterexample
|
||||||
-> State: 1.2 <-
|
-> State: 1.2 <-
|
||||||
q.state = wait
|
q.state = wait
|
||||||
-> State: 1.3 <-
|
-> State: 1.3 <-
|
||||||
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
Si vede che il processo q rimane nella fase begin e p, dopo essere
|
Si vede che il processo q rimane nella fase begin e p, dopo essere
|
||||||
entrato nella regione critica una volta, rimane bloccato in begin.
|
entrato nella regione critica una volta, rimane bloccato in begin.
|
||||||
Lo stesso trace mostra la possibilita` di starvation del processo.
|
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