Patrick Trentin Formal Methods Lab Class, Feb 26, 2016

Similar documents
Patrick Trentin Formal Methods Lab Class, March 03, 2017

SPIN: Introduction and Examples

Spin: Overview of PROMELA

The SPIN Model Checker

Spin: Overview of PROMELA

A Tutorial on Model Checker SPIN

The Spin Model Checker : Part I/II

Computer Lab 1: Model Checking and Logic Synthesis using Spin (lab)

Tool demonstration: Spin

The Spin Model Checker : Part I. Moonzoo Kim KAIST

The SPIN Model Checker

CS477 Formal Software Development Methods / 39

CS477 Formal Software Development Methods / 32

Distributed Systems Programming (F21DS1) SPIN: Formal Analysis I

Using Spin to Help Teach Concurrent Programming

Computer Lab 1: Model Checking and Logic Synthesis using Spin (lab)

Lecture 3 SPIN and Promela

INF5140: Specification and Verification of Parallel Systems

Formal Methods for Software Development

Software Engineering using Formal Methods

MP 6 Modeling in Promela and SPIN

Model-Checking Concurrent Systems. The Model Checker Spin. The Model Checker Spin. Wolfgang Schreiner

EMBEDDED C CODE 17. SPIN Version 4 supports the inclusion of embedded C code into PROMELA models through the following fiv e new primitives:

Copyright 2008 CS655 System Modeling and Analysis. Korea Advanced Institute of Science and Technology

Applications of Formal Verification

Computer Aided Verification 2015 The SPIN model checker

Formal Specification and Verification

Applications of Formal Verification

SPIN, PETERSON AND BAKERY LOCKS

A Practical approach on Model checking with Modex and Spin

Model-Checking Concurrent Systems

Software Engineering using Formal Methods

Applications of Formal Verification

Distributed Systems Programming F29NM1 2. Promela I. Andrew Ireland. School of Mathematical and Computer Sciences Heriot-Watt University Edinburgh

Automated Reasoning. Model Checking with SPIN (II)

What is SPIN(Simple Promela Interpreter) Elements of Promela. Material About SPIN. Basic Variables and Types. Typical Structure of Promela Model

Network Protocol Design and Evaluation

What is SPIN(Simple Promela Interpreter) Material About SPIN. Elements of Promela. Basic Variables and Types. Typical Structure of Promela Model

Proving Dekker with SPIN and PROMELA

Hello World. Slides mostly a reproduction of Theo C. Ruys SPIN Beginners Tutorial April 23, Hello() print "Hello"

Multi-Threaded System int x, y, r; int *p, *q, *z; int **a; EEC 421/521: Software Engineering. Thread Interleaving SPIN. Model Checking using SPIN

The Design of a Distributed Model Checking Algorithm for Spin

Design of Internet Protocols:

Design and Analysis of Distributed Interacting Systems

SPIN: Part /614 Bug Catching: Automated Program Verification. Sagar Chaki November 12, Carnegie Mellon University

Promela and SPIN. Mads Dam Dept. Microelectronics and Information Technology Royal Institute of Technology, KTH. Promela and SPIN

Distributed Systems Programming (F21DS1) SPIN: Simple Promela INterpreter

Introduction to Model Checking

T Parallel and Distributed Systems (4 ECTS)

Mapping of UML Diagrams to Extended Petri Nets for Formal Verification

Formal Specification and Verification

Formal Verification by Model Checking

4/6/2011. Model Checking. Encoding test specifications. Model Checking. Encoding test specifications. Model Checking CS 4271

Testing Concurrent Programs: Model Checking SPIN. Bengt Jonsson

HSF-SPIN User Manual

Formal Methods for Software Development

SPIN part 2. Verification with LTL. Jaime Ramos. Departamento de Matemática, Técnico, ULisboa

THE MODEL CHECKER SPIN

SWEN-220 Mathematical Models of Software. Process Synchronization Critical Section & Semaphores

Logic Model Checking

Principles of Protocol Design MVP 10A 1

CS5232 Formal Specification and Design Techniques. Using PAT to verify the Needham-Schroeder Public Key Protocol

Distributed Systems Programming (F21DS1) SPIN: Formal Analysis II

