Deadlocks
Deadlocks
Deadlocks
Deadlocks
3.1. Resource
3.2. Introduction to deadlocks
3.3. The ostrich algorithm
3.4. Deadlock detection and recovery
3.5. Deadlock avoidance
3.6. Deadlock prevention
3.7. Other issues
1
Resources
2
Resources (1)
3
Resources (2)
5
Resource Acquisition
typedef int semaphore;
typedef int semaphore; semaphore resource_1;
semaphore resource_1; semaphore resource_2;
semaphore resource_2;
void process_A(void)
void process_A(void) {
{ down(&resource_1);
down(&resource_1); down(&resource_2);
down(&resource_2); use_both_resources();
use_both_resources(); up(&resource_2);
up(&resource_2); up(&resource_1);
up(&resource_1); }
}
void process_B(void)
void process_B(void) {
{ down(&resource_2);
down(&resource_1); down(&resource_1);
down(&resource_2); use_both_resources();
use_both_resources(); up(&resource_1);
up(&resource_2); up(&resource_2);
up(&resource_1); }
}
• Formal definition :
A set of processes is deadlocked if each process in the set is waiting
for an event that only another process in the set can cause
• Usually the event is release of a currently held resource
• None of the processes can …
– run
– release resources
– be awakened
7
DEADLOCK ILLUSTRATION
8
Four Conditions for Deadlock
11
Deadlock Modeling (4)
A B C
14
Detection with One Resource of Each Type (1)
15
Deadlock Detection Algorithm for one resource of each type
1. For each node N in the graph, perform the following 5 steps with N
as the starting node
2. Initialize L (i.e., list of nodes) to the empty list and designate all the
arcs as unmarked
3. Add the current node to the end of L and check to see if the node
now appears in L two times. If it does, the graph contains a cycle
(listed in L) and the algorithm terminates
4. For the given node, see if there are any unmarked outgoing arcs. If
so, go to step 5; if not, go to step 6.
5. Pick and unmarked outgoing arc at random and mark it. Then follow
it to the new current node and go to step 3.
6. We have now reached a dead end. Remove it and go back to the
previous node, that is, the one that was current just before this one,
make that one the current node, and go to step 3. IF this node is the
initial node, the graph does not contain any cycles and the algorithm
terminates.
16
Detection with Multiple Resources of Each Type (2)
17
Deadlock detection with multiple Resources of each type
18
Detection with Multiple Resource of Each Type
(3)
19
Recovery from Deadlock (1)
20
Recovery from Deadlock (2)
21
Deadlock Avoidance
Resource Trajectories
23
Safe and Unsafe States (1)
Demonstration with one resource where 10 instances
of the same resource exists
24
Safe and Unsafe States (1)
Demonstration with one resource where 10 instances
of the same resource exists
25
Safe and Unsafe States (2)
31
Attacking the Hold and Wait Condition
• Problems
– may not know required resources at start of run
– also ties up resources other processes could be using
• Variation:
– process must give up all resources
– then request all immediately needed
32
Attacking the No Preemption Condition
33
Attacking the Circular Wait Condition (1)
(a) (b)
34
Attacking the Circular Wait Condition (1)
35
Other Issues
Two-Phase Locking
• Phase One
– process tries to lock all records it needs, one at a time
– if needed record found locked, start over
– (no real work done in phase one)
• If phase one succeeds, it starts second phase,
– performing updates
– releasing locks
• Note similarity to requesting all resources at once
• Algorithm works where programmer can arrange
– program can be stopped, restarted
36
Nonresource Deadlocks
37
Starvation
• Algorithm to allocate a resource
– may be to give to shortest job first
• Solution:
– First-come, first-serve policy
38