SPIN / PROMELA - PowerPoint PPT Presentation

About This Presentation
Title:

SPIN / PROMELA

Description:

Analyse de syst mes distribu s, notamment des protocoles de communications, Mod lisation ... Instructions atomiques. atomic {Instr1; Instr2 ... ; Instrn} Activable si Instr1 est ... – PowerPoint PPT presentation

Number of Views:542
Avg rating:3.0/5.0
Slides: 23
Provided by: univor
Category:

less

Transcript and Presenter's Notes

Title: SPIN / PROMELA


1
SPIN / PROMELA
2
Introduction (1)
  • SPIN Simple Promela Interpreter
  • Analyse de systèmes distribués, notamment des
    protocoles de communications,
  • Modélisation du système en langage PROMELA,
  • Simulation aléatoire ou interactive du modèle,
  • Vérification dinvariants / de propriétés LTL sur
    le modèle.
  • PROMELA Protocol/Processus Meta Language
  • Langage de spécification de SPIN
  • Documentation
  • http//spinroot.com/spin/whatispin.html
  • http//spinroot.com/spin/Man/Manual.html

3
Introduction (2)
Verifier generator
Optimized Model-checker
PLTL parser and Translator
Executable On-the-fly Verifier
XSPINFront-End
Promelaparser
Interactive Simulation
Counter-examples
Syntax Error reports
4
Promela
5
Spécification Promela
  • Une spécification Promela peut être composée de
  • Variables,
  • Canaux de communication,
  • Un ou plusieurs processus un processus initial
     init .
  • Syntaxe proche de celle de C
  • Commentaires de la forme / . /

6
Types, variables et constantes
  • Types de base bit, bool, byte, short, int
  • Exemples
  • bool sa, ra
  • int i 0

Type Taille Domaine
bit 1 0...1
bool 1 01
byte 8 0...255
short 16 -215-1...215-1
int 32 -231-1...231-1
7
Types, variables et constantes
  • Types énumérés
  • Ensemble de constantes symboliques
  • Un seul type énuméré autorisé par spécification
  • mtype Partiel,Complet,Ackmtype st,rt
  • Structures
  • typedef Mesg bool b int data
  • -gt Structure Mesg avec un booléen et un entier
  • Mesg mm.b 0m.data 5

8
Types, variables et constantes
  • Tableaux
  • int sf5 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.

9
Opérateurs
Type Opérateurs
Arithmétiques , -, , /, , --,
Relationnels gt, gt, lt, lt, , !
Logiques , , !
Bits , , , , gtgt, ltlt
Canaux !, ?
10
Processus
  • Déclaration
  • proctype nom_proc (paramètres formels)
  • / Déclarations des variables locales et
    instructions /
  • Instanciation
  • run nom_proc (paramètres effectifs)
  • Processus initial
  • init
  • / Déclarations des variables locales et
    instructions /

11
Spécification Promela
  • / Déclaration des constantes /
  • / Déclaration et initialisation des variables
    globales /
  • proctype sender ()
  • / Déclaration des variables locales et
    instructions /
  • proctype receiver ()
  • / Déclarations des variables locales et
    instructions /
  • init
  • run sender() run receiver()

12
Instructions
  • Activables ou bloquées
  • Si une instruction est activable, elle peut être
    immédiatement exécutée.
  • Si une instruction est bloquée, lexécution du
    processus dans lequel elle apparaît est bloquée
    jusquà ce que linstruction devienne activable.
  • Instructions séparées par ou -gt
  • Pas de distinction entre condition et instruction
  • (ab) b b nest incrémenté que si a est
    égal à b. Sinon, on dit que linstruction (ab)
    est bloquante. On préférera ici la notation
    (ab) -gt b

13
Entrelacement (1)
  • 1 processus 1 automate byte x2, y3
  • proctype A() x x 1
  • proctype B() x x 1 y y x
  • init run A() run B()

14
Entrelacement (2)
  • byte x2, y3
  • proctype A() x x 1
  • proctype B() x x 1 y y x
  • init run A() run B()

15
Instructions atomiques
  • atomic Instr1 Instr2 Instrn
  • Activable si Instr1 est activable.
  • Toutes les instructions sont effectuées en un
    seul pas aucune autre instruction ne peut être
    effectuée entre les instructions de  atomic .
  • Lexécution est suspendue si une des instructions
    Instr2, , Instrn est bloquante -gt Attention à
    bien sassurer que ces instructions ne sont
    pas bloquantes !

16
Instructions atomiques
  • byte x2, y3
  • proctype A() x x 1
  • proctype B() atomic x x 1 y y x
  • init run A() run B()

17
Instruction conditionnelle
  • Syntaxe
  • if instr11 -gt instr12 instr1N
    instrN1 -gt instrN2 instrNN else -gt
    instructions / facultatif /fi
  • Activable si une des gardes est activable
  • Si plusieurs gardes activables, choix
    non-déterministe
  • Si aucune garde activable et else présent,
    exécution des instructions suivant else.

18
Boucles
  • Syntaxe
  • do instr11 -gt instr12 instr1N
    instrN1 -gt instrN2 instrNN else -gt
    instructions / facultatif /od
  • Pour sortir de la boucle, on peut utiliser une
    instruction break ou goto.
  • do
  • goto done
  • od
  • done printf()

19
Canaux
  • Files dattente (FIFO)
  • Déclaration
  • 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!exprexpr est envoyé sur ch_bloc
    sil reste de la place dans la file dattente du
    canal. Instruction bloquante sinon.
  • Réception
  • ch_bloc?variablevariable reçoit pour valeur le
    premier message du canal. Si aucun message sur le
    canal, instruction bloquante.
  • ch_bloc?constante
  • Exécutable si le premier message du canal a une
    valeur égale à constante. Instruction bloquante
    sinon.

20
Canaux
  • Messages de type  tuple 
  • chan ch 5 of bool, int
  • Envoi ch!exprB,exprI ou ch!exprB(exprI)
  • Réception ch?varB,varI ou ch?varB(varI)
  • Si oubli de paramètres, affectation non
    déterministe pour les paramètres manquants
  • Les paramètres en trop sont perdus (sans
    avertissements !).

21
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.

22
Récursivité
  • Utilisation des canaux
  • int final_res
  • proctype factorielle (int n chan p)
  • chan res 1 of int
  • int tmp_res
  • if
  • (nlt1) -gt p!1
  • (ngt2) -gt
  • run factorielle (n-1, res)
  • res?tmp_res
  • p!ntmp_res
  • fi

init chan res 1 of int run factorielle
(5,res) res?final_res printf( resultat
d\n , final_res)
Write a Comment
User Comments (0)
About PowerShow.com