- Assume N Processes
, M Resources
- Availability vector
, units of each resource (initialized to maximum, changes dynamically)
- Let
be an
matrix
-
means Process
will request at most
units of
Units of
currently held by
Remaining need by
for units of
-
, for all
- Resource Request
- At any instance,
posts its request for resources in vector
(i.e., no hold-and-wait)
- Step 1: verify that a process matches its needs.
if
abort -error, impossible
- Step 2: check if the requested amount is available.
if
goto Step 1 -Pi must wait
- Step 3: provisional allocation (i.e., guess and check).
if isSafe() then grant resources (system is safe) else cancel allocation; goto Step 1-Pi must wait
- isSafe
- Find out whether the system is in a safe state. Work and Finish are two temporary vectors.
- Step 1: initialize.
for all
;
for all
- Step 2: find a process
such that
and
, for all
if no such process, goto Step 4
- Step 3:
(i.e., pretend it finishes and frees up the resources)
goto Step 2
- Step 4: if
for all
then return true-yes, the system is safe
else return false-no, the system is NOT safe
- What is safe?
- Safe with respect to some resource allocation
- very safe
for all Processes
. Processes can run to completion in any order.
- safe (but take care)
for some
for at least one
such that There is at least one correct order in which the processes may complete their use of resources.
- unsafe (deadlock inevitable)
for some
for at least one
But some processes cannot complete successfully.
- deadlock
for all
Processes are already blocked or will become so as they request a resource.
2004-05-25