Ch7 - Deadlocks
Ch7 - Deadlocks
Operating System Concepts – 9th Edition Silberschatz, Galvin and Gagne ©2013
Chapter 7: Deadlocks
System Model
Deadlock Characterization
Methods for Handling Deadlocks
Deadlock Prevention
Deadlock Avoidance
Operating System Concepts – 9th Edition 7.2 Silberschatz, Galvin and Gagne ©2013
Chapter Objectives
Operating System Concepts – 9th Edition 7.3 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.4 Silberschatz, Galvin and Gagne ©2013
System Model
System consists of resources
Resource types R1, R2, . . ., Rm
CPU cycles, memory space, I/O devices, semaphore, mutex
locks,
Each resource type Ri has Wi instances.
Each process utilizes a resource as follows:
request
use
release
Operating System Concepts – 9th Edition 7.5 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.6 Silberschatz, Galvin and Gagne ©2013
The request and release of resources may be system calls.
Examples are the request() and release() device, open() and close() file,
and allocate() and free() memory system calls.
The request and release of semaphores can be accomplished through
the wait() and signal() operations on semaphores or through acquire()
and release() of a mutex lock.
For each use of a kernel-managed resource by a process or thread, the
operating system checks to make sure that the process has requested
and has been allocated the resource.
A system table records whether each resource is free or allocated.
For each resource that is allocated, the table also records the process to
which it is allocated. If a process requests a resource that is currently
allocated to another process, it can be added to a queue of processes
waiting for this resource.
Operating System Concepts – 9th Edition 7.7 Silberschatz, Galvin and Gagne ©2013
Deadlock Characterization
Deadlock can arise if four conditions hold simultaneously.
Mutual exclusion: only one process at a time can use a
resource
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.
Operating System Concepts – 9th Edition 7.8 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.9 Silberschatz, Galvin and Gagne ©2013
Resource-Allocation Graph
A set of vertices V and a set of edges E.
V is partitioned into two types:
P = {P1, P2, …, Pn}, the set consisting of all the processes
in the system
Operating System Concepts – 9th Edition 7.10 Silberschatz, Galvin and Gagne ©2013
Resource-Allocation Graph (Cont.)
Process
Pi requests instance of Rj
Pi
Rj
Pi is holding an instance of Rj
Pi
Rj
Operating System Concepts – 9th Edition 7.11 Silberschatz, Galvin and Gagne ©2013
Example of a Resource Allocation Graph
Operating System Concepts – 9th Edition 7.12 Silberschatz, Galvin and Gagne ©2013
Resource Allocation Graph With A Deadlock
Deadlock 1: p1->r1->p2->r3->p3->r2->p1
Deadlock 2: p2->r3->p3->r2->p2
Operating System Concepts – 9th Edition 7.13 Silberschatz, Galvin and Gagne ©2013
Graph With A Cycle But No Deadlock
Operating System Concepts – 9th Edition 7.14 Silberschatz, Galvin and Gagne ©2013
Basic Facts
Operating System Concepts – 9th Edition 7.15 Silberschatz, Galvin and Gagne ©2013
Methods for Handling Deadlocks
Ensure that the system will never enter a deadlock state:
Deadlock prevention
Deadlock avoidance
Allow the system to enter a deadlock state and then detect and
recover
Ignore the problem and pretend that deadlocks never occur in the
system; used by most operating systems, including UNIX
Operating System Concepts – 9th Edition 7.16 Silberschatz, Galvin and Gagne ©2013
Deadlock Prevention
Mutual Exclusion – Sharable resources, do not require
mutually exclusive access and thus cannot be involved in a
deadlock (e.g., read-only files); must hold for non-sharable
resources.
Problem is: We cannot prevent deadlocks by denying the mutual-
exclusion condition, because some resources are intrinsically
non sharable. For example, a mutex lock cannot be
simultaneously shared by several processes.
Hold and Wait – must guarantee that whenever a process
requests a resource, it does not hold any other resources
Protocol 1: Require process to request and be allocated all
its resources before it begins execution.
Protocol 2: Allow process to request resources only when
the process has none allocated to it.
Problem is: Low resource utilization; starvation possible
Operating System Concepts – 9th Edition 7.17 Silberschatz, Galvin and Gagne ©2013
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
But the problem is: This protocol is often applied to resources whose
state can be easily saved and restored later, such as CPU registers
and memory space. It cannot generally be applied to such resources
as mutex locks and semaphores.
Operating System Concepts – 9th Edition 7.18 Silberschatz, Galvin and Gagne ©2013
Circular Wait – Impose a total ordering of all resource types, and
require that each process requests resources in an increasing order of
enumeration.
Giving number to resources. So that process requesting in increasing
order.
Suppose P1 is allocated resource R5. Now if P1 requests for resource
R4 and R3 (which are lesser that R5), such request will not be granted.
Only request for resource greater than R5 will be granted.
Developing an ordering itself does not prevent deadlock. It is upto
Application developers to write programs that follow the ordering.
Operating System Concepts – 9th Edition 7.19 Silberschatz, Galvin and Gagne ©2013
Deadlock Example
/* thread one runs in this function */
void *do_work_one(void *param)
{
pthread_mutex_lock(&first_mutex);
pthread_mutex_lock(&second_mutex);
/** * Do some work */
pthread_mutex_unlock(&second_mutex);
pthread_mutex_unlock(&first_mutex);
pthread_exit(0);
}
/* thread two runs in this function */
void *do_work_two(void *param)
{
pthread_mutex_lock(&second_mutex);
pthread_mutex_lock(&first_mutex);
/** * Do some work */
pthread_mutex_unlock(&first_mutex);
pthread_mutex_unlock(&second_mutex);
pthread_exit(0);
}
Operating System Concepts – 9th Edition 7.20 Silberschatz, Galvin and Gagne ©2013
Deadlock Example with Lock Ordering
void transaction(Account from, Account to, double amount)
{
mutex lock1, lock2;
lock1 = get_lock(from);
lock2 = get_lock(to);
acquire(lock1);
acquire(lock2);
withdraw(from, amount);
deposit(to, amount);
release(lock2);
release(lock1);
}
Operating System Concepts – 9th Edition 7.21 Silberschatz, Galvin and Gagne ©2013
Deadlock Avoidance
Simplest and most useful model requires that each process declare
the maximum number of resources of each type that it may need
The deadlock-avoidance algorithm dynamically examines the
resource-allocation state to ensure that there can never be a
circular-wait condition
Resource-allocation state is defined by the number of available and
allocated resources, and the maximum demands of the processes
Two deadlock avoidance algorithm are Safe state and resource
allocation graph algorithm.
Operating System Concepts – 9th Edition 7.22 Silberschatz, Galvin and Gagne ©2013
Safe State
When a process requests an available resource, system must decide
if immediate allocation leaves the system in a safe state
System is in safe state if there exists a sequence <P1, P2, …, Pn> of
all the processes in the systems such that for each P i, 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
When Pj is 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
Operating System Concepts – 9th Edition 7.23 Silberschatz, Galvin and Gagne ©2013
Basic Facts
Operating System Concepts – 9th Edition 7.24 Silberschatz, Galvin and Gagne ©2013
Safe, Unsafe, Deadlock State
Operating System Concepts – 9th Edition 7.25 Silberschatz, Galvin and Gagne ©2013
Total current needs are: 9, i.e 9 tape drives are allocated to all processes.
3 tape drives are remaining. P1 needs 2 more. So complete P1 first by giving 2
more resource.
Operating System Concepts – 9th Edition 7.26 Silberschatz, Galvin and Gagne ©2013
Avoidance Algorithms
Single instance of a resource type
Use a resource-allocation graph
Operating System Concepts – 9th Edition 7.27 Silberschatz, Galvin and Gagne ©2013
Resource-Allocation Graph Scheme
Claim edge Pi Rj indicated that
process Pi may request resource Rj at
some time in the future; (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 must be claimed a priori in
the system i.e before Pi starts executing
all its claim edge must appear in RAG.
Operating System Concepts – 9th Edition 7.28 Silberschatz, Galvin and Gagne ©2013
Unsafe State In Resource-Allocation Graph
Operating System Concepts – 9th Edition 7.29 Silberschatz, Galvin and Gagne ©2013
Banker’s Algorithm
Used when multiple instances of resource available
When a process gets all its resources it must return them in a finite
amount of time
Operating System Concepts – 9th Edition 7.31 Silberschatz, Galvin and Gagne ©2013
Safety Algorithm
1. Let Work (resources) and Finish (process) be vectors of length m
and n, respectively. Initialize:
Work = Available
Finish [i] = false for i = 0, 1, …, n- 1
4. If Finish [i] == true for all i, then the system is in a safe state
Operating System Concepts – 9th Edition 7.32 Silberschatz, Galvin and Gagne ©2013
Resource-Request Algorithm for Process Pi
Operating System Concepts – 9th Edition 7.33 Silberschatz, Galvin and Gagne ©2013
Example of Banker’s Algorithm
5 processes P0 through P4;
3 resource types:
A (10 instances), B (5instances), and C (7
instances)
Snapshot at time T0:
Allocation Max Available
ABC ABC ABC
P0 010 753 332
P1 200 322
P2 302 902
P3 211 222
P4 002 433
Operating System Concepts – 9th Edition 7.34 Silberschatz, Galvin and Gagne ©2013
Example (Cont.)
The content of the matrix Need is defined to be Max – Allocation
Need
ABC
P0 743
P1 122
P2 600
P3 011
P4 431
The system is in a safe state since the sequence < P1, P3, P4, P2, P0>
satisfies safety criteria
Operating System Concepts – 9th Edition 7.35 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.36 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.37 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.38 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.39 Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition 7.40 Silberschatz, Galvin and Gagne ©2013
Example: P1 Request (1,0,2)
Executing safety algorithm shows that sequence < P1, P3, P4, P0, P2>
satisfies safety requirement
Operating System Concepts – 9th Edition 7.41 Silberschatz, Galvin and Gagne ©2013
End of Chapter 7
Operating System Concepts – 9th Edition Silberschatz, Galvin and Gagne ©2013