Principles of Protocol Design. MVP10 plan. What is a protocol? Typical SPIN applications. The three parts of a protocol description

Model checking Timber program. Paweł Pietrzak

Automatic Verification of Multiagent Conversations

INF672 Protocol Safety and Verification. Karthik Bhargavan Xavier Rival Thomas Clausen

Network Protocol Design and Evaluation


SPIN. Carla Ferreira.

FORMAL METHODS IN NETWORKING COMPUTER SCIENCE 598D, SPRING 2010 PRINCETON UNIVERSITY LIGHTWEIGHT MODELING IN PROMELA/SPIN AND ALLOY

Model Requirements and JAVA Programs MVP 2 1

A Verification Approach for GALS Integration of Synchronous Components

A Tutorial Introduction to Shared Memory Concurrency

SWEN-220 Mathematical Models of Software. Concurrency in SPIN Interleaving

MINIX 3 Process Analysis

Logic Model Checking

CS4215 Programming Language Implementation

Lecture. DM510 - Operating Systems, Weekly Notes, Week 11/12, 2018

Linear Temporal Logic. Model Checking and. Based on slides developed by Natasha Sharygina. Carnegie Mellon University.

Beginner s SPIN Tutorial

Process Synchronization. Mehdi Kargahi School of ECE University of Tehran Spring 2008

SimGrid MC 101. Getting Started with the SimGrid Model-Checker. Da SimGrid Team. April 11, 2017

On Nested Depth First Search

Formal Modeling for Persistence Checking of Signal Transition Graph Specification with Promela

Operating Systems Comprehensive Exam. Spring Student ID # 3/16/2006

Using Model Checking to Debug Device Firmware

TRIAL-EXAM Software Engineering using Formal Methods TDA293 (TDA292) / DIT270. Only dictionaries may be used. Other aids are not allowed!

Tutorial: Design and Validation of Protocols

Safety and liveness for critical sections

T Parallel and Distributed Systems (4 ECTS)

Program Correctness and Efficiency. Chapter 2

PESIT Bangalore South Campus

FORMAL METHODS IN NETWORKING COMPUTER SCIENCE 598D, SPRING 2010 PRINCETON UNIVERSITY LIGHTWEIGHT MODELING IN PROMELA/SPIN AND ALLOY

IFM TLAPS tutorial. Peterson algorithm

A PROTOCOL VALIDATOR 13

Static Analysis in C/C++ code with Polyspace

Thread Synchronization: Too Much Milk

Using Model Checking with Symbolic Execution for the Verification of Data-Dependent Properties of MPI-Based Parallel Scientific Software

More on Verification and Model Checking

Transcription:

Spin: Introduction Patrick Trentin patrick.trentin@unitn.it http://disi.unitn.it/~trentin Formal Methods Lab Class, Feb 26, 2016 These slides are derived from those by Stefano Tonetta, Alberto Griggio, Silvia Tomasi, Thi Thieu Hoa Le, Alessandra Giordani, Patrick Trentin for FM lab 2005/15 Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 1 / 7

Course Overview Course: covers two tools for model checking and formal verification Part I: Spin Part II: nuxmv Slides + Solutions: http://disi.unitn.it/~trentin = the slides content will be updated wrt. last year Exam: examples + solutions will be provided short manuals of both tools available during exam = thus: code that does not even compile is significantly penalized Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 1 / 7

Contents 1 Course Overview 2 Introduction to Spin 3 Promela examples Hello world! Producers/Consumers Mutual Exclusion 4 Spin s Output Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 2 / 7

The Spin (= Simple Promela Interpreter) model checker Tool for formal verification of distributed and concurrent systems (e.g. operating systems, data communications protocols). Developed at Bell Labs. In 2002, recognized by the ACM with Software System Award (like Unix, TeX, Smalltalk, Postscript, TCP/IP, Tcl/Tk). Automated tools convert programs written in Java or in C into Spin models. The modelling language is called Promela. Spin has a graphical user interface, ispin. Materials: Homepage: http://spinroot.com/spin/whatispin.html Manual: http://spinroot.com/spin/man/index.html Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 3 / 7

Promela (= Protocol/Process Meta Language) Promela is suitable to describe concurrent systems: dynamic creation of concurrent processes. (synchronous/asynchronous) communication via message channels. Possible executions of a program Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 4 / 7

