337
Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari http://www.weizmann.ac.il/sci-tea/benari/

Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Embed Size (px)

Citation preview

Page 1: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and

Distributed Programming

(Second Edition)

Addison-Wesley, 2006

Mordechai (Moti) Ben-Ari

http://www.weizmann.ac.il/sci-tea/benari/

Page 2: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Computer Time

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 1.2

� -

time (nanoseconds) →0 100 200 300 400 500

Page 3: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Human Time

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 1.3

� -

time (seconds) →0 100 200 300 400 500

Page 4: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Concurrency in an Operating System

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 1.4

time →

Computation

I/O

start I/O end I/O

6 6

Page 5: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Interleaving as Choosing Among Processes

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.1

p3, . . .

cpp6

q2, . . .

cpq6

r2, . . .

cpr6

p1, r1, p2, q1

��

@@

@I

Page 6: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Possible Interleavings

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.2

p1→q1→p2→q2,p1→q1→q2→p2,p1→p2→q1→q2,q1→p1→q2→p2,q1→p1→p2→q2,q1→q2→p1→p2.

Page 7: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.3

Algorithm 2.1: Trivial concurrent programinteger n ← 0

p qinteger k1 ← 1 integer k2 ← 2

p1: n ← k1 q1: n ← k2

Page 8: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.4

Algorithm 2.2: Trivial sequential programinteger n ← 0

integer k1 ← 1integer k2 ← 2

p1: n ← k1p2: n ← k2

Page 9: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

State Diagram for a Sequential Program

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.5

-s p1: n ← k1k1 = 1, k2 = 2

n = 0

'&

$%

p2: n ← k2k1 = 1, k2 = 2

n = 1

'&

$%

(end)k1 = 1, k2 = 2

n = 2

'&

$%

- -

Page 10: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

State Diagram for a Concurrent Program

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.6

?

rp1: n ← k1q1: n ← k2

k1 = 1, k2 = 2n = 0

'

&

$

%(end)

q1: n ← k2k1 = 1, k2 = 2

n = 1

'

&

$

%(end)

(end)k1 = 1, k2 = 2

n = 2

'

&

$

%

p1: n ← k1(end)

k1 = 1, k2 = 2n = 2

'

&

$

%(end)

(end)k1 = 1, k2 = 2

n = 1

'

&

$

%

��

��

?

@@@@R

?

Page 11: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for a Concurrent Program

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.7

Process p Process q n k1 k2

p1: n←k1 q1: n←k2 0 1 2

(end) q1: n←k2 1 1 2

(end) (end) 2 1 2

Page 12: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Multitasking System

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.8

��������*

CPUReg

XXXXXXXXXXXXXXz

Reg

Reg

Reg

Reg

Reg

OperatingSystem

Program 1 Program 2 Program 3 Program 4

Page 13: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Multiprocessor Computer

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.9

LocalMemory

CPU

LocalMemory

CPU

LocalMemory

CPU

GlobalMemory

Page 14: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Inconsistency Caused by Overlapped Execution

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.10

Local memory Local memory

0000 0000 0000 0001 0000 0000 0000 0010

0000 0000 0000 0011

Global memory

���* HHHY

Page 15: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Distributed Systems Architecture

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.11

Node Node

Node Node

-

6

?�

?

-

6

��������

��

@@@@@R@

@@

@@I

Node Node

Node Node

-

6

?

Page 16: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.12

Algorithm 2.3: Atomic assignment statementsinteger n ← 0

p qp1: n ← n + 1 q1: n ← n + 1

Page 17: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for Atomic Assignment Statements

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.13

Process p Process q n

p1: n←n+1 q1: n←n+1 0

(end) q1: n←n+1 1

(end) (end) 2

Process p Process q n

p1: n←n+1 q1: n←n+1 0

p1: n←n+1 (end) 1

(end) (end) 2

Page 18: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.14

Algorithm 2.4: Assignment statements with one global referenceinteger n ← 0

p qinteger temp integer temp

p1: temp ← n q1: temp ← np2: n ← temp + 1 q2: n ← temp + 1

Page 19: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Correct Scenario for Assignment Statements

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.15

Process p Process q n p.temp q.temp

p1: temp←n q1: temp←n 0 ? ?

p2: n←temp+1 q1: temp←n 0 0 ?

(end) q1: temp←n 1 0 ?

(end) q2: n←temp+1 1 0 1

(end) (end) 2 0 1

Page 20: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Incorrect Scenario for Assignment Statements

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.16

Process p Process q n p.temp q.temp

p1: temp←n q1: temp←n 0 ? ?

p2: n←temp+1 q1: temp←n 0 0 ?

p2: n←temp+1 q2: n←temp+1 0 0 0

(end) q2: n←temp+1 1 0 0

(end) (end) 1 0 0

Page 21: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.17

Algorithm 2.5: Stop the loop Ainteger n ← 0boolean flag ← false

p qp1: while flag = false q1: flag ← truep2: n ← 1 − n q2:

Page 22: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.18

Algorithm 2.6: Assignment statement for a register machineinteger n ← 0

p qp1: load R1,n q1: load R1,np2: add R1,#1 q2: add R1,#1p3: store R1,n q3: store R1,n

Page 23: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Register Machine

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.19

Registers

Memory

· · · · · ·

Registers

Memory

· · · · · ·

Registers

Memory

· · · · · ·0 0 1

0 1 1

?6Load Store

Page 24: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for a Register Machine

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.20

Process p Process q n p.R1 q.R1

p1: load R1,n q1: load R1,n 0 ? ?

p2: add R1,#1 q1: load R1,n 0 0 ?

p2: add R1,#1 q2: add R1,#1 0 0 0

p3: store R1,n q2: add R1,#1 0 1 0

p3: store R1,n q3: store R1,n 0 1 1

(end) q3: store R1,n 1 1 1

(end) (end) 1 1 1

Page 25: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.21

Algorithm 2.7: Assignment statement for a stack machineinteger n ← 0

p qp1: push n q1: push np2: push #1 q2: push #1p3: add q3: addp4: pop n q4: pop n

Page 26: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Stack Machine

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.22

Stack

Memory

· · · · · ·

Stack

Memory

· · · · · ·

Stack

Memory

· · · · · ·

· · · 0 1

AAU

0

· · · 1

0

· · · 1

AAK

1

Push Pop

Page 27: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.23

Algorithm 2.8: Volatile variablesinteger n ← 0

p qinteger local1, local2 integer local

p1: n ← some expression q1: local ← n + 6p2: computation not using n q2:

p3: local1 ← (n + 5) ∗ 7 q3:

p4: local2 ← n + 5 q4:

p5: n ← local1 * local2 q5:

Page 28: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.24

Algorithm 2.9: Concurrent counting algorithminteger n ← 0

p qinteger temp integer temp

p1: do 10 times q1: do 10 timesp2: temp ← n q2: temp ← np3: n ← temp + 1 q3: n ← temp + 1

Page 29: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Concurrent Program in Pascal

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.25

1 program count;2 var n: integer := 0;3

4 procedure p;5 var temp, i : integer;6 begin7 for i := 1 to 10 do8 begin9 temp := n; n := temp + 1

10 end11 end;12

13 procedure q;14 var temp, i : integer;15 begin16 for i := 1 to 10 do17 begin18 temp := n; n := temp + 119 end20 end;21

22 begin23 cobegin p; q coend;24 writeln (’ The value of n is ’ , n)25 end.

Page 30: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Concurrent Program in C

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.26

1 int n = 0;2

3 void p() {4 int temp, i ;5 for (i = 0; i < 10; i ++) {6 temp = n;7 n = temp + 1;8 }9 }

10

11 void q() {12 int temp, i ;13 for (i = 0; i < 10; i ++) {14 temp = n;15 n = temp + 1;16 }17 }18

19 void main() {20 cobegin { p(); q(); }21 cout << ”The value of n is ” << n << ”\n”;22 }

Page 31: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Concurrent Program in Ada

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.27

1 with Ada.Text IO; use Ada.Text IO;2 procedure Count is3 N: Integer := 0;4 pragma Volatile(N);5

6 task type Count Task;7 task body Count Task is8 Temp: Integer;9 begin

10 for I in 1..10 loop11 Temp := N;12 N := Temp + 1;13 end loop;14 end Count Task;15

16 begin17 declare18 P, Q: Count Task;19 begin20 null ;21 end;22 Put Line(”The value of N is ” & Integer’ Image(N));23 end Count;

Page 32: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Concurrent Program in Java

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.28

1 class Count extends Thread {2 static volatile int n = 0;3

4 public void run() {5 int temp;6 for (int i = 0; i < 10; i ++) {7 temp = n;8 n = temp + 1;9 }

10 }11

12 public static void main(String[] args ) {13 Count p = new Count();14 Count q = new Count();15 p.start ();16 q.start ();17 try {18 p. join ();19 q. join ();20 }21 catch (InterruptedException e) { }22 System.out.println (”The value of n is ” + n);23 }24 }

Page 33: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Concurrent Program in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.29

1 #include ”for.h”2 #define TIMES 103 byte n = 0;4

5 proctype P() {6 byte temp;7 for (i ,1, TIMES)8 temp = n;9 n = temp + 1

10 rof (i )11 }12

13 init {14 atomic {15 run P();16 run P()17 }18 ( nr pr == 1);19 printf (”MSC: The value is %d\n”, n)20 }

Page 34: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Frog Puzzle

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.30

����

����

����

����

����

����

����

����

����

M→ M→ M→ M→ ←F ←F ←F ←F

Page 35: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

One Step of the Frog Puzzle

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.31

����

����

����

����

����

����

����

����

����

M→ M→ M→ M→ ←F ←F ←F ←F

Page 36: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Final State of the Frog Puzzle

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.32

����

����

����

����

����

����

����

����

����

←F ←F ←F ←F M→ M→ M→ M→

Page 37: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

(Partial) State Diagram for the Frog Puzzle

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.33

�� ��MM⊔ FF�����

HHHHj

��������9

XXXXz

· · ·×

�� ��⊔MMFF�� ��M⊔MFF

?

�� ��MFM⊔ F�����

HHHHj�� ��MF⊔MF�� ��MFMF⊔

�����HHHHj ?�� ��⊔ FMMF

�� ��MFFM⊔

�� ��MF⊔ FM�����

����������?�� ��F⊔MMF

×

�� ��MFF⊔M

×

�� ��⊔ FMFM

?�� ��F⊔MFM

?�� ��FFM⊔M

?�� ��FF⊔MM

×

Page 38: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.34

Algorithm 2.10: Incrementing and decrementinginteger n ← 0

p qinteger temp integer temp

p1: do K times q1: do K timesp2: temp ← n q2: temp ← np3: n ← temp + 1 q3: n ← temp − 1

Page 39: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.35

Algorithm 2.11: Zero Aboolean found

p qinteger i ← 0 integer j ← 1

p1: found ← false q1: found ← falsep2: while not found q2: while not foundp3: i ← i + 1 q3: j ← j − 1p4: found ← f(i) = 0 q4: found ← f(j) = 0

Page 40: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.36

Algorithm 2.12: Zero Bboolean found ← false

p qinteger i ← 0 integer j ← 1

p1: while not found q1: while not foundp2: i ← i + 1 q2: j ← j − 1p3: found ← f(i) = 0 q3: found ← f(j) = 0

Page 41: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.37

Algorithm 2.13: Zero Cboolean found ← false

p qinteger i ← 0 integer j ← 1

p1: while not found q1: while not foundp2: i ← i + 1 q2: j ← j − 1p3: if f(i) = 0 q3: if f(j) = 0p4: found ← true q4: found ← true

Page 42: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.38

Algorithm 2.14: Zero Dboolean found ← falseinteger turn ← 1

p qinteger i ← 0 integer j ← 1

p1: while not found q1: while not foundp2: await turn = 1 q2: await turn = 2

turn ← 2 turn ← 1p3: i ← i + 1 q3: j ← j − 1p4: if f(i) = 0 q4: if f(j) = 0p5: found ← true q5: found ← true

Page 43: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.39

Algorithm 2.15: Zero Eboolean found ← falseinteger turn ← 1

p qinteger i ← 0 integer j ← 1

p1: while not found q1: while not foundp2: await turn = 1 q2: await turn = 2

turn ← 2 turn ← 1p3: i ← i + 1 q3: j ← j − 1p4: if f(i) = 0 q4: if f(j) = 0p5: found ← true q5: found ← truep6: turn ← 2 q6: turn ← 1

Page 44: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.40

Algorithm 2.16: Concurrent algorithm Ainteger array [1..10] C ← ten distinct initial valuesinteger array [1..10] D

integer myNumber, countp1: myNumber ← C[i]p2: count ← number of elements of C less than myNumberp3: D[count + 1] ← myNumber

Page 45: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.41

Algorithm 2.17: Concurrent algorithm Binteger n ← 0

p qp1: while n < 2 q1: n ← n + 1p2: write(n) q2: n ← n + 1

Page 46: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.42

Algorithm 2.18: Concurrent algorithm Cinteger n ← 1

p qp1: while n < 1 q1: while n >= 0p2: n ← n + 1 q2: n ← n − 1

Page 47: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.43

Algorithm 2.19: Stop the loop Binteger n ← 0boolean flag ← false

p qp1: while flag = false q1: while flag = falsep2: n ← 1 − n q2: if n = 0p3: q3: flag ← true

Page 48: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.44

Algorithm 2.20: Stop the loop Cinteger n ← 0boolean flag ← false

p qp1: while flag = false q1: while n = 0 // Do nothingp2: n ← 1 − n q2: flag ← true

Page 49: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.45

Algorithm 2.21: Welfare crook probleminteger array[0..N] a, b, c ← . . . (as required)integer i ← 0, j ← 0, k ← 0

