If a system has no deadlock prevention and no deadlock avoidance scheme, then it needs a deadlock detection scheme with recovery from deadlock capability. For this, information should be kept on the allocation of resources to processes, and on outstanding allocation requests. Then, an algorithm is needed which will determine whether the system has entered a deadlock state. This algorithm must be invoked periodically.
Deadlock Detection Algorithm (Shoshani and Coffman)
Data Structure is as:
Available [m]
Allocation [n,m] as in Banker’s Algorithm
Request [n,m] indicates the current requests of each process.
Let Work and Finish be vectors of length m and n, as in the safety algorithm.
The algorithm is as follows:
1. Initialize Work = Available
For i = 1 to n do
If Allocation(i) = 0 then Finish[i] = true else Finish[i] = false
2. Search an i such that
Finish[i] = false and Request(i) ≤ Work
If no such i can be found, go to step 4.
3. For that i found in step 2 do:
Work = Work + Allocation(i)
Finish[i] = true
Go to step 2.
4. If Finish[i] ≠ true for a some i then the system is in deadlock state else the system is safe