Download The mutual exclusion problem

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Course Syllabus
1. Introduction
- History; Views; Concepts; Structure
2. Process Management - Processes; State + Resources;
Threads; Unix implementation of Processes
3. Process Scheduling – Paradigms; Unix; Modeling
4. Process Synchronization - Synchronization primitives and
their equivalence; Deadlocks
5. Memory Management - Virtual memory; Page replacement
algorithms; Segmentation
6. File Systems - Implementation; Directory and space
management; Unix file system; Distributed file systems
(NFS)
7. Security – General policies and mechanisms; protection
models; authentication
8. Distributed issues – Synchronization; Mutual exclusion
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
1
Mutual exclusion: motivation
Race Conditions:
Example: Spooler directory with slots; index variables; two
processes attempt concurrent access. In points to the next
empty slot, Out points to entry holding name of file to
print next.
4
...
5
abc.doc f.ps
Out = 4
6
7
Process A
...
paper.ps
In=7
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Process B
2
Code using reads/writes only
Add-file-to-print-spool (char *name)
1.
Local-in := In
2.
StoreName(Spool-dir[local-in], name)
3.
In := (local-in+1) mod DIR-LEN
A scenario proving the above code wrong
•
Process A performs line 1
•
Process A is preempted by Process B
•
Process B performs Add-file-to-print-spool to completion
•
Process A is re-scheduled, completes lines 2-3.
Process B's file is never printed.
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
3
The mutual exclusion problem (Dijkstra, 1965)
How can we avoid such race conditions?
We need to devise a protocol that guarantees
mutually exclusive access by processes to a
shared resource (such as a file, printer, etc.) or,
more generally, a critical section of code
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
4
The problem model
 Multiple processes
 Processes can apply read, write, or stronger operations to
shared memory
 Completely asynchronous
 We assume processes do not fail-stop
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
5
Mutual exclusion: formal definition
loop forever
Remainder code
Entry code
Critical section (CS)
Exit code
end loop
Remainder code
Entry code
CS
Exit code
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
6
Mutex Requirements
 Mutual exclusion: No two processes are at the critical section (CS)
at the same time
 Deadlock-freedom: If processes are trying to enter their critical
section, then some process eventually enters the critical section
 Starvation-freedom: If a process is trying to enter its critical
section, then this process must eventually enter its critical section
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
7
Mutual exclusion using critical regions
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
8
Brute force solution: disabling interrupts
Disable interrupts
Do your stuff
Enable interrupts
Problems
 User processes are not allowed to disable interrupts
 Disabling interrupts must be done for a very short period of time
 Does not solve the problem in a multi-processor system
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
9
2-process Mutual Exclusion with a lock variable
initially: lock=0
Program for both processes
1.
2.
3.
4.
await lock=0
lock:=1
CS
lock:=0
No
Does it satisfy deadlock-freedom? Yes
Does it satisfy starvation-freedom? No
Does the algorithm satisfy mutex?
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
10
Mutual Exclusion: strict alternation
initially: turn=0
Program for process 0
Program for process 1
1.
2.
3.
1.
2.
3.
await turn=0
CS
turn:=1
await turn=1
CS
turn:=0
Yes
Does it satisfy deadlock-freedom? No
Does it satisfy starvation-freedom? No
Does the algorithm satisfy mutex?
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
11
Mutual Exclusion: flag array
bool flags[2] initially {false, false}
Program for process 0
Program for process 1
1.
2.
3.
4.
1.
2.
3.
4.
flags[0]:=true
await flags[1]=false
CS
flags[0]:=false
flags[1]:=true
await flags[0]=false
CS
flags[1]:=false
Yes
Does it satisfy deadlock-freedom? No
Does it satisfy starvation-freedom? No
Does the algorithm satisfy mutex?
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
12
Peterson’s 2-process algorithm (Peterson, 1981)
initially: b[0]:=false, b[1]:=false, value of turn immaterial
Program for process 0
Program for process 1
1.
2.
3.
4.
5.
1.
2.
3.
4.
5.
b[0]:=true
turn:=0
await (b[1]=false or turn=1)
CS
b[0]:=false
b[1]:=true
turn:=1
await (b[0]=false or turn=0)
CS
b[1]:=false
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
13
Schema for Peterson’s 2-process algorithm
Indicate participation
b[i]:=true
Barrier
turn:=i
Is there contention?
b[1-i]=true?
no
Critical Section
no, maybe
yes
First to cross barrier?
turn=1-i?
yes
Exit code
b[i]:=false
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
14
Peterson’s 2-process algorithm
satisfies both mutual-exclusion
and starvation-freedom
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
15
Observations
 Shared register: turn (2-valued)
read & write by both processes
 Two boolean registers: b[0], b[1]
