3.9
This commit is contained in:
parent
2f48ab2347
commit
0347f90e15
23 changed files with 1161 additions and 4 deletions
File diff suppressed because one or more lines are too long
BIN
anno3/vpc/consegne/3/3.6.jpg
Normal file
BIN
anno3/vpc/consegne/3/3.6.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
14
anno3/vpc/consegne/3/3.8-Measures.solution/PT.bnd
Normal file
14
anno3/vpc/consegne/3/3.8-Measures.solution/PT.bnd
Normal file
|
@ -0,0 +1,14 @@
|
|||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
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.8-Measures.solution/PT.ctl
Normal file
2
anno3/vpc/consegne/3/3.8-Measures.solution/PT.ctl
Normal file
|
@ -0,0 +1,2 @@
|
|||
% MEASURE0
|
||||
AG(#await_P == 1 -> EF(#critical_Q==1 || #critical_P == 1))
|
3
anno3/vpc/consegne/3/3.8-Measures.solution/PT.def
Normal file
3
anno3/vpc/consegne/3/3.8-Measures.solution/PT.def
Normal file
|
@ -0,0 +1,3 @@
|
|||
|256
|
||||
%
|
||||
|
|
2
anno3/vpc/consegne/3/3.8-Measures.solution/PT.ilpbnd
Normal file
2
anno3/vpc/consegne/3/3.8-Measures.solution/PT.ilpbnd
Normal file
|
@ -0,0 +1,2 @@
|
|||
0
|
||||
0
|
105
anno3/vpc/consegne/3/3.8-Measures.solution/PT.net
Normal file
105
anno3/vpc/consegne/3/3.8-Measures.solution/PT.net
Normal file
|
@ -0,0 +1,105 @@
|
|||
|0|
|
||||
|
|
||||
f 0 14 0 12 0 0 0
|
||||
local_P 1 3.0 1.3333333333333333 3.294583333333333 1.2789583333333334 0
|
||||
await_P 0 3.0 4.333333333333333 3.185208333333333 4.112291666666667 0
|
||||
SetTrue_P 0 3.0 2.6666666666666665 3.1904166666666662 2.6122916666666667 0
|
||||
critical_P 0 3.0 5.5 3.388333333333333 5.612291666666667 0
|
||||
setFalse_P 0 3.0 7.0 3.1904166666666662 7.028958333333333 0
|
||||
wantP_FALSE 1 4.5 7.0 4.049791666666667 7.195625 0
|
||||
wantP_TRUE 0 4.5 6.0 4.820625 5.862291666666667 0
|
||||
wantQ_FALSE 1 6.333333333333333 2.6666666666666665 6.127916666666667 2.9456249999999997 0
|
||||
wantQ_TRUE 0 7.5 2.6666666666666665 6.732083333333333 2.278958333333333 0
|
||||
setFalse_Q 0 8.666666666666666 2.5 8.851875 2.6956249999999997 0
|
||||
critical_Q 0 8.666666666666666 4.0 8.96125 4.195625 0
|
||||
setTrue_Q 0 8.666666666666666 6.666666666666667 9.028958333333334 6.695625 0
|
||||
await_Q 0 8.666666666666666 5.166666666666667 8.43 5.362291666666667 0
|
||||
local_Q 1 8.666666666666666 7.833333333333333 9.034166666666666 7.445625 0
|
||||
T0 1.0 0 0 1 0 3.0 2.0 2.9791666666666665 1.8072916666666667 3.0833333333333335 2.0677083333333335 0
|
||||
1 1 0 0
|
||||
1
|
||||
1 3 0 0
|
||||
0
|
||||
T8 1.0 0 0 2 0 3.0 7.833333333333333 2.9791666666666665 7.640625 3.0833333333333335 7.901041666666667 0
|
||||
1 5 1 0
|
||||
3.0 7.583333333333333
|
||||
1 7 0 0
|
||||
2
|
||||
1 1 2 0
|
||||
1.0833333333333333 7.833333333333333
|
||||
1.0833333333333333 1.3333333333333333
|
||||
1 6 1 0
|
||||
5.5 7.833333333333333
|
||||
0
|
||||
T3 1.0 0 0 1 0 3.0 6.166666666666667 2.9791666666666665 5.973958333333333 3.0833333333333335 6.234375 0
|
||||
1 4 0 0
|
||||
1
|
||||
1 5 0 0
|
||||
0
|
||||
T1 1.0 0 0 2 0 3.0 5.0 2.9791666666666665 4.807291666666667 3.0833333333333335 5.067708333333333 0
|
||||
1 2 0 0
|
||||
1 8 1 0
|
||||
5.166666666666667 4.166666666666667
|
||||
2
|
||||
1 8 1 0
|
||||
5.25 4.25
|
||||
1 4 0 0
|
||||
0
|
||||
T2 1.0 0 0 2 0 3.0 3.3333333333333335 2.9791666666666665 3.140625 3.0833333333333335 3.4010416666666665 0
|
||||
1 3 0 0
|
||||
-1 6 1 0
|
||||
4.166666666666667 3.3333333333333335
|
||||
2
|
||||
-1 7 1 0
|
||||
4.333333333333333 3.6666666666666665
|
||||
1 2 0 0
|
||||
0
|
||||
T00 1.0 0 0 1 0 1.6666666666666667 1.0 1.6197916666666667 0.8072916666666666 1.75 1.0677083333333333 0
|
||||
1 1 1 0
|
||||
2.4166666666666665 0.9166666666666666
|
||||
1
|
||||
1 1 0 0
|
||||
0
|
||||
T4 1.0 0 0 1 1 9.5 8.333333333333334 9.479166666666666 8.140625 9.583333333333334 8.401041666666666 0
|
||||
1 14 0 0
|
||||
1
|
||||
1 14 1 0
|
||||
9.0 8.25
|
||||
0
|
||||
T5 1.0 0 0 2 0 8.666666666666666 1.5 8.645833333333334 1.3072916666666667 8.75 1.5677083333333333 0
|
||||
1 10 0 0
|
||||
1 9 0 0
|
||||
2
|
||||
1 14 2 0
|
||||
10.333333333333334 1.5
|
||||
10.333333333333334 7.833333333333333
|
||||
1 8 1 0
|
||||
6.333333333333333 1.5
|
||||
0
|
||||
T6 1.0 0 0 1 0 8.666666666666666 7.166666666666667 8.645833333333334 6.973958333333333 8.75 7.234375 0
|
||||
1 14 0 0
|
||||
1
|
||||
1 12 0 0
|
||||
0
|
||||
T7 1.0 0 0 2 0 8.666666666666666 4.666666666666667 8.645833333333334 4.473958333333333 8.75 4.734375 0
|
||||
1 13 0 0
|
||||
1 6 0 0
|
||||
2
|
||||
1 6 1 0
|
||||
6.583333333333333 6.0
|
||||
1 11 0 0
|
||||
0
|
||||
T9 1.0 0 0 2 0 8.666666666666666 6.166666666666667 8.645833333333334 5.973958333333333 8.75 6.234375 0
|
||||
1 12 0 0
|
||||
-1 8 1 0
|
||||
7.166666666666667 6.166666666666667
|
||||
2
|
||||
-1 9 1 0
|
||||
6.75 6.75
|
||||
1 13 0 0
|
||||
0
|
||||
T10 1.0 0 0 1 0 8.666666666666666 3.1666666666666665 8.619791666666666 2.9739583333333335 8.75 3.234375 0
|
||||
1 11 0 0
|
||||
1
|
||||
1 10 0 0
|
||||
0
|
8
anno3/vpc/consegne/3/3.8-Measures.solution/PT.pba
Normal file
8
anno3/vpc/consegne/3/3.8-Measures.solution/PT.pba
Normal file
|
@ -0,0 +1,8 @@
|
|||
6
|
||||
5 1 1 1 2 1 3 1 4 1 5
|
||||
4 -1 2 -1 4 -1 5 1 7
|
||||
4 1 2 1 4 1 5 1 6
|
||||
5 1 10 1 11 1 12 1 13 1 14
|
||||
4 1 9 -1 10 -1 11 -1 13
|
||||
4 1 8 1 10 1 11 1 13
|
||||
0
|
10
anno3/vpc/consegne/3/3.8-Measures.solution/PT.pin
Normal file
10
anno3/vpc/consegne/3/3.8-Measures.solution/PT.pin
Normal file
|
@ -0,0 +1,10 @@
|
|||
8
|
||||
5 1 10 1 11 1 12 1 13 1 14
|
||||
3 1 9 1 12 1 14
|
||||
4 1 8 1 10 1 11 1 13
|
||||
2 1 8 1 9
|
||||
5 1 1 1 2 1 3 1 4 1 5
|
||||
3 1 1 1 3 1 7
|
||||
4 1 2 1 4 1 5 1 6
|
||||
2 1 6 1 7
|
||||
0
|
122
anno3/vpc/consegne/3/3.8.PNPRO
Normal file
122
anno3/vpc/consegne/3/3.8.PNPRO
Normal file
File diff suppressed because one or more lines are too long
BIN
anno3/vpc/consegne/3/3.8.jpg
Normal file
BIN
anno3/vpc/consegne/3/3.8.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
49
anno3/vpc/consegne/3/3.8.smv
Normal file
49
anno3/vpc/consegne/3/3.8.smv
Normal file
|
@ -0,0 +1,49 @@
|
|||
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)
|
||||
|
||||
|
||||
MODULE proc(mine, other)
|
||||
VAR
|
||||
state: {local, await, critical, setTrue, setFalse};
|
||||
ASSIGN
|
||||
init(state) := local;
|
||||
next(state) := case
|
||||
state = local: {local, setTrue};
|
||||
state = await & other = FALSE: critical;
|
||||
state = await: await;
|
||||
state = setTrue: await;
|
||||
state = critical: setFalse;
|
||||
state = setFalse: local;
|
||||
esac;
|
16
anno3/vpc/consegne/3/3.9-Measures.solution/PT.bnd
Normal file
16
anno3/vpc/consegne/3/3.9-Measures.solution/PT.bnd
Normal file
|
@ -0,0 +1,16 @@
|
|||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
0 1
|
||||
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.9-Measures.solution/PT.ctl
Normal file
2
anno3/vpc/consegne/3/3.9-Measures.solution/PT.ctl
Normal file
|
@ -0,0 +1,2 @@
|
|||
% MEASURE0
|
||||
AG (#setTrue_Q==1 -> AF (#critical_Q == 1))
|
3
anno3/vpc/consegne/3/3.9-Measures.solution/PT.def
Normal file
3
anno3/vpc/consegne/3/3.9-Measures.solution/PT.def
Normal file
|
@ -0,0 +1,3 @@
|
|||
|256
|
||||
%
|
||||
|
|
2
anno3/vpc/consegne/3/3.9-Measures.solution/PT.ilpbnd
Normal file
2
anno3/vpc/consegne/3/3.9-Measures.solution/PT.ilpbnd
Normal file
|
@ -0,0 +1,2 @@
|
|||
0
|
||||
0
|
166
anno3/vpc/consegne/3/3.9-Measures.solution/PT.net
Normal file
166
anno3/vpc/consegne/3/3.9-Measures.solution/PT.net
Normal file
|
@ -0,0 +1,166 @@
|
|||
|0|
|
||||
|
|
||||
f 0 16 0 16 0 0 0
|
||||
local_P 1 3.3333333333333335 1.6666666666666667 3.6279166666666662 1.6122916666666667 0
|
||||
setTrue_P 0 3.3333333333333335 3.0 3.5341666666666662 2.9456249999999997 0
|
||||
critical_P 0 3.3333333333333335 6.5 3.7216666666666662 6.612291666666667 0
|
||||
setFalse_P 0 3.3333333333333335 7.666666666666667 3.5237499999999997 7.695625 0
|
||||
wantP_FALSE 1 7.833333333333333 7.666666666666667 7.383125 7.862291666666667 0
|
||||
wantP_TRUE 0 4.666666666666667 7.5 5.070625 7.445625 0
|
||||
While 0 3.3333333333333335 4.5 3.169583333333333 4.695625 0
|
||||
P0 0 4.0 5.333333333333333 3.9560416666666662 5.528958333333333 0
|
||||
wantQ_FALSE 1 7.5 2.8333333333333335 7.044583333333333 3.028958333333333 0
|
||||
wantQ_TRUE 0 7.833333333333333 4.833333333333333 7.39875 5.028958333333333 0
|
||||
local_Q 1 10.833333333333334 1.5 11.1175 1.445625 0
|
||||
setTrue_Q 0 10.833333333333334 2.8333333333333335 11.278958333333334 2.778958333333333 0
|
||||
critical_Q 0 10.833333333333334 6.333333333333333 11.21125 6.445625 0
|
||||
setFalse_Q 0 10.833333333333334 7.5 11.018541666666666 7.528958333333333 0
|
||||
While_ 0 10.833333333333334 4.333333333333333 10.888333333333334 4.612291666666667 0
|
||||
P1 0 8.833333333333334 6.333333333333333 8.789375 6.528958333333333 0
|
||||
T0 1.0 0 0 1 0 3.3333333333333335 2.3333333333333335 3.3125 2.140625 3.4166666666666665 2.4010416666666665 0
|
||||
1 1 0 0
|
||||
1
|
||||
1 2 0 0
|
||||
0
|
||||
reset_transition 1.0 0 0 2 0 3.3333333333333335 8.166666666666666 2.8802083333333335 8.557291666666666 3.4166666666666665 8.234375 0
|
||||
1 4 1 0
|
||||
3.3333333333333335 7.916666666666667
|
||||
1 6 0 0
|
||||
2
|
||||
-1 1 2 0
|
||||
0.75 8.166666666666666
|
||||
0.75 1.6666666666666667
|
||||
1 5 1 0
|
||||
5.833333333333333 8.166666666666666
|
||||
0
|
||||
T3 1.0 0 0 1 0 3.3333333333333335 7.0 3.3125 6.807291666666667 3.4166666666666665 7.067708333333333 0
|
||||
1 3 0 0
|
||||
1
|
||||
1 4 0 0
|
||||
0
|
||||
T2 1.0 0 0 2 0 3.3333333333333335 3.8333333333333335 3.3125 3.640625 3.4166666666666665 3.9010416666666665 0
|
||||
1 2 0 0
|
||||
-1 5 1 0
|
||||
4.5 3.6666666666666665
|
||||
2
|
||||
-1 6 1 0
|
||||
2.3333333333333335 4.0
|
||||
1 7 0 0
|
||||
0
|
||||
T00 1.0 0 0 1 0 2.0 1.3333333333333333 1.953125 1.140625 2.0833333333333335 1.4010416666666667 0
|
||||
1 1 1 0
|
||||
2.75 1.25
|
||||
1
|
||||
1 1 0 0
|
||||
0
|
||||
T1 1.0 0 0 2 2 1.0 5.166666666666667 0.9791666666666666 4.973958333333333 1.0833333333333333 5.234375 0
|
||||
1 7 0 0
|
||||
-1 9 1 0
|
||||
2.5 2.9166666666666665
|
||||
2
|
||||
1 3 2 0
|
||||
1.5 6.333333333333333
|
||||
1.9166666666666667 6.583333333333333
|
||||
-1 9 1 0
|
||||
0.5833333333333334 5.583333333333333
|
||||
0
|
||||
T4 1.0 0 0 3 3 5.0 5.0 4.979166666666667 4.807291666666667 5.083333333333333 5.067708333333333 0
|
||||
1 7 0 0
|
||||
-1 6 1 0
|
||||
8.416666666666666 3.5833333333333335
|
||||
-1 10 2 0
|
||||
4.416666666666667 3.5833333333333335
|
||||
5.916666666666667 3.25
|
||||
3
|
||||
1 8 0 0
|
||||
-1 5 2 0
|
||||
6.416666666666667 5.666666666666667
|
||||
8.333333333333334 7.416666666666667
|
||||
-1 10 2 0
|
||||
3.25 6.583333333333333
|
||||
4.666666666666667 6.333333333333333
|
||||
0
|
||||
T5 1.0 0 0 2 1 3.3333333333333335 5.666666666666667 3.3125 5.473958333333333 3.4166666666666665 5.734375 0
|
||||
1 8 0 0
|
||||
-1 5 1 0
|
||||
4.083333333333333 6.25
|
||||
2
|
||||
1 7 0 0
|
||||
-1 6 3 0
|
||||
0.5 6.083333333333333
|
||||
0.3333333333333333 9.25
|
||||
7.75 9.083333333333334
|
||||
0
|
||||
T15 1.0 0 0 1 0 10.833333333333334 2.1666666666666665 10.786458333333334 1.9739583333333333 10.916666666666666 2.234375 0
|
||||
1 11 0 0
|
||||
1
|
||||
1 12 0 0
|
||||
0
|
||||
reset_Transition 1.0 0 0 1 0 10.833333333333334 8.0 10.359375 8.390625 10.916666666666666 8.067708333333334 0
|
||||
1 14 1 0
|
||||
10.833333333333334 7.75
|
||||
1
|
||||
-1 11 2 0
|
||||
7.5 8.0
|
||||
7.5 1.5
|
||||
0
|
||||
T9 1.0 0 0 1 0 10.833333333333334 6.833333333333333 10.8125 6.640625 10.916666666666666 6.901041666666667 0
|
||||
1 13 0 0
|
||||
1
|
||||
1 14 0 0
|
||||
0
|
||||
T12 1.0 0 0 2 0 10.833333333333334 3.6666666666666665 10.786458333333334 3.4739583333333335 10.916666666666666 3.734375 0
|
||||
1 12 0 0
|
||||
-1 9 0 0
|
||||
2
|
||||
1 15 0 0
|
||||
-1 10 4 0
|
||||
13.666666666666666 3.6666666666666665
|
||||
14.0 8.333333333333334
|
||||
9.75 8.583333333333334
|
||||
9.583333333333334 8.5
|
||||
0
|
||||
T100 1.0 0 0 1 0 9.5 1.1666666666666667 9.427083333333334 0.9739583333333334 9.583333333333334 1.234375 0
|
||||
1 11 1 0
|
||||
10.25 1.0833333333333333
|
||||
1
|
||||
1 11 0 0
|
||||
0
|
||||
T11 1.0 0 0 2 1 10.833333333333334 5.5 10.786458333333334 5.307291666666667 10.916666666666666 5.567708333333333 0
|
||||
1 16 1 0
|
||||
10.833333333333334 5.916666666666667
|
||||
-1 9 2 0
|
||||
10.2587890625 5.50703125
|
||||
10.083333333333334 6.25
|
||||
2
|
||||
1 15 0 0
|
||||
-1 10 2 0
|
||||
12.416666666666666 5.916666666666667
|
||||
9.25 6.833333333333333
|
||||
0
|
||||
T6 1.0 0 0 3 2 9.333333333333334 5.0 7.979166666666667 1.390625 9.416666666666666 5.067708333333333 0
|
||||
1 15 0 0
|
||||
-1 6 1 0
|
||||
9.25 4.083333333333333
|
||||
1 10 0 0
|
||||
3
|
||||
1 16 0 0
|
||||
-1 6 2 0
|
||||
10.0 5.0
|
||||
10.0 7.333333333333333
|
||||
1 9 0 0
|
||||
0
|
||||
T7 1.0 0 0 2 1 13.166666666666666 5.166666666666667 13.145833333333334 4.973958333333333 13.25 5.234375 0
|
||||
1 15 0 0
|
||||
-1 5 2 0
|
||||
13.166666666666666 3.25
|
||||
6.333333333333333 4.0
|
||||
2
|
||||
1 13 1 0
|
||||
13.166666666666666 6.333333333333333
|
||||
-1 5 4 0
|
||||
13.5 5.166666666666667
|
||||
13.416666666666666 9.0
|
||||
11.0 9.166666666666666
|
||||
7.25 9.083333333333334
|
||||
0
|
7
anno3/vpc/consegne/3/3.9-Measures.solution/PT.pba
Normal file
7
anno3/vpc/consegne/3/3.9-Measures.solution/PT.pba
Normal file
|
@ -0,0 +1,7 @@
|
|||
5
|
||||
2 1 9 1 10
|
||||
6 1 11 1 12 1 13 1 14 1 15 1 16
|
||||
4 -1 3 -1 4 1 6 -1 7
|
||||
4 1 3 1 4 1 5 1 7
|
||||
6 1 1 1 2 1 3 1 4 1 7 1 8
|
||||
0
|
8
anno3/vpc/consegne/3/3.9-Measures.solution/PT.pin
Normal file
8
anno3/vpc/consegne/3/3.9-Measures.solution/PT.pin
Normal file
|
@ -0,0 +1,8 @@
|
|||
6
|
||||
6 1 1 1 2 1 3 1 4 1 7 1 8
|
||||
4 1 1 1 2 1 6 1 8
|
||||
4 1 3 1 4 1 5 1 7
|
||||
2 1 5 1 6
|
||||
6 1 11 1 12 1 13 1 14 1 15 1 16
|
||||
2 1 9 1 10
|
||||
0
|
223
anno3/vpc/consegne/3/3.9.PNPRO
Normal file
223
anno3/vpc/consegne/3/3.9.PNPRO
Normal file
File diff suppressed because one or more lines are too long
BIN
anno3/vpc/consegne/3/3.9.jpg
Normal file
BIN
anno3/vpc/consegne/3/3.9.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
46
anno3/vpc/consegne/3/3.9.smv
Normal file
46
anno3/vpc/consegne/3/3.9.smv
Normal file
|
@ -0,0 +1,46 @@
|
|||
MODULE main
|
||||
VAR
|
||||
wantP: boolean;
|
||||
wantQ: boolean;
|
||||
p: process proc(wantP, wantQ); -- PROCESS: http://nusmv.fbk.eu/NuSMV/userman/v21/nusmv_3.html#SEC27
|
||||
q: process proc(wantQ, wantP);
|
||||
ASSIGN
|
||||
init(wantP) := FALSE;
|
||||
init(wantQ) := FALSE;
|
||||
|
||||
CTLSPEC -- no mutual exclusion
|
||||
AG (p.state != critical | q.state != critical)
|
||||
|
||||
CTLSPEC -- no deadlock
|
||||
AG ((p.state = setTrue | q.state = setTrue) -> AF (p.state = critical | q.state = critical))
|
||||
|
||||
CTLSPEC -- no individual starvation
|
||||
AG (p.state = setTrue -> AF p.state = critical)
|
||||
CTLSPEC
|
||||
AG (q.state = setTrue -> AF q.state = critical)
|
||||
|
||||
|
||||
MODULE proc(mine, other)
|
||||
VAR
|
||||
state: {local, critical, setTrue, setFalse, resetTrue, resetFalse};
|
||||
ASSIGN
|
||||
init(state) := local;
|
||||
next(state) := case
|
||||
state = local: {local, setTrue};
|
||||
state = setTrue & other = TRUE: resetFalse;
|
||||
state = setTrue & other = FALSE: critical;
|
||||
state = resetFalse: resetTrue;
|
||||
state = resetTrue & other = TRUE: resetFalse;
|
||||
state = resetTrue & other = FALSE: critical;
|
||||
state = critical: setFalse;
|
||||
state = setFalse: local;
|
||||
esac;
|
||||
next(mine) := case
|
||||
state = setTrue: TRUE;
|
||||
state = setFalse: FALSE;
|
||||
state = resetTrue: TRUE;
|
||||
state = resetFalse: FALSE;
|
||||
TRUE: mine;
|
||||
esac;
|
||||
FAIRNESS
|
||||
running
|
|
@ -15,7 +15,6 @@
|
|||
# ** GreatSPN
|
||||
# ** TODO CCS
|
||||
# ** Risultati
|
||||
|
||||
Nella tabella mostriamo i risultati ottenuti
|
||||
| | NuSMV | GreatSPN |
|
||||
|---------------------+-------+----------|
|
||||
|
@ -32,7 +31,8 @@ Nella tabella mostriamo i risultati ottenuti
|
|||
- [ ] Controlla in 3.6 Starvation: nusmv no, greatspn si`
|
||||
- [ ] 3.6, dealock: correttezza spiegazione della differenza greatspn nusmv?
|
||||
- [ ] 3.6, starvation: perche` nusmv con processi non ha starvation?
|
||||
- [ ] 3.6, perche` Amparore ha detto che deadlock: AG(EF(#critical_P == 1)) ??
|
||||
- [ ] 3.6, Amparore ha detto che deadlock: AG(EF(#critical_P == 1)) ??
|
||||
- [ ] 3.6, inserisci controesempi dove necessario
|
||||
|
||||
NOTA: nel caso di Ampararore, la formula:
|
||||
| da qualsiasi stato e` sempre possibile arrivare a critical_P == 1
|
||||
|
@ -231,6 +231,7 @@ AG(!(#critical_P == 1) || !(#critical_Q == 1))
|
|||
AG ((#await_P==1 || \#await_Q == 1) -> AF (#critical_P == 1 || \#critical_Q == 1))
|
||||
AG (#await_P==1 -> AF (#critical_P == 1))
|
||||
#+END_SRC
|
||||
[[./3.6.jpg]]
|
||||
|
||||
** TODO CCS
|
||||
** TODO Risultati
|
||||
|
@ -256,3 +257,364 @@ seguente formula CTL
|
|||
| AG (wₚ → EF (cₚ || c_{q}))
|
||||
| AG(#await_P == 1 -> EF(#critical_Q==1 || \#critical_P == 1))
|
||||
che risulta rispettata.
|
||||
* Algoritmo 3.8
|
||||
Due processi iterano all'infinito seguendo questo pseudocodice
|
||||
|
||||
#+BEGIN_SRC
|
||||
while true:
|
||||
non-critical section
|
||||
wantP <- true
|
||||
await wantQ = false
|
||||
critical section
|
||||
wantP <- false
|
||||
#+END_SRC
|
||||
|
||||
** NuSMV
|
||||
Si e` deciso di modellare l'algoritmo allo stesso modo del precedente.
|
||||
#+include 3.8.b.smv
|
||||
** GreatSPN
|
||||
Il codice utilizzato per le proprieta` CTL e` il seguente:
|
||||
#+BEGIN_SRC
|
||||
AG(!(#critical_P == 1) || !(#critical_Q == 1))
|
||||
AG ((#await_P==1 || \#await_Q == 1) -> AF (#critical_P == 1 || \#critical_Q == 1))
|
||||
AG (#await_P==1 -> AF (#critical_P == 1))
|
||||
AG (#await_Q==1 -> AF (#critical_Q == 1))
|
||||
#+END_SRC
|
||||
Inoltre, per confermare alcune ipotesi, si e` testata anche la
|
||||
seguente formula CTL:
|
||||
| AG(#await_P == 1 -> EF(#critical_Q==1 || \#critical_P == 1))
|
||||
che conferma la presenza di deadlock causata dalle due variabili booleane.
|
||||
[[./3.8.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 |
|
||||
Questo algoritmo rispetto al precedente garantisce la mutua
|
||||
esclusione, ma non ci permette di evitare il deadlock (e di
|
||||
conseguenza neanche la starvation individuale).
|
||||
|
||||
Di seguito riportiamo la traccia di NuSMV che mostra che il deadlock
|
||||
avviene quando i progetti eseguono /setTrue/ nello stesso momento.
|
||||
#+BEGIN_SRC
|
||||
-- specification AG ((p.state = await | q.state = await) -> 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 <-
|
||||
wantP = FALSE
|
||||
wantQ = FALSE
|
||||
p.state = local
|
||||
q.state = local
|
||||
-> State: 1.2 <-
|
||||
p.state = setTrue
|
||||
q.state = setTrue
|
||||
-- Loop starts here
|
||||
-> State: 1.3 <-
|
||||
wantP = TRUE
|
||||
wantQ = TRUE
|
||||
p.state = await
|
||||
q.state = await
|
||||
-> State: 1.4 <-
|
||||
#+END_SRC
|
||||
Mostriamo invece il controesempio generato da GreatSPN che ci mostra
|
||||
una condizione di starvation individuale, dove, come in precedenza, il
|
||||
processo Q rimane in /local_Q/.
|
||||
#+BEGIN_SRC
|
||||
Generated counter-example:
|
||||
==================================== Trace ====================================
|
||||
Initial state is: local_P(1), wantP_FALSE(1), wantQ_FALSE(1), local_Q(1)
|
||||
Initial state satisfies: E F (not ((not (await_P = 1)) or (not E G (not (critical_P = 1))))).
|
||||
|
||||
1: local_P(1), wantP_FALSE(1), wantQ_FALSE(1), local_Q(1)
|
||||
State 1. satisfies: ((not (await_P = 1)) or (not E G (not (critical_P = 1)))).
|
||||
|
||||
1.1: local_P(1), wantP_FALSE(1), wantQ_FALSE(1), local_Q(1)
|
||||
State 1.1. does not satisfy: (await_P = 1).
|
||||
|
||||
2: SetTrue_P(1), wantP_FALSE(1), wantQ_FALSE(1), local_Q(1)
|
||||
State 2. satisfies: ((not (await_P = 1)) or (not E G (not (critical_P = 1)))).
|
||||
|
||||
2.1: SetTrue_P(1), wantP_FALSE(1), wantQ_FALSE(1), local_Q(1)
|
||||
State 2.1. does not satisfy: (await_P = 1).
|
||||
|
||||
3: wantP_TRUE(1), await_P(1), wantQ_FALSE(1), local_Q(1)
|
||||
State 3. does not satisfy: ((not (await_P = 1)) or (not E G (not (critical_P = 1)))).
|
||||
|
||||
3.1: wantP_TRUE(1), await_P(1), wantQ_FALSE(1), local_Q(1)
|
||||
State 3.1.L. satisfies: (await_P = 1).
|
||||
|
||||
State 3.1.R. satisfies: E G (not (critical_P = 1)). Start of loop.
|
||||
|
||||
3.1.R.1: wantP_TRUE(1), await_P(1), wantQ_FALSE(1), local_Q(1)
|
||||
State 3.1.R.1. does not satisfy: (critical_P = 1).
|
||||
|
||||
3.1.R.2: loop back to state 3.1.R.1.
|
||||
#+END_SRC
|
||||
|
||||
* Algoritmo 3.9
|
||||
Due processi iterano all'infinito seguendo questo pseudocodice
|
||||
|
||||
#+BEGIN_SRC
|
||||
while true:
|
||||
non-critical section
|
||||
wantP <- true
|
||||
while wantQ
|
||||
wantP <- false
|
||||
wantP <- true
|
||||
critical section
|
||||
wantP <- false
|
||||
#+END_SRC
|
||||
(l'altro processo segue uno pseudocodice simmetrico)
|
||||
|
||||
** NuSMV
|
||||
Si e` deciso di modellare l'algoritmo usando per ognuno dei due
|
||||
processi utilizzando l'espressione /process/ per simulare di NuSMV e
|
||||
per ciascun process una variabile /state/ di tipo enumerazione
|
||||
| state: {local, critical, setTrue, setFalse, resetTrue, resetFalse};
|
||||
Benche` non fosse necessario distinguere il set della variabile
|
||||
booleana /wantP/, si e` preferito farlo in quanto l'enumerazione di
|
||||
tutti gli stati possibili, come evidenziato dal codice che segue, non
|
||||
risulta complesso.
|
||||
#+include 3.9.smv
|
||||
|
||||
** GreatSPN
|
||||
Il codice utilizzato per le proprieta` CTL e` il seguente:
|
||||
#+BEGIN_SRC
|
||||
AG(!(#critical_P == 1) || !(#critical_Q == 1))
|
||||
AG ((#setTrue_P==1 || \#setTrue_Q == 1) -> AF (#critical_P == 1 || \#critical_Q == 1))
|
||||
AG (#setTrue_P==1 -> AF (#critical_P == 1))
|
||||
AG (#setTrue_Q==1 -> AF (#critical_Q == 1))
|
||||
#+END_SRC
|
||||
Inoltre, per confermare alcune ipotesi, si e` testata anche la
|
||||
seguente formula CTL:
|
||||
| AG(#setTrue_P == 1 -> EF(#critical_Q==1 || \#critical_P == 1))
|
||||
che conferma la presenza di deadlock causata dalle due variabili
|
||||
booleane.
|
||||
[[./3.9.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 |
|
||||
|
||||
Il deadlock si verifica quando i entrambe le variabili booleane sono
|
||||
uguali a /true/.
|
||||
Ad esempio, se si esegue in locksetop il loop con la
|
||||
condizione booleana sulla variabile dell'altro processo, si verifica
|
||||
la condizione di deadlock.
|
||||
Viene riportato il trace di NuSMV che conferma questa ipotesi.
|
||||
GreatSPN fallisce per mancanza di RAM sulla macchina usata ma e`
|
||||
facile riprodurre il deadlock manualmente.
|
||||
#+BEGIN_SRC
|
||||
-- specification AG ((p.state = setTrue | q.state = setTrue) -> 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 <-
|
||||
wantP = FALSE
|
||||
wantQ = FALSE
|
||||
p.state = local
|
||||
q.state = local
|
||||
-> Input: 1.2 <-
|
||||
_process_selector_ = p
|
||||
running = FALSE
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-> State: 1.2 <-
|
||||
p.state = setTrue
|
||||
-> Input: 1.3 <-
|
||||
-> State: 1.3 <-
|
||||
wantP = TRUE
|
||||
p.state = critical
|
||||
-> Input: 1.4 <-
|
||||
-> State: 1.4 <-
|
||||
p.state = setFalse
|
||||
-> Input: 1.5 <-
|
||||
_process_selector_ = q
|
||||
q.running = TRUE
|
||||
p.running = FALSE
|
||||
-> State: 1.5 <-
|
||||
q.state = setTrue
|
||||
-> Input: 1.6 <-
|
||||
-> State: 1.6 <-
|
||||
wantQ = TRUE
|
||||
q.state = resetFalse
|
||||
-> Input: 1.7 <-
|
||||
_process_selector_ = p
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-> State: 1.7 <-
|
||||
wantP = FALSE
|
||||
p.state = local
|
||||
-> Input: 1.8 <-
|
||||
-> State: 1.8 <-
|
||||
p.state = setTrue
|
||||
-> Input: 1.9 <-
|
||||
-- Loop starts here
|
||||
-> State: 1.9 <-
|
||||
wantP = TRUE
|
||||
p.state = resetFalse
|
||||
-> Input: 1.10 <-
|
||||
_process_selector_ = q
|
||||
q.running = TRUE
|
||||
p.running = FALSE
|
||||
-> State: 1.10 <-
|
||||
wantQ = FALSE
|
||||
q.state = resetTrue
|
||||
-> Input: 1.11 <-
|
||||
-- Loop starts here
|
||||
-> State: 1.11 <-
|
||||
wantQ = TRUE
|
||||
q.state = resetFalse
|
||||
-> Input: 1.12 <-
|
||||
_process_selector_ = p
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-> State: 1.12 <-
|
||||
wantP = FALSE
|
||||
p.state = resetTrue
|
||||
-> Input: 1.13 <-
|
||||
-- Loop starts here
|
||||
-> State: 1.13 <-
|
||||
wantP = TRUE
|
||||
p.state = resetFalse
|
||||
-> Input: 1.14 <-
|
||||
_process_selector_ = q
|
||||
q.running = TRUE
|
||||
p.running = FALSE
|
||||
-> State: 1.14 <-
|
||||
wantQ = FALSE
|
||||
q.state = resetTrue
|
||||
-> Input: 1.15 <-
|
||||
-- Loop starts here
|
||||
-> State: 1.15 <-
|
||||
wantQ = TRUE
|
||||
q.state = resetFalse
|
||||
-> Input: 1.16 <-
|
||||
_process_selector_ = p
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-> State: 1.16 <-
|
||||
wantP = FALSE
|
||||
p.state = resetTrue
|
||||
-> Input: 1.17 <-
|
||||
-> State: 1.17 <-
|
||||
wantP = TRUE
|
||||
p.state = resetFalse
|
||||
#+END_SRC
|
||||
Di seguito il trace che conferma la presenza di starvation
|
||||
individuale, sia in GreatSPN che NuSMV.
|
||||
#+BEGIN_SRC
|
||||
Generated counter-example:
|
||||
==================================== Trace ====================================
|
||||
Initial state is: local_Q(1), wantQ_FALSE(1), wantP_FALSE(1), local_P(1)
|
||||
Initial state satisfies: E F (not ((not (setTrue_Q = 1)) or (not E G (not (critical_Q = 1))))).
|
||||
|
||||
1: local_Q(1), wantQ_FALSE(1), wantP_FALSE(1), local_P(1)
|
||||
State 1. satisfies: ((not (setTrue_Q = 1)) or (not E G (not (critical_Q = 1)))).
|
||||
|
||||
1.1: local_Q(1), wantQ_FALSE(1), wantP_FALSE(1), local_P(1)
|
||||
State 1.1. does not satisfy: (setTrue_Q = 1).
|
||||
|
||||
2: setTrue_Q(1), wantQ_FALSE(1), wantP_FALSE(1), local_P(1)
|
||||
State 2. does not satisfy: ((not (setTrue_Q = 1)) or (not E G (not (critical_Q = 1)))).
|
||||
|
||||
2.1: setTrue_Q(1), wantQ_FALSE(1), wantP_FALSE(1), local_P(1)
|
||||
State 2.1.L. satisfies: (setTrue_Q = 1).
|
||||
|
||||
State 2.1.R. satisfies: E G (not (critical_Q = 1)). Start of loop.
|
||||
|
||||
2.1.R.1: setTrue_Q(1), wantQ_FALSE(1), wantP_FALSE(1), local_P(1)
|
||||
State 2.1.R.1. does not satisfy: (critical_Q = 1).
|
||||
|
||||
2.1.R.2: loop back to state 2.1.R.1.
|
||||
#+END_SRC
|
||||
#+BEGIN_SRC
|
||||
-- specification AG (q.state = setTrue -> AF q.state = critical) is false
|
||||
-- as demonstrated by the following execution sequence
|
||||
Trace Description: CTL Counterexample
|
||||
Trace Type: Counterexample
|
||||
-> State: 3.1 <-
|
||||
wantP = FALSE
|
||||
wantQ = FALSE
|
||||
p.state = local
|
||||
q.state = local
|
||||
-> Input: 3.2 <-
|
||||
_process_selector_ = q
|
||||
running = FALSE
|
||||
q.running = TRUE
|
||||
p.running = FALSE
|
||||
-> State: 3.2 <-
|
||||
q.state = setTrue
|
||||
-> Input: 3.3 <-
|
||||
_process_selector_ = p
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-> State: 3.3 <-
|
||||
p.state = setTrue
|
||||
-> Input: 3.4 <-
|
||||
-> State: 3.4 <-
|
||||
wantP = TRUE
|
||||
p.state = critical
|
||||
-> Input: 3.5 <-
|
||||
_process_selector_ = q
|
||||
q.running = TRUE
|
||||
p.running = FALSE
|
||||
-> State: 3.5 <-
|
||||
wantQ = TRUE
|
||||
q.state = resetFalse
|
||||
-> Input: 3.6 <-
|
||||
_process_selector_ = p
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-- Loop starts here
|
||||
-> State: 3.6 <-
|
||||
p.state = setFalse
|
||||
-> Input: 3.7 <-
|
||||
_process_selector_ = main
|
||||
running = TRUE
|
||||
p.running = FALSE
|
||||
-- Loop starts here
|
||||
-> State: 3.7 <-
|
||||
-> Input: 3.8 <-
|
||||
_process_selector_ = q
|
||||
running = FALSE
|
||||
q.running = TRUE
|
||||
-> State: 3.8 <-
|
||||
wantQ = FALSE
|
||||
q.state = resetTrue
|
||||
-> Input: 3.9 <-
|
||||
_process_selector_ = p
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-> State: 3.9 <-
|
||||
wantP = FALSE
|
||||
p.state = local
|
||||
-> Input: 3.10 <-
|
||||
-> State: 3.10 <-
|
||||
p.state = setTrue
|
||||
-> Input: 3.11 <-
|
||||
-> State: 3.11 <-
|
||||
wantP = TRUE
|
||||
p.state = critical
|
||||
-> Input: 3.12 <-
|
||||
_process_selector_ = q
|
||||
q.running = TRUE
|
||||
p.running = FALSE
|
||||
-> State: 3.12 <-
|
||||
wantQ = TRUE
|
||||
q.state = resetFalse
|
||||
-> Input: 3.13 <-
|
||||
_process_selector_ = p
|
||||
q.running = FALSE
|
||||
p.running = TRUE
|
||||
-> State: 3.13 <-
|
||||
p.state = setFalse
|
||||
#+END_SRC
|
||||
|
|
Loading…
Reference in a new issue