Esempi di specifica in PROMELA per accesso in mutua esclusione a una sezione critica:
soluzioni già presentate nella lezione N.8;
Verifica di proprietà delle soluzioni proposte usando le funzionalità di model-checking di SPIN:
asserzioni e invarianti globali;
propietà legate alla corretta terminazione.
Proprietà di stato: proposizione che può far riferimento (imponendo vincoli) su tutte le componenti che determinano lo stato del sistema:
Un tipologia di proprietà in cui si fa riferimento alle propriètà di stato sono gli Invarianti.
Invariante: proprietà di stato che deve essere soddisfatta da tutte le esecuzioni (comportamenti).
In PROMELA un invariante viene espresso nella specifica con il costrutto
assert(<condizione>)
Assert è una istruzione sempre eseguibile;
La condizione è valutata nello stato corrispondente all’esecuzione dell’istruzione;
Se richiesto, SPIN verifica la valutazione della condizione dell’istruzione di tutte le esecuzioni.
Esempio 1.
byte stato = 1;
proctype A (){(stato==1);x=x+1;assert(stato==2)}
proctype B (){(stato==1);x=x-1;assert(stato==0)}
init{run A();run B()}
SPIN rileva una violazione dell’asserzione.
Esempio 2.
byte stato = 1;
proctype A (){atomic{(stato==1);x=x+1;assert(stato==2)}}
proctype B (){atomic{(stato==1);x=x-1;assert(stato==0)}}
init{run A();run B()}
SPIN non rileva alcuna violazione dell’asserzione.
Si osservi che il controllo dell’invariante stato==2 (risp. stato==1) avviene solo dopo l’esecuzione dell’incremento (risp. decremento).
Una condizione di invarianza su tutti gli stati del sistema può essere ottenuta eseguendo in parallelo al sistema un processo del tipo:
proctype invariante (){assert(<condizione>)}
Esempio.
byte stato = 1;
proctype A (){(stato==1);x=x+1;assert(stato==2)}
proctype B (){(stato==1);x=x-1;assert(stato==0)}
proctype invariante(){assert(stato==1 || stato==2)}
init{run A();run B();run invariante()}
SPIN rileva una violazione dell’invariante in corrispondenza del decremento operato dal processo B.
L’uso degli invarianti permette di verificare gli esempi di specifica dei protocolli dati:
La tecnica degli invarianti di stato non permette di verificare il soddisfacimento di tutte le proprietà desiderabili.
Ad esempio, la Soluzione 1 rispetta le sezioni critiche ma si presta alla generazione di deadlock.
Il deadlock:
Rispetto le condizioni di terminazione si possono individuare due macro-categorie di processi:
La terminazione è una proprietà:
In una esecuzione un processo è in stato di attesa quando, non essendo terminato, in quell’esecuzione non ha la possibilità di effettuare alcun avanzamento del controllo.
Le condizione di attesa per un processo (trasformazionale o reattivo):
SPIN permette la specifica di punti di controllo (etichette) dove lo stato di attesa di un processo è compatibile con le funzionalità del processo.
Le etichette che indicano punti di attesa equiparabili a terminazione del processo hanno end come prefisso (end-etichetta)
Es. end0, end1, endd, ….
La condizione di corretta terminazione per un processo attivato richiede che:
Una specifica è corretta rispetto alle condizioni di terminazione se in ogni sua esecuzione
tutti i processi attivati soddisfano la condizione di corretta terminazione.
1. Introduzione ai metodi formali di specifica
2. Semantica dei formalismi di specifica
3. Astrazione e Bisimulazione debole
4. FSM: Macchine a Stati Finiti
5. FSM: Non-determinismo e succintezza
7. FSM e Parallelismo – seconda parte
8. FSM e Parallelismo – terza parte
9. Promela
10. Specifica e verifica in SPIN
11. Proprietà di liveness in SPIN
12. Specifica di proprietà in Logica Temporale Lineare
13. Comportamenti infiniti: Automi di Büchi
14. Model checking di LTL basato su automi
15. Specifica di sistemi real time: Automi Temporizzati
16. Proprietà degli Automi Temporizzati
17. Problemi di decisione negli Automi Temporizzati
18. Il sistema di verifica UPPAAL