Vous êtes sur la page 1sur 21

SPIN / PROMELA

14/06/2013

Master IRAD - SPIN / PROMELA

Introduction (1)
SPIN = Simple Promela Interpreter
Analyse de systmes distribus, notamment des protocoles de communications,
Modlisation du systme en langage PROMELA, Simulation alatoire ou interactive du modle, Vrification dinvariants / de proprits LTL sur le modle.

PROMELA = Protocol/Processus Meta Language


Langage de spcification de SPIN

Documentation :
http://spinroot.com/spin/whatispin.html http://spinroot.com/spin/Man/Manual.html
14/06/2013 Master IRAD - SPIN / PROMELA 2

Introduction (2)
PLTL parser and Translator

Verifier generator

Optimized Model-checker

iSPIN Front-End

Promela parser

Interactive Simulation

Counterexamples

Executable On-the-fly Verifier

Syntax Error reports

14/06/2013

Master IRAD - SPIN / PROMELA

Promela

14/06/2013

Master IRAD - SPIN / PROMELA

Spcification Promela
Une spcification Promela peut tre compose de :
Variables, Canaux de communication, Un ou plusieurs processus + un processus initial init .

Syntaxe proche de celle de C


Commentaires de la forme : /* . */

14/06/2013

Master IRAD - SPIN / PROMELA

Types, variables et constantes


Types de base : bit, bool, byte, short, int
Type bit bool Taille 1 1 Domaine 0...1 01

byte
short int

8
16 32

0...255
-215-1...215-1 -231-1...231-1

Exemples
bool sa, ra; int i = 0;
14/06/2013 Master IRAD - SPIN / PROMELA 6

Types, variables et constantes


Types numrs :
Ensemble de constantes symboliques Un seul type numr autoris par spcification mtype = {Partiel,Complet,Ack} mtype st,rt;

Structures
typedef Mesg {bool b; int data}; -> Structure Mesg avec un boolen et un entier Mesg m; m.b = 0; m.data = 5;
14/06/2013 Master IRAD - SPIN / PROMELA 7

Types, variables et constantes


Tableaux
int sf[5]; tableau de 5 entiers (0 4).

Canaux
chan ch_bloc = [3] of {int}; canal pouvant contenir 3 messages, chaque message tant un entier.

Constantes
#define MAX 5; Constante MAX gale 5.
14/06/2013 Master IRAD - SPIN / PROMELA 8

Oprateurs
Type Arithmtiques Relationnels Logiques Bits Canaux Oprateurs +, -, *, /, %, --, ++ >, >=, <=, <, ==, != &&, ||, ! &, |, ~, ^, >>, << !, ?

14/06/2013

Master IRAD - SPIN / PROMELA

Processus
Dclaration
proctype nom_proc (paramtres formels) { /* Dclarations des variables locales et instructions */ }

Instanciation
run nom_proc (paramtres effectifs)

Processus initial
init { /* Dclarations des variables locales et instructions */ }

14/06/2013

Master IRAD - SPIN / PROMELA

10

Spcification Promela
/* Dclaration des constantes */ /* Dclaration et initialisation des variables globales */ proctype sender () { /* Dclaration des variables locales et instructions */ } proctype receiver () { /* Dclarations des variables locales et instructions */ }

init { run sender(); run receiver(); }


14/06/2013 Master IRAD - SPIN / PROMELA 11

Instructions
Activables ou bloques
Si une instruction est activable, elle peut tre immdiatement excute. Si une instruction est bloque, lexcution du processus dans lequel elle apparat est bloque jusqu ce que linstruction devienne activable.

Instructions spares par ; ou -> Pas de distinction entre condition et instruction (a==b) ; b++ : b nest incrment que si a est gal b. Sinon, on
dit que linstruction (a==b) est bloquante. On prfrera ici la notation (a==b) -> b++
Master IRAD - SPIN / PROMELA

14/06/2013

12

Entrelacement (1)
1 processus = 1 automate
byte x=2, y=3; proctype A() { x = x + 1} proctype B() {x = x 1 ; y = y + x} init {run A() ; run B()}

