Académique Documents
Professionnel Documents
Culture Documents
Module SDSC
Institut Galilée
Master 2 PLS
Le langage Promela
Utilisation de Spin
Structure d’un programme Promela 4/27
Remarques :
Ï Un processus peut recevoir des arguments à sa création.
Ï Attention, on utilise ; au lieu de , pour la déclaration d’arguments
Ï Un processus peut être créé :
Ï statiquement : à l’initialisation du programme (mot-clé active)
Ï dynamiquement : avec une instruction run exécutée par un autre processus
Le processus init 8/27
init {
/∗ code du p r o c e s s u s i n i t ∗/
}
Remarques :
Ï Le processus init (facultatif) est créé à l’initialisation du programme.
Ï On l’utilise généralement pour
Ï initialiser des variables globales
Ï et lancer d’autres processus.
Processus créés statiquement 9/27
a c t i v e [ N ] proctype p r o c ( t y p e A r g 1 a r g 1 ; . . . ,
typeArgN argN ) {
/∗ code du p r o c e s s u s ∗/
}
Processus créés dynamiquement 10/27
proctype p r o c ( t y p e A r g 1 a r g 1 ; . . . ;
typeArgN argN ) {
/∗ code du p r o c e s s u s ∗/
}
...
run p r o c ( x1 , . . . , xN )
...
Les processus — Exemple 11/27
a c t i v e [ 2 ] proctype s t a t ( ) {
p r i n t f ( " s t a t i q u e \n" ) ;
}
proctype dyn ( i n t x ; i n t y ) {
p r i n t f ( " dynamique ␣ : ␣(%d,%d ) \ n" , x , y ) ;
}
init {
run dyn ( 1 , 2 ) ;
run dyn ( 3 , 4 ) ;
}
Simulation du programme :
$ spin prog . pml
dynamique : (1 ,2)
statique
statique
dynamique : (3 ,4)
Les canaux de communication 12/27
Ï Les canaux sont utilisés par les processus pour s’échanger des messages.
Ï Il faut se les représenter comme des files FIFO de messages.
Ï Les messages stockés dans les canaux sont typés.
Ï Déclaration d’un canal c de N messages contenant des N-uplets.
chan c = [ N ] o f { t y p e 1 , . . . , typeN }
mtype = { r e q u e t e , r e p o n s e , e r r e u r }
chan c = [ 1 ] o f { mtype , i n t }
Réception/émission sur un canal 13/27
canal ! donnees /∗ é m i s s i o n ∗/
canal ? donnees /∗ r é c e p t i o n ∗/
Remarques :
Ï Le récepteur est bloqué si le canal est vide (il attend un message).
Ï L’émetteur est bloqué si le canal est plein (il attend qu’il se vide).
Ï Pour un rendez-vous (canal de taille 0) émetteur et récepteur doivent
être simultanèment sur les instructions d’émission.
Ï Côté récepteur :
Ï On affecte aux variables apparaissant après le ’ ?’ les valeurs contenues
dans le message.
Ï Si des constantes apparaissent dans les données le message reçu devra
contenir ces valeurs (sinon le processus sera bloqué).
Exemple :
chan c = [ 0 ] o f { i n t , i n t } ;
a c t i v e proctype p ( ) {
int x , y ;
c ! 1 0 , 1 2 ; c?x , y ; /∗ p envoie p u i s r e c o i t ∗/
p r i n t f ( "p␣ : ␣ j ’ a i ␣ r e c u ␣(%d , ␣%d ) \ n" , x , y ) ;
}
a c t i v e proctype q ( ) {
int x , y ;
c?x , y ; c ! 1 7 , 4 4 ; /∗ q r e c o i t p u i s envoie ∗/
p r i n t f ( "q␣ : ␣ j ’ a i ␣ r e c u ␣(%d , ␣%d ) \ n" , x , y ) ;
}
Simulation du programme :
$ spin test . pml
q : j ’ ai recu (10 , 12)
p : j ’ ai recu (17 , 44)
2 processes created
Expressions = instructions (bloquantes) 15/27
i = 3 ; /∗ a f f e c t a t i o n , ne bloque jamais ∗/
i == 3 ; /∗ ex é c u t i o n bloqu ée jusqu ’ à que i s o i t 3 ∗/
i < 4 | | t a b [ 7 ] == 4 /∗ s i t u a t i o n analogue ∗/
p r i n t f ( " . . . " ) ; /∗ ne bloque pas ( en p r i n c i p e ) ∗/
Exemple :
( p o r t e F e r m e e == 1 ) −> a s c e n c e u r D e m a r r e = 1 ; e t a g e ++
if
:: alternative1
...
: : alternativeN
: : e l s e −> a l t e r n a t i v e E l s e
fi
if
/∗ branche ex é c u t a b l e s u r r é c e p t i o n d ’ un message de
type msg contenant une v a l e u r i s u r l e c a n a l c ∗/
: : c ?msg , i −> . . .
/∗ branche ex é c u t a b l e s u r r é c e p t i o n d ’ un message de
type ack contenant une v a l e u r i s u r l e c a n a l c ∗/
: : c ? ack , i −> . . .
/∗ branche ex é c u t a b l e s i l a v a r i a b l e k vaut 1 ∗/
: : k == 1 −> . . .
/∗ branche ex é c u t a b l e s i aucune a u t r e ne l ’ e s t ∗/
: : e l s e −> . . .
fi
L’instruction do 20/27
do
:: alternative1
...
: : alternativeN
: : e l s e −> a l t e r n a t i v e E l s e
od
/∗ on f a i t l a somme de d i x e n t i e r s r é ceptionn é s
s u r l e c a n a l c et on termine ∗/
i = 0;
y = 0;
do
: : i < 10 −>
c?x ;
y = y + x;
i = i + 1
: : i == 10 −>
break
od
Les assertions 22/27
assert ( condition ) ;
Le langage Promela
Utilisation de Spin
Spin en mode simulation 24/27
En mode vérification :
Ï -search : spin génère, compile et exécute pan.c
Ï -replay : similaire à spin -t
Interface graphique ispin.tcl 27/27