Principles of
Operating Systems
Lecture 5 - Deadlocks
Ardalan Amiri Sani (ardalan@[Link])
[lecture slides contains some content adapted from previous slides by Prof. Nalini Venkatasubramanian, and
course text slides © Silberschatz]
1
The Deadlock Problem
■ A set of blocked processes each holding a
resource and waiting to acquire a resource
held by another process in the set.
❑ Example 1
❑ Consider two files. P1 and P2 each holds exclusive access
to one file and needs access to the other file.
❑ Example 2
❑ Semaphores A and B each initialized to 1
P0 P1
wait(A) wait(B)
wait(B) wait(A)
2
Definitions
■ A process is deadlocked if it is waiting for an
event that will never occur.
Typically, more than one process will be involved in a
deadlock (the deadly embrace).
■ A process is indefinitely postponed if it is
delayed repeatedly over a long period of time
while the attention of the system is given to
other processes,
■ i.e. the process is ready to proceed but never gets the
CPU.
3
Example - Bridge Crossing
❑ Assume traffic in one direction.
■ Each section of the bridge is viewed as a resource.
❑ If a deadlock occurs, it can be resolved only if one
car backs up (preempt resources and rollback).
■ Several cars may have to be backed up if a deadlock
occurs.
■ Starvation is possible
4
System Model
● System consists of resources
● Resource types R1, R2, . . ., Rm
semaphores, files, ...
● Each resource type Ri has Wi instances.
● Each process utilizes a resource as
follows:
● request
● use
● release
5
Conditions for Deadlock
Deadlock can arise if four conditions hold simultaneously.
● Mutual exclusion: only one process at a time can use a
resource (more accurately, resource instance)
● Hold and wait: a process holding at least one resource is
waiting to acquire additional resources held by other
processes
● No preemption: a resource can be released only
voluntarily by the process holding it, after that process has
completed its task
● Circular wait: there exists a set {P0, P1, …, Pn} of waiting
processes such that P0 is waiting for a resource that is held
by P1, P1 is waiting for a resource that is held by P2, …, Pn–1
is waiting for a resource that is held by Pn, and Pn is waiting
for a resource that is held by P0. 6
Resource Allocation Graph
■ A set of vertices V and a set of edges E
■ V is partitioned into 2 types
■ P = {P1, P2,…,Pn} - the set of processes in the system
■ R = {R1, R2,…,Rn} - the set of resource types in the
system
■ Two kinds of edges
■ Request edge - Directed edge Pi → Rj
■ Assignment edge - Directed edge Rj → Pi
7
Resource Allocation Graph
● Process
● Resource Type with 4 instances
● Pi requests an instance of Rj
Pi
Rj
● Pi is holding an instance of Rj
Pi
Rj
8
Basic facts
■ If graph contains no cycles
❑ No deadlock
■ If graph contains a cycle
❑ if only one instance per resource type, then
deadlock
❑ if several instances per resource type, possibility
of deadlock.
9
Deadlock?
10
Graph with no cycles, hence no
deadlock
11
Deadlock?
12
Graph with a cycle (but no
deadlock)
13
Deadlock?
14
Graph with cycles and deadlock
15
Methods for handling deadlocks
■ Ensure that the system will never enter a
deadlock state.
❑ Deadlock prevention
❑ Deadlock avoidance
■ Allow the system to potentially enter a
deadlock state, detect it and then recover
❑ Deadlock detection
❑ Deadlock recovery
■ Ignore the problem and pretend that
deadlocks never occur in the system;
❑ Used by many operating systems, e.g. UNIX
16
Deadlock Prevention
Restrain the ways request can be made to prevent the
conditions of a deadlock from happening
● Mutual Exclusion – ?
17
Deadlock Prevention
Restrain the ways request can be made to prevent the
conditions of a deadlock from happening
● Mutual Exclusion – not required for sharable
resources (e.g., read-only files); must hold for
non-sharable resources
● Hold and Wait – ?
18
Deadlock Prevention
Restrain the ways request can be made to prevent the
conditions of a deadlock from happening
● Mutual Exclusion – not required for sharable
resources (e.g., read-only files); must hold for
non-sharable resources
● Hold and Wait – must guarantee that whenever a
process requests a resource, it does not hold any other
resources
● Require process to request and be allocated all its
resources before it begins execution, or allow
process to request resources only when the process
has none allocated to it.
● Low resource utilization; starvation possible 19
Deadlock Prevention (cont.)
● No Preemption – ?
20
Deadlock Prevention (cont.)
● No Preemption –
● If a process that is holding some resources requests
another resource that cannot be immediately
allocated to it, then all resources currently being held
are released
● Preempted resources are added to the list of
resources for which the process is waiting
● Process will be restarted only when it can regain its
old resources, as well as the new ones that it is
requesting
● Circular Wait – ?
21
Deadlock Prevention (cont.)
● No Preemption –
● If a process that is holding some resources requests
another resource that cannot be immediately
allocated to it, then all resources currently being held
are released
● Preempted resources are added to the list of
resources for which the process is waiting
● Process will be restarted only when it can regain its
old resources, as well as the new ones that it is
requesting
● Circular Wait – impose a total ordering of all resource
types, and require that each process requests resources
in an increasing order of enumeration
22
Deadlock Avoidance
■ Each process tells the system maximum
number of resources it needs.
■ System only allocates resources if the
system will be in a safe state after the
allocation.
23
Safe state
● System is in safe state if there exists a sequence <P1, P2,
…, Pn> of ALL the processes in the system such that for
each Pi, the resources that Pi can still request can be
satisfied by currently available resources + resources held
by all the Pj, with j < i
● That is:
● If Pi resource needs are not immediately available, then
Pi can wait until all Pj have finished (j < i)
● When all Pj (j < i) are finished, Pi can obtain needed
resources, execute, return allocated resources, and
terminate
● When Pi terminates, Pi +1 can obtain its needed
resources, and so on
● If there is no such sequence, the system is in an unsafe
state 24
Basic Facts
● If a system is in safe state ⇒ no deadlocks
● If a system is in unsafe state ⇒ possibility of deadlock
● Avoidance ⇒ ensure that a system will never enter an
unsafe state.
25
Safe, Unsafe, Deadlock State
26
Avoidance Algorithms
● Key idea
● When there is a resource request, assume that
the resource is allocated.
● Then check the state of the system after the
allocation.
● Is it still safe? If yes, allocate the resource.
● If not, reject the allocation request.
27
Avoidance Algorithms
● Single instance of a resource type
● Use a resource-allocation graph
● Multiple instances of a resource type
● Use the banker’s algorithm
28
Resource Allocation Graph
Scheme
● 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
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 needed by processes must be claimed a
priori in the system
29
Resource Allocation Graph
Algorithm
● Suppose that process Pi requests a resource Rj
● The request can be granted only if converting the
request edge to an assignment edge does not result in
the formation of a cycle in the resource allocation graph
30
Resource Allocation Graph (aka
Claim Graph)
31
Unsafe State in Resource
Allocation Graph
32
Banker’s Algorithm
● Multiple instances of resource types
● Each process must a priori claim maximum use
● When a process requests a resource it may have to wait
● When a process gets all its resources it must return them in a
finite amount of time
33
Data Structures for the Banker’s
Algorithm
Let n = number of processes, and m = number of resources types.
● Available: Vector of length m. If available[ j ] = k, there are k
instances of resource type Rj available
● Max: n x m matrix. If Max[ i, j ] = k, then process Pi may request at
most k instances of resource type Rj
● Allocation: n x m matrix. If Allocation[ i, j ] = k then Pi is currently
allocated k instances of Rj
● Need: n x m matrix. If Need[ i, j ] = k, then Pi may need k more
instances of Rj to complete its task
Need [i,j] = Max[i,j] – Allocation [i,j]
34
Safety Algorithm
1. Let Work and Finish be vectors of length m and n, respectively.
Initialize:
Work = Available
Finish [ i ] = false for i = 0, 1, …, n- 1
2. Find an i such that both:
(a) Finish [ i ] = false
(b) Needi ≤ Work
If no such i exists, go to step 4
3. Work = Work + Allocationi
Finish[ i ] = true
go to step 2
4. If Finish [i] == true for all i, then the system is in a safe state.
35
Resource-Request Algorithm for
Process Pi
Requesti = request vector for process Pi. If Requesti [ j ] = k then
process Pi wants k instances of resource type Rj
1. If Requesti ≤ Needi go to step 2. Otherwise, raise error condition,
since process has exceeded its maximum claim
2. If Requesti ≤ Available, go to step 3. Otherwise Pi must wait,
since resources are not available
3. Pretend to allocate requested resources to Pi by modifying the
state as follows:
Available = Available – Requesti;
Allocationi = Allocationi + Requesti;
Needi = Needi – Requesti;
● If this is a safe state ⇒ the resources can be (and are)
allocated to Pi
● If this is an unsafe state ⇒ Pi must wait, and the old
resource-allocation state is restored
36
Example of Banker’s Algorithm
● 5 processes P0 through P4;
3 resource types:
A (10 instances), B (5 instances), and C (7 instances)
● Snapshot at time T0:
Allocation Max Available
ABC ABC ABC
P0 0 1 0 753 332
P1 2 0 0 322
P2 3 0 2 902
P3 2 1 1 222
P4 0 0 2 433
37
Example (Cont.)
● The content of the matrix Need is defined to be Max – Allocation
Need
ABC
P0 7 4 3
P1 1 2 2
P2 6 0 0
P3 0 1 1
P4 4 3 1
● The system is in a safe state since the sequence < P1, P3, P4, P2, P0>
satisfies safety criteria
38
Example: P1 Request (1,0,2).
Should it be granted?
● Check that Request1 ≤ Need1 (that is, (1,0,2) ≤ (1,2,2) ⇒ true)
● Check that Request1 ≤ Available (that is, (1,0,2) ≤ (3,3,2) ⇒ true)
● Pretend the request is granted. Update the state:
Allocation Need Available
ABC ABC ABC
P0 0 1 0 743 230
P1 3 0 2 020
P2 3 0 2 600
P3 2 1 1 011
P4 0 0 2 431
● Executing safety algorithm shows that sequence < P1, P3, P4, P0, P2>
satisfies safety requirement
● Can request for (3,3,0) by P4 be granted?
● Can request for (0,2,0) by P0 be granted?
39
Example: P1 Request (1,0,2)
● Check that Request1 ≤ Need1 (that is, (1,0,2) ≤ (1,2,2) ⇒ true)
● Check that Request1 ≤ Available (that is, (1,0,2) ≤ (3,3,2) ⇒ true)
● Pretend the request is granted. Update the state:
Allocation Need Available
ABC ABC ABC
P0 0 1 0 743 230
P1 3 0 2 020
P2 3 0 2 600
P3 2 1 1 011
P4 0 0 2 431
● Executing safety algorithm shows that sequence < P1, P3, P4, P0, P2>
satisfies safety requirement
● Can request for (3,3,0) by P4 be granted? No, not enough Available
● Can request for (0,2,0) by P0 be granted? No, the system will be unsafe
40
Deadlock Detection & Recovery
● Allow system to enter deadlock state
● Detect the deadlock
● Recover from it
41
Deadlock detection: Single
Instance of Each Resource Type
● Maintain wait-for graph
● Nodes are processes
● Pi → Pj if Pi is waiting for Pj
● Periodically invoke an algorithm that searches for a cycle in the
graph. If there is a cycle, there exists a deadlock
● An algorithm to detect a cycle in a graph requires an order of n2
operations, where n is the number of vertices in the graph
42
Resource-Allocation Graph and
Wait-for Graph
Resource-Allocation Graph Corresponding wait-for graph
43
Several Instances of a Resource
Type
● Available: A vector of length m indicates the number of available
resources of each type
● Allocation: An n x m matrix defines the number of resources of
each type currently allocated to each process
● Request: An n x m matrix indicates the current request of each
process. If Request [i][j] = k, then process Pi is requesting k more
instances of resource type Rj.
44
Detection Algorithm
1. Let Work and Finish be vectors of length m and n, respectively Initialize:
(a) Work = Available
(b) For i = 1,2, …, n, if Allocationi ≠ 0, then
Finish[i] = false; otherwise, Finish[i] = true
2. Find an index i such that both:
(a) Finish[i] == false
(b) Requesti ≤ Work
If no such i exists, go to step 4
45
Detection Algorithm (Cont.)
3. Work = Work + Allocationi
Finish[i] = true
go to step 2
4. If Finish[i] == true, for all i, 1 ≤ i ≤ n, then the system is not
deadlocked.
If there is no sequence of processes that results in Finish[i] == true,
for all i, 1 ≤ i ≤ n, then the system is deadlocked.
46
Example of Detection Algorithm
● Five processes P0 through P4; three resource types A (7 instances), B (2
instances), and C (6 instances)
● Snapshot at time T0:
Allocation Request Available
ABC ABC ABC
P0 010 000 000
P1 200 202
P2 303 000
P3 211 100
P4 002 002
● Sequence <P0, P2, P3, P1, P4> will result in Finish[i] = true for all i.
Therefore, the system is not deadlocked.
47
Example (Cont.)
● P2 requests an additional instance of type C
Request
ABC
P0 0 0 0
P1 2 0 2
P2 0 0 1
P3 1 0 0
P4 0 0 2
● State of system?
48
Example (Cont.)
● P2 requests an additional instance of type C
Request
ABC
P0 0 0 0
P1 2 0 2
P2 0 0 1
P3 1 0 0
P4 0 0 2
● State of system?
● Can reclaim resources held by process P0, but insufficient
resources to fulfill other processes’ requests
● Deadlock exists, consisting of processes P1, P2, P3, and P4
49
Recovery from Deadlock: Process
Termination
● Abort all deadlocked processes
● Abort one process at a time until the deadlock cycle is eliminated
- In which order should we choose to abort?
1. Priority of the process
2. How long process has computed, and how much longer to
completion
3. Resources the process is holding on to
4. Resources process needs to complete
5. How many processes will need to be terminated
6. Is process interactive or batch?
50
Recovery from Deadlock:
Resource Preemption
Successively preempt some resources from processes and give these
resources to other processes until the deadlock cycle is broken
Considerations:
● Selecting a victim - Which process to select to preempt resources
from?
● Rollback - How to preempt the resources from a process?
❑ Return the process to some safe state
❑ Restart the process
● Starvation - same process may always be picked as victim
❑ include number of rollback in the decision
51