fundamentals of software engineering - tu braunschweig · pdf filefundamentals of software...

40
Fundamentals of Software Engineering Modeling Concurrency Ina Schaefer Institute for Software Systems Engineering TU Braunschweig, Germany Slides by Wolfgang Ahrendt, Richard Bubel, Reiner H¨ ahnle (Chalmers University of Technology, Gothenburg, Sweden) Ina Schaefer FSE 1

Upload: voduong

Post on 13-Mar-2018

229 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Fundamentals of Software EngineeringModeling Concurrency

Ina Schaefer

Institute for Software Systems EngineeringTU Braunschweig, Germany

Slides by Wolfgang Ahrendt, Richard Bubel, Reiner Hahnle

(Chalmers University of Technology, Gothenburg, Sweden)

Ina Schaefer FSE 1

Page 2: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Focus of this Lecture

aim of Spin-style model checking methodology:

exhibit design flaws in concurrent and distributed software systems

focus of this lecture:

• modeling and analyzing concurrent systems

focus of next lecture:

• modeling and analyzing distributed systems

Ina Schaefer FSE 2

Page 3: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Concurrent/Distributed systems difficult to get right

problems:

• hard to predict, hard to form faithful intuition about

• enormous combinatorial explosion of possible behavior

• interleaving prone to unsafe operations

• counter measures prone to deadlocks

• limited control—from within applications—over ‘external’ factors:I scheduling strategiesI relative speed of componentsI performance of communication mediumsI reliability of communication mediums

Ina Schaefer FSE 3

Page 4: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Testing Concurrent or Distributed System is Hard

We cannot exhaustively test concurrent/distributed systems

• lack of controllability⇒ we miss failures in test phase

• lack of reproducability⇒ even if failures appear in test phase,

often impossible to analyze/debug defect

• lack of timeexhaustive testing exhausts the testers long before it exhaustsbehavior of the system...

Ina Schaefer FSE 4

Page 5: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Mission of Spin-style Model Checking

offer an efficient methodology to

• improve the design

• exhibit defects

of concurrent and distributed systems

Ina Schaefer FSE 5

Page 6: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Activities in Spin-style Model Checking

1. model (critical aspects of) concurrent/distributed system withPromela

2. use assertions, temporal logic, ... to model crucial properties

3. use Spin to check all possible runs of the model

4. analyze result, and possibly re-work 1. and 2.

I claim:The hardest part of Model Checking is 1.

Ina Schaefer FSE 6

Page 7: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Main Challenges of Modeling

expressivenessmodel must be expressive enough to ‘embrace’ defects thereal system could have

simplicitymodel simple enough to be ‘model checkable’,theoretically and practically

Ina Schaefer FSE 7

Page 8: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Modeling Concurrent Systems in Promela

cornerstone ofmodeling concurrent and distributed systems in the Spin approach are

Promela processes

Ina Schaefer FSE 8

Page 9: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Initializing Processes

there is always an initial process prior to all others

often declared implicitly using ‘active’

can be declared explicitly with key word ‘init’

i n i t {print f ("Hello world\n")

}

if explicit, init is used to start other processes with run statement

Ina Schaefer FSE 9

Page 10: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Starting Processes

processes can be started explicitly using run

proctype P() {byte local;....

}

i n i t {run P();run P()

}

each run operator starts copy of process (with copy of local variables)

run P() does not wait for P to finish

Ina Schaefer FSE 10

Page 11: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Atomic Start of Multiple Processes

by convention, run operators enclosed in atomic block

proctype P() {byte local;....

}

i n i t {atomic {

run P();run P()

}}

effect: processes only start executing once all are created

(more on atomic later)

Ina Schaefer FSE 11

Page 12: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Joining Processes

following trick allows ‘joining’, i.e., waiting for all processes to finish

byte result;

proctype P() {....

}

i n i t {atomic {

run P();run P()

}(_nr_pr == 1) ->

print f ("result =%d", result)}

_nr_pr built-in variable holding number of running processes_nr_pr = 1 only ‘this’ process (init) is running (anymore)

Ina Schaefer FSE 12

Page 13: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Process Parameters

Processes may have formal parameters, instantiated by run:

proctype P(byte id; byte incr) {...

}

i n i t {run P(7, 10);run P(8, 15)

}

Ina Schaefer FSE 13

Page 14: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Active (Sets of) Processes

init can be made implicit by using the active modifier:

active proctype P() {...

}

implicit init will run one copy of P

active [n] proctype P() {...

}

implicit init will run n copies of P

Ina Schaefer FSE 14

Page 15: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Local and Global Data

Variables declared outside of the processes are global to all processes.

Variables declared inside a process are local to that processes.

byte n;

proctype P(byte id; byte incr) {byte t;...

}

n is globalt is local

Ina Schaefer FSE 15

Page 16: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Modeling with Global Data

pragmatics of modeling with global data:

shared memory of concurrent systems often modeledby global variables of numeric (or array) type

status of shared resources (printer, traffic light, ...) often modeledby global variables of Boolean or enumeration type(bool/mtype).

communication mediums of distributed systems often modeledby global variables of channel type (chan). (next lecture)

Ina Schaefer FSE 16

Page 17: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Interference on Global Data

byte n = 0;

active proctype P() {n = 1;print f ("Process P, n = %d\n", n)

}

active proctype Q() {n = 2;print f ("Process Q, n = %d\n", n)

}

how many outputs possible?

different processes can interfere on global data

Ina Schaefer FSE 17

Page 18: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Examples

1. interleave0.pmlSpin simulation

2. interleave1.pmlSpin simulation, adding assertion, fine-grained execution model,model checking

3. interleave5.pmlSpin simulation, Spin model checking, trail inspection

Ina Schaefer FSE 18

Page 19: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Atomicity

limit the possibility of sequences being interrupted by other processes

weakly atomic sequencecan only be interrupted if a statement is not executabledefined in Promela by atomic{ . . . }

strongly atomic sequencecannot be interrupted at alldefined in Promela by d step{ . . . }

Ina Schaefer FSE 19

Page 20: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Deterministic Sequences

d step:

• strongly atomic

• deterministic (like a single step)

• nondeterminism resolved in fixed way⇒ good style to avoid nondeterminism in d step

• it is an error if any statement within d step,other than the first one (called ‘guard’), blocks

d step {stmt1; ← guardstmt2;stmt3

}

If stmt1 blocks, d step is not entered, and blocks as a whole.

It is an error if stmt2 or stmt3 block.

Ina Schaefer FSE 20

Page 21: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

(Weakly) Atomic Sequences

atomic:

• weakly atomic

• can be non-deterministic

atomic {stmt1; ← guardstmt2;stmt3

}

If guard blocks, atomic is not entered, and blocks as a whole.

Once atomic is entered, control is kept until a statement blocks, andonly then passed to another process.

Ina Schaefer FSE 21

Page 22: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Prohibit Interference by Atomicity

apply atomic or d step to interference examples

Ina Schaefer FSE 22

Page 23: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Synchronization on Global Data

Promela has no synchronization primitives,like semaphores, locks, or monitors.

instead, Promela inhibits concept of statement executability

executability addresses many issues in the interplay of processes

Ina Schaefer FSE 23

Page 24: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Executability

Each statement has the notion of executability.Executability of basic statements:

statement type executable

assignments always

assertions always

print statements always

expression statements iff value not 0/falsesend/receive statements (coming soon)

Ina Schaefer FSE 24

Page 25: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Executability (Cont’d)

Executability of compound statements:

atomic resp. d step statement is executableiff

guard (the first statement within) is executable

if resp. do statement is executableiff

any of its alternatives is executable

an alternative is executableiff

its guard (the first statement) is executable

(recall: in alternatives, “->” syntactic sugar for “;”)

Ina Schaefer FSE 25

Page 26: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Executability and Blocking

Definition (Blocking)

a statement blocks iff it is not executablea process blocks iff its location counter points to a blocking statement

for each step of execution, the scheduler nondeterministically chooses aprocess to execute among the non-blocking processes

executability, resp. blocking are the key to Promela-style modeling ofsolutions to synchronization problems(to be discussed in following)

Ina Schaefer FSE 26

Page 27: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

The Critical Section Problem

archetypical problem of concurrent systems

given a number of looping processes, each containing a critical section

design an algorithm such that:

Mutual Exclusion At most one process is executing it’s critical sectionany time

Absence of Deadlock If some processes are trying to enter their criticalsections, then one of them must eventually succeed

Absence of (individual) Starvation If any process tries to enter its criticalsection, then that process must eventually succeed

Ina Schaefer FSE 27

Page 28: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Critical Section Pattern

for demonstration, and simplicity:(non)critical sections only printf statements

active proctype P() {do :: print f ("P non -critical actions\n");

/* begin critical section */print f ("P uses shared recourses\n")/* end critical section */

od}

active proctype Q() {do :: print f ("Q non -critical actions\n");

/* begin critical section */print f ("Q uses shared recourses\n")/* end critical section */

od}

Ina Schaefer FSE 28

Page 29: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

No Mutual Exclusion Yet

need more infrastructure to achieve it:adding two Boolean flags:

bool inCriticalP = f a l s e ;bool inCriticalQ = f a l s e ;

active proctype P() {do :: print f ("P non -critical actions\n");

inCriticalP = true;/* begin critical section */print f ("P uses shared recourses\n");/* end critical section */inCriticalP = f a l s e

od}

active proctype Q() {...correspondingly...

}

Ina Schaefer FSE 29

Page 30: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Show Mutual Exclusion VIOLATION with Spin

adding assertions

bool inCriticalP = f a l s e ;bool inCriticalQ = f a l s e ;

active proctype P() {do :: print f ("P non -critical actions\n");

inCriticalP = true;/* begin critical section */print f ("P uses shared recourses\n");assert (! inCriticalQ);/* end critical section */inCriticalP = f a l s e

od}

active proctype Q() {........assert (! inCriticalP);.......

}

Ina Schaefer FSE 30

Page 31: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Mutual Exclusion by Busy Waiting

bool inCriticalP = f a l s e ;bool inCriticalQ = f a l s e ;

active proctype P() {do :: print f ("P non -critical actions\n");

inCriticalP = true;do :: !inCriticalQ -> break

:: e l se -> skipod;/* begin critical section */print f ("P uses shared recourses\n");assert (! inCriticalQ);/* end critical section */inCriticalP = f a l s e

od}

active proctype Q() { ...correspondingly... }

Ina Schaefer FSE 31

Page 32: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Mutual Exclusion by Blocking

instead of Busy Waiting, process should

• release control

• continuing to run only when exclusion properties are fulfilled

We can use expression statement !inCriticalQ,to let process P block where it should not proceed!

Ina Schaefer FSE 32

Page 33: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Mutual Exclusion by Blocking

int critical = 0;

active proctype P() {do :: print f ("P non -critical actions\n");

inCriticalP = true;!inCriticalQ;/* begin critical section */print f ("P uses shared recourses\n");assert (! inCriticalQ);/* end critical section */inCriticalP = f a l s e

od}

active proctype Q() {...correspondingly...

}

Ina Schaefer FSE 33

Page 34: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Proving Mutual Exclusion

• mutual exclusion (ME) cannot be shown by Spin

• inCriticalP/Q sufficient for achieving ME

• inCriticalP/Q not sufficient for proving ME

need more infrastructure:ghost variables, only for proving / model checking

Ina Schaefer FSE 34

Page 35: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Show Mutual Exclusion with Ghost Variable

int critical = 0;

active proctype P() {do :: print f ("P non -critical actions\n");

inCriticalP = true;!inCriticalQ;/* begin critical section */critical++;print f ("P uses shared recourses\n");assert (critical < 2);critical--;/* end critical section */inCriticalP = f a l s e

od}

active proctype Q() {...correspondingly...

}Ina Schaefer FSE 35

Page 36: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Verify Mutual Exclusion of this

Spinstill errors (invalid end state)⇒ deadlockcan make pan ignore the deadlock: ./pan -ESpin then proves mutual exclusion

Ina Schaefer FSE 36

Page 37: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Deadlock Hunting

find Deadlock with Spin

Ina Schaefer FSE 37

Page 38: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Atomicity against Deadlocks

solution:

checking and setting the flag in one atomic step

atomic {!inCriticalQ;inCriticalP = true

}

Ina Schaefer FSE 38

Page 39: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Variations of Critical Section Problem

• designated artifacts for verification:I ghost variables (verification only)I temporal logic (later in the course)

• max n processes allowed in critical sectionmodeling possibilities include:

I counters instead of booleansI semaphores (see demo)

• more fine grained exclusion conditions, e.g.

I several critical sectionsI writers exclude each other and readers

readers exclude writers, but not other readersI FIFO queues for entering sections (full semaphores)

• ... and many more

Ina Schaefer FSE 39

Page 40: Fundamentals of Software Engineering - TU Braunschweig · PDF fileFundamentals of Software Engineering Modeling Concurrency ... design an algorithm such that: Mutual ExclusionAt most

Solving CritSectPr with atomic/d step only?

actually possible in this case (demo)also in interleaving example (counting via temp, see above)But:

• does not carry over to variations (see previous slide)

• atomic only weakly atomic!

• d step excludes any nondeterminism!

Ina Schaefer FSE 40