Simulation can be random, interactive or guided. useful for inspection of the Promela model not useful for finding bugs! Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 4 / 7

Verification check every execution looking for a counterexample for a given property can be exhaustive or approximate Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 4 / 7

Verification: counterexample witnesses a violation of a given property stored in the current directory with.trail extension can be replayed with -t option Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 4 / 7

Basic commands To simulate a program: spin system.pml Interactively: spin -i system.pml To generate a verifier (pan.c): spin -a system.pml To run a guided simulation: spin -t model.pml To run ispin: ispin model.pml Useful commands: To see available options: spin -- To display processes moves at each simulation step: spin -p system.pml To display values of global variables: spin -g system.pml To display values of local variables: spin -I -p system.pml Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 4 / 7

Contents 1 Course Overview 2 Introduction to Spin 3 Promela examples Hello world! Producers/Consumers Mutual Exclusion 4 Spin s Output Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 5 / 7

Hello world! active proctype main() { printf("hello world\n") } active instantiates one process of the type that follows. proctype denotes that main is a process type. main identifies the process type, it s not a keyword. Note that ; is missing after printf: ; is a statement separator, not a statement terminator. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 5 / 7

Hello world! Alternative init { } printf("hello world\n") init is a process that initializes the system. Initially just the initial process is executed. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 5 / 7

Hello world! Alternative init { } printf("hello world\n") init is a process that initializes the system. Initially just the initial process is executed. Simulation: > spin hello.pml hello world 1 process created One process was created to simulate the execution of the model. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 5 / 7

Producers/Consumers mtype = { P, C }; mtype turn = P; active proctype producer(){ do :: (turn == P) -> printf("produce\n"); turn = C od } active proctype consumer(){ do :: (turn == C) -> printf("consume\n"); turn = P od } Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 5 / 7