init

x=2 y=3

x=x+1

x=3 y=3

init

x=2 y=3

x=x-1

x=1 y=3

y=y+x

x=1 y=4

14/06/2013

Master IRAD - SPIN / PROMELA

13

Entrelacement (2)
byte x=2, y=3; proctype A() { x = x + 1} proctype B() {x = x 1 ; y = y + x} init {run A() ; run B()} x=3 y=3

x=x+1
init x=2 y=3 x=x-1

x=x-1
x=2 y=3 y=y+x x=2 y=5

x=1 y=3

x=x+1 x=x+1

y=y+x
14/06/2013

x=1 y=4

x=2 y=4
14

Master IRAD - SPIN / PROMELA

Instructions atomiques
atomic {Instr1; Instr2 ; Instrn} Activable si Instr1 est activable. Toutes les instructions sont effectues en un seul pas : aucune autre instruction ne peut tre effectue entre les instructions de atomic . Lexcution est suspendue si une des instructions Instr2, , Instrn est bloquante -> Attention bien sassurer que ces instructions ne sont pas bloquantes !
14/06/2013 Master IRAD - SPIN / PROMELA 15

Instructions atomiques
byte x=2, y=3; proctype A() { x = x + 1} proctype B() { atomic {x = x 1 ; y = y + x}} init {run A() ; run B()} x=x+1 init x=2 y=3 x=x-1 x=3 y=3 x=x-1 x=2 y=3 y=y+x x=2 y=5

x=1 y=3

x=x+1 x=x+1

y=y+x
14/06/2013

x=1 y=4

x=2 y=4
16

Master IRAD - SPIN / PROMELA

Instruction conditionnelle
Syntaxe
if :: instr11 -> instr12 ; instr1N :: :: instrN1 -> instrN2 ; ; instrNN :: else -> instructions /* facultatif */ fi

Activable si une des gardes est activable Si plusieurs gardes activables, choix non-dterministe Si aucune garde activable et else prsent, excution des instructions suivant else.
14/06/2013 Master IRAD - SPIN / PROMELA 17

Boucles
Syntaxe
do :: instr11 -> instr12 ; instr1N :: :: instrN1 -> instrN2 ; ; instrNN :: else -> instructions /* facultatif */ od

Pour sortir de la boucle, on peut utiliser une instruction break ou goto.


do :: :: goto done od done : printf();
14/06/2013 Master IRAD - SPIN / PROMELA 18

Canaux
Files dattente (FIFO) Dclaration :
chan ch_bloc = [5] of {int} chan ch_rdv = [0] of {int} : canal synchrone (un message ne peut tre envoy que sil est attendu)

Envoi : ch_bloc!expr expr est envoy sur ch_bloc sil reste de la place dans la file dattente du canal. Instruction bloquante sinon. Rception :
ch_bloc?variable variable reoit pour valeur le premier message du canal. Si aucun message sur le canal, instruction bloquante. ch_bloc?constante Excutable si le premier message du canal a une valeur gale constante. Instruction bloquante sinon.

14/06/2013

Master IRAD - SPIN / PROMELA

19

Canaux
Messages de type tuple
chan ch = [5] of {bool, int} Envoi : ch!exprB,exprI ou ch!exprB(exprI) Rception : ch?varB,varI ou ch?varB(varI)

Si oubli de paramtres, affectation non dterministe pour les paramtres manquants


Les paramtres en trop sont perdus (sans avertissements !).

14/06/2013

Master IRAD - SPIN / PROMELA

20

Canaux
Quelques fonctions sur les canaux :
len(ch_bloc) : retourne le nombre de messages contenus dans ch_bloc (peut sutiliser dans une affectation), empty(ch_bloc) / nempty(ch_bloc) : permet de savoir si le canal ch_bloc est vide / non vide, full(ch_bloc) / nfull(ch_bloc) : permet de savoir si ch_bloc est rempli / non rempli.

14/06/2013

Master IRAD - SPIN / PROMELA

21

Vous aimerez peut-être aussi