Master IRAD - SPIN / PROMELA

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Cours Algorithmique et Analyse : Introduction
Introduction au Langage C,C++
Rappels C.
Spécification et qualité du logiciel
Synchronisation des processus père - fils
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
INTRODUCTION.
FLSI602 Génie Informatique et Réseaux
Les bases de l’Algorithmique
Principes de programmation (suite)
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Langage C Révision.
CPI/BTS 2 Programmation Web Introduction au PHP
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Les éléments de base de l’algorithmique
Structures de contrôle de l’exécution
Algèbre de Boole et les Boucles
Analyse lexicale Généralités Expressions rationnelles Automates finis
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Programmation multimédia 3
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Principes de programmation
IFT 6800 Atelier en Technologies d’information
Chapitre 8 Structure de contrôle.
Partie II Sémantique.
ECP – Option SA Henri Fallon
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
L’essentiel du langage C
Spécification d’un modèle de protocole : Promela
2.1 - Historique Chapitre 2 : Introduction au langage C++
INTRODUCTION.
ALGORITHMIQUE ET PROGRAMMATION C
Scripts shell intro Un script bash est un fichier contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash),
Algorithmique et programmation en
Programmation objet La base.
Un survol du language C.
Interactions entre Processus
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Cours n° 1 Présentation du langage C++
 Syntaxe du langage PHP
Les Machines RAM.
Le langage Racket (Lisp)
Introduction au langage C Fonctions et Procédures
Conception des protocoles
Cours n° 3 Traitements en Java
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Cours LCS N°4 Présenté par Mr: LALLALI
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
Pthread Ordonnancement. #define _MULTI_THREADED #include #ifndef _CHECK_H #define _CHECK_H /* headers used by a majority of the example program */ #include.
Les structures de contrôle
Le Model Checker SPIN Présentation Algorithmes sous-jacents
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Scripts et fonctions Instructions de contrôle
PRO-1027 Programmation Scientifique en C
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Introduction à l’utilitaire
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy – 6 octobre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Algorithmique Boucles et Itérations
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
PhP 2. Tableaux et structures de contrôle. Les tableaux Définition –Rassemblement d’un ensemble de valeurs portant le même nom de variable –Types de tableaux.
O UTILS DE P ROGRAMMATION P OUR LES M ATHÉMATIQUES Mr. BENDIB. I MAA, LAMIS Laboratory, Université Larbi Tébessi - Tébessa.
Programmation en C++ C++ de base
Transcription de la présentation:

Master IRAD - SPIN / PROMELA 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA 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 d’invariants / 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 17/04/2017 Master IRAD - SPIN / PROMELA

Introduction (2) PLTL parser and Translator Verifier generator Optimized Model-checker Executable On-the-fly Verifier XSPIN Front-End Promela parser Interactive Simulation Counter-examples Syntax Error reports 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA 17/04/2017 Master IRAD - SPIN / PROMELA

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 : /* …. */ 17/04/2017 Master IRAD - SPIN / PROMELA

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 0…1 byte 8 0...255 short 16 -215-1...215-1 int 32 -231-1...231-1 17/04/2017 Master IRAD - SPIN / PROMELA

Types, variables et constantes Types énumérés : Ensemble de constantes symboliques Un seul type énuméré autorisé par spécification mtype = {Partiel,Complet,Ack} mtype st,rt; Structures typedef Mesg {bool b; int data}; -> Structure Mesg avec un booléen et un entier Mesg m; m.b = 0; m.data = 5; 17/04/2017 Master IRAD - SPIN / PROMELA

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. 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA Opérateurs Type Opérateurs Arithmétiques +, -, *, /, %, --, ++ Relationnels >, >=, <=, <, ==, != Logiques &&, ||, ! Bits &, |, ~, ^, >>, << Canaux !, ? 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA 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 { 17/04/2017 Master IRAD - SPIN / PROMELA

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(); 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA Instructions Activables ou bloquées Si une instruction est activable, elle peut être immédiatement exécutée. Si une instruction est bloquée, l’exécution du processus dans lequel elle apparaît est bloquée jusqu’à ce que l’instruction devienne activable. Instructions séparées par ; ou -> Pas de distinction entre condition et instruction (a==b) ; b++ : b n’est incrémenté que si a est égal à b. Sinon, on dit que l’instruction (a==b) est bloquante. On préférera ici la notation (a==b) -> b++ 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA 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()} x=2 y=3 init x=3 y=3 x=x+1 x=2 y=3 init x=1 y=3 x=x-1 x=1 y=4 y=y+x 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA 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=1 y=3 x=2 y=5 x=2 y=3 init x=3 y=3 x=1 y=4 x=2 y=4 x=x+1 x=x-1 y=y+x 17/04/2017 Master IRAD - SPIN / PROMELA

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 ». L’exécution est suspendue si une des instructions Instr2, …, Instrn est bloquante -> Attention à bien s’assurer que ces instructions ne sont pas bloquantes ! 17/04/2017 Master IRAD - SPIN / PROMELA

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=1 y=3 x=2 y=5 x=2 y=3 init x=3 y=3 x=1 y=4 x=2 y=4 x=x+1 x=x-1 y=y+x 17/04/2017 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-déterministe Si aucune garde activable et else présent, exécution des instructions suivant else. 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA 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(…); 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA Canaux Files d’attente (FIFO) Déclaration : chan ch_bloc = [5] of {int} chan ch_rdv = [0] of {int} : canal synchrone (un message ne peut être envoyé que s’il est attendu) Envoi : ch_bloc!expr expr est envoyé sur ch_bloc s’il reste de la place dans la file d’attente du canal. Instruction bloquante sinon. Réception : ch_bloc?variable variable 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. 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA 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 !). 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA Canaux Quelques fonctions sur les canaux : len(ch_bloc) : retourne le nombre de messages contenus dans ch_bloc (peut s’utiliser 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. 17/04/2017 Master IRAD - SPIN / PROMELA

Master IRAD - SPIN / PROMELA Récursivité Utilisation des canaux int final_res; proctype factorielle (int n ; chan p) { chan res = [1] of {int}; int tmp_res; if :: (n<=1) -> p!1; :: (n>=2) -> run factorielle (n-1, res); res?tmp_res; p!n*tmp_res fi } init { chan res = [1] of {int}; run factorielle (5,res); res?final_res; printf(« resultat : %d\n », final_res) } 17/04/2017 Master IRAD - SPIN / PROMELA