Le Model Checker SPIN Présentation Algorithmes sous-jacents Batnini Heikel - Ciabrini Damien Présentation Algorithmes sous-jacents Exemple : dining philosophers Comparaison avec d’autres outils
Model Checking S’intéresse à l’évolution du comportement d’un système au cours du temps. Technique pour s’assurer qu’une propriété est valide dans un modèle de système. détection d’erreurs et validation : safety, liveness, … vérification de propriétés de logique temporelle : LTL, CTL, CTL*, … Le Model Checker Spin
Fondements théoriques de SPIN Théorie des automates. Logique temporelle linéaire. Interactions entre processus asynchrones. Premier model-checker efficace : preuves de correction de protocoles LLC, TCP/IP, ARP, Bus, process scheduling … Le Model Checker Spin
Principe d’utilisation Langage pour spécifier le comportement : PROMELA (PROcess MEta LAnguage) Notation pour exprimer la correction : LTL (Linear Temporal Logic) Méthodologie pour établir la consistence du système. Le Model Checker Spin
Description de la méthode Parser PROMELA Parser LTL et traducteur 1. 2. 3. Détection erreurs syntaxiques Simulation interactive Générateur de vérificateur Model checker (code C ANSI) contre- exemple Vérificateur « à la volée » Le Model Checker Spin
Vérification de modèles Détection de sources d’erreurs : code non exécutable (deadcode), source d’interblocage (deadlocks), cycle de non progression (livelocks), réceptions non specifiées de messages. Preuve de la correction : preuve d’invariants (correctness claims), contraintes LTL (never claims). Le Model Checker Spin
Mise en œuvre Processus Automates de Büchi Construction de l’espace des états P1 P2 Pn Processus BA1 BA2 BAn Traduction en automate Automates S Système global Produit synchrone G Produit asynchrone Espace des États négation ¬F BAF Automate de Büchi Formule LTL F Le Model Checker Spin
Algorithmes(1/2) Formules LTL Automate de Büchi Détection de cycles acceptants Nested Depth-First Search Le Model Checker Spin
Algorithmes (2/2) Explosion des états Complexité en mémoire Optimisation Partial Order Reduction Gestion de la mémoire State Compression Bit-State Hashing Le Model Checker Spin
Exemple: Dîner des philosophes N fourchettes et N philosophes processus PHILO(numéro) répéter Penser // sans fourchette Manger // avec la fourchette à sa gauche et celle à sa droite jusqu’à faux Le Model Checker Spin
Solution avec interblocage proctype fork(byte i) { byte count=1; do ::(count==1) -> mutex[i]!Prendre;count--; ::(count==0) -> mutex[i]?Reposer;count++; od } proctype philo(byte i) { do ::mutex[i]?Prendre; mutex[(i+1)%N]?Prendre; printf("MSC: MANGE\n"); mutex[i]!Reposer; mutex[(i+1)%N]!Reposer; od } Le Model Checker Spin
Solution avec interblocage Le Model Checker Spin
Solution avec interblocage pan: invalid endstate (at depth 38) pan: wrote pan_in.trail (Spin Version 3.4.10 -- 30 October 2001) Warning: Search not completed + Partial Order Reduction + Compression Full statespace search for: never-claim - (not selected) assertion violations - (disabled by -A flag) cycle checks - (disabled by -DSAFETY) invalid endstates + State-vector 52 byte, depth reached 39, errors: 1 31 states, stored 6 states, matched 37 transitions (= stored+matched) 5 atomic steps hash conflicts: 0 (resolved) Le Model Checker Spin
Solution sans interblocage proctype fork(byte i) { byte count=1; do ::(count==1) -> mutex[i]!Prendre;count--; ::(count==0) -> mutex[i]?Reposer;count++; od } proctype philo(byte i) { do ::mutex[GLOBAL]?Prendre; mutex[i]?Prendre; mutex[(i+1)%N]?Prendre; mutex[GLOBAL]!Reposer; printf("MSC: MANGE\n"); mutex[i]!Reposer; mutex[(i+1)%N]!Reposer; od } Le Model Checker Spin
Solution sans interblocage proctype fork(byte i) { byte count=1; do ::(count==1) -> proctype philo(byte i) { do ::mutex[GLOBAL]?Prendre; mutex[i]?Prendre; mutex[(i+1)%N]?Prendre; mutex[GLOBAL]!Reposer; printf("MSC: MANGE\n"); mutex[i]!Reposer; mutex[(i+1)%N]!Reposer; (Spin Version 3.4.10 -- 30 October 2001) + Partial Order Reduction + Compression Full statespace search for: never-claim - (not selected) assertion violations - (disabled by -A flag) cycle checks - (disabled by -DSAFETY) invalid endstates + State-vector 60 byte, depth reached 219, errors: 0 402 states, stored 221 states, matched 623 transitions (= stored+matched) 6 atomic steps hash conflicts: 0 (resolved) Le Model Checker Spin
Autres outils Explicit State Model Checking Langage de modélisation Model Checking Exploration de l’espace d’états abstraction Bandera PathFinder SLAM ... adaptation Langage de programmation Systematic Testing Exploration de l’espace d’états VeriSoft Autres outils : Symbolic Model Checking modèles de plus de 1020 états SMV Le Model Checker Spin
Références G.J.Holtzman. The Spin Model Checker G.J.Holtzman, D.Peled, M.Yannakakis. On Nested Depth-First Search G.J.Holtzman. An analysis of bit-state hashing R.Gerth. Concise Promela Reference J. R. Burch, E. M. Clarke, K. L. McMillan, D. L. Dill, and J. Hwang. Symbolic model checking: 1020 states and beyond. G.J.Holtzman, R.Gerth , D.Peled, M.Y.Vardi, P.Wolper. Simple On-the-Fly Automatic Verification of Linear Temporal Logic. Le Model Checker Spin