±
STEP 3: Pretend to allocate requested resources to Pi by
modifying the state as follows:
Available
:=
Available

Request
(i)
;
Allocation
(
i
)
:= Allocation
(
i
)
+ Request
(
i
)
;
Need
(
i
)
:= Need
(
i
)
 Request
(
i
)
;
±
If safe
⇒
resources are allocated to
Pi
.
±
If unsafe
⇒
Pi
must wait and the old resourceallocation state
is restored.
Example of Banker’s Algorithm
°
5 processes
±
P0  P4;
°
3 resource types
±
A(10 instances), B (5 instances), C (7 instances)
°
Snapshot at time T0
Allocation
Max
Available
A
B
C
A
B
C A
B
C
P0
0
1
0
7
5
3 3
3
2
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
Example (cont.)
°
The content of the matrix
Need
is defined to
be
Max

Allocation
.
°
The system is in a safe state since the
sequence <
P
1,
P
3,
P
4,
P
2,
P
0> satisfies safety
criteria.
Need
A
B
C
P0
7
4
3
P1
1
2
2
P2
6
0
0
P3
0
1
1
P4
4
3
1
Example: P1 requests (1,0,2)
°
Check to see that Request
≤
Available
±
((1,0,2)
≤
(3,3,2))
⇒
true.
Allocation Need
Available
A
B
C
A
B
C A
B
C
P0
0
1
0
7
4
3
2
3
0
P1
3
0
2
0
2
0
P2
3
0
2
6
0
0
P3
2
1
1
0
1
1
P4
0
0
2
4
3
1
Example (cont.)
°
Executing the 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?
Deadlock Detection
°
Allow system to enter deadlock state
°
Detection Algorithm
°
Recovery Scheme
Single Instance of each resource type
°
Maintain waitfor graph
°
Nodes are processes
°
Pi
→
Pj
if
Pi
is waiting for
Pj
.
°
Periodically invoke an algorithm that
searches for a cycle in the graph.
°
An algorithm to detect a cycle in a graph
requires an order of
n
^2 operations, where
n
is the number of vertices in the graph.
Several instances of a resource type
°
Data Structures
±
Available
: Vector of length
m
. If
Available
[
j
] =
k
, there are
k
instances of resource type
Rj
available.
±
Allocation
:
n
×
m
matrix. If
Allocation
[
i
,
j
] =
k
, then process
Pi
is currently allocated
k
instances of resource type
Rj
.
±
Request
: An
n
×
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 .
Deadlock Detection Algorithm
°
Step 1: Let
Work
and
Finish
be vectors of length
m
and
n
,
respectively.
Initialize
±
Work
:=
Available
±
For
i
= 1,2,…,
n
, if
Allocation
(
i
)
≠
0, then
Finish
[
i
] :=
false
,
otherwise
Finish
[
i
] :=
true.
°
Step 2: Find an index
i
such that both:
±
Finish
[
i
] =
false
±
Request
(
i
)
≤
Work
±
If no such
i
exists, go to step 4.
Deadlock Detection Algorithm
°
Step 3:
Work
:=
Work
+ Allocation(
i
)
±
Finish
[
i
] :=
true
±
go to step 2
°
Step 4: If
Finish
[
i
] =
false
for some
i
, 1
≤
i
≤
n
, then the
system is in a deadlock state.
Moreover, if
Finish
[
i
] =
false
, then
Pi
is deadlocked.
Algorithm requires an order of m
×
(n^2) operations
to detect whether the system is in a deadlocked
state.
Example of Detection Algorithm
°
5 processes 
P
0 
P
4;
3 resource types

A
(7
instances),
B
(2 instances),
C
(6 instances)
°
Snapshot at time
T
0: <
P
0,
P
2,
P
3,
P
1,
P
4> will result in
Finish
[
i
] = true for all
i
.
Allocation Max
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
0
P3
2
1
1
1
0
0
P4
0
0
2
0
0
2
Example (cont.)
°
P2 requests an additional instance of type C.
You've reached the end of your free preview.
Want to read all 45 pages?
 One '20