Title: Deadlocks
1Deadlocks
2Deadlock
- Permanent blocking of a set of processes that
either compete for system resources or
communicate with each other - Due to conflicting needs for resources between
two or more processes - There is no satisfactory solution in the general
case - Some OSs, such as Unix, ignore the problem and
pretend that deadlocks never occur...
3Contention with Deadlock
4Contention with No Deadlock
5Resource Types
- Finite number of resources to be distributed
among competing processes - A resource is characterized by its type
- Each type may consist of some number of identical
instances - Multiple instances of resource type CPU
- A process requests, uses, and releases a resource
6Deadlock Characterization
- A resource allocation policy must allow these
three conditions to hold for deadlock to occur - 1. Mutual exclusion
- At least one resource must be held in a
nonsharable mode - 2. Hold and wait
- A process is holding at least one resource and
waiting to acquire additional resources currently
being held by other processes - 3. No preemption
- No resource can be forcibly removed from a
process currently holding it
7Conditions for Deadlock
- We also need the occurrence of a particular
sequence of events that result in - 4. Circular wait
- A closed chain of processes exists, such that
each process holds at least one resource needed
by the next process in the chain
8The Conditions for Deadlock
- Deadlock occurs if and only if the circular wait
condition is unresolvable - The circular wait condition is unresolvable when
the first 3 policy conditions hold - Thus the 4 conditions taken together constitute
necessary and sufficient conditions for deadlock
9Resource Allocation Graph
- A system resource allocation graph consists of
- A set of vertices V and a set of edges E
- V is partitioned into two types of nodes
- Active processes
- Resource types
- E is a set of directed edges
- An edge from Pi to Rj signifies that process Pi
requests resource Rj - A direct edge from Rj to Pi signifies that an
instance of Rj has been allocated to Pi
10Resource Allocation Graph
R1
R3
P1 is holding an instance of R2 and waiting for
an instance of R1 P2 is holding an instance of R1
and R2 and waiting for an instance of R3 P3 is
holding an instance of R3
R1
P1
P2
P3
R2
R4
11RA Graphs and Cycles
- If the graph contains no cycles then no process
in the system is deadlocked - The presence of a cycle in the graph, however,
does not necessarily mean a deadlock exists - If the cycle involves only a set of resource
types, each of which has only a single instance,
then a deadlock has occurred - In this case, a cycle is both a necessary and
sufficient condition for a deadlock
12RAG with a Deadlock
R1
R3
P1 is holding an instance of R2 and waiting for
an instance of R1 P2 is holding an instance of R1
and R2 and waiting for an instance of R3 P3 is
holding an instance of R3 and waiting on an
instance of R2
R1
P1
P2
P3
R2
R4
13RAG with a Cycle but no Deadlock
P2
P1 is holding an instance of R2 and waiting for
an instance of R1 P2 is holding an instance of R1
P3 is holding an instance of R1 and waiting for
R2 P4 is holding an instance of R2
R1
R1
P3
P1
P4
R2
14Methods for handling deadlocks
- Deadlock prevention
- Disallow 1 of the 4 necessary conditions of
deadlock occurrence - Deadlock avoidance
- Do not grant a resource request if this
allocation might lead to deadlock - Deadlock detection
- Always grant resource request when possible, but
periodically check for the presence of deadlock
and then recover from it
15Deadlock Prevention
- The OS is designed in such a way as to exclude a
priori the possibility of deadlock - Indirect methods of deadlock prevention
- To disallow one of the 3 policy conditions
- Direct methods of deadlock prevention
- To prevent the occurrence of circular wait
16Deadlock PreventionIndirect Methods
- Mutual Exclusion
- Cannot be disallowed
- Example only 1 process at a time can write to a
file - Hold-and-Wait
- Can be disallowed by requiring that a process
request all its required resources at one time - Block the process until all requests can be
granted simultaneously
- Process may be held up for a long time waiting
for all its requests - Resources allocated to a process may remain
unused for a long time. These resources could be
used by other processes - An application would need to be aware of all
needed resources
17Deadlock PreventionIndirect Methods
- Allow preemption
- If a process that is holding some resources
requests another resource that it cannot get
immediately, then all resources currently held by
the process must be preempted - Resources are implicitly released
- Alternatively, check whether all resources are
available before allocating any - If the non available resources are held by a
waiting process, then the resources are preempted - If the resources are neither available nor held
by a waiting process make the requesting process
wait
18Deadlock PreventionDirect Methods
- Prevent circular wait
- Impose a strictly increasing linear ordering of
resource types. - R1 tape drives O(R1) 2
- R2 disk drives O(R2) 4
- R3 printers O(R3) 7
- A process initially requests a number of
instances of a resource type, say Ri. - A single request must be issued to obtain several
instances. - Subsequently, a process can request instances of
resource type Rj if and only if O(Rj) O(Ri)
19Prevention of Circular Wait
- Circular wait cannot hold under this protocol.
20Proof No Circular Wait
- Assume a circular wait may occur
- Processes P0, P1, ..Pn are involved in circular
wait iff Pi is waiting for Ri which is held by
Pi1 and Pn is waiting for Rn which is held by P0 - Since Process Pi1 is holding Ri and waiting for
Ri1, we must have O(Ri) - This in turn means that
- O(R0)
- impossible!
21Protocol Critique
- The protocol prevents deadlock
- It will, however, often deny resources
unnecessarily because of the ordering imposed on
the requests - Inefficient
22Deadlock Prevention Summary
- Either disallow one of the 3 policy conditions or
use a protocol that prevents circular wait - This leads to inefficient use of resources and
inefficient execution of processes
23Deadlock Avoidance
- The 3 policy conditions are allowed
- Judicious choices are made to assure that the
deadlock is never reached - Allows more concurrency than prevention
- Two approaches are possible
- Do not start a process if its demand might lead
to deadlock - Do not grant an incremental resource request if
this allocation might lead to deadlock - In both cases, a maximum requirements of each
resource must be stated in advance
24Resource types
- Resources in a system are partitioned in
resources types - The partition is system specific
- Each resource type in a system exists in a
certain amount. - Let R(i) be the total amount of resource type i
present in the system - R(main memory) 128 MB
- R(disk drives) 8
- R(printers) 5
25Deadlock Avoidance
- Let C(k,i) be the amount of resource type i
claimed by process k. - It represents the maximum value of resource type
i permitted for process k. - Process k must declare C(k,i) for all resource
types i - Let U(i) be the total amount of resource type i
unclaimed in the system - U(i) R(i) - S_k C(k,i)
26Admission Control
- A new process n is admitted into the system only
if C(n,i) - This policy ensures that deadlock is always
avoided since a process is admitted only if all
its requests can always be satisfied - This is regardless of the execution order
- The strategy is sub-optimal strategy since it
assumes the worst scenario - This scenario occurs when all processes make
their maximum claims all at the same time - Not very realistic
27Bankers algorithm
- Processes are like customers wanting to borrow
money from a bank - A banker should not allocate cash when it cannot
satisfy the needs of all its customers - At any time the state of the system is defined by
the values of R(i), C(j,i) for each resource type
i and process j and the values of other vectors
and matrices.
28Bankers AlgorithmData Structure
- A(j,i) denotes the amount of type i resources
allocated to process j for all (j,i) - V(i) R(i) - S_k A(k,i) denotes the total amount
of type i resources available in the system - N(j,i) denotes the need of resource type i
required by process j to complete its task - N(j,i) C(j,i) - A(j,i)
- Prior to granting a resource request by a
process, the Bankers algorithm tests if granting
the request leads to a safe state - If the state is safe then grant else deny
29Bankers Algorithm
- A state is safe iff there exists a sequence P1,
.. Pn where each Pi is allocated all of its
needed resources and runs to completion - If the state is safe, all processes will
eventually obtain their needed resources an run
to completion - The safety component of the Bankers algorithm
determines if a state is safe
30Safety Algorithm
- REPEAT Find an unfinished process j such that
N(j,i) - If no such j exists, goto EXIT
- Else Mark process j as can finish and recover
its resources - W(i) W(i) A(j,i) for all i.
- Goto REPEAT
- EXIT If all processes can finish then this
state is safe, else it is unsafe.
31Bankers Algorithm
- Let Q(j,i) be the amount of resource type i
requested by process j. - To determine if this request should be granted we
use the bankers algorithm - If Q(j,i) raise error condition (claim exceeded).
- If Q(j,i) else wait (resource not yet available)
32Bankers Algorithm
- Pretend that the request is granted and determine
the new state - V(i) V(i) - Q(j,i) for all i
- A(j,i) A(j,i) Q(j,i) for all i
- N(j,i) N(j,i) - Q(j,i) for all i
- If the resulting state is safe then allocate
resources to process j - Else process j must wait for request Q(j,i)
- Restore old state.
33Bankers AlgorithmExample
- Consider the following 3 resources types
- R(1) 9, R(2) 3, R(3) 6
- And 4 processes with initial state
Claimed Allocated
Available
R1 R2 R3
R1 R2 R3
R1 R2 R3
3 2 2 6 1 3 3 1 4 4 2
2
1 0 0 5 1 1 2 1 1 0 0
2
1 1 2
P1 P2 P3 P4
- Suppose that P2 is requesting Q (1,0,1). Should
this request be granted?
34Bankers AlgorithmExample
- The resulting state would be
Claimed Allocated
Available
R1 R2 R3
R1 R2 R3
R1 R2 R3
3 2 2 6 1 3 3 1 4 4 2
2
1 0 0 6 1 2 2 1 1 0 0
2
0 1 1
P1 P2 P3 P4
- This state is safe with sequence P2, P1, P3,
P4. - After P2 completes, W (6,2,3) which enables the
other processes to finish. - Hence, grant the request.
35Bankers AlgorithmExample
- Assume that after the initial state, P1 requests
Q (1,0,1), the resulting state would be
Claimed Allocated
Available
R1 R2 R3
R1 R2 R3
R1 R2 R3
3 2 2 6 1 3 3 1 4 4 2
2
2 0 1 5 1 1 2 1 1 0 0
2
0 1 1
P1 P2 P3 P4
- This is not a safe state since any process to
finish would need an additional unit of R1. - Thus deny request and block P1.
36Bankers Algorithm Assessment
- A safe state cannot be deadlocked, but an unsafe
state is not necessarily deadlocked. - Ex P1 from the previous (unsafe) state could
release temporarily a unit of R1 and R3
(returning to a safe state) - Some process may need to wait unnecessarily
- Sub-optimal use of resources
- Like other deadlock avoidance algorithms, it
assumes that processes are independent - Free from any synchronization constraint
37Deadlock Detection
- Resource access requests are granted to processes
whenever possible. - The OS uses two algorithms
- The first to check if deadlock is present
- The second to recover from a deadlock
- Deadlock checking can be performed at every
resource request - Such a frequent checking consumes CPU time
38Deadlock Detection Algorithm
- Initialize W(i) V(i) for all i
- Mark each process j for which A(j,i) 0, for all
resource types i, as not deadlocked - REPEAT Find an unmarked process j such that
Q(j,i) - If no such i exists, go to LAST
- Mark process j as not deadlocked and
- set W(i) W(i) A(j,i) for all i.
- Goto REPEAT
- LAST each unmarked process is deadlocked
39Deadlock DetectionComments
- Process j is not deadlocked when Q(j,i) for all i.
- An optimistic approach that assumes that process
j will require no more resources to complete its
task - Process j will soon return all of its allocated
resources. - Thus, W(i) W(i) A(j,i) for all i
- If this assumption is incorrect, a deadlock may
occur later - This deadlock will be detected the next time the
deadlock detection algorithm is invoked
40Deadlock Detection Example
- Mark P4 since it has no allocated resources
- Set W (0,0,0,0,1)
- P3s request
- So mark P3 and set W W (0,0,0,1,0)
(0,0,0,1,1) - Algorithm terminates.
- P1 and P2 are deadlocked
41Deadlock Recovery Approaches
- Abort all deadlocked processes
- One of the most common solutions adopted in OS!!
- Rollback each deadlocked process to some
previously defined checkpoint and restart them - Original deadlock may reoccur
- Successively abort deadlock processes until
deadlock no longer exists - Each time, the deadlock detection algorithm must
be invoked
42Deadlock Recovery Approaches
- Successively preempt some resources from
processes and allocate them to other processes
until deadlock no longer exists - A process that has a resource preempted must be
rolled back prior to its acquisition - For the 2 last approaches, a victim process needs
to be selected according to - Least amount of CPU time consumed so far
- Least total resources allocated so far
- Least amount of work produced so far...
43An integrated deadlock strategy
- We can combine the previous approaches in the
following way - Group resources into a number of different
classes and order them - Swappable space (secondary memory)
- Process resources (I/O devices, files...)
- Main memory...
- Use prevention of circular wait to prevent
deadlock between resource classes - Use the most appropriate approach for each class
for deadlocks within each class
44Conclusion
- Deadlock characterization
- Methods for handling deadlocks
- Deadlock prevention
- Deadlock avoidance
- Deadlock detection and recovery
- Integrated approach to deadlock