Producers/Consumers (Language Details) mtype defines symbolic values (similar to an enum declaration in a C program). turn is a global variable. do... od (do-statement) defines a loop. Every option of the loop must start with ::. (turn == P) is the guard of the option. A break/goto statement can break the loop. -> and ; are equivalent (-> indicates a causal relation between successive statements). If all guards are false, then the process blocks (no statement can be executed). If multiple guards are true, we get non-determinism. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Simulation: > spin prodcons.pml more Produce Consume Produce Consume Produce Consume Produce Consume Produce Consume... Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended There can be multiple running instances of the same proctype: active [2] proctype producer {...}... active [2] proctype consumer {...} Simulation: > spin prodcons2_flaw.pml more Produce Consume Consume Produce Produce Consume... Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended There can be multiple running instances of the same proctype: active [2] proctype producer {...}... active [2] proctype consumer {...} Simulation: > spin prodcons2_flaw.pml more Produce Consume Consume Produce Produce Consume... Concurrent execution: after each (atomic) statement, a new process can be (randomly) scheduled for execution. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended > spin -i prodcons2_flaw.pml Select a statement choice 3: proc 1 (producer) prodcons2_flaw.pml:7 (state 4) [((turn==p))] choice 4: proc 0 (producer) prodcons2_flaw.pml:7 (state 4) [((turn==p))] Select [1-4]: 3 Select a statement choice 3: proc 1 (producer) prodcons2_flaw.pml:9 (state 2) [printf( Produce\\n )] choice 4: proc 0 (producer) prodcons2_flaw.pml:7 (state 4) [((turn==p))] Select [1-4]: 3 Produce Select a statement choice 3: proc 1 (producer) prodcons2_flaw.pml:10 (state 3) [turn = C] choice 4: proc 0 (producer) prodcons2_flaw.pml:7 (state 4) [((turn==p))] Select [1-4]: 4 Select a statement choice 3: proc 1 (producer) prodcons2_flaw.pml:10 (state 3) [turn = C] choice 4: proc 0 (producer) prodcons2_flaw.pml:9 (state 2) [printf( Produce\\n )] Select [1-4]: Problem: Both processes can pass the guard (turn == P) and execute printf("produce") before turn is set to C. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended A correct declaration for the producer: active [2] proctype producer() { do :: request(turn, P, N) -> // if turn==p then turn=n printf("p%d\n", _pid); assert(who == _pid); // "who" is producing release(turn, C) // turn=c od } assert: if expression is false (i.e. zero) then abort the program, else ignored. pid is a predefined, local, read-only variable of type pid that stores the unique ID of the process. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended Definition of request: inline request(x, y, z) { atomic { x == y -> x = z; who = _pid } } inline functions like C macros. the body is directly pasted into the body of a proctype at each point of invocation. atomic: prevents the scheduler from changing the running process until all the statements are executed. no interleaving with statements of other processes! The executability of the atomic sequence is determined by the first statement. i.e. if x==y is true then the atomic block is executed. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended File prodcons2.pml: mtype = { P, C, N }; mtype turn = P; pid who;... // request inline release(x, y) { atomic { x = y; who = 0 } }... // proctype producer active [2] proctype consumer() { do :: request(turn, C, N) -> printf("consume %d\n", _pid); assert(who == _pid); release(turn, P) od } Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended Simulation: > spin prodcons2.pml more P1 C3 P0 C3 P1 C3 P1 C2 P0 C3 P1... Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended Simulation can detect errors: init { assert(false) } > spin false.pml spin: line 1 "false.pml", Error: assertion violated spin: text of failed assertion: assert(0) #processes: 1 1: proc 0 (:init:) line 1 "false.pml" (state 1) 1 process created However, simulation can not prove that the code is bug-free! Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended A verifier checks that an assertion is never violated. We use Spin to generate the verifier of prodcons.pml: > spin -a prodcons2.pml > gcc -o pan pan.c >./pan... Full statespace search for: never claim - (none specified) assertion violations + acceptance cycles - (not selected) invalid end states + State-vector 28 byte, depth reached 7, errors: 0... Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended Back to the flawed Producers/Consumers mtype = { P, C }; mtype turn = P; int msgs; active [2] proctype producer() { do :: (turn == P) -> printf("produce\n"); msgs++; turn = C od } active [2] proctype consumer() { do :: (turn == C) -> printf("consume\n"); msgs--; turn = P od } active proctype monitor() { assert(msgs >= 0 && msgs <= 1) } > spin -a prodcons2_flaw_msg.pml && gcc -o pan pan.c &&./pan Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Producers/Consumers Extended (Trail File) Trail File prodcons2 flaw.pml.trail contains Spin s transition markers corresponding to the contents of the stack of transitions leading to error states Meaning: Step number in execution trace Id of the process moved in the current step Id of the transition taken in the current step -4:-4:-4 1:1:0 2:1:1 3:1:2 4:1:3 5:3:8 6:3:9 7:3:10 8:2:8 9:2:9 10:3:11 11:2:10 12:4:16 > spin -t -p prodcons2_flaw_msg.pml Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

The Mutual Exclusion problem General algorithm active [2] proctype mutex() { again: /* trying section */ cnt++; assert(cnt == 1); /* critical section */ cnt--; } /* exit section */ goto again Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

The Mutual Exclusion problem (First tentative) bit flag; /* signal entering/leaving the section */ byte cnt; /* # procs in the critical section */ active [2] proctype mutex() { again: flag!= 1; /* It models "while (flag == 1) wait!" */ flag = 1; cnt++; assert(cnt == 1); cnt--; flag = 0; goto again } Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

The Mutual Exclusion problem (First tentative) bit flag; /* signal entering/leaving the section */ byte cnt; /* # procs in the critical section */ active [2] proctype mutex() { again: flag!= 1; /* It models "while (flag == 1) wait!" */ flag = 1; cnt++; assert(cnt == 1); cnt--; flag = 0; goto again } Assertion violation: Both processes can pass the flag!= 1 before flag is set to 1. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

The Mutual Exclusion problem (Second tentative) bit x, y; /* signal entering/leaving the section */ byte cnt; active proctype A() { again: /* A waits for B to end */ x = 1; y == 0; cnt++; /* critical section */ assert(cnt == 1); cnt--; x = 0; goto again } active proctype B() { again: y = 1; x == 0; cnt++; /* critical section */ assert(cnt == 1); cnt--; y = 0; goto again } Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

The Mutual Exclusion problem (Second tentative) bit x, y; /* signal entering/leaving the section */ byte cnt; active proctype A() { again: /* A waits for B to end */ x = 1; y == 0; cnt++; /* critical section */ assert(cnt == 1); cnt--; x = 0; goto again } active proctype B() { again: y = 1; x == 0; cnt++; /* critical section */ assert(cnt == 1); cnt--; y = 0; goto again } Invalid-end-state: Both processes can execute x = 1 and y = 1 at the same time and will then be waiting for each other. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Dekker/Dijkstra algorithm /* trying section */ flag[i] = true; do :: flag[j] -> if :: turn == j -> flag[i] = false;!(turn == j); flag[i] = true :: else -> skip fi :: else -> break od; Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Dekker/Dijkstra algorithm /* trying section */ flag[i] = true; do :: flag[j] -> if :: turn == j -> flag[i] = false;!(turn == j); flag[i] = true :: else -> skip fi :: else -> break od; /* initialization */ pid i = _pid; pid j = 1 - _pid; /* exit session */ turn = j; flag[i] = false; Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Dekker/Dijkstra algorithm Verification: > spin -a dekker.pml > cc -o pan pan.c >./pan... Full statespace search for: never claim - (none specified) assertion violations + acceptance cycles - (not selected) invalid end states + State-vector 20 byte, depth reached 67, errors: 0... Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Peterson algorithm Peterson Implementation: /* trying session */ flag[i] = true; turn = i;!(flag[j] && turn == i) -> /* exit session */ flag[i] = false; Verification: > spin -a peterson.pml > cc -o pan pan.c >./pan... State-vector 20 byte, depth reached 41, errors: 0... Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 6 / 7

Exercises Simulate you run2.pml and you run3.pml. Verify prodcons3.pml. Verify mutex flaw.pml. Delete turn==i in Peterson and verify the correctness. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7

C Pan s Output Format >./pan pan: assertion violated ((x!=0)) (at depth 11) pan: wrote model.pml.trail Assertion Violation Spin has found a execution trace that violates the assertion the generated trace is 11 steps long and it is contained in model.pml.trail Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7

C Pan s Output Format (Spin Version 6.0.1 -- 16 December 2010) + Partial Order Reduction Meaning 1 Version of Spin that generated the verifier 2 Optimized search technique Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7

C Pan s Output Format Full statespace search for: never-claim - (none specified) assertion violations + acceptance cycles - (not selected) invalid endstates + Meaning 1 Type of search: exhaustive search (Bitstate search for approx.) 2 No never claim was used for this run 3 The search checked for violations of user specified assertions 4 The search did not check for the presence of acceptance or non-progress cycles 5 The search checked for invalid endstates (i.e., for absence of deadlocks) Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7

C Pan s Output Format State-vector 32 byte, depth reached 13, errors: 0 Meaning 1 The complete description of a global system state required 32 bytes of memory (per state). 2 The longest depth-first search path contained 13 transitions from the initial system state../pan -mn set max search depth to N steps 3 No errors were found in this search. Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7

C Pan s Output Format 74 states, stored 30 states, matched 104 transitions (= stored+matched) 1 atomic steps 1.533 memory usage (Mbyte) Meaning 1 A total of 74 unique global system states were stored in the statespace. 2 In 30 cases the search returned to a previously visited state in the search tree. 3 A total of 104 transitions were explored in the search. 4 One of the transitions was part of an atomic sequence. 5 Total memory usage was 1.533 Megabytes, Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7

C Pan s Output Format unreached in proctype ProcA line 7, state 8, "Gaap = 4" (1 of 13 states) unreached in proctype :init: line 21, state 14, "Gaap = 3" (1 of 19 states) Meaning A listing of the state numbers and approximate line numbers for the basic statements in the specification that were not reached since this is a full statespace search, these transitions are effectively unreachable (dead code). Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7

C Pan s Output Format error: max search depth too small Meaning It indicates that search was truncated by depth-bound (i.e. the depth bound prevented it from searching the complete statespace)../pan -m50 sets a bound on the depth of the search Nota Bene When the search is bounded, Spin will not be exploring part of the system statespace, and the omitted part may contain property violations that you want to detect you cannot assume that the system has no violations! Patrick Trentin (DISI) Spin: Introduction Feb 26, 2016 7 / 7