Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming...
-
Upload
stephany-garrett -
Category
Documents
-
view
217 -
download
0
Transcript of Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming...
![Page 1: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/1.jpg)
Distributed 2PC & Deadlock
David E. Culler
CS162 – Operating Systems and Systems Programming
Lecture 36
Nov 21, 2014
Reading: OSC Ch 7 (deadlock)
![Page 2: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/2.jpg)
cs162 fa14 L35 2
Consistency Review
• Problem: shared state replicated across multiple clients, do they see a consistent view?– Propagation: Writes become visible to reads– Serializability: The order of writes seen by each client’s
series of reads and writes is consistent with a total order
• As if all writes and reads had been serviced at a single point• The total order is not actually generated, but it could be
• Many distributed systems provide weaker semantics– Eventual consistency
11/21/14
![Page 3: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/3.jpg)
cs162 fa14 L35 3
In Everyday Life
• Alternative: timestamp every write, present entire log in timestamp order, with tie breaker11/21/14
Where do we meet?
Where do we meet? Where do we meet? Where do we meet?
At Nefeli’s At Top Dog
Where do we meet? Where do we meet? Where do we meet?At Nefeli’sAt Top Dog
At Nefeli’sAt Top Dog
At Nefeli’sAt Top Dog
Where do we meet? Where do we meet? Where do we meet?At Nefeli’s
At Nefeli’sAt Top Dog At Nefeli’s
At Top Dog
![Page 4: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/4.jpg)
Unfinished Business: Multiple Servers
• What happens if cannot update all the replicas?• Availability => Inconsistency
11/12/14 UCB CS162 Fa14 L32 4
Client
Storage Server
Storage Server
?Finish Previous Lecture
![Page 5: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/5.jpg)
Durability and Atomicity
• How do you make sure transaction results persist in the face of failures (e.g., server node failures)?
• Replicate store / database– Commit transaction to each replica
• What happens if you have failures during a transaction commit?– Need to ensure atomicity: either transaction is
committed on all replicas or none at all
![Page 6: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/6.jpg)
Two Phase (2PC) Commit
• 2PC is a distributed protocol
• High-level problem statement– If no node fails and all nodes are ready to
commit, then all nodes COMMIT– Otherwise ABORT at all nodes
• Developed by Turing award winner Jim Gray (first Berkeley CS PhD, 1969)
![Page 7: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/7.jpg)
2PC Algorithm
• One coordinator • N workers (replicas)
• High level algorithm description– Coordinator asks all workers if they can commit– If all workers reply “VOTE-COMMIT”, then
coordinator broadcasts “GLOBAL-COMMIT”,
Otherwise coordinator broadcasts “GLOBAL-ABORT”
– Workers obey the GLOBAL messages
![Page 8: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/8.jpg)
Detailed Algorithm
Coordinator sends VOTE-REQ to all workers
– Wait for VOTE-REQ from coordinator– If ready, send VOTE-COMMIT to
coordinator– If not ready, send VOTE-ABORT to
coordinator– And immediately abort
– If receive VOTE-COMMIT from all N workers, send GLOBAL-COMMIT to all workers
– If doesn’t receive VOTE-COMMIT from all N workers, send GLOBAL-ABORT to all workers
– If receive GLOBAL-COMMIT then commit
– If receive GLOBAL-ABORT then abort
Coordinator Algorithm Worker Algorithm
![Page 9: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/9.jpg)
Failure Free Example Execution
coordinator
worker 1
time
VOTE-REQ
VOTE-COMMIT
GLOBAL-COMMIT
worker 2
worker 3
![Page 10: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/10.jpg)
State Machine of Coordinator
• Coordinator implements simple state machine
INIT
WAIT
ABORT COMMIT
Recv: STARTSend: VOTE-REQ
Recv: VOTE-ABORTSend: GLOBAL-ABORT
Recv: all VOTE-COMMITSend: GLOBAL-COMMIT
![Page 11: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/11.jpg)
State Machine of Workers
INIT
READY
ABORT COMMIT
Recv: VOTE-REQSend: VOTE-ABORT
Recv: VOTE-REQSend: VOTE-COMMIT
Recv: GLOBAL-ABORT Recv: GLOBAL-COMMIT
![Page 12: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/12.jpg)
Dealing with Worker Failures• How to deal with worker failures?
– Failure only affects states in which the node is waiting for messages
– Coordinator only waits for votes in “WAIT” state– In WAIT, if doesn’t receive
N votes, it times out and sends
GLOBAL-ABORT
INIT
WAIT
ABORT COMMIT
Recv: STARTSend: VOTE-REQ
Recv: VOTE-ABORTSend: GLOBAL-ABORT
Recv: VOTE-COMMITSend: GLOBAL-COMMIT
![Page 13: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/13.jpg)
Example of Worker Failure
coordinator
worker 1
time
VOTE-REQ
VOTE-COMMIT
GLOBAL-ABORT
INIT
WAIT
ABORT COMM timeout
worker 2
worker 3
![Page 14: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/14.jpg)
Dealing with Coordinator Failure• How to deal with coordinator failures?
– worker waits for VOTE-REQ in INIT• Worker can time out and abort (coordinator handles it)
– worker waits for GLOBAL-* message in READY• If coordinator fails, workers must
BLOCK waiting for coordinator
to recover and send
GLOBAL_* message
INIT
READY
ABORT COMMIT
Recv: VOTE-REQSend: VOTE-ABORT
Recv: VOTE-REQSend: VOTE-COMMIT
Recv: GLOBAL-ABORT Recv: GLOBAL-COMMIT
![Page 15: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/15.jpg)
Example of Coordinator Failure #1
coordinator
worker 1
VOTE-REQ
VOTE-ABORT
timeout
INIT
READY
ABORT COMM
timeout
timeout
worker 2
worker 3
![Page 16: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/16.jpg)
Example of Coordinator Failure #2
VOTE-REQ
VOTE-COMMIT
INIT
READY
ABORT COMM
block waiting for coordinator
restarted
GLOBAL-ABORT
coordinator
worker 1
worker 2
worker 3
![Page 17: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/17.jpg)
Durability
• All nodes use stable storage* to store which state they are in
• Upon recovery, it can restore state and resume:– Coordinator aborts in INIT, WAIT, or ABORT– Coordinator commits in COMMIT– Worker aborts in INIT, ABORT– Worker commits in COMMIT– Worker asks Coordinator in READY
* - stable storage is non-volatile storage (e.g. backed by disk) that guarantees atomic writes.
![Page 18: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/18.jpg)
Blocking for Coordinator to Recover• A worker waiting for global decision
can ask fellow workers about their state– If another worker is in ABORT or
COMMIT state then coordinator must have sent GLOBAL-*
– Thus, worker can safely abort or commit, respectively
– If another worker is still in INIT state
then both workers can decide to abort
– If all workers are in ready, need to BLOCK (don’t know if coordinator wanted to abort or commit)
INIT
READY
ABORT COMMIT
Recv: VOTE-REQSend: VOTE-ABORT
Recv: VOTE-REQSend: VOTE-COMMIT
Recv: GLOBAL-ABORT Recv: GLOBAL-COMMIT
![Page 19: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/19.jpg)
cs162 fa14 L35 19
Admin Break
• MidTerm (mult by 4/3)
11/21/14
![Page 20: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/20.jpg)
cs162 fa14 L35 20
What’s a Deadlock?
• Situation where all entities (e.g., threads, clients, …) – have acquired certain resources and – need to acquire additional resources, – but those additional resources are held some other
entity that won’t release them11/21/14
![Page 21: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/21.jpg)
cs162 fa14 L35 21
Bridge Crossing Example
• Each segment of road can be viewed as a resource– Car “owns” the segment under them– Must acquire segment that they are moving into
• Must acquire both halves of bridge to cross– Traffic only in one direction at a time – Problem occurs when two cars in opposite directions on bridge:
each acquires one segment and needs next• If a deadlock occurs, it can be resolved if one car backs
up (preempt resources and rollback)– Several cars may have to be backed up
• Starvation is possible– East-going traffic really fast no one goes west
11/21/14
![Page 22: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/22.jpg)
cs162 fa14 L35 22
OS analog of the bridge
• Exclusive Access to Multiple Resouces:
x=1, y=1Thread A Thread B
x.Down(); y.Down();y.Down(); x.Down();
… … y.Up();x.Up();
x.Up(); y.Up();
• Say, x is free-list and y is directory
A: x.Down();B: y.Down();A: y.Down();B: x.Down();...
Deadlock
11/21/14
![Page 23: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/23.jpg)
cs162 fa14 L35 23
Deadlock vs. Starvation• Deadlock: circular waiting for resources
– Thread A owns Res 1 and is waiting for Res 2Thread B owns Res 2 and is waiting for Res 1
• Starvation: thread waits indefinitely– Example, low-priority thread waiting for resources
constantly in use by high-priority threads• Deadlock Starvation, but not vice versa
– Starvation can end (but doesn’t have to)– Deadlock can’t end without external intervention
Res 2Res 1
Thread B
Thread A WaitFor
WaitFor
OwnedBy
OwnedBy
11/21/14
![Page 24: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/24.jpg)
cs162 fa14 L35 24
OS analog of the bridge
• Exclusive Access to Multiple Resouces:x=1, y=1
Thread A Thread B
x.Down(); y.Down();y.Down(); x.Down();
… … y.Up(); x.Up();
x.Up(); y.Up();
• Say, x is free-list and y is directory structure• Deadlock is typically not deterministic
– Timing in this example has to be “just so”
• Deadlocks occur with multiple resources– Can’t solve deadlock for each resource independently
A: x.Down();B: y.Down();A: y.Down();B: x.Down();...
Deadlock
11/21/14
![Page 25: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/25.jpg)
cs162 fa14 L35 25
Can this deadlock?
• Under what conditions?
11/21/14
void transaction(account *from, account *to, double amount) {
acquire(from->lock);acquire(to->lock);withdraw(from, amount);deposit(to, amount);release(from->lock);release(to->lock);
}
![Page 26: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/26.jpg)
cs162 fa14 L35 26
Dining Philosophers Problem
• N chopsticks/ N philosophers– Need two chopsticks to eat– Free for all: Philosopher will grab any one they can
• What if all grab at same time?– Deadlock!
• How to fix deadlock?– Make one of them give up a chopstick (Hah!)– Eventually everyone will get chance to eat
• How to prevent deadlock?
11/21/14
![Page 27: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/27.jpg)
cs162 fa14 L35 27
Four requirements for Deadlock• Mutual exclusion
– Only one thread at a time can use a resource
• Hold and wait (incremental allocation)– Thread holding at least one resource is waiting to acquire
additional resources held by other threads
• No preemption– Resources are released only voluntarily by the thread
holding the resource, after thread is finished with it
• Circular wait– e.g, There exists a set {T1, …, Tn} of waiting threads,
• T1 is waiting for a resource that is held by T2
• T2 is waiting for a resource that is held by T3, …
• Tn is waiting for a resource that is held by T111/21/14
![Page 28: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/28.jpg)
cs162 fa14 L35 28
Methods for Handling Deadlocks• Deadlock prevention: design system to ensure that
it will never enter a deadlock– E.g., monitor all lock acquisitions– Selectively deny those that might lead to deadlock
• Allow system to enter deadlock and then recover– Requires deadlock detection algorithm
• E.g., Java JMX findDeadlockedThreads()
– Some technique for forcibly preempting resources and/or terminating tasks
• Ignore the problem and hope that deadlocks never occur in the system– Used by most operating systems, including UNIX– Resort to manual version of recovery
11/21/14
![Page 29: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/29.jpg)
cs162 fa14 L35 29
Techniques for Deadlock Prevention
• Eliminate the Shared Resources– E.g., give each Philosopher two chopsticks, open
the other bridge lane, …– Or at least two virtual chopsticks– OK, if sharing was do to resource limitations– Not if sharing is due to true interactions
• Must modify Directory Structure AND File Index AND the Block Free list
• Must enter the intersection to turn left
11/21/14
![Page 30: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/30.jpg)
cs162 fa14 L35 30
Techniques for Deadlock Prevention
• Eliminate the Shared Resources• Eliminate the Mutual Exclusion
– E.g., many processes can have read-only access to file– But still need mutual-exclusion for writing
11/21/14
![Page 31: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/31.jpg)
cs162 fa14 L35 31
Techniques for Deadlock Prevention
• Eliminate the Shared Resources• Eliminate the Mutual Exclusion• Eliminate Hold-and-Wait
11/21/14
![Page 32: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/32.jpg)
cs162 fa14 L35 32
Acquire all resources up front
• Philosopher grabs for both chopsticks at once– If not both available, don’t pickup either, try again later
• Phone call signaling attempts to acquire resources all along the path, “busy” if any point not available
• File Systems: lock {dir. Structure, file index, free list}– Or the piece of each in a common block group
• Databases: lock all tables touched by the query• Hard in general, but often natural in specific cases
11/21/14
![Page 33: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/33.jpg)
cs162 fa14 L35 33
Techniques for Deadlock Prevention
• Eliminate the Shared Resources• Eliminate the Mutual Exclusion• Eliminate Hold-and-Wait• Permit pre-emption
11/21/14
![Page 34: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/34.jpg)
cs162 fa14 L35 34
Incremental Acquisition with Pre-emption
• Philosopher grabs one, goes for other, if not available, releases the first– Analogous for sequence of system resources
• Danger of turning deadlock into livelock– Everyone is grabbing and releasing, no one every gets two
• Works great at low utilization– Potential for thrashing (or failure) as utilization increases
• Similar to CSMA (carrier sense multiple access) in networks• Randomize the back-off
11/21/14
![Page 35: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/35.jpg)
cs162 fa14 L35 35
Techniques for Deadlock Prevention
• Eliminate the Shared Resources• Eliminate the Mutual Exclusion• Eliminate Hold-and-Wait• Permit pre-emption• Eliminate the creation of circular wait
– Dedicated resources to break cycles– Ordering on the acquisition of resources
11/21/14
![Page 36: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/36.jpg)
cs162 fa14 L35 36
Cyclic Dependence of resources
• Suppose everyone grabs left first• Acquisition of the right chopstick depends on the
acquisition of the left one• A cycle of dependences forms
11/21/14
0
1
2
3
4
![Page 37: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/37.jpg)
cs162 fa14 L35 37
Ordered Acquisition to prevent cycle from forming
• Suppose everyone grabs lowest first• Dependence graph is acyclic• Someone will fail to grab chopstick 0 !• How do you modify the rule to retain fairness ?• OS: define ordered set of resource classes
– Acquire locks on resources in order– Page Table => Memory Blocks => …
11/21/14
0
1
2
3
4
![Page 38: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/38.jpg)
cs162 fa14 L35 38
Deadlock Detection
• There are threads that never become ready• Are they deadlocked or just … ?
11/21/14
![Page 39: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/39.jpg)
cs162 fa14 L35 39
Symbols
A Simple Resource Graph• System Model
– A set of Threads T1, T2, . . ., Tn
– Resource types R1, R2, . . ., Rm
locks in this case
– Each thread utilizes a resource as follows:• Request() / Use() / Release()
• Resource-Allocation Graph:– V is partitioned into two types:
• T = {T1, T2, …, Tn}, the set threads in the system.
• R = {R1, R2, …, Rm}, the set of resource types in system
– request edge – directed edge Ti Rj
• Wait-List
– assignment edge – directed edge Rj Ti
• Owns
R1 R2
T1 T2
11/21/14
![Page 40: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/40.jpg)
cs162 fa14 L35 40
Resource Allocation Graph Examples
T1 T2 T3
R1 R2
R3
R4
Simple ResourceAllocation Graph
T1 T2 T3
R1 R2
R3
R4
Deadlocked ResourceAllocation Graph
11/21/14
![Page 41: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/41.jpg)
cs162 fa14 L35 41
How would you look for cycles?
11/21/14
![Page 42: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/42.jpg)
cs162 fa14 L35 42
Resource Allocation Graph Examples
T1 T2 T3
R1 R2
R3
R4
Simple ResourceAllocation Graph
T1 T2 T3
R1 R2
R3
R4
Deadlocked ResourceAllocation Graph
11/21/14
![Page 43: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/43.jpg)
cs162 fa14 L35 43
How would avoid cycle creation ?
11/21/14
• On attempt to acquire an owned lock– Check to see if adding the request edge would
create a cycle
T1 T2 T3
R1 R2
R3
R4
![Page 44: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/44.jpg)
cs162 fa14 L35 44
More General Case
• Each resources has a capacity (# instances)• Each thread requests a portion of each
resource
11/21/14
![Page 45: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/45.jpg)
cs162 fa14 L35 45
Symbols
General Resource-Allocation Graph• System Model
– A set of Threads T1, T2, . . ., Tn
– Resource types R1, R2, . . ., Rm
CPU cycles, memory space, I/O devices
– Each resource type Ri has Wi instances.
– Each thread utilizes a resource as follows:• Request() / Use() / Release()
• Resource-Allocation Graph:– V is partitioned into two types:
• T = {T1, T2, …, Tn}, the set threads in the system.
• R = {R1, R2, …, Rm}, the set of resource types in system
– request edge – directed edge Ti Rj
– assignment edge – directed edge Rj Ti
R1
R2
T1 T2
11/21/14
![Page 46: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/46.jpg)
cs162 fa14 L35 46
Resource Allocation Graph Examples
T1 T2 T3
R1 R2
R3
R4
Simple ResourceAllocation Graph
T1 T2 T3
R1 R2
R3
R4
Allocation GraphWith Deadlock
T1
T2
T3
R2
R1
T4
Allocation GraphWith Cycle, butNo Deadlock
• Recall:– request edge – directed edge Ti Rj
– assignment edge – directed edge Rj Ti
11/21/14
![Page 47: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/47.jpg)
cs162 fa14 L35 47
T1
T2
T3
R2
R1
T4
Deadlock Detection Algorithm• Only one of each type of resource look for loops• More General Deadlock Detection Algorithm
– Let [X] represent an m-ary vector of non-negative integers (quantities of resources of each type):[FreeResources]: Current free resources each type[RequestX]: Current requests from thread X
[AllocX]: Current resources held by thread X
– See if tasks can eventually terminate on their own[Avail] = [FreeResources] Add all nodes to UNFINISHED do {
done = trueForeach node in UNFINISHED {
if ([Requestnode] <= [Avail]) {remove node from UNFINISHED[Avail] = [Avail] + [Allocnode]done = false
}}
} until(done)
– Nodes left in UNFINISHED deadlocked
11/21/14
![Page 48: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/48.jpg)
cs162 fa14 L35 48
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [0,0]UNFINISHED = {T1,T2,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([Requestnode] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [Allocnode] done = false
} }} until(done)
11/21/14
![Page 49: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/49.jpg)
cs162 fa14 L35 49
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [0,0]UNFINISHED = {T1,T2,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([RequestT1] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT1] done = false
} }} until(done)
False
11/21/14
![Page 50: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/50.jpg)
cs162 fa14 L35 50
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [0,0]UNFINISHED = {T1,T2,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([Requestnode] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [Allocnode] done = false
} }} until(done)
11/21/14
![Page 51: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/51.jpg)
cs162 fa14 L35 51
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [0,0]UNFINISHED = {T1,T2,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([RequestT2] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT2] done = false
} }} until(done)
11/21/14
![Page 52: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/52.jpg)
cs162 fa14 L35 52
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [0,0]UNFINISHED = {T1,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([RequestT2] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT2] done = false
} }} until(done)
11/21/14
![Page 53: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/53.jpg)
cs162 fa14 L35 53
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,0]UNFINISHED = {T1,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([RequestT2] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT2] done = false
} }} until(done)
11/21/14
![Page 54: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/54.jpg)
cs162 fa14 L35 54
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,0]UNFINISHED = {T1,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([RequestT2] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT2] done = false
} }} until(done)
11/21/14
![Page 55: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/55.jpg)
cs162 fa14 L35 55
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,0]UNFINISHED = {T1,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([Requestnode] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [Allocnode] done = false
} }} until(done)
11/21/14
![Page 56: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/56.jpg)
cs162 fa14 L35 56
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,0]UNFINISHED = {T1,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([RequestT3] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT3] done = false
} }} until(done)
11/21/14
![Page 57: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/57.jpg)
cs162 fa14 L35 57
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,0]UNFINISHED = {T1,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([Requestnode] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [Allocnode] done = false
} }} until(done)
11/21/14
![Page 58: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/58.jpg)
cs162 fa14 L35 58
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,0]UNFINISHED = {T1,T3,T4}
do { done = true Foreach node in UNFINISHED { if ([RequestT4] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT4] done = false
} }} until(done)
11/21/14
![Page 59: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/59.jpg)
cs162 fa14 L35 59
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,0]UNFINISHED = {T1,T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT4] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT4] done = false
} }} until(done)
11/21/14
![Page 60: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/60.jpg)
cs162 fa14 L35 60
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,1]UNFINISHED = {T1,T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT4] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT4] done = false
} }} until(done)
11/21/14
![Page 61: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/61.jpg)
cs162 fa14 L35 61
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,1]UNFINISHED = {T1,T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT4] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT4] done = false
} }} until(done)
11/21/14
![Page 62: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/62.jpg)
cs162 fa14 L35 62
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,1]UNFINISHED = {T1,T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT4] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT4] done = false
} }} until(done)
False
11/21/14
![Page 63: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/63.jpg)
cs162 fa14 L35 63
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,1]UNFINISHED = {T1,T3}
do { done = true Foreach node in UNFINISHED { if ([Requestnode] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [Allocnode] done = false
} }} until(done)
11/21/14
![Page 64: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/64.jpg)
cs162 fa14 L35 64
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,1]UNFINISHED = {T1,T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT1] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT1] done = false
} }} until(done)
11/21/14
![Page 65: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/65.jpg)
cs162 fa14 L35 65
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,1]UNFINISHED = {T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT1] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT1] done = false
} }} until(done)
11/21/14
![Page 66: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/66.jpg)
cs162 fa14 L35 66
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,2]UNFINISHED = {T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT1] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT1] done = false
} }} until(done)
11/21/14
![Page 67: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/67.jpg)
cs162 fa14 L35 67
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,2]UNFINISHED = {T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT1] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT1] done = false
} }} until(done)
11/21/14
![Page 68: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/68.jpg)
cs162 fa14 L35 68
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,2]UNFINISHED = {T3}
do { done = true Foreach node in UNFINISHED { if ([Requestnode] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [Allocnode] done = false
} }} until(done)
11/21/14
![Page 69: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/69.jpg)
cs162 fa14 L35 69
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,2]UNFINISHED = {T3}
do { done = true Foreach node in UNFINISHED { if ([RequestT3] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT3] done = false
} }} until(done)
11/21/14
![Page 70: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/70.jpg)
cs162 fa14 L35 70
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [1,2]UNFINISHED = {}
do { done = true Foreach node in UNFINISHED { if ([RequestT3] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT3] done = false
} }} until(done)
11/21/14
![Page 71: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/71.jpg)
cs162 fa14 L35 71
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [2,2]UNFINISHED = {}
do { done = true Foreach node in UNFINISHED { if ([RequestT3] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT3] done = false
} }} until(done)
11/21/14
![Page 72: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/72.jpg)
cs162 fa14 L35 72
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [2,2]UNFINISHED = {}
do { done = true Foreach node in UNFINISHED { if ([RequestT3] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT3] done = false
} }} until(done)
11/21/14
![Page 73: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/73.jpg)
cs162 fa14 L35 73
Deadlock Detection Algorithm Example
T1
T2
T3
R2
R1
T4
[RequestT1] = [1,0]; AllocT1 = [0,1][RequestT2] = [0,0]; AllocT2 = [1,0][RequestT3] = [0,1]; AllocT3 = [1,0][RequestT4] = [0,0]; AllocT4 = [0,1][Avail] = [2,2]UNFINISHED = {}
do { done = true Foreach node in UNFINISHED { if ([RequestT3] <= [Avail]) {
remove node from UNFINSHED [Avail] = [Avail] + [AllocT3] done = false
} }} until(done)
DONE!
11/21/14
![Page 74: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/74.jpg)
cs162 fa14 L35 74
• Toward right idea: – State maximum resource needs in advance– Allow particular thread to proceed if:
(available resources - #requested) max remaining that might be needed by any thread
• Banker’s algorithm (less conservative):– Allocate resources dynamically
• Evaluate each request and grant if some ordering of threads is still deadlock free afterward
• Keeps system in a “SAFE” state, i.e. there exists a sequence {T1, T2, … Tn} with T1 requesting all remaining resources, finishing, then T2 requesting all remaining resources, etc..
– Algorithm allows the sum of maximum resource needs of all current threads to be greater than total resources
Banker’s Algorithm for Preventing Deadlock
11/21/14
![Page 75: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/75.jpg)
cs162 fa14 L35 75
Banker’s Algorithm
• Technique: pretend each request is granted, then run deadlock detection algorithm, substitute ([Requestnode] ≤ [Avail]) ([Maxnode]-[Allocnode] ≤ [Avail])
[FreeResources]: Current free resources each type[AllocX]: Current resources held by thread X
[MaxX]: Max resources requested by thread X
[Avail] = [FreeResources] Add all nodes to UNFINISHED do {
done = trueForeach node in UNFINISHED {
if ([Maxnode]–[Allocnode]<= [Avail]) {remove node from UNFINISHED[Avail] = [Avail] + [Allocnode]done = false
}}
} until(done)11/21/14
![Page 76: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/76.jpg)
cs162 fa14 L35 76
Banker’s Algorithm Example
• Banker’s algorithm with dining philosophers– “Safe” (won’t cause deadlock) if when try to grab
chopstick either:• Not last chopstick• Is last chopstick but someone will have
two afterwards– What if k-handed philosophers? Don’t allow if:
• It’s the last one, no one would have k• It’s 2nd to last, and no one would have k-1• It’s 3rd to last, and no one would have k-2• …
11/21/14
![Page 77: Distributed 2PC & Deadlock David E. Culler CS162 – Operating Systems and Systems Programming Lecture 36 Nov 21, 2014 Reading: OSC Ch 7 (deadlock)](https://reader036.fdocuments.us/reader036/viewer/2022062321/56649f0a5503460f94c1e240/html5/thumbnails/77.jpg)
cs162 fa14 L3 77
Summary: Deadlock• Four conditions for deadlocks
– Mutual exclusion• Only one thread at a time can use a resource
– Hold and wait• Thread holding at least one resource is waiting to acquire
additional resources held by other threads– No preemption
• Resources are released only voluntarily by the threads– Circular wait
• set {T1, …, Tn} of threads with a cyclic waiting pattern
• Starvation vs. Deadlock– Starvation: thread waits indefinitely– Deadlock: circular waiting for resources
• Deadlock detection and preemption• Deadlock prevention
– Loop Detection, Banker’s algorithm11/21/14