process 0 can write b[0], process 1 can write b[1]
both can read b[0] & b[1]
Can the algorithm be modified to use only
single-writer registers ?
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
16
Kessels’ 2-process algorithm (1982)
encode
turn=0: as turn[0] = turn[1]
turn=1: as turn[0] ≠ turn[1]
initially: b[0]:=false, b[1]:=false, value of turn[i] immaterial
Program for process 0
Program for process 1
1.
2.
3.
4.
1.
2.
3.
4.
5.
6.
b[0]:=true
local[0]:=turn[1]
turn[0]:=local[0]
await (b[1]=false or
local[0] ≠ turn[1])
CS
b[0]:=false
5.
6.
b[1]:=true
local[1]:=1 – turn[0]
turn[1]:=local[1]
await (b[0]=false or
local[1] = turn[0])
CS
b[1]:=false
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
17
Mutual exclusion for n processes:
A tournament tree
Level 2
0
Level 1
0
Level 0
1
0
Processes
0
1
1
2
2
3
4
3
5
6
7
A tree-node is identified by: [level, node#]
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
18
N-process mutual exclusion: a tournament tree
Variables
Per node: b[level, 2node], b[level, 2node+1], turn[level,node]
Per process (local): level, node, id.
Program for process i
1.
node:=i
2.
For level = 0 to log n-1 do
3.
id:=node mod 2
4.
node:= node/2
5.
b[level,2node+id]:=true
6.
turn[level,node]:=id
7.
await (b[level,2node+1-id]=false or turn[level,node]=1-id)
8.
od
9.
CS
10.
for level=log n –1 downto 0 do
11.
node:=  i/2level
12.
b[level,node]:=false
Operating
Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
13.
od
19
Fairness: First in First Out (FIFO)
 Mutual Exclusion
 Deadlock-freedom
remainder
doorway
waiting
 Starvation-freedom
• FIFO: if process p is waiting
and process q has not yet
started the doorway, then q
will not enter the CS before p
entry code
critical
section
exit code
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
20
Lamport’s Bakery Algorithm
entry
remainder
1
2
3
4
5
n
0
0
0
0
0
0
doorway
1
2
3
2
4
waiting
1
2
3
2
4
CS
1
2
2
exit
1
2
2
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
time
21
Implementation 1
code of process i ,
i  {1 ,..., n}
number[i] := 1 + max {number[j] | (1  j  n)}
for j := 1 to n (<> i) {
await (number[j] = 0)  (number[j] > number[i])
}
critical section
number[i] := 0
number
1
2
3
4
0
0
0
0
n
0
0
integer
Does this implementation work?
Answer: No, it can deadlock!
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
22
Implementation 1: deadlock
entry
remainder
1
2
3
4
5
n
0
0
0
0
0
0
doorway
1
2
2
waiting
1
2
2
CS
1
deadlock
exit
1
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
time
23
Implementation 2
code of process i ,
i  {1 ,..., n}
number[i] := 1 + max {number[j] | (1  j  n)}
for j := 1 to n (<> i) {
await (number[j] = 0)  (number[j],j) < number[i],i)
// lexicographical order
}
critical section
number[i] := 0
number
1
2
3
4
0
0
0
0
n
0
0
integer
Does this implementation work?
Answer: It does not satisfy mutual exclusion!
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
24
Implementation 2: no mutual exclusion
entry
remainder
1
2
3
4
5
n
0
0
0
0
0
0
doorway
0
1
0
2
0
2
waiting
1
2
2
CS
1
2
2
exit
1
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
Synchronization Algorithms and Concurrent Programming , Gadi Taubenfeld © 2006
time
25
The Bakery Algorithm
code of process i, i  {1 ,..., n}
1: choosing[i] := true
2: number[i] := 1 + max {number[j] | (1  j  n)}
3: choosing[i] := false
4: for j := 1 to n do
5:
await choosing[j] = false
6:
await (number[j] = 0)  (number[j],j)  (number[i],i)
7: od
8: critical section
9: number[i] := 0
choosing
number
1
2
3
4
n
false
false
false
false
false
false
0
0
0
0
0
0
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
bits
integer
26
Lamport’s bakery algorithm
satisfies mutual-exclusion,
starvation-freedom, and FIFO
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
27
The test-and-set instruction
initially: v:=0
Test-and-set(w)
do atomically
prev:=w
w:=1
return prev
Program for process i
1.
2.
3.
await test&set(v) = 0
Critical Section
v:=0
Mutual exclusion? Yes
Deadlock-freedom? Yes
Starvation-freedom? No
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
28
Starvation-free mutex using test-and-set
boolean lock initially 0, interested[n] initially false
program for process i
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
interested[i]:=true
await ( (test-and-set(lock) = 0) || (interested[i]=false) )
CS
interested[i]:=false
j:=(i+1) % n
while (j != i && !interested[j]) j:=++j % n
if (j=i)
lock:=0
else
interested[j]:=false
Operating Systems, 2013, Meni Adler, Michael Elhadad & Amnon Meisels
29
Related documents