Professional Documents
Culture Documents
CPSC 457
Deadlocks
Fall 2017
Contains slides from Mea Wang, Andrew Tanenbaum and Herbert Bos, Silberschatz, Galvin and Gagne
1
CPSC 457
Midterm marks
2
CPSC 457
Overview
● system model
● deadlock characterization
● methods for handling deadlocks
○ deadlock prevention
○ deadlock avoidance
○ deadlock detection
○ recovery from deadlock
3
CPSC 457
Deadlock definition
4
CPSC 457
System model
5
CPSC 457
Deadlock - necessary conditions
● mutual exclusion condition
○ the involved resources must be unshareable (max. one process per resource)
● hold and wait condition
○ a process holding at least one resource is waiting to acquire additional resources
● no preemption condition
○ a resource can be released only by the process holding it (voluntary)
● circular wait condition
○ there is an ordering of processes {P1, P2, … , Pn}, such that
□ P1 waits for P2
□ P2 waits for P3, … Deadlock can arise only
□ Pn waits for P1 if all four conditions
○ ie. there is a cycle hold simultaneously!
6
CPSC 457
Deadlock with mutex locks
● deadlocks can occur via system calls, locking, etc.
● deadlock example with 2 mutexes:
thread
Thread 1: Thread 2: 1
7
CPSC 457
Resource-Allocation Graph with 1 instance per resource type
○ R = {R1, R2, …, Rm}, the set of all resource types in the system
thread
1
thread
2 8
CPSC 457
Resource-Allocation Graph with multiple instances per resource
● Process Pi : ● Pi requests an instance of Rj :
Pi
Pi
Rj
request edge points to resource type, not
● multiple instances per resource type are
resource instance
represented as dots inside resources
● Pi is holding an instance of Rj :
● Resource Rj with 3 instances:
Pi
Rj
Rj
assignment edge originates from instance,
not type
9
CPSC 457
Resource Allocation Graph Example
P1 is
requesting R1
P1 holds R2
Deadlock ⇒ Cycle
11
CPSC 457
Graph With A Cycle But No Deadlock
Cycle ⇏ Deadlock
12
CPSC 457
Example
● consider 3 processes A, B and C which want to perform operations on resources R, S and T:
● depending on the order in which we process the operations, we may end up:
○ with a deadlock
○ or no deadlock
13
CPSC 457
Example: sequence of operations leading to deadlock
Process A: Process B: Process C:
1. request R 1. request S 1. request T
2. request S 2. request T 2. request R
3. release R 3. release S 3. release T
4. release S 4. release T 4. release R
Sequence:
1. A requests R - granted
2. B requests S - granted
3. C requests T - granted
4. A requests S - block
1 2 3
5. B requests T - block
6. C requests R - block
⇒ deadlock
4 5
6
14
CPSC 457
Example: sequence of operations not leading to deadlock
Process A: Process B: Process C:
1. request R 1. request S 1. request T
2. request S 2. request T 2. request R
3. release R 3. release S 3. release T
4. release S 4. release T 4. release R
Sequence:
1. A requests R - granted
2. C requests T - granted
3. A requests S - granted
4. C requests R - blocked
1 2 3
5. A releases R - unblocks C
6. A releases S
⇒ no deadlock
4 5 6 15
CPSC 457
Deadlock Facts
16
CPSC 457
Methods for dealing with deadlocks
● Ignore the problem:
○ pretend that deadlocks never occur in the system
○ approach of many operating systems, including UNIX
○ it's up to applications to address their deadlock issues
● deadlock prevention = any technique that attacks one of the 4 necessary conditions
18
CPSC 457
Deadlock prevention - example
● how do we fix the deadlock possibility below by avoiding hold and wait condition?
Thread 1: Thread 2:
19
CPSC 457
Deadlock prevention - example
● option 1: acquire all resources at the beginning
● lockn() - atomically locks multiple mutexes at once
Thread 1: Thread 2:
20
CPSC 457
Deadlock prevention - example
● option 2: release resources before acquiring more
● unlockAndLock() - repeat until success: unlock all locked mutexes, then lock them all atomically
Thread 1: Thread 2:
● both options exhibit issues with non-optimal resource utilization and starvation
21
CPSC 457
Deadlock Prevention (Cont.)
22
CPSC 457
Deadlock Prevention (Cont.)
Thread 1: Thread 2:
24
CPSC 457
Deadlock Example with Lock Ordering
void transaction(Account a1, Account a2, double amount) {
mutex lock1, lock2;
m1 = get_mutex(a1); // get exclusive access to account a1
m2 = get_mutex(a2); // get exclusive access to account a2
lock(m1);
lock(m2);
withdraw(a1, amount);
deposit(a2, amount);
unlock(m2);
unlock(m1);
}
26
CPSC 457
Deadlock Avoidance
27
CPSC 457
Safe State
● a system is in a safe state if there exists a sequence <P1, P2, …, Pn> of all running processes in the
system where they can all finish, while allowing them to claim their maximum resources
○ i.e. the processes can finish even under the worst case scenario ― where they each request
their max. resources as their next step
● a system is in an unsafe state if there does not exist such an execution sequence
● when a process requests an available resource, the system determines if granting such request
would lead to a safe state
○ if new state is safe, request is granted
○ if new state is not safe, request is denied and process waits
28
CPSC 457
Safe, Unsafe, Deadlock State
29
CPSC 457
Deadlock Avoidance Algorithms
30
CPSC 457
Resource-Allocation Graph Algorithm
● Claim edge Pi → Rj indicated that process Pj may request resource Rj; represented by a dashed
line
● Claim edge converts to request edge when a process actually requests a resource
● Request edge converted to an assignment edge when the resource is allocated to the process
● When a resource is released by a process, assignment edge reconverts to a claim edge
● Resources must be claimed a priori in the system
31
CPSC 457
Resource-Allocation Graph
P1 P2
32
CPSC 457
Resource-Allocation Graph
R1 R1 R1
P1 P2 P1 P2 P1 P2
R2 R2 R2
R1
P1 P2
R2 cannot be granted
can be granted
and P2 would block 34
CPSC 457
Banker’s Algorithm
35
CPSC 457
Data Structures for the Banker’s Algorithm
Let n = number of processes, and m = number of resources types.
Algorithm:
● If Request[] > Need[i] ⇒ raise error, process has exceeded its maximum claim
● If Request[] > Available ⇒ then Pi must wait, since resources are not available
● Pretend to allocate Request[], and see if the state is still safe:
○ Save current state of Available, Allocation and Need
○ Available = Available – Request
○ Allocation[i] = Allocation[i] + Request
○ Need[i] = Need[i] – Request
● check if state still safe using Banker's algorithm
● If state safe ⇒ the request can be granted (resources are allocated to Pi), discard the saved state
● If unsafe ⇒ request must block, Pi must wait, restore the saved state 38
CPSC 457
Example of Banker’s Algorithm
● 5 processes:
○ P0, P1, P2, P3 and P4
● 3 resource types:
○ A (10 instances), B (5 instances), and C (7 instances)
● Current state snapshot:
39
CPSC 457
Example of Banker’s Algorithm
● 5 processes:
○ P0, P1, P2, P3 and P4
● 3 resource types:
○ A (10 instances), B (5 instances), and C (7 instances)
● Current state snapshot:
40
CPSC 457
Example of Banker’s Algorithm
● 5 processes:
○ P0, P1, P2, P3 and P4
● 3 resource types:
○ A (10 instances), B (5 instances), and C (7 instances)
● Current state snapshot:
41
CPSC 457
Example of Banker’s Algorithm
● 5 processes:
○ P0, P1, P2, P3 and P4
● 3 resource types:
○ A (10 instances), B (5 instances), and C (7 instances)
● Current state snapshot:
Final exam question candidates:
Allocation Max Available Need
● Can request (1,0,2) for P1 be
A B C A B C A B C A B C
granted?
P0 0 1 0 7 5 3 3 3 2 7 4 3 ● Can request (3,3,0) for P4 be
P1 2 0 0 3 2 2 1 2 2 granted?
● Can request (0,2,0) for P0 be
P2 3 0 2 9 0 2 6 0 0 granted?
P3 2 1 1 2 2 2 0 1 1
Show your work / show possible
P4 0 0 2 4 3 3 4 3 1
sequence.
42
CPSC 457
Banker's algorithm example
Allocation Max Available
A B C A B C A B C Given the state of the system on
P0 0 1 0 7 5 3 3 3 2 the left, can we grant an additional
request (1,0,2) to P1?
P1 2 0 0 3 2 2
P2 3 0 2 9 0 2
P3 2 1 1 2 2 2
P4 0 0 2 4 3 3
43
CPSC 457
Banker's algorithm example
Allocation Max Available
A B C A B C A B C Given the state of the system on
P0 0 1 0 7 5 3 2 3 0 the left, can we grant an additional
request (1,0,2) to P1?
P1 3 0 2 3 2 2
P2 3 0 2 9 0 2
1. Update Allocation and
P3 2 1 1 2 2 2 Available
P4 0 0 2 4 3 3
44
CPSC 457
Banker's algorithm example
Allocation Max Available Need
A B C A B C A B C A B C Given the state of the system on
P0 0 1 0 7 5 3 2 3 0 7 4 3 the left, can we grant an additional
request (1,0,2) to P1?
P1 3 0 2 3 2 2 0 2 0
P2 3 0 2 9 0 2 6 0 0
1. Update Allocation and
P3 2 1 1 2 2 2 0 1 1 Available
P4 0 0 2 4 3 3 4 3 1 2. Calculate Need
45
CPSC 457
Banker's algorithm example
Allocation Max Available Need
A B C A B C A B C A B C Given the state of the system on
P0 0 1 0 7 5 3 2 3 0 7 4 3 the left, can we grant an additional
request (1,0,2) to P1?
P1 3 0 2 3 2 2 0 2 0
P2 3 0 2 9 0 2 6 0 0
1. Update Allocation and
P3 2 1 1 2 2 2 0 1 1 Available
P4 0 0 2 4 3 3 4 3 1 2. Calculate Need
3. Is the new state safe?
Use Banker's algorithm, which produces sequence:
1. P1: available = (2,3,0) + (3,0,2) → (5,3,2) Answer: yes, we can grant the
2. P3: available = (5,3,2) + (2,1,1) → (7,4,3) request. Possible execution
3. P0: available = (7,4,3) + (0,1,0) → (7,5,3) sequence after granting the
request:
4. P2: available = (7,5,3) + (3,0,2) → (10,5,5) P1, P3, P0, P2, P4
5. P4: available = (10,5,5) + (0,0,2) → (10,5,7) 47
CPSC 457
Deadlock Detection
● We allow system to enter a deadlock state, but later we detect the deadlock and recover.
● Detection algorithm
○ with single instance per resource type
○ multiple instances per resource type
● Recovery scheme
48
CPSC 457
Deadlock detection with single instance per resource type
49
CPSC 457
Resource-Allocation Graph and Wait-for Graph
● n = number of processes
● m = number of resource types
● Available[] = vector of length m indicates the number of available resources of each type
● Allocation[][] = n x m matrix - current allocation of resources per process
● Request[][] = n x m matrix - current requests for resources per process
51
CPSC 457
Detection Algorithm
1. Initialize:
Work = Available
Finish[i] = (Allocation[i] == 0) for all i = 1,2,3, … n
2. Find an index i such that:
Finish[i] == false and Request[i] ≤ Work
If no such i exists, go to step 4
3. Work = Work + Allocation[i]
Finish[i] = true
go to step 2
4. If Finish[i] == true for 1 ≤ i ≤ n, then system is not in deadlock
Otherwise, all processes Pi for which Finish[i] == false are deadlocked
● Q: Is there a deadlock?
● A: No, possible sequence <P0, P2, P3, P1, P4> will result in Finish[i] = true for all i
53
CPSC 457
Example (Cont.)
● P2 requests an additional instance of type C, i.e. (0,0,1)
Allocation Request Available
A B C A B C A B C
P0 0 1 0 0 0 0 0 0 0
P1 2 0 0 2 0 2
P2 3 0 3 0 0 1
P3 2 1 1 1 0 0
P4 0 0 2 0 0 2
● State of system?
○ P0 can run and finish
○ system reclaims resources held by process P0
○ but insufficient resources to fulfill any other request
○ deadlock exists, consisting of processes P1, P2, P3, and P4
54
CPSC 457
Detection-Algorithms - when and how often?
● detection algorithms are expensive
○ we cannot invoke them on every resource request
● other ideas for invoking detection:
○ check every few minutes
○ check when CPU goes idle
● when, and how often depends on:
○ how often a deadlock is likely to occur?
○ how many processes will be affected?
□ one for each disjoint cycle
● if we check too often - we spend too many CPU cycles on useless work
● if we don't check often enough - there may be many cycles in the resource graph and we would
not be able to tell which of the many deadlocked processes “caused” the deadlock
55
CPSC 457
Deadlock recovery
● process termination
● process rollback
● resource preemption
56
CPSC 457
Recovery from Deadlock: Process Termination
● we could abort all deadlocked processes
○ simple, but often a bad choice
● we could abort one process at a time until the deadlock cycle is eliminated
○ better choice, but...
● In which order should we choose to abort? Some ideas:
○ Priority of the process
○ Age of the process
○ How much longer to completion
○ Resources the process has used
○ Resources process needs to complete
○ How many processes will need to be terminated
○ Is process interactive or batch?
57
CPSC 457
Recovery from Deadlock: Process Rollback
58
CPSC 457
Recovery from Deadlock: Resource Preemption
● similar idea to rollback, but instead of checkpointing the program, we checkpoint the resources
of the program
● only works with some resource types
● when deadlock occurs:
○ pick a victim process
○ suspend victim process
○ save state of victim's resources
○ give victim's resources to other deadlocked processes
○ when the other processes release the resources, restore resource states
○ return resources to the victim
○ unsuspend the victim
59
CPSC 457
Recovery from Deadlock
60
CPSC 457
Summary
61
CPSC 457
Review
● Define deadlock.
● If there is a deadlock, that means there is a circular wait between processes. True or False
● If there is a circular wait between processes, than means there is a deadlock. True or False
● Which of the following methods is used to prevent circular waiting among processes and resources?
○ Spooling
○ Request all resources at the beginning
○ Take resources away
○ Order resources & lock in order
● How do we detect a deadlock?
● Name three approaches for deadlock recovery.
● What is a checkpoint?
62
CPSC 457
Questions?
63
63