analisi .2

This commit is contained in:
Francesco Mecca 2020-05-07 17:47:52 +02:00
parent cbcafef95d
commit 4950a08fff
24 changed files with 726 additions and 8 deletions

BIN
anno3/vpc/c05.pdf Normal file

Binary file not shown.

View file

@ -0,0 +1 @@
user@thinkgentoo.14302:1588838104

View 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

View file

@ -0,0 +1,2 @@
% MEASURE0
AG ( (#Wait_P==1 || #Wait_Q == 1) -> AF (#Critical_P == 1 || #Critical_Q == 1))

View file

@ -0,0 +1,3 @@
|256
%
|

View file

@ -0,0 +1,2 @@
0
0

View 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

View 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

View 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

File diff suppressed because one or more lines are too long

View file

@ -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;

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View file

@ -0,0 +1,6 @@
0 1
0 1
0 1
0 1
0 -1
0 -1

View 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))

View file

@ -0,0 +1,3 @@
|256
%
|

View file

@ -0,0 +1,4 @@
2
4 1
5 1
0

View 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

View file

@ -0,0 +1,4 @@
2
2 1 1 1 2
2 1 3 1 4
0

View file

@ -0,0 +1,4 @@
2
2 1 3 1 4
2 1 1 1 2
0

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View 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;

View 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;

View file

@ -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