loopp1: if condition-1p2: i ← i + 1p3: else if condition-2p4: j ← j + 1p5: else if condition-3p6: k ← k + 1

else exit loop

Page 50: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.1

Algorithm 3.1: Critical section problemglobal variables

p qlocal variables local variablesloop forever loop forever

non-critical section non-critical sectionpreprotocol preprotocolcritical section critical sectionpostprotocol postprotocol

Page 51: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Critical Section

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.2

HHH

fff

f

Page 52: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.3

Algorithm 3.2: First attemptinteger turn ← 1

p qloop forever loop forever

p1: non-critical section q1: non-critical sectionp2: await turn = 1 q2: await turn = 2p3: critical section q3: critical sectionp4: turn ← 2 q4: turn ← 1

Page 53: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.4

Algorithm 3.3: History in a sequential algorithminteger a ← 1, b ← 2

p1: Millions of statementsp2: a ← (a+b)*5p3: . . .

Page 54: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.5

Algorithm 3.4: History in a concurrent algorithminteger a ← 1, b ← 2

p qp1: Millions of statements q1: Millions of statementsp2: a ← (a+b)*5 q2: b ← (a+b)*5p3: . . . q3: . . .

Page 55: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

First States of the State Diagram

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.6

-t p1,q1,1

��

�� p1,q2,1

��

��� �

��

p2,q1,1

��

�� p2,q2,1

��

��� �

��?

?

?

?

-

-

Page 56: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

State Diagram for the First Attempt

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.7

p2,q4,2� � �-p2,q3,2� � �-p2,q2,2� � �-p2,q1,2� � �-p1,q1,2� �p4,q1,1� �p3,q1,1� �p2,q1,1� �

p1,q4,2� �p1,q3,2� �p1,q2,2� �p4,q2,1� � ��p3,q2,1� � ��p2,q2,1� � ��p1,q2,1� � ��p1,q1,1� �

?

?

?

?

?

?

?

?

?

?

?

?

?

?

������

������

������

������

HHHHHj

HHHHHj

HHHHHj

HHHHHj

-

�-r

Page 57: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Alternate Layout for First Attempt (Not in book)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.8

?

sp1,q1,1

��

�� p1,q2,1

��

��� �� p1,q1,2

��

�� p1,q2,2

��

��

p2,q1,1��

�� p2,q2,1

��

��� �� p2,q1,2

��

��� �- p1,q3,2

��

��

p3,q1,1��

�� p3,q2,1

��

��� �� p2,q2,2

��

��� �- p1,q4,2

��

��

p4,q1,1��

�� p4,q2,1

��

��� �� p2,q3,2

��

��� �- p2,q4,2

��

��� �-

?

?

?

?

?

?

?

?

?

?

?

?

-

-

-

-

-

-? ??

?

?

?

Page 58: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.9

Algorithm 3.5: First attempt (abbreviated)integer turn ← 1

p qloop forever loop forever

p1: await turn = 1 q1: await turn = 2p2: turn ← 2 q2: turn ← 1

Page 59: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

State Diagram for the Abbreviated First Attempt

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.10

?

tp1: await turn=1,q1: await turn=2,

turn = 1

'&

$%

p1: await turn=1,q1: await turn=2,

turn = 2

'&

$%

p2: turn←2,q1: await turn=2,

turn = 1

'&

$%

p1: await turn=1,q2: turn←1,turn = 2

'&

$%

& %'-

& %'-

& %$�

& %$�

? ?

??

Page 60: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fragment of the State Diagram for the First Attempt

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.11

p1: NCS,q1: NCS,turn = 2

'&

$%

p1: NCS,q2: await turn=2,

turn = 2

'&

$%

p2: await turn=1,q1: NCS,turn = 2

'&

$%

p2: await turn=1,q2: await turn=2,

turn = 2

'&

$%

& %'-

& %'-

-

-

? ?

-

-

Page 61: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.12

Algorithm 3.6: Second attemptboolean wantp ← false, wantq ← falsep q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: await wantq = false q2: await wantp = falsep3: wantp ← true q3: wantq ← truep4: critical section q4: critical sectionp5: wantp ← false q5: wantq ← false

Page 62: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.13

Algorithm 3.7: Second attempt (abbreviated)boolean wantp ← false, wantq ← falsep q

loop forever loop foreverp1: await wantq = false q1: await wantp = falsep2: wantp ← true q2: wantq ← truep3: wantp ← false q3: wantq ← false

Page 63: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fragment of State Diagram for the Second Attempt

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.14

6rp1: await !wantq,q1: await !wantp,

false,false

'&

$%

p2: wantp←true,q1: await !wantp,

false,false

'&

$%

p2: wantp←true,q2: wantq←true,

false,false

'&

$%

p3: wantp←false,q2: wantq←true,

true,false

'&

$%

p3: wantp←false,q3: wantq←false,

true,true

'&

$%

--

?

Page 64: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario: Mutual Exclusion Does Not Hold

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.15

Process p Process q wantp wantq

p1: await wantq=false q1: await wantp=false false false

p2: wantp←true q1: await wantp=false false false

p2: wantp←true q2: wantq←true false false

p3: wantp←false q3: wantq←true true false

p3: wantp←false q3: wantq←false true true

Page 65: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.16

Algorithm 3.8: Third attemptboolean wantp ← false, wantq ← falsep q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: wantp ← true q2: wantq ← truep3: await wantq = false q3: await wantp = falsep4: critical section q4: critical sectionp5: wantp ← false q5: wantq ← false

Page 66: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario Showing Deadlock in the Third Attempt

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.17

Process p Process q wantp wantq

p1: non-critical section q1: non-critical section false false

p2: wantp←true q1: non-critical section false false

p2: wantp←true q2: wantq←true false false

p3: await wantq=false q2: wantq←true true false

p3: await wantq=false q3: await wantp=false true true

Page 67: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fragment of the State Diagram Showing Deadlock

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.18

6rp2: wantp←true,q2: wantq←true,

false,false

'&

$%

p3: await !wantq,q2: wantq←true,

true,false

'&

$%

p3: await !wantq,q3: await !wantp,

true,true

'&

$%

--

� ���

� ��-

Page 68: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.19

Algorithm 3.9: Fourth attemptboolean wantp ← false, wantq ← falsep q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: wantp ← true q2: wantq ← truep3: while wantq q3: while wantpp4: wantp ← false q4: wantq ← falsep5: wantp ← true q5: wantq ← truep6: critical section q6: critical sectionp7: wantp ← false q7: wantq ← false

Page 69: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Cycle in the State Diagram for the Fourth Attempt

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.20

?r

p3: while wantq,q3: while wantp,

true,true

'&

$%

p3: while wantq,q4: wantq←false,

true,true

'&

$%

p4: wantp←false,q4: wantq←false,

true,true

'&

$%

p4: wantp←false,q5: wantq←true,

true,false

'&

$%

p5: wantp←true,q5: wantq←true,

false,false

'&

$%

p5: wantp←true,q3: while wantp,

false,true

'&

$%

- -

?

6

��

Page 70: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.21

Algorithm 3.10: Dekker’s algorithmboolean wantp ← false, wantq ← falseinteger turn ← 1p q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: wantp ← true q2: wantq ← truep3: while wantq q3: while wantpp4: if turn = 2 q4: if turn = 1p5: wantp ← false q5: wantq ← falsep6: await turn = 1 q6: await turn = 2p7: wantp ← true q7: wantq ← truep8: critical section q8: critical sectionp9: turn ← 2 q9: turn ← 1p10: wantp ← false q10: wantq ← false

Page 71: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.22

Algorithm 3.11: Critical section problem with test-and-setinteger common ← 0

p qinteger local1 integer local2loop forever loop forever

p1: non-critical section q1: non-critical sectionrepeat repeat

p2: test-and-set( q2: test-and-set(common, local1) common, local2)

p3: until local1 = 0 q3: until local2 = 0p4: critical section q4: critical sectionp5: common ← 0 q5: common ← 0

Page 72: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.23

Algorithm 3.12: Critical section problem with exchangeinteger common ← 1

p qinteger local1 ← 0 integer local2 ← 0loop forever loop forever

p1: non-critical section q1: non-critical sectionrepeat repeat

p2: exchange(common, lo-cal1)

q2: exchange(common, lo-cal2)

p3: until local1 = 1 q3: until local2 = 1p4: critical section q4: critical sectionp5: exchange(common, local1) q5: exchange(common, local2)

Page 73: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.24

Algorithm 3.13: Peterson’s algorithmboolean wantp ← false, wantq ← falseinteger last ← 1p q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: wantp ← true q2: wantq ← truep3: last ← 1 q3: last ← 2p4: await wantq = false or q4: await wantp = false or

last = 2 last = 1p5: critical section q5: critical sectionp6: wantp ← false q6: wantq ← false

Page 74: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.25

Algorithm 3.14: Manna-Pnueli algorithminteger wantp ← 0, wantq ← 0p q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: if wantq = −1 q2: if wantp = −1

wantp ← −1 wantq ← 1else wantp ← 1 else wantq ← −1

p3: await wantq 6= wantp q3: await wantp 6= − wantqp4: critical section q4: critical sectionp5: wantp ← 0 q5: wantq ← 0

Page 75: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.26

Algorithm 3.15: Doran-Thomas algorithmboolean wantp ← false, wantq ← falseinteger turn ← 1p q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: wantp ← true q2: wantq ← truep3: if wantq q3: if wantpp4: if turn = 2 q4: if turn = 1p5: wantp ← false q5: wantq ← falsep6: await turn = 1 q6: await turn = 2p7: wantp ← true q7: wantq ← truep8: await wantq = false q8: await wantp = falsep9: critical section q9: critical sectionp10: wantp ← false q10: wantq ← falsep11: turn ← 2 q11: turn ← 1

Page 76: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.1

Algorithm 4.1: Third attemptboolean wantp ← false, wantq ← falsep q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: wantp ← true q2: wantq ← truep3: await wantq = false q3: await wantp = falsep4: critical section q4: critical sectionp5: wantp ← false q5: wantq ← false

Page 77: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

2A

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.2

A

time →

false

true

6i

Page 78: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

3A

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.3

time →

false

true

6i

A

Page 79: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Duality: ¬2A

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.4

A

time →

false

true

6i

Page 80: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Duality: ¬3A

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.5

time →

false

true

6i

A

Page 81: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

32A

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.6

A

time →

false

true

6i

Page 82: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

23A

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.7

A

time →

false

true

6i

Page 83: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

AUB

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.8

A, B

time →

false

true

6i

Page 84: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

32A1 ∧32A2

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.9

A1,A2 sk2

?

time →

false

true

6i

sk1

?

Page 85: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

23A1 ∧23A2

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.10

A1,A2

time →

false

true

6i

Page 86: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Overtaking: tryp→ (¬ csq)W (csq)W (¬ csq)W (csp)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.11

p, q

time →

ncs

try

cs

0 1 2 3 4 5 6 7 8 9 10 11 12 13

Page 87: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.12

Algorithm 4.2: Dekker’s algorithmboolean wantp ← false, wantq ← falseinteger turn ← 1p q

loop forever loop foreverp1: non-critical section q1: non-critical sectionp2: wantp ← true q2: wantq ← truep3: while wantq q3: while wantpp4: if turn = 2 q4: if turn = 1p5: wantp ← false q5: wantq ← falsep6: await turn = 1 q6: await turn = 2p7: wantp ← true q7: wantq ← truep8: critical section q8: critical sectionp9: turn ← 2 q9: turn ← 1p10: wantp ← false q10: wantq ← false

Page 88: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Dekker’s Algorithm in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.13

1 bool wantp = false, wantq = false;2 byte turn = 1;3

4 active proctype p() {5 do :: wantp = true;6 do :: !wantq −> break;7 :: else −>

8 if :: (turn == 1)9 :: (turn == 2) −>

10 wantp = false; (turn == 1); wantp = true11 fi12 od;13 printf (”MSC: p in CS\n”) ;14 turn = 2; wantp = false15 od16 }

Page 89: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Specifying Correctness in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.14

1 byte critical = 0;2

3 bool PinCS = false;4

5 #define nostarve PinCS /∗ LTL claim <> nostarve ∗/6

7 active proctype p() {8 do ::9 /∗ preprotocol ∗/

10 critical ++;11 assert(critical <= 1);12 PinCS = true;13 critical −−;14 /∗ postprotocol ∗/15 od16 }

Page 90: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

LTL Translation to Never Claims

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.15

1 never { /∗ !(<>nostarve) ∗/2 accept init :3 T0 init :4 if5 :: (! ((nostarve ))) −> goto T0 init6 fi ;7 }8

9 never { /∗ !([]<>nostarve) ∗/10 T0 init :11 if12 :: (! ((nostarve ))) −> goto accept S413 :: (1) −> goto T0 init14 fi ;15 accept S4:16 if17 :: (! ((nostarve ))) −> goto accept S418 fi ;19 }

Page 91: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.1

Algorithm 5.1: Bakery algorithm (two processes)integer np ← 0, nq ← 0

p qloop forever loop forever

p1: non-critical section q1: non-critical sectionp2: np ← nq + 1 q2: nq ← np + 1p3: await nq = 0 or np ≤ nq q3: await np = 0 or nq < npp4: critical section q4: critical sectionp5: np ← 0 q5: nq ← 0

Page 92: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.2

Algorithm 5.2: Bakery algorithm (N processes)integer array[1..n] number ← [0,. . . ,0]

loop foreverp1: non-critical sectionp2: number[i] ← 1 + max(number)p3: for all other processes jp4: await (number[j] = 0) or (number[i] ≪ number[j])p5: critical sectionp6: number[i] ← 0

Page 93: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.3

Algorithm 5.3: Bakery algorithm without atomic assignmentboolean array[1..n] choosing ← [false,. . . ,false]integer array[1..n] number ← [0,. . . ,0]

loop foreverp1: non-critical sectionp2: choosing[i] ← truep3: number[i] ← 1 + max(number)p4: choosing[i] ← falsep5: for all other processes jp6: await choosing[j] = falsep7: await (number[j] = 0) or (number[i] ≪ number[j])p8: critical sectionp9: number[i] ← 0

Page 94: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.4

Algorithm 5.4: Fast algorithm for two processes (outline)integer gate1 ← 0, gate2 ← 0

p qloop forever loop forever

non-critical section non-critical sectionp1: gate1 ← p q1: gate1 ← qp2: if gate2 6= 0 goto p1 q2: if gate2 6= 0 goto q1p3: gate2 ← p q3: gate2 ← qp4: if gate1 6= p q4: if gate1 6= qp5: if gate2 6= p goto p1 q5: if gate2 6= q goto q1

critical section critical sectionp6: gate2 ← 0 q6: gate2 ← 0

Page 95: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fast Algorithm - No Contention (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.5

(a)

�@

�@

ip-

(b)

�@

�@

ipp -

(c)

�@

�@

ipp p

(d)

�@

�@

ipp p

-

Page 96: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fast Algorithm - No Contention (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.6

(e)

�@

�@

ipp p

�@

�@

ip

(f)

p

Page 97: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fast Algorithm - Contention At Gate 2

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.7

(a)

�@

�@

ip q

-

(b)

�@

�@

ipp q-

(c)

�@

�@

ipp q

(d)

�@

�@

ip-

p q

Page 98: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fast Algorithm - Contention At Gate 1 (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.8

(a)

�@

�@

ip-

(b)

�@

�@

ipp -

(c)

�@

�@

ipp p

(d)

�@

�@

ip�q p

Page 99: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Fast Algorithm - Contention At Gate 1 (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.9

(e)

�@

�@

ipq p-

-

(f)

�@

�@

ipq q-

Page 100: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.10

Algorithm 5.5: Fast algorithm for two processes (outline)integer gate1 ← 0, gate2 ← 0

p qloop forever loop forever

non-critical section non-critical sectionp1: gate1 ← p q1: gate1 ← qp2: if gate2 6= 0 goto p1 q2: if gate2 6= 0 goto q1p3: gate2 ← p q3: gate2 ← qp4: if gate1 6= p q4: if gate1 6= qp5: if gate2 6= p goto p1 q5: if gate2 6= q goto q1

critical section critical sectionp6: gate2 ← 0 q6: gate2 ← 0

Page 101: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.11

Algorithm 5.6: Fast algorithm for two processesinteger gate1 ← 0, gate2 ← 0boolean wantp ← false, wantq ← false

p qp1: gate1 ← p q1: gate1 ← q

wantp ← true wantq ← truep2: if gate2 6= 0 q2: if gate2 6= 0

wantp ← false wantq ← falsegoto p1 goto q1

p3: gate2 ← p q3: gate2 ← qp4: if gate1 6= p q4: if gate1 6= q

wantp ← false wantq ← falseawait wantq = false await wantp = false

p5: if gate2 6= p goto p1 q5: if gate2 6= q goto q1else wantp ← true else wantq ← true

critical section critical sectionp6: gate2 ← 0 q6: gate2 ← 0

wantp ← false wantq ← false

Page 102: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.12

Algorithm 5.7: Fisher’s algorithminteger gate ← 0

loop forevernon-critical sectionloop

p1: await gate = 0p2: gate ← ip3: delayp4: until gate = i

critical sectionp5: gate ← 0

Page 103: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.13

Algorithm 5.8: Lamport’s one-bit algorithmboolean array[1..n] want ← [false,. . . ,false]

loop forevernon-critical section

p1: want[i] ← truep2: for all processes j ¡ ip3: if want[j]p4: want[i] ← falsep5: await not want[j]

goto p1p6: for all processes j ¿ ip7: await not want[j]

critical sectionp8: want[i] ← false

Page 104: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 5.14

Algorithm 5.9: Manna-Pnueli central server algorithminteger request ← 0, respond ← 0

client process iloop forever

non-critical sectionp1: while respond 6= ip2: request ← i

critical sectionp3: respond ← 0

server processloop forever

p4: await request 6= 0p5: respond ← requestp6: await respond = 0p7: request ← 0

Page 105: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

State Changes of a Process

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.1

inactive ready running

blocked

completed- --�

?HHHHHHHY

Page 106: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.2

Algorithm 6.1: Critical section with semaphores (two processes)binary semaphore S ← (1, ∅)

p qloop forever loop forever

p1: non-critical section q1: non-critical sectionp2: wait(S) q2: wait(S)p3: critical section q3: critical sectionp4: signal(S) q4: signal(S)

Page 107: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.3

Algorithm 6.2: Critical section with semaphores (two proc., abbrev.)binary semaphore S ← (1, ∅)

p qloop forever loop forever

p1: wait(S) q1: wait(S)p2: signal(S) q2: signal(S)

Page 108: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

State Diagram for the Semaphore Solution

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.4

p1: wait(S),

q1: wait(S),

(1, ∅)

'

&

$

%p2: signal(S),

q1: wait(S),

(0, ∅)

'

&

$

%p2: signal(S),q1: blocked,(0, {q})

'

&

$

%p1: wait(S),

q2: signal(S),

(0, ∅)

'

&

$

%p1: blocked,q2: signal(S),

(0, {p})

'

&

$

%

--

-

@@@@@R@

@@

@@I

��

��

�@

@@

@@I p

q

Page 109: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.5

Algorithm 6.3: Critical section with semaphores (N proc.)binary semaphore S ← (1, ∅)

loop foreverp1: non-critical sectionp2: wait(S)p3: critical sectionp4: signal(S)

Page 110: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.6

Algorithm 6.4: Critical section with semaphores (N proc., abbrev.)binary semaphore S ← (1, ∅)

loop foreverp1: wait(S)p2: signal(S)

Page 111: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for Starvation

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.7

n Process p Process q Process r S

1 p1: wait(S) q1: wait(S) r1: wait(S) (1, ∅)2 p2: signal(S) q1: wait(S) r1: wait(S) (0, ∅)

3 p2: signal(S) q1: blocked r1: wait(S) (0, {q})4 p1: signal(S) q1: blocked r1: blocked (0, {q, r})

5 p1: wait(S) q1: blocked r2: signal(S) (0, {q})6 p1: blocked q1: blocked r2: signal(S) (0, {p, q})

7 p2: signal(S) q1: blocked r1: wait(S) (0, {q})

Page 112: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.8

Algorithm 6.5: Mergesortinteger array Abinary semaphore S1 ← (0, ∅)binary semaphore S2 ← (0, ∅)

sort1 sort2 mergep1: sort 1st half of A q1: sort 2nd half of A r1: wait(S1)p2: signal(S1) q2: signal(S2) r2: wait(S2)p3: q3: r3: merge halves of A

Page 113: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.9

Algorithm 6.6: Producer-consumer (infinite buffer)infinite queue of dataType buffer ← empty queuesemaphore notEmpty ← (0, ∅)

producer consumerdataType d dataType dloop forever loop forever

p1: d ← produce q1: wait(notEmpty)p2: append(d, buffer) q2: d ← take(buffer)p3: signal(notEmpty) q3: consume(d)

Page 114: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Partial State Diagram for Producer-Consumer

with Infinite Buffer

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.10

p1: append,q1: wait(S),

(0, ∅), [ ]

'

&

$

%p2: signal(S),

q1: wait(S),

(0, ∅), [x]

'

&

$

%p1: append,q1: wait(S),

(1, ∅), [x]

'

&

$

%p1: append,q1: blocked,(0, {con}), [ ]

'

&

$

%p2: signal(S),q1: blocked,(0, {con}), [x]

'

&

$

%p1: append,q2: take,(0, ∅), [x]

'

&

$

%

- - -

- - -

? ? ?

6

Page 115: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.11

Algorithm 6.7: Producer-consumer (infinite buffer, abbreviated)infinite queue of dataType buffer ← empty queuesemaphore notEmpty ← (0, ∅)

producer consumerdataType d dataType dloop forever loop forever

p1: append(d, buffer) q1: wait(notEmpty)p2: signal(notEmpty) q2: d ← take(buffer)

Page 116: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.12

Algorithm 6.8: Producer-consumer (finite buffer, semaphores)finite queue of dataType buffer ← empty queuesemaphore notEmpty ← (0, ∅)semaphore notFull ← (N, ∅)producer consumer

dataType d dataType dloop forever loop forever

p1: d ← produce q1: wait(notEmpty)p2: wait(notFull) q2: d ← take(buffer)p3: append(d, buffer) q3: signal(notFull)p4: signal(notEmpty) q4: consume(d)

Page 117: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario with Busy Waiting

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.13

n Process p Process q S

1 p1: wait(S) q1: wait(S) 1

2 p2: signal(S) q1: wait(S) 0

3 p2: signal(S) q1: wait(S) 0

4 p1: wait(S) q1: wait(S) 1

Page 118: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.14

Algorithm 6.9: Dining philosophers (outline)

loop foreverp1: thinkp2: preprotocolp3: eatp4: postprotocol

Page 119: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The Dining Philosophers

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.15

...........................

...........................

............................

............................

............................

...........................

..........................

..........................

..........................

..........................

.......................................................

............................................................................................................................................................................................................................

.......................................................

..........................

..........................

..........................

..........................

...........................

............................

............................

............................

...........................

............

............

...

............

............

...

...........................

............................

............................

............................

...........................

..........................

..........................

..........................

..........................

...........................

............................ ............................ ............................ ........................... ........................... ........................... ........................... ........................................................

.......................................................

..........................

..........................

..........................

..........................

...........................

............................

............................

............................

...........................

...........................

................

.................

.................................

.................................

...................................................................................................................

.................

.................

............

....

............

....

.................

................................................. ................. ................. ................ ................ .................

..................................................................

.................

................Spaghetti

..................................................................

............................................................................................................................................... ........... ........... ........... ........... ........... ........... ........... ..................................................................phil1

fork1

..................................................................

............................................................................................................................................... ........... ........... ........... ........... ........... ........... ........... ..................................................................phil2

fork2

..................................................................

............................................................................................................................................... ........... ........... ........... ........... ........... ........... ........... ..................................................................phil5

fork5

..................................................................

............................................................................................................................................... ........... ........... ........... ........... ........... ........... ........... ..................................................................phil3

fork3

..................................................................

............................................................................................................................................... ........... ........... ........... ........... ........... ........... ........... ..................................................................phil4

fork4

6

HHHY���*

����HHHj

Page 120: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.16

Algorithm 6.10: Dining philosophers (first attempt)semaphore array [0..4] fork ← [1,1,1,1,1]

loop foreverp1: thinkp2: wait(fork[i])p3: wait(fork[i+1])p4: eatp5: signal(fork[i])p6: signal(fork[i+1])

Page 121: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.17

Algorithm 6.11: Dining philosophers (second attempt)semaphore array [0..4] fork ← [1,1,1,1,1]semaphore room ← 4

loop foreverp1: thinkp2: wait(room)p3: wait(fork[i])p4: wait(fork[i+1])p5: eatp6: signal(fork[i])p7: signal(fork[i+1])p8: signal(room)

Page 122: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.18

Algorithm 6.12: Dining philosophers (third attempt)semaphore array [0..4] fork ← [1,1,1,1,1]

philosopher 4loop forever

p1: thinkp2: wait(fork[0])p3: wait(fork[4])p4: eatp5: signal(fork[0])p6: signal(fork[4])

Page 123: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.19

Algorithm 6.13: Barz’s algorithm for simulating general semaphoresbinary semaphore S ← 1binary semaphore gate ← 1integer count ← k

loop forevernon-critical section

p1: wait(gate)p2: wait(S) // Simulated waitp3: count ← count − 1p4: if count > 0 thenp5: signal(gate)p6: signal(S)

critical sectionp7: wait(S) // Simulated signalp8: count ← count + 1p9: if count = 1 thenp10: signal(gate)p11: signal(S)

Page 124: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.20

Algorithm 6.14: Udding’s starvation-free algorithmsemaphore gate1 ← 1, gate2 ← 0integer numGate1 ← 0, numGate2 ← 0

p1: wait(gate1)p2: numGate1 ← numGate1 + 1p3: signal(gate1)p4: wait(gate1)p5: numGate2 ← numGate2 + 1

numGate1 ← numGate1 − 1 // Statement is missing in thebookp6: if numGate1 ¿ 0p7: signal(gate1)p8: else signal(gate2)p9: wait(gate2)p10: numGate2 ← numGate2 − 1

critical sectionp11: if numGate2 ¿ 0p12: signal(gate2)p13: else signal(gate1)

Page 125: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Udding’s Starvation-Free Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.21

�� @@

�� @@

m

�� @@

�� @@

m

�� @@

�� @@

m

�� @@

�� @@

m

�� @@

�� @@

mnumGate1 gate1 numGate2 gate2 CS

Page 126: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for Starvation in Udding’s Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.22

n Process p Process q gate1 gate2 nGate1 nGate2

1 p4: wait(g1) q4: wait(g1) 1 0 2 0

2 p9: wait(g2) q9: wait(g2) 0 1 0 2

3 CS q9: wait(g2) 0 0 0 1

4 p12: signal(g2) q9: wait(g2) 0 0 0 1

5 p1: wait(g1) CS 0 0 0 0

6 p1: wait(g1) q13: signal(g1) 0 0 0 0

7 p1: blocked q13: signal(g1) 0 0 0 0

8 p4: wait(g1) q1: wait(g1) 1 0 1 0

9 p4: wait(g1) q4: wait(g1) 1 0 2 0

Page 127: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Semaphores in Java

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.23

1 import java. util . concurrent. Semaphore;2 class CountSem extends Thread {3 static volatile int n = 0;4 static Semaphore s = new Semaphore(1);5

6 public void run() {7 int temp;8 for (int i = 0; i < 10; i ++) {9 try {

10 s. acquire ();11 }12 catch (InterruptedException e) {}13 temp = n;14 n = temp + 1;15 s. release ();16 }17 }18

19 public static void main(String[] args) {20 /∗ As before ∗/21 }22 }

Page 128: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Semaphores in Ada

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.24

1 protected type Semaphore(Initial : Natural) is2 entry Wait;3 procedure Signal;4 private5 Count: Natural := Initial ;6 end Semaphore;7

8 protected body Semaphore is9 entry Wait when Count > 0 is

10 begin11 Count := Count − 1;12 end Wait;13

14 procedure Signal is15 begin16 Count := Count + 1;17 end Signal;18 end Semaphore;

Page 129: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Busy-Wait Semaphores in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.25

1 inline wait( s ) {2 atomic { s > 0 ; s−− }3 }4

5 inline signal ( s ) { s++ }

Page 130: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Weak Semaphores in Promela (3 processes) (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.26

1 typedef Semaphore {2 byte count;3 bool blocked[NPROCS];4 };5

6 inline initSem(S, n) {7 S.count = n8 }

Page 131: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Weak Semaphores in Promela (3 processes) (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.27

1 inline wait(S) {2 atomic {3 if4 :: S.count >= 1 −> S.count−−5 :: else −>

6 S.blocked[ pid−1] = true;7 ! S.blocked[ pid−1]8 fi9 }

10 }11

12 inline signal (S) {13 atomic {14 if15 :: S.blocked[0] −> S.blocked[0] = false16 :: S.blocked[1] −> S.blocked[1] = false17 :: S.blocked[2] −> S.blocked[2] = false18 :: else −> S.count++19 fi20 }21 }

Page 132: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Weak Semaphores in Promela (N processes) (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.28

1 typedef Semaphore {2 byte count;3 bool blocked[NPROCS];4 byte i , choice ;5 };6

7 inline initSem(S, n) {8 S.count = n9 }

10

11 inline wait(S) {12 atomic {13 if14 :: S.count >= 1 −> S.count−−15 :: else −>

16 S.blocked[ pid−1] = true;17 ! S.blocked[ pid−1]18 fi19 }20 }

Page 133: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Weak Semaphores in Promela (N processes) (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.29

1 inline signal (S) {2 atomic {3 S.i = 0;4 S.choice = 255;5 do6 :: (S.i == NPROCS) −> break7 :: (S.i < NPROCS) && !S.blocked[S.i] −> S.i++8 :: else −>

9 if10 :: (S.choice == 255) −> S.choice = S.i11 :: (S.choice != 255) −> S.choice = S.i12 :: (S.choice != 255) −>

13 fi ;14 S.i ++15 od;16 if17 :: S.choice == 255 −> S.count++18 :: else −> S.blocked[S.choice] = false19 fi20 }21 }

Page 134: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Barz’s Algorithm in Promela (N processes, K in CS)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.30

1 byte gate = 1;2 int count = K;3

4 active [ N] proctype P () {5 do ::6 atomic { gate > 0; gate−−; }7 d step {8 count−−;9 if

10 :: count > 0 −> gate++11 :: else12 fi13 }14 /∗ Critical section ∗/15 d step {16 count++;17 if18 :: count == 1 −> gate++19 :: else20 fi21 }22 od23 }

Page 135: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.31

Algorithm 6.15: Semaphore algorithm Asemaphore S ← 1, semaphore T ← 0p q

p1: wait(S) q1: wait(T)p2: write(”p”) q2: write(”q”)p3: signal(T) q3: signal(S)

Page 136: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.32

Algorithm 6.16: Semaphore algorithm Bsemaphore S1 ← 0, S2 ← 0

p q rp1: write(”p”) q1: wait(S1) r1: wait(S2)p2: signal(S1) q2: write(”q”) r2: write(”r”)p3: signal(S2) q3: r3:

Page 137: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.33

Algorithm 6.17: Semaphore algorithm with a loopsemaphore S ← 1boolean B ← false

p qp1: wait(S) q1: wait(S)p2: B ← true q2: while not Bp3: signal(S) q3: write(”*”)p4: q4: signal(S)

Page 138: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.34

Algorithm 6.18: Critical section problem (k out of N processes)binary semaphore S ← 1, delay ← 0integer count ← k

integer mloop forever

p1: non-critical sectionp2: wait(S)p3: count ← count − 1p4: m ← countp5: signal(S)p6: if m ≤ −1 wait(delay)p7: critical sectionp8: wait(S)p9: count ← count + 1p10: if count ≤ 0 signal(delay)p11: signal(S)

Page 139: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Circular Buffer

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.35

����

����

����

����

����

����

inout6 6

����

����

����

����

����

����

����

����

in out6 6

Page 140: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.36

Algorithm 6.19: Producer-consumer (circular buffer)dataType array [0..N] bufferinteger in, out ← 0semaphore notEmpty ← (0, ∅)semaphore notFull ← (N, ∅)

producer consumerdataType d dataType dloop forever loop forever

p1: d ← produce q1: wait(notEmpty)p2: wait(notFull) q2: d ← buffer[out]p3: buffer[in] ← d q3: out ← (out+1) modulo Np4: in ← (in+1) modulo N q4: signal(notFull)p5: signal(notEmpty) q5: consume(d)

Page 141: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.37

Algorithm 6.20: Simulating general semaphoresbinary semaphore S ← 1, gate ← 0integer count ← 0

waitp1: wait(S)p2: count ← count − 1p3: if count < 0p4: signal(S)p5: wait(gate)p6: else signal(S)

signalp7: wait(S)p8: count ← count + 1p9: if count ≤ 0p10: signal(gate)p11: signal(S)

Page 142: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Weak Semaphores in Promela with Channels

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.38

1 typedef Semaphore {2 byte count;3 chan ch = [NPROCS] of { pid };4 byte temp, i ;5 };6 inline initSem(S, n) { S.count = n }7 inline wait(S) {8 atomic {9 if

10 :: S.count >= 1 −> S.count−−;11 :: else −> S.ch ! pid; !( S.ch ?? [ eval( pid )])12 fi13 }14 }15 inline signal (S) {16 atomic {17 S.i = len(S.ch);18 if19 :: S.i == 0 −> S.count++ /∗No blocked process, increment count∗/20 :: else −>

21 do22 :: S.i == 1 −> S.ch ? ; break /∗Remove only blocked process∗/23 :: else −> S.i−−;24 S.ch ? S.temp;

Page 143: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.39

Algorithm 6.21: Readers and writers with semaphoressemaphore readerSem ← 0, writerSem ← 0integer delayedReaders ← 0, delayedWriters ← 0semaphore entry ← 1integer readers ← 0, writers ← 0

SignalProcessif writers = 0 or delayedReaders > 0

delayedReaders ← delayedReaders − 1signal(readerSem)

else if readers = 0 and writers = 0 and delayedWriters > 0delayedWriters ← delayedWriters − 1signal(writerSem)

else signal(entry)

Page 144: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.40

Algorithm 6.21: Readers and writers with semaphores

StartReadp1: wait(entry)p2: if writers > 0p3: delayedReaders ← delayedReaders + 1p4: signal(entry)p5: wait(readerSem)p6: readers ← readers + 1p7: SignalProcess

EndReadp8: wait(entry)p9: readers ← readers − 1p10: SignalProcess

Page 145: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 6.41

Algorithm 6.21: Readers and writers with semaphores

StartWritep11: wait(entry)p12: if writers > 0 or readers > 0p13: delayedWriters ← delayedWriters + 1p14: signal(entry)p15: wait(writerSem)p16: writers ← writers + 1p17: SignalProcess

EndWritep18: wait(entry)p19: writers ← writers − 1p20: SignalProcess

Page 146: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.1

Algorithm 7.1: Atomicity of monitor operations

monitor CSinteger n ← 0

operation incrementinteger temptemp ← nn ← temp + 1

p qp1: CS.increment q1: CS.increment

Page 147: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Executing a Monitor Operation

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.2

HHH

monitor CS

n 0

fff

f

Page 148: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.3

Algorithm 7.2: Semaphore simulated with a monitor

monitor Seminteger s ← kcondition notZerooperation wait

if s = 0waitC(notZero)

s ← s − 1operation signal

s ← s + 1signalC(notZero)

p qloop forever loop forever

non-critical section non-critical sectionp1: Sem.wait q1: Sem.wait

critical section critical sectionp2: Sem.signal q2: Sem.signal

Page 149: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Condition Variable in a Monitor

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.4

HHH

���

notZero

fffmonitor Sem

s 0

fff

f

Page 150: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

State Diagram for the Semaphore Simulation

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.5

p1: Sem.wait,q1: Sem.wait,

1, <>

'&

$%

p1: Sem.wait,q2: Sem.signal,

0, <>

'&

$%

p2: Sem.signal,q1: Sem.wait,

0, <>

'&

$%

blocked,q2: Sem.signal

0, < p >

'&

$%

p2: Sem.signal,blocked,0, < q >

'&

$%

-�

-

6

?

-

6���������������������9

Page 151: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.6

Algorithm 7.3: Producer-consumer (finite buffer, monitor)

monitor PCbufferType buffer ← emptycondition notEmptycondition notFulloperation append(datatype V)

if buffer is fullwaitC(notFull)

append(V, buffer)signalC(notEmpty)

operation take()datatype Wif buffer is empty

waitC(notEmpty)W ← head(buffer)signalC(notFull)return W

Page 152: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.7

Algorithm 7.3: Producer-consumer (finite buffer, monitor) (continued)

producer consumerdatatype D datatype Dloop forever loop forever

p1: D ← produce q1: D ← PC.takep2: PC.append(D) q2: consume(D)

Page 153: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The Immediate Resumption Requirement

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.8

AAA

AAA

���

���

HHH

monitor

condition 1

condition 2

waiting

signaling

fff

ffff

ff

ff

f

Page 154: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.9

Algorithm 7.4: Readers and writers with a monitor

monitor RWinteger readers ← 0integer writers ← 0condition OKtoRead, OKtoWriteoperation StartRead

if writers 6= 0 or not empty(OKtoWrite)waitC(OKtoRead)

readers ← readers + 1signalC(OKtoRead)

operation EndReadreaders ← readers − 1if readers = 0

signalC(OKtoWrite)

Page 155: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.10

Algorithm 7.4: Readers and writers with a monitor (continued)

operation StartWriteif writers 6= 0 or readers 6= 0

waitC(OKtoWrite)writers ← writers + 1

operation EndWritewriters ← writers − 1if empty(OKtoRead)

then signalC(OKtoWrite)else signalC(OKtoRead)

reader writerp1: RW.StartRead q1: RW.StartWritep2: read the database q2: write to the databasep3: RW.EndRead q3: RW.EndWrite

Page 156: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.11

Algorithm 7.5: Dining philosophers with a monitor

monitor ForkMonitorinteger array[0..4] fork ← [2, . . . , 2]condition array[0..4] OKtoEatoperation takeForks(integer i)

if fork[i] 6= 2waitC(OKtoEat[i])

fork[i+1] ← fork[i+1] − 1fork[i−1] ← fork[i−1] − 1

operation releaseForks(integer i)fork[i+1] ← fork[i+1] + 1fork[i−1] ← fork[i−1] + 1if fork[i+1] = 2

signalC(OKtoEat[i+1])if fork[i−1] = 2

signalC(OKtoEat[i−1])

Page 157: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.12

Algorithm 7.5: Dining philosophers with a monitor (continued)

philosopher iloop forever

p1: thinkp2: takeForks(i)p3: eatp4: releaseForks(i)

Page 158: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for Starvation of Philosopher 2

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.13

n phil1 phil2 phil3 f0 f1 f2 f3 f4

1 take(1) take(2) take(3) 2 2 2 2 2

2 release(1) take(2) take(3) 1 2 1 2 2

3 release(1) take(2) and release(3) 1 2 0 2 1waitC(OK[2])

4 release(1) (blocked) release(3) 1 2 0 2 1

5 take(1) (blocked) release(3) 2 2 1 2 1

6 release(1) (blocked) release(3) 1 2 0 2 1

7 release(1) (blocked) take(3) 1 2 1 2 2

Page 159: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Readers and Writers in C

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.14

1 monitor RW {2 int readers = 0, writing = 1;3 condition OKtoRead, OKtoWrite;4

5 void StartRead() {6 if (writing || ! empty(OKtoWrite)) waitc(OKtoRead);7 readers = readers + 1;8 signalc (OKtoRead);9 }

10 void EndRead() {11 readers = readers − 1;12 if (readers == 0) signalc (OKtoWrite);13 }14

15 void StartWrite () {16 if (writing || (readers != 0)) waitc(OKtoWrite);17 writing = 1;18 }19 void EndWrite() {20 writing = 0;21 if (empty(OKtoRead)) signalc(OKtoWrite);22 else signalc (OKtoRead);23 }24 }

Page 160: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.15

Algorithm 7.6: Readers and writers with a protected object

protected object RWinteger readers ← 0boolean writing ← falseoperation StartRead when not writing

readers ← readers + 1operation EndRead

readers ← readers − 1operation StartWrite when not writing and readers = 0

writing ← true

operation EndWritewriting ← false

reader writerloop forever loop forever

p1: RW.StartRead q1: RW.StartWritep2: read the database q2: write to the databasep3: RW.EndRead q3: RW.EndWrite

Page 161: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Context Switches in a Monitor

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.16

Process reader Process writer

waitC(OKtoRead) operation EndWrite

(blocked) writing ← false

(blocked) signalC(OKtoRead)

readers ← readers + 1 return from EndWrite

signalC(OKtoRead) return from EndWrite

read the data return from EndWrite

read the data . . .

Page 162: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Context Switches in a Protected Object

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.17

Process reader Process writer

when not writing operation EndWrite

(blocked) writing ← false

(blocked) when not writing

(blocked) readers ← readers + 1

read the data . . .

Page 163: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Simple Readers and Writers in Ada

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.18

1 protected RW is2 procedure Write(I: Integer );3 function Read return Integer ;4 private5 N: Integer := 0;6 end RW;7

8 protected body RW is9 procedure Write(I: Integer ) is

10 begin11 N := I;12 end Write;13 function Read return Integer is14 begin15 return N;16 end Read;17 end RW;

Page 164: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Readers and Writers in Ada (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.19

1 protected RW is2 entry StartRead;3 procedure EndRead;4 entry Startwrite ;5 procedure EndWrite;6 private7 Readers: Natural :=0;8 Writing: Boolean := false ;9 end RW;

Page 165: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Readers and Writers in Ada (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.20

1 protected body RW is2 entry StartRead3 when not Writing is4 begin5 Readers := Readers + 1;6 end StartRead;7

8 procedure EndRead is9 begin

10 Readers := Readers − 1;11 end EndRead;12

13 entry StartWrite14 when not Writing and Readers = 0 is15 begin16 Writing := true ;17 end StartWrite;18

19 procedure EndWrite is20 begin21 Writing := false ;22 end EndWrite;23 end RW;

Page 166: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Producer-Consumer in Java (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.21

1 class PCMonitor {2 final int N = 5;3 int Oldest = 0, Newest = 0;4 volatile int Count = 0;5 int Buffer [] = new int[N];6

7 synchronized void Append(int V) {8 while (Count == N)9 try {

10 wait();11 } catch (InterruptedException e) {}12 Buffer [Newest] = V;13 Newest = (Newest + 1) % N;14 Count = Count + 1;15 notifyAll ();16 }

Page 167: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Producer-Consumer in Java (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.22

1 synchronized int Take() {2 int temp;3 while (Count == 0)4 try {5 wait();6 } catch (InterruptedException e) {}7 temp = Buffer[Oldest];8 Oldest = (Oldest + 1) % N;9 Count = Count − 1;

10 notifyAll ();11 return temp;12 }13 }

Page 168: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

A Monitor in Java With notifyAll

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.23

���

HHH

object waiting

fff

f fff����@

@@

@I

Page 169: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Java Monitor for RW (try-catch omitted)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.24

1 class RWMonitor {2 volatile int readers = 0;3 volatile boolean writing = false;4

5 synchronized void StartRead() {6 while (writing ) wait();7 readers = readers + 1;8 notifyAll ();9 }

10 synchronized void EndRead() {11 readers = readers − 1;12 if (readers == 0) notifyAll();13 }14

15 synchronized void StartWrite() {16 while (writing || (readers != 0)) wait();17 writing = true;18 }19

20 synchronized void EndWrite() {21 writing = false;22 notifyAll ();23 }24 }

Page 170: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Simulating Monitors in Promela (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.25

1 bool lock = false;2

3 typedef Condition {4 bool gate;5 byte waiting ;6 }7

8 #define emptyC(C) (C.waiting == 0)9

10 inline enterMon() {11 atomic {12 ! lock;13 lock = true;14 }15 }16

17 inline leaveMon() {18 lock = false;19 }

Page 171: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Simulating Monitors in Promela (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.26

1 inline waitC(C) {2 atomic {3 C.waiting++;4 lock = false; /∗ Exit monitor ∗/5 C.gate; /∗ Wait for gate ∗/6 lock = true; /∗ IRR ∗/7 C.gate = false; /∗ Reset gate ∗/8 C.waiting−−;9 }

10 }11

12 inline signalC (C) {13 atomic {14 if15 /∗ Signal only if waiting ∗/16 :: (C.waiting > 0) −>

17 C.gate = true;18 ! lock; /∗ IRR − wait for released lock ∗/19 lock = true; /∗ Take lock again ∗/20 :: else21 fi ;22 }23 }

Page 172: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Readers and Writers in Ada (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.27

1 protected RW is2 entry Start Read;3 procedure End Read;4 entry Start Write ;5 procedure End Write;6 private7 Waiting To Read : integer := 0;8 Readers : Natural := 0;9 Writing : Boolean := false ;

10 end RW;

Page 173: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Readers and Writers in Ada (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 7.28

1 protected RW is2 entry StartRead;3 procedure EndRead;4 entry Startwrite ;5 procedure EndWrite;6 function NumberReaders return Natural;7 private8 entry ReadGate;9 entry WriteGate;

10 Readers: Natural :=0;11 Writing: Boolean := false ;12 end RW;

Page 174: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.1

Algorithm 8.1: Producer-consumer (channels)channel of integer ch

producer consumerinteger x integer yloop forever loop forever

p1: x ← produce q1: ch ⇒ yp2: ch ⇐ x q2: consume(y)

Page 175: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.2

Algorithm 8.2: Conway’s problemconstant integer MAX ← 9constant integer K ← 4channel of integer inC, pipe, outC

compress outputchar c, previous ← 0 char cinteger n ← 0 integer m ← 0inC ⇒ previousloop forever loop forever

p1: inC ⇒ c q1: pipe ⇒ cp2: if (c = previous) and q2: outC ⇐ c

(n < MAX − 1)p3: n ← n + 1 q3: m ← m + 1

elsep4: if n > 0 q4: if m >= Kp5: pipe⇐ intToChar(n+1) q5: outC ⇐ newlinep6: n ← 0 q6: m ← 0p7: pipe ⇐ previous q7:

p8: previous ← c q8:

Page 176: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Conway’s Problem

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.3

- - -compress outputinC pipe outC

Page 177: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Process Array for Matrix Multiplication

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.4

Sink Sink Sink

Result

Result

Result

Zero

Zero

Zero

Source Source Source

����

����

����?

?

?

?

?

?

?

?

?

?

?

?

1 2 3

4 5 6

7 8 9

4,2,6 3,2,4 3,0,0 0,0,0

10,5,18 6,5,10 6,0,0 0,0,0

16,8,30 9,8,16 9,0,0 0,0,0

201

201

201

201

210

210

210

210

001

001

001

001

Page 178: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Computation of One Element

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.5

Result Zero7 8 9 ����

? ? ?2 2 0

001630

Page 179: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.6

Algorithm 8.3: Multiplier process with channelsinteger FirstElementchannel of integer North, East, South, Westinteger Sum, integer SecondElement

loop foreverp1: North ⇒ SecondElementp2: East ⇒ Sump3: Sum ← Sum + FirstElement · SecondElementp4: South ⇐ SecondElementp5: West ⇐ Sum

Page 180: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.7

Algorithm 8.4: Multiplier with channels and selective inputinteger FirstElementchannel of integer North, East, South, Westinteger Sum, integer SecondElement

loop forevereither

p1: North ⇒ SecondElementp2: East ⇒ Sum

orp3: East ⇒ Sump4: North ⇒ SecondElementp5: South ⇐ SecondElementp6: Sum ← Sum + FirstElement · SecondElementp7: West ⇐ Sum

Page 181: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.8

Algorithm 8.5: Dining philosophers with channelschannel of boolean forks[5]

philosopher i fork iboolean dummy boolean dummyloop forever loop forever

p1: think q1: forks[i] ⇐ truep2: forks[i] ⇒ dummy q2: forks[i] ⇒ dummyp3: forks[i+1] ⇒ dummy q3:

p4: eat q4:

p5: forks[i] ⇐ true q5:

p6: forks[i+1] ⇐ true q6:

Page 182: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Conway’s Problem in Promela (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.9

1 #define N 92 #define K 43

4 chan inC, pipe, outC = [0] of { byte };5

6 active proctype Compress() {7 byte previous , c, count = 0;8 inC ? previous ;9 do

10 :: inC ? c −>

11 if12 :: (c == previous) && (count < N−1) −> count++13 :: else −>

14 if15 :: count > 0 −>

16 pipe ! count+1;17 count = 018 :: else19 fi ;20 pipe ! previous ;21 previous = c;22 fi23 od24 }

Page 183: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Conway’s Problem in Promela (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.10

1 active proctype Output() {2 byte c, count = 0;3 do4 :: pipe ? c;5 outC ! c;6 count++;7 if8 :: count >= K −>

9 outC ! ’ \n’;10 count = 011 :: else12 fi13 od14 }

Page 184: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Multiplier Process in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.11

1 proctype Multiplier (byte Coeff;2 chan North; chan East; chan South; chan West) {3 byte Sum, X;4 for (i ,0, SIZE−1)5 if :: North ? X −> East ? Sum;6 :: East ? Sum −> North ? X;7 fi ;8 South ! X;9 Sum = Sum + X∗Coeff;

10 West ! Sum;11 rof (i )12 }

Page 185: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.12

Algorithm 8.6: Rendezvous

client serverinteger parm, result integer p, rloop forever loop forever

p1: parm ← . . . q1:

p2: server.service(parm, result) q2: accept service(p, r)p3: use(result) q3: r ← do the service(p)

Page 186: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Timing Diagram for a Rendezvous

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.13

time →

calling

accepting ?

6

parameters results

t1 t2 t3

Page 187: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Bounded Buffer in Ada

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.14

1 task body Buffer is2 B: Buffer Array ;3 In Ptr , Out Ptr, Count: Index := 0;4

5 begin6 loop7 select8 when Count < Index’Last =>

9 accept Append(I: in Integer ) do10 B(In Ptr) := I ;11 end Append;12 Count := Count + 1; In Ptr := In Ptr + 1;13 or14 when Count > 0 =>

15 accept Take(I: out Integer ) do16 I := B(Out Ptr);17 end Take;18 Count := Count − 1; Out Ptr := Out Ptr + 1;19 or20 terminate;21 end select;22 end loop;23 end Buffer;

Page 188: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Remote Procedure Call

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.15

Remoteinterface

Remoteinterface

Communications

Sending stub

?

Client program

?

Communications

6

Receiving stub

6

Server program

-

Page 189: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Pipeline Sort

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.16

- - - - - -· · ·

Page 190: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Hoare’s Game

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 8.17

y��@@

��@@

��@@

Page 191: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

A Space

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.1

��

��(’a’,10,20)

��

��(’a’,30)

��

��(’a’,false,40)

��

��(’a’,true,50)

Page 192: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.2

Algorithm 9.1: Critical section problem in Linda

loop foreverp1: non-critical sectionp2: removenote(’s’)p3: critical sectionp4: postnote(’s’)

Page 193: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.3

Algorithm 9.2: Client-server algorithm in Linda

client serverconstant integer me ← . . . integer clientserviceType service serviceType sdataType result, parm dataType r, p

p1: service ← // Service requested q1: removenote(’S’, client, s, p)p2: postnote(’S’, me, service, parm) q2: r ← do (s, p)p3: removenote(’R’, me, result) q3: postnote(’R’, client, r)

Page 194: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.4

Algorithm 9.3: Specific service

client serverconstant integer me ← . . . integer clientserviceType service serviceType sdataType result, parm dataType r, p

p1: service ← // Service requested q1: s ← // Service providedp2: postnote(’S’, me, service, parm) q2: removenote(’S’, client, s=, p)p3: q3: r ← do (s, p)p4: removenote(’R’, me, result) q4: postnote(’R’, client, r)

Page 195: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.5

Algorithm 9.4: Buffering in a space

producer consumerinteger count ← 0 integer count ← 0integer v integer vloop forever loop forever

p1: v ← produce q1: removenote(’B’, count=, v)p2: postnote(’B’, count, v) q2: consume(v)p3: count ← count + 1 q3: count ← count + 1

Page 196: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.6

Algorithm 9.5: Multiplier process with channels in Lindaparameters: integer FirstElementparameters: integer North, East, South, Westinteger Sum, integer SecondElementinteger Sum, integer SecondElement

loop foreverp1: removenote(’E’, North=, SecondElement)p2: removenote(’S’, East=, Sum)p3: Sum ← Sum + FirstElement · SecondElementp4: postnote(’E’, South, SecondElement)p5: postnote(’S’, West, Sum)

Page 197: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.7

Algorithm 9.6: Matrix multiplication in Lindaconstant integer n ← . . .

master workerinteger i, j, result integer r, c, resultinteger r, c integer array[1..n] vec1, vec2

loop foreverp1: for i from 1 to n q1: removenote(’T’, r, c)p2: for j from 1 to n q2: readnote(’A’, r=, vec1)p3: postnote(’T’, i, j) q3: readnote(’B’, c=, vec2)p4: for i from 1 to n q4: result ← vec1 · vec2p5: for j from 1 to n q5: postnote(’R’, r, c, result)p6: removenote(’R’, r, c, re-sult)

q6:

p7: print r, c, result q7:

Page 198: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.8

Algorithm 9.7: Matrix multiplication in Linda with granularityconstant integer n ← . . .constant integer chunk ← . . .

master workerinteger i, j, result integer r, c, k, resultinteger r, c integer array[1..n] vec1, vec2

loop foreverp1: for i from 1 to n q1: removenote(’T’, r, k)p2: for j from 1 to n step by chunk q2: readnote(’A’, r=, vec1)p3: postnote(’T’, i, j) q3: for c from k to k+chunk-1p4: for i from 1 to n q4: readnote(’B’, c=, vec2)p5: for j from 1 to n q5: result ← vec1 · vec2p6: removenote(’R’, r, c, re-sult)

q6: postnote(’R’, r, c, result)

p7: print r, c, result q7:

Page 199: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Definition of Notes in Java

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.9

1 public class Note {2 public String id ;3 public Object[] p;4

5 // Constructor for an array of objects6 public Note (String id , Object[] p) {7 this . id = id;8 if (p != null ) this . p = p.clone();9 }

10

11 // Constructor for a single integer12 public Note (String id , int p1) {13 this (id , new Object[]{new Integer(p1)});14 }15

16 // Accessor for a single integer value17 public int get(int i ) {18 return (( Integer )p[ i ]). intValue ();19 }20 }

Page 200: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Matrix Multiplication in Java

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.10

1 private class Worker extends Thread {2 public void run() {3 Note task = new Note(”task”);4 while (true) {5 Note t = space.removenote(task);6 int row = t.get(0), col = t.get(1);7 Note r = space.readnote(match(”a”, row));8 Note c = space.readnote(match(”b”, col));9 int ip = 0;

10 for (int i = 1; i <= SIZE; i++)11 ip = ip + r.get(i )∗c. get(i );12 space. postnote(new Note(”result”, row, col , ip ));13 }14 }15 }

Page 201: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Matrix Multiplication in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.11

1 chan space = [25] of { byte, short, short, short, short };2

3 active [WORKERS] proctype Worker() {4 short row, col , ip , r1, r2, r3, c1, c2, c3;5 do6 :: space ?? ’ t’ , row, col , , ;7 space ?? <’a’, eval(row), r1, r2, r3>;8 space ?? <’b’, eval(col ), c1, c2, c3>;9 ip = r1∗c1 + r2∗c2 + r3∗c3;

10 space ! ’ r ’ , row, col , ip , 0;11 od;12 }

Page 202: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 9.12

Algorithm 9.8: Matrix multiplication in Linda (exercise)constant integer n ← . . .

master workerinteger i, j, result integer i, r, c, resultinteger r, c integer array[1..n] vec1, vec2

loop foreverp1: postnote(’T’, 0) q1: removenote(’T’ i)p2: q2: if i ¡ (n · n) − 1p3: q3: postnote(’T’, i+1)p4: q4: r ← (i / n) + 1p5: q5: c ← (i modulo n) + 1p6: for i from 1 to n q6: readnote(’A’, r=, vec1)p7: for j from 1 to n q7: readnote(’B’, c=, vec2)p8: removenote(’R’, r, c, re-sult)

q8: result ← vec1 · vec2

p9: print r, c, result q9: postnote(’R’, r, c, result)

Page 203: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Sending and Receiving Messages

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.1

node 5

integer k ← 20send(request, 3, k, 30)

node 3

integer m, nreceive(request, m, n)

-

Page 204: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Sending a Message and Expecting a Reply

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.2

node 5

send(request, 3, myID)

node 3

integer sourcereceive(request, source)

-

Page 205: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.3

Algorithm 10.1: Ricart-Agrawala algorithm (outline)integer myNum ← 0set of node IDs deferred ← empty set

mainp1: non-critical sectionp2: myNum ← chooseNumberp3: for all other nodes Np4: send(request, N, myID, myNum)p5: await reply’s from all other nodesp6: critical sectionp7: for all nodes N in deferredp8: remove N from deferredp9: send(reply, N, myID)

receiveinteger source, reqNum

p10: receive(request, source, reqNum)p11: if reqNum < myNump12: send(reply,source,myID)p13: else add source to deferred

Page 206: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

RA Algorithm (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.4

Aaron 10

Becky 5 Chloe 15

-req

� req

��

��

req@@@@R

req

��

��� req

@@

@@I req

Page 207: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

RA Algorithm (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.5

Aaron 10

Chloe

Becky • 5

Aaron, Chloe

Chloe 15�reply

��

��

reply

@@

@@I reply

Page 208: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Virtual Queue in the RA Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.6

Becky Aaron Chloe� �

Page 209: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

RA Algorithm (3)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.7

Aaron • 10

Chloe

Becky 5 Chloe 15reply-

reply

�����

Page 210: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

RA Algorithm (4)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.8

Aaron 10

Becky 5 Chloe • 15

@@@@R

reply

Page 211: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Equal Ticket Numbers

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.9

Becky 5 Aaron 5

-req

�req

Becky 5

Aaron

Aaron 5

Becky

Note: This figure is not in the book.

Page 212: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Choosing Ticket Numbers (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.10

Becky 5 Aaron 10

-req

�req

Becky • 5

Aaron

Aaron 10�reply

Becky 5 Aaron • 10

-reply

Page 213: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Choosing Ticket Numbers (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.11

Becky 8 Aaron • 10

-req

Becky • 8 Aaron • 10�reply

Page 214: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Quiescent Nodes

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.12

Becky 5 Aaron 0

-req

Becky 5 Aaron 0

Becky

Page 215: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.13

Algorithm 10.2: Ricart-Agrawala algorithminteger myNum ← 0set of node IDs deferred ← empty setinteger highestNum ← 0boolean requestCS ← false

Mainloop forever

p1: non-critical sectionp2: requestCS ← truep3: myNum ← highestNum + 1p4: for all other nodes Np5: send(request, N, myID, myNum)p6: await reply’s from all other nodesp7: critical sectionp8: requestCS ← falsep9: for all nodes N in deferredp10: remove N from deferredp11: send(reply, N, myID)

Page 216: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.14

Algorithm 10.2: Ricart-Agrawala algorithm (continued)

Receiveinteger source, requestedNumloop forever

p1: receive(request, source, requestedNum)p2: highestNum ← max(highestNum, requestedNum)p3: if not requestCS or requestedNum ≪ myNump4: send(reply, source, myID)p5: else add source to deferred

Page 217: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Correct of the RA Algorithm (Case 1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.15

i choose - sendrequest

-j receiverequest

- reply - choose

Page 218: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Correct of the RA Algorithm (Case 2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.16

i main

i receive

choose - sendrequest

- receiverequest

- reply

j main

j receive

choose - sendrequest

- receiverequest

- reply

Page 219: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Channels in RA Algorithm in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.17

node j

· · ·

node i

node id

����

HHHH -ch[id]

Page 220: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

RA Algorithm in Promela – Main Process

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.18

1 proctype Main( byte myID ) {2 do ::3 atomic {4 requestCS[myID] = true ;5 myNum[myID] = highestNum[myID] + 1 ;6 }7 for (J,0, NPROCS−1)8 if9 :: J != myID −>

10 ch[J] ! request , myID, myNum[myID];11 :: else12 fi13 rof (J);14 for (K,0,NPROCS−2)15 ch[myID] ?? reply , , ;16 rof (K);17 critical section ();18 requestCS[myID] = false;19 byte N;20 do21 :: empty(deferred[myID]) −> break;22 :: deferred [myID] ? N −> ch[N] ! reply, 0, 023 od24 od25 }

Page 221: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

RA Algorithm in Promela – Receive Process

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.19

1 proctype Receive( byte myID ) {2 byte reqNum, source;3 do ::4 ch[myID] ?? request, source, reqNum;5 highestNum[myID] =6 (( reqNum > highestNum[myID]) −>

7 reqNum : highestNum[myID]);8 atomic {9 if

10 :: requestCS[myID] &&11 ( (myNum[myID] < reqNum) ||12 ( (myNum[myID] == reqNum) &&13 (myID < source)14 ) ) −>

15 deferred [myID] ! source16 :: else −>

17 ch[source] ! reply , 0, 018 fi19 }20 od21 }

Page 222: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.20

Algorithm 10.3: Ricart-Agrawala token-passing algorithmboolean haveToken ← true in node 0, false in othersinteger array[NODES] requested ← [0,. . . ,0]integer array[NODES] granted ← [0,. . . ,0]integer myNum ← 0boolean inCS ← false

sendTokenif exists N such that requested[N] > granted[N]

for some such Nsend(token, N, granted)haveToken ← false

Page 223: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.21

Algorithm 10.3: Ricart-Agrawala token-passing algorithm (continued)

Mainloop forever

p1: non-critical sectionp2: if not haveTokenp3: myNum ← myNum + 1p4: for all other nodes Np5: send(request, N, myID, myNum)p6: receive(token, granted)p7: haveToken ← truep8: inCS ← truep9: critical sectionp10: granted[myID] ← myNump11: inCS ← falsep12: sendToken

Page 224: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.22

Algorithm 10.3: Ricart-Agrawala token-passing algorithm (continued)

Receiveinteger source, reqNumloop forever

p13: receive(request, source, reqNum)p14: requested[source] ← max(requested[source], reqNum)p15: if haveToken and not inCSp16: sendToken

Page 225: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Data Structures for RA Token-Passing Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.23

requested

granted

Aaron Becky Chloe Danielle Evan

4 2 2 4 1

4 3 0 5 1

Page 226: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Distributed System for Neilsen-Mizuno Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.24

Aaron

?Danielle

�Becky

- Evan

6

Chloe

-�

-�

6

?

6

?�������

����@

@@R@@@I

@@@R@@@I

���

Page 227: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Spanning Tree in Neilsen-Mizuno Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.25

Aaron

Danielle

Becky

Evan

Chloe

-

@@I

@@R

Page 228: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Neilsen-Mizuno Algorithm (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.26

Aaron Becky Chloe Danielle Evan- � �

Aaron Becky Chloe Danielle Evan� � �

Aaron Becky Chloe Danielle Evan� � � �?

Aaron Becky Chloe Danielle Evan- - -?

Page 229: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Neilsen-Mizuno Algorithm (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.27

Aaron Becky Chloe Danielle Evan- - - -?

6

Aaron Becky Chloe Danielle Evan- - - -

6

Aaron Becky Chloe Danielle Evan- - - -

Page 230: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.28

Algorithm 10.4: Neilsen-Mizuno token-passing algorithminteger parent ← (initialized to form a tree)integer deferred ← 0boolean holding ← true in the root, false in others

Mainloop forever

p1: non-critical sectionp2: if not holdingp3: send(request, parent, myID, myID)p4: parent ← 0p5: receive(token)p6: holding ← falsep7: critical sectionp8: if deferred 6= 0p9: send(token, deferred)p10: deferred ← 0p11: else holding ← true

Page 231: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 10.29

Algorithm 10.4: Neilsen-Mizuno token-passing algorithm (continued)

Receiveinteger source, originatorloop forever

p12: receive(request, source, originator)p13: if parent = 0p14: if holdingp15: send(token, originator)p16: holding ← falsep17: else deferred ← originatorp18: else send(request, parent, myID, originator)p19: parent ← source

Page 232: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Distributed System with an Environment Node

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.1

node1

node3

node2

node4

������*

HHHHHHj

HHHHHHj

�������

6

?

Page 233: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Back Edges

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.2

node1

node3

node2

node4

������*

HHHHHHj

HHHHHHj

�������

6

?

��������

HHHHHHHY

HHHHHHHY

�������*?

6

Page 234: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.3

Algorithm 11.1: Dijkstra-Scholten algorithm (preliminary)integer array[incoming] inDeficit ← [0,. . . ,0]integer inDeficit ← 0, integer outDeficit ← 0

send messagep1: send(message, destination, myID)p2: increment outDeficit

receive messagep3: receive(message, source)p4: increment inDeficit[source] and inDeficit

send signalp5: when inDeficit > 1 or

(inDeficit = 1 and isTerminated and outDeficit = 0)p6: E ← some edge E with inDeficit[E] 6= 0p7: send(signal, E, myID)p8: decrement inDeficit[E] and inDeficit

receive signalp9: receive(signal, )p10: decrement outDeficit

Page 235: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.4

Algorithm 11.2: Dijkstra-Scholten algorithm (env., preliminary)integer outDeficit ← 0

computationp1: for all outgoing edges Ep2: send(message, E, myID)p3: increment outDeficitp4: await outDeficit = 0p5: announce system termination

receive signalp6: receive(signal, source)p7: decrement outDeficit

Page 236: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The Preliminary DS Algorithm is Unsafe

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.5

node1

node3

node2

������*

HHHHHHj

6

?

e2

e3

Page 237: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Spanning Tree

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.6

node1

node3

node2

node4

������* HHHHHHj

?

Page 238: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.7

Algorithm 11.3: Dijkstra-Scholten algorithminteger array[incoming] inDeficit ← [0,. . . ,0]integer inDeficit ← 0integer outDeficit ← 0integer parent ← −1

send messagep1: when parent 6= −1 // Only active nodes send messagesp2: send(message, destination, myID)p3: increment outDeficit

receive messagep4: receive(message,source)p5: if parent = −1p6: parent ← sourcep7: increment inDeficit[source] and inDeficit

Page 239: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.8

Algorithm 11.3: Dijkstra-Scholten algorithm (continued)

send signalp8: when inDeficit > 1p9: E ← some edge E for which

(inDeficit[E] > 1) or (inDeficit[E] = 1 and E 6= parent)p10: send(signal, E, myID)p11: decrement inDeficit[E] and inDeficitp12: or when inDeficit = 1 and isTerminated and outDeficit = 0p13: send(signal, parent, myID)p14: inDeficit[parent] ← 0p15: inDeficit ← 0p16: parent ← −1

receive signalp17: receive(signal, )p18: decrement outDeficit

Page 240: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Partial Scenario for DS Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.9

Action node1 node2 node3 node4

1 ⇒ 2 (-1,[ ],0) (-1,[0,0],0) (-1,[0,0,0],0) (-1,[0],0)

2 ⇒ 4 (-1,[ ],1) (1,[1,0],0) (-1,[0,0,0],0) (-1,[0],0)

2 ⇒ 3 (-1,[ ],1) (1,[1,0],1) (-1,[0,0,0],0) (2,[1],0)

2 ⇒ 4 (-1,[ ],1) (1,[1,0],2) (2,[0,1,0],0) (2,[1],0)

1 ⇒ 3 (-1,[ ],1) (1,[1,0],3) (2,[0,1,0],0) (2,[2],0)

3 ⇒ 2 (-1,[ ],2) (1,[1,0],3) (2,[1,1,0],0) (2,[2],0)

4 ⇒ 3 (-1,[ ],2) (1,[1,1],3) (2,[1,1,0],1) (2,[2],0)

(-1,[ ],2) (1,[1,1],3) (2,[1,1,1],1) (2,[2],1)

Page 241: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Data Structures After Partial Scenario

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.10

node1 (2)

node3 (1)

node2 (3)

node4 (1)

1

1

1

1

1

2

HHHHHHj

�������

6������*

?

HHHHHHj

Page 242: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.11

Algorithm 11.4: Credit-recovery algorithm (environment node)float weight ← 1.0

computationp1: for all outgoing edges Ep2: weight ← weight / 2.0p3: send(message, E, weight)p4: await weight = 1.0p5: announce system termination

receive signalp6: receive(signal, w)p7: weight ← weight + w

Page 243: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.12

Algorithm 11.5: Credit-recovery algorithm (non-environment node)constant integer parent ← 0 // Environment nodeboolean active ← falsefloat weight ← 0.0

send messagep1: if active // Only active nodes send messagesp2: weight ← weight / 2.0p3: send(message, destination, myID, weight)

receive messagep4: receive(message, source, w)p5: active ← truep6: weight ← weight + w

send signalp7: when terminatedp8: send(signal, parent, weight)p9: weight ← 0.0p10: active ← false

Page 244: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Messages on a Channel

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.13

node1 node2-m14, m13, m12, m11, m10

Page 245: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Sending a Marker

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.14

node1 node2-m14, m13, m12, marker, m11, m10

Page 246: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.15

Algorithm 11.6: Chandy-Lamport algorithm for global snapshotsinteger array[outgoing] lastSent ← [0, . . . , 0]integer array[incoming] lastReceived ← [0, . . . , 0]integer array[outgoing] stateAtRecord ← [−1, . . . , −1]integer array[incoming] messageAtRecord ← [−1, . . . , −1]integer array[incoming] messageAtMarker ← [−1, . . . , −1]

send messagep1: send(message, destination, myID)p2: lastSent[destination] ← message

receive messagep3: receive(message,source)p4: lastReceived[source] ← message

Page 247: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.16

Algorithm 11.6: Chandy-Lamport algorithm (continued)

receive markerp6: receive(marker, source)p7: messageAtMarker[source] ← lastReceived[source]p8: if stateAtRecord = [−1,. . . ,−1] // Not yet recordedp9: stateAtRecord ← lastSentp10: messageAtRecord ← lastReceivedp11: for all outgoing edges Ep12: send(marker, E, myID)

record statep13: await markers received on all incoming edgesp14: recordState

Page 248: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Messages and Markers for a Scenario

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.17

node1 -M,3,2,1node3

���

��M,3,2,1

node2

@@@@R

M,3,2,1

Page 249: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for CL Algorithm (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.18

Action node1 node2

ls lr st rc mk ls lr st rc mk

[3,3] [3] [3]

1M⇒2 [3,3] [3,3] [3] [3]

1M⇒3 [3,3] [3,3] [3] [3]

2⇐1M [3,3] [3,3] [3] [3]

2M⇒3 [3,3] [3,3] [3] [3] [3] [3] [3]

Page 250: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for CL Algorithm (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 11.19

Action node3

ls lr st rc mk

3⇐2

3⇐2 [0,1]

3⇐2 [0,2]

3⇐2M [0,3]

3⇐1 [0,3] [0,3] [0,3]

3⇐1 [1,3] [0,3] [0,3]

3⇐1 [2,3] [0,3] [0,3]

3⇐1M [3,3] [0,3] [0,3]

[3,3] [0,3] [3,3]

Page 251: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Architecture for a Reliable System

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.1

Pressure

Temperature

������������������������

CPU

CPU

CPU

����3

-

JJJJJJJ

QQQQs

- HHHHj

����*-�� ��Comparator -

Throttle

����

Page 252: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.2

Algorithm 12.1: Consensus - one-round algorithmplanType finalPlanplanType array[generals] plan

p1: plan[myID] ← chooseAttackOrRetreatp2: for all other generals Gp3: send(G, myID, plan[myID])p4: for all other generals Gp5: receive(G, plan[G])p6: finalPlan ← majority(plan)

Page 253: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Messages Sent in a One-Round Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.3

Zoe A Leo R

Basil A

-���

���

��

��

@@@@R @@

@@

@I

R

A

– A A R

Page 254: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Data Structures in a One-Round Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.4

Leo

general plan

Basil A

Leo R

Zoe A

majority A

Zoe

general plans

Basil –

Leo R

Zoe A

majority R

Page 255: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.5

Algorithm 12.2: Consensus - Byzantine Generals algorithmplanType finalPlanplanType array[generals] plan, majorityPlanplanType array[generals, generals] reportedPlan

p1: plan[myID] ← chooseAttackOrRetreatp2: for all other generals G // First roundp3: send(G, myID, plan[myID])p4: for all other generals Gp5: receive(G, plan[G])p6: for all other generals G // Second roundp7: for all other generals G’ except Gp8: send(G’, myID, G, plan[G])p9: for all other generals Gp10: for all other generals G’ except Gp11: receive(G, G’, reportedPlan[G, G’])p12: for all other generals G // First votep13: majorityPlan[G] ← majority(plan[G] ∪ reportedPlan[*, G])p14: majorityPlan[myID] ← plan[myID] // Second votep15: finalPlan ← majority(majorityPlan)

Page 256: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Crash Failure - First Scenario (Leo)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.6

Leo

general plan reported by majority

Basil Zoe

Basil A – A

Leo R R

Zoe A – A

majority A

Page 257: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Crash Failure - First Scenario (Zoe)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.7

Zoe

general plan reported by majority

Basil Leo

Basil – A A

Leo R – R

Zoe A A

majority A

Page 258: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Crash Failure - Second Scenario (Leo)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.8

Leo

general plan reported by majority

Basil Zoe

Basil A A A

Leo R R

Zoe A A A

majority A

Page 259: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Crash Failure - Second Scenario (Zoe)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.9

Zoe

general plan reported by majority

Basil Leo

Basil A A A

Leo R – R

Zoe A A

majority A

Page 260: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Knowledge Tree about Basil - First Scenario

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.10

Leo A Zoe A

Zoe A Leo A

Basil A

����HHHH

Page 261: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Knowledge Tree about Basil - Second Scenario

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.11

Zoe X

Leo X

Basil X

HHHH

Page 262: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Knowledge Tree about Leo

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.12

Basil X

Zoe X Basil X

Leo X

����HHHH

Page 263: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Byzantine Failure with Three Generals

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.13

Zoe A Leo R

Basil

-���

���

��

��

@@@@R @@

@@

@I

R

A

R A A R

Page 264: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Data Stuctures for Leo and Zoe After First Round

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.14

Leo

general plans

Basil A

Leo R

Zoe A

majority A

Zoe

general plans

Basil R

Leo R

Zoe A

majority R

Page 265: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Data Stuctures for Leo After Second Round

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.15

Leo

general plans reported by majority

Basil Zoe

Basil A A A

Leo R R

Zoe A R R

majority R

Page 266: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Data Stuctures for Zoe After Second Round

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.16

Zoe

general plans reported by majority

Basil Leo

Basil A A A

Leo R R R

Zoe A A

majority A

Page 267: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Knowledge Tree About Zoe

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.17

Basil A

Basil A

Zoe A

����HHHH

Leo R

Leo A

Page 268: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Four Generals: Data Structure of Basil (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.18

Basil

general plan reported by majority

John Leo Zoe

Basil A A

John A A ? A

Leo R R ? R

Zoe ? ? ? ?

majority ?

Page 269: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Four Generals: Data Structure of Basil (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.19

Basil

general plans reported by majority

John Leo Zoe

Basil A A

John A A ? A

Leo R R ? R

Zoe R A R R

R

Page 270: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Knowledge Tree About Loyal General Leo

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.20

Leo X

Basil X John X Zoe X

John X Zoe X Basil X Zoe X Basil Y John Z

��

��

��

AA

AA

AA

��������

HHHHHHHH

Page 271: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Knowledge Tree About Traitor Zoe

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.21

Zoe

Basil X John Y Leo Z

John X Leo X Basil Y Leo Y Basil Z John Z

��

��

��

AA

AA

AA

��������

HHHHHHHH

Page 272: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Complexity of the Byzantine Generals Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.22

traitors generals messages

1 4 36

2 7 392

3 10 1790

4 13 5408

Page 273: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.23

Algorithm 12.3: Consensus - flooding algorithmplanType finalPlanset of planType plan ← { chooseAttackOrRetreat }set of planType receivedPlan

p1: do t+ 1 timesp2: for all other generals Gp3: send(G, plan)p4: for all other generals Gp5: receive(G, receivedPlan)p6: plan ← plan ∪ receivedPlanp7: finalPlan ← majority(plan)

Page 274: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Flooding Algorithm with No Crash:

Knowledge Tree About Leo

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.24

Leo X

? ?

Zoe X

Zoe X

Zoe X �

John X

Basil X

Basil X

John X

Zoe X Zoe X

Zoe X

���

@@@R

??

Zoe X Zoe X

Zoe X

���

@@@R

??

Page 275: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Flooding Algorithm with Crash:

Knowledge Tree About Leo (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.25

Leo X

?

John X

Basil X

Zoe X Zoe X

Zoe X

���

@@@R

??

Page 276: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Flooding Algorithm with Crash:

Knowledge Tree About Leo (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.26

Leo X

?

John X

Basil X

Zoe X

@@@R

?

Page 277: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.27

Algorithm 12.4: Consensus - King algorithmplanType finalPlan, myMajority, kingPlanplanType array[generals] planinteger votesMajority

p1: plan[myID] ← chooseAttackOrRetreat

p2: do two timesp3: for all other generals G // First and third roundsp4: send(G, myID, plan[myID])p5: for all other generals Gp6: receive(G, plan[G])p7: myMajority ← majority(plan)p8: votesMajority ← number of votes for myMajority

Page 278: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.28

Algorithm 12.4: Consensus - King algorithm (continued)

p9: if my turn to be king // Second and fourth roundsp10: for all other generals Gp11: send(G, myID, myMajority)p12: plan[myID] ← myMajority

elsep13: receive(kingID, kingPlan)p14: if votesMajority ¿ 3p15: plan[myID] ← myMajority

elsep16: plan[myID] ← kingPlan

p17: finalPlan ← plan[myID] // Final decision

Page 279: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for King Algorithm:

First King Loyal General Zoe (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.29

Basil

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A R R R R 3

John

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A R A R A 3

Leo

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A R A R A 3

Zoe

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A R R R R 3

Page 280: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for King Algorithm:

First King Loyal General Zoe (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.30

Basil

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R

John

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R

Leo

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R

Zoe

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R

Page 281: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for King Algorithm:

First King Loyal General Zoe (3)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.31

Basil

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R R ? R R 4–5

John

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R R ? R R 4–5

Leo

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R R ? R R 4–5

Zoe

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R R ? R R 4–5

Page 282: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for King Algorithm:

First King Traitor Mike (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.32

Basil

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R

John

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A

Leo

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A

Zoe

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R R

Page 283: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for King Algorithm:

First King Traitor Mike (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.33

Basil

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R A A ? R ? 3

John

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R A A ? R ? 3

Leo

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R A A ? R ? 3

Zoe

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

R A A ? R ? 3

Page 284: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Scenario for King Algorithm:

First King Traitor Mike (3)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.34

Basil

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A

John

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A

Leo

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A A

Zoe

Basil John Leo Mike Zoe myMajority votesMajority kingPlan

A

Page 285: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Complexity of

Byzantine Generals and King Algorithms

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.35

traitors generals messages

1 4 36

2 7 392

3 10 1790

4 13 5408

traitors generals messages

1 5 48

2 9 240

3 13 672

4 17 1440

Page 286: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Impossibility with Three Generals (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.36

Zoe X

JohnLeox1, . . . , xn

Leou1, . . . , um

���

@@@

Leo Y

JohnZoey1, . . . , yn

Zoev1, . . . , vm

���

@@@

Page 287: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Impossibility with Three Generals (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.37

John

Zoex1, . . . , xn

Zoey1, . . . , yn

Leox1, . . . , xn

Leoy1, . . . , yn

���

@@@

Page 288: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Exercise for Byzantine Generals Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 12.38

Zoe

general plan reported by majority

Basil John Leo

Basil R A R ?

John A R A ?

Leo R R R ?

Zoe A A

?

Page 289: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Release Time, Execution Time and

Relative Deadline

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.1

r

D� -

e� -

Page 290: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Periodic Task

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.2

r r r r

p� - p� - p� -

Page 291: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Deadline is a Multiple of the Period

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.3

D� -

r e� -

Page 292: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Architecture of Ariane Control System

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.4

Sensors INSMain

Computer Actuators- - -

Page 293: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Synchronization Window in the Space Shuttle

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.5

0 225 240 1000

Page 294: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Synchronous System

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.6

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Sample

Compute

Control

Telemetry

Self-test

T1 T2 T1 T2

Page 295: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Synchronous System Scheduling Table

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.7

0 1 2 3 4

Sample Compute Control Telemetry 1 Self-test

5 6 7 8 9

Sample Compute Control Telemetry 2 Telemetry 1

10 11 12 13 14

Sample Compute Control Telemetry 2 Self-test

Page 296: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.8

Algorithm 13.1: Synchronous schedulertaskAddressType array[0..numberFrames-1] tasks ←

[task address,. . . ,task address]integer currentFrame ← 0

p1: loopp2: await beginning of framep3: invoke tasks[currentFrame]p4: increment currentFrame modulo numberFrames

Page 297: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.9

Algorithm 13.2: Producer-consumer (synchronous system)queue of dataType buffer1, buffer2

sample compute controldataType d dataType d1, d2 dataType d

p1: d ← sample q1: d1← take(buffer1) r1: d ← take(buffer2)p2: append(d, buffer1) q2: d2← compute(d1) r2: control(d)p3: q3: append(d2,

buffer2)r3:

Page 298: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Asynchronous System

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.10

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Telemetry

Communications

Data management

Page 299: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.11

Algorithm 13.3: Asynchronous schedulerqueue of taskAddressType readyQueue ← . . .taskAddressType currentTask

loop foreverp1: await readyQueue not emptyp2: currentTask ← take head of readyQueuep3: invoke currentTask

Page 300: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.12

Algorithm 13.4: Preemptive schedulerqueue of taskAddressType readyQueue ← . . .taskAddressType currentTask

loop foreverp1: await a scheduling eventp2: if currentTask.priority ¡ highest priority of a task on readyQueuep3: save partial computation of currentTask and place on readyQueuep4: currentTask ← take task of highest priority from readyQueuep5: invoke currentTaskp6: else if currentTask’s timeslice is past and

currentTask.priority = priority of some task on readyQueuep7: save partial computation of currentTask and place on readyQueuep8: currentTask ← take a task of the same priority from readyQueuep9: invoke currentTaskp10: else resume currentTask

Page 301: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Preemptive Scheduling

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.13

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Telemetry

Communications

Data management

Watchdog

Page 302: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.14

Algorithm 13.5: Watchdog supervision of response timeboolean ran ← false

data management watchdogloop forever loop forever

p1: do data management q1: await ninth framep2: ran ← true q2: if ran is falsep3: rejoin readyQueue q3: notify response-time over-

flowp4: q4: ran ← falsep5: q5: rejoin readyQueue

Page 303: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.15

Algorithm 13.6: Real-time buffering - throw away new dataqueue of dataType buffer ← empty queuesample compute

dataType d dataType dloop forever loop forever

p1: d ← sample q1: await buffer not emptyp2: if buffer is full do nothing q2: d ← take(buffer)p3: else append(d,buffer) q3: compute(d)

Page 304: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.16

Algorithm 13.7: Real-time buffering - overwrite old dataqueue of dataType buffer ← empty queuesample compute

dataType d dataType dloop forever loop forever

p1: d ← sample q1: await buffer not emptyp2: append(d, buffer) q2: d ← take(buffer)p3: q3: compute(d)

Page 305: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Interrupt Overflow on Apollo 11

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.17

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Main task

Counter increments

Watchdog

Page 306: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Priority Inversion (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.18

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Telemetry

� CS -

Data management

� CS -

Page 307: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Priority Inversion (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.19

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Telemetry

� CS -

Communications

Data management

� CS -

Page 308: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Priority Inheritance

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.20

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Telemetry

� CS -

Telemetry

Communications

Data management

� CS -

Page 309: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Priority Inversion in Promela (1)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.21

1 mtype = { idle, blocked, nonCS, CS, long };2

3 mtype data = idle, comm = idle, telem = idle;4

5 #define ready(p) (p != idle && p != blocked)6

7 active proctype Data() {8 do9 :: data = nonCS;

10 enterCS(data);11 exitCS(data);12 data = idle ;13 od14 }

Page 310: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Priority Inversion in Promela (2)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.22

1 active proctype Comm() provided (!ready(data)) {2 do3 :: comm = long;4 comm = idle;5 od6 }7

8 active proctype Telem() provided (!ready(data) && !ready(comm)) {9 do

10 :: telem = nonCS;11 enterCS(telem);12 exitCS(telem);13 telem = idle ;14 od15 }

Page 311: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Priority Inversion in Promela (3)

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.23

1 bit sem = 1;2

3 inline enterCS(state ) {4 atomic {5 if6 :: sem == 0 −>

7 state = blocked;8 sem != 0;9 :: else −>

10 fi ;11 sem = 0;12 state = CS;13 }14 }15

16 inline exitCS(state ) {17 atomic {18 sem = 1;19 state = idle20 }21 }

Page 312: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Priority Inheritance in Promela

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.24

1 #define inherit (p) (p == CS)2

3 active proctype Data() {4 do5 :: data = nonCS;6 assert( ! (telem == CS && comm == long) );7 enterCS(data); exitCS(data);8 data = idle ;9 od

10 }11

12 active proctype Comm()13 provided (! ready(data) && !inherit (telem))14 { ... }15

16 active proctype Telem()17 provided (! ready(data) && !ready(comm) || inherit(telem))18 { ... }

Page 313: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Data Structures in Simpson’s Algorithm

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.25

0 1

0 1 0 1

@@

@@

@@I

�������

0 1

currentSlot

lastWrittenPair ��

lastReadPair@@@R

Page 314: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.26

Algorithm 13.8: Simpson’s four-slot algorithmdataType array[0..1,0..1] data ← default initial valuesbit array[0..1] currentSlot ← { 0, 0 }bit lastWrittenPair ← 1, lastReadPair ← 1

writerbit writePair, writeSlotdataType itemloop forever

p1: item ← producep2: writePair ← 1− lastReadPairp3: writeSlot ← 1− currentSlot[writePair]p4: data[writePair, writeSlot] ← itemp5: currentSlot[writePair] ← writeSlotp6: lastWrittenPair ← writePair

Page 315: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.27

Algorithm 13.8: Simpson’s four-slot algorithm (continued)

readerbit readPair, readSlotdataType itemloop forever

p7: readPair ← lastWrittenPairp8: lastReadPair ← readPairp9: readSlot ← currentSlot[readPair]p10: item ← data[readPair, readSlot]p11: consume(item)

Page 316: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.28

Algorithm 13.9: Event signalingbinary semaphore s ← 0

p qp1: if decision is to wait for event q1: do something to cause eventp2: wait(s) q2: signal(s)

Page 317: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Suspension Objects in Ada

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.29

1 package Ada.Synchronous Task Control is2 type Suspension Object is limited private ;3 procedure Set True(S : in out Suspension Object);4 procedure Set False(S : in out Suspension Object);5 function Current State (S : Suspension Object)6 return Boolean;7 procedure Suspend Until True(8 S : in out Suspension Object);9 private

10 −− not specified by the language11 end Ada.Synchronous Task Control;

Page 318: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.30

Algorithm 13.10: Suspension object - event signalingSuspension Object SO ← (false by default)

p qp1: if decision is to wait for event q1: do something to cause eventp2: Suspend Until True(SO) q2: Set True(SO)

Page 319: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Transition in UPPAAL

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.31

-���� ����clk >= 12, ch ?, n := n + 1

Page 320: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Feasible Priority Assignment

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.32

0 1 2 3 4 5

P1

P2

Page 321: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Infeasible Priority Assignment

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.33

0 1 2 3 4 5

P2

P1

Page 322: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 13.34

Algorithm 13.11: Periodic taskconstant integer period ← . . .

integer next ← currentTimeloop forever

p1: delay next − currentTimep2: computep3: next ← next + period

Page 323: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Semantics of Propositional Operators

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.1

A v(A1) v(A2) v(A)

¬A1 T F¬A1 F T

A1 ∨A2 F F FA1 ∨A2 otherwise T

A1 ∧A2 T T TA1 ∧A2 otherwise F

A1→ A2 T F FA1→ A2 otherwise T

A1↔ A2 v(A1) = v(A2) TA1↔ A2 v(A1) 6= v(A2) F

Page 324: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Wason Selection Task

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.2

p3 p5 flag = 1 flag = 0

Page 325: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.3

Algorithm 2.1: Verification exampleinteger x1, integer x2integer y1 ← 0, integer y2 ← 0, integer y3

p1: read(x1,x2)p2: y3 ← x1p3: while y3 6= 0p4: if y2+1 = x2p5: y1 ← y1 + 1p6: y2 ← 0p7: elsep8: y2 ← y2 + 1p9: y3 ← y3 − 1p10: write(y1,y2)

Page 326: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Spark Program for Integer Division

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.4

1 −−# main program;2 procedure Divide(X1,X2: in Integer ; Q,R : out Integer )3 −−# derives Q, R from X1,X2;4 −−# pre (X1 >= 0) and (X2 > 0);5 −−# post (X1 = Q ∗ X2 + R) and (X2 > R) and (R >= 0);6 is7 N: Integer ;8 begin9 Q := 0; R := 0; N := X1;

10 while N /= 011 −−# assert (X1 = Q∗X2+R+N) and (X2 > R) and (R >= 0);12 loop13 if R+1 = X2 then14 Q := Q + 1; R := 0;15 else16 R := R + 1;17 end if ;18 N := N − 1;19 end loop;20 end Divide;

Page 327: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Integer Division

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.5

1 procedure Divide(X1,X2: in Integer ; Q,R : out Integer ) is2 N: Integer ;3 begin4 −− pre (X1 >= 0) and (X2 > 0);5 Q := 0; R := 0; N := X1;6 while N /= 07 −− assert (X1 = Q∗X2+R+N) and (X2 > R) and (R >= 0);8 loop9 if R+1 = X2 then Q := Q + 1; R := 0;

10 else R := R + 1;11 end if ;12 N := N − 1;13 end loop;14 −− post (X1 = Q ∗ X2 + R) and (X2 > R) and (R >= 0);15 end Divide;

Page 328: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Verification Conditions for Integer Division

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 2.6

Precondition to assertion:

(X1 ≥ 0) ∧ (X2 > 0)→(X1 = Q ·X2 +R+N) ∧ (X2 > R) ∧ (R ≥ 0).

Assertion to postcondition:

(X1 = Q ·X2 +R+N) ∧ (X2 > R) ∧ (R ≥ 0) ∧ (N = 0)→(X1 = Q ·X2 +R) ∧ (X2 > R) ∧ (R ≥ 0).

Assertion to assertion by then branch:

(X1 = Q ·X2 +R+N) ∧ (X2 > R) ∧ (R ≥ 0) ∧ (R+ 1 = X2)→(X1 = Q′ ·X2 +R′ +N ′) ∧ (X2 > R′) ∧ (R′ ≥ 0).

Assertion to assertion by else branch:

(X1 = Q ·X2 +R+N) ∧ (X2 > R) ∧ (R ≥ 0) ∧ (R+ 1 6= X2)→(X1 = Q′ ·X2 +R′ +N ′) ∧ (X2 > R′) ∧ (R′ ≥ 0).

Page 329: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The Sleeping Barber

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.1

n producer consumer Buffer notEmpty

1 append(d, Buffer) wait(notEmpty) [ ] 0

2 signal(notEmpty) wait(notEmpty) [1] 0

3 append(d, Buffer) wait(notEmpty) [1] 1

4 append(d, Buffer) d ← take(Buffer) [1] 0

5 append(d, Buffer) wait(notEmpty) [ ] 0

Page 330: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Synchronizing Precedence

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.2

node1

node3

node2

node4

������*

HHHHHHj

HHHHHHj

�������?

Page 331: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.3

Algorithm 3.1: Barrier synchronizationglobal variables for synchronization

loop foreverp1: wait to be releasedp2: computationp3: wait for all processes to finish their computation

Page 332: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The Stable Marriage Problem

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.4

Man List of women

1 2 4 1 3

2 3 1 4 2

3 2 3 1 4

4 4 1 3 2

Woman List of men

1 2 1 4 3

2 4 3 1 2

3 1 4 3 2

4 2 1 4 3

Page 333: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.5

Algorithm 3.2: Gale-Shapley algorithm for stable marriageinteger list freeMen ← {1,. . . ,n}integer list freeWomen ← {1,. . . ,n}integer pair-list matched ← ∅integer array[1..n, 1..n] menPrefs ← . . .integer array[1..n, 1..n] womenPrefs ← . . .integer array[1..n] next ← 1

p1: while freeMen 6= ∅, choose some m from freeMenp2: w ← menPrefs[m, next[m]]p3: next[m] ← next[m] + 1p4: if w in freeWomenp5: add (m,w) to matched, and remove w from freeWomenp6: else if w prefers m to m’ // where (m’,w) in matchedp7: replace (m’,w) in matched by (m,w), and remove m’ from freeMenp8: else // w rejects m, and nothing is changed

Page 334: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The n-Queens Problem

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 3.6

1 2 3 4 5 6 7 8

8

7

6

5

4

3

2

1 Q

Q

Q

Q

Q

Q

Q

Q

Page 335: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The Architecture of BACI

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.1

Editor

Csource

Pascalsource

Ccompiler

Pascalcompiler

P-code Interpreter���

@@R -

-

���

@@R -

Page 336: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

The Architecture of Spin

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.2

Editor

LTLformula

Promelasource

LTLtranslator

Parser/Generator

VerifierC source

CCompiler

VerifierExecutable

Computer

Trail

����

@@@R

6

6

-

?

?

-

6

6

Page 337: Principles of Concurrent and Distributed Programming · Principles of Concurrent and Distributed Programming (Second Edition) Addison-Wesley, 2006 Mordechai (Moti) Ben-Ari

Cycles in a State Diagram

Principles of Concurrent and Distributed Programming. Slides c© 2006 by M. Ben-Ari. Slide – 4.3

· · ·criticalp = 0criticalq = 0

'&

$%

· · ·criticalp = 0criticalq = 1

'&

$%

· · ·criticalp = 0criticalq = 0

'&

$%

· · ·criticalp = 0criticalq = 0

'&

$%

· · ·criticalp = 0criticalq = 1

'&

$%

· · ·criticalp = 0criticalq = 0

'&

$%

- -

?

��

?