Skip to content
Related Articles

Related Articles

Deadlock Detection Algorithm in Operating System
  • Difficulty Level : Medium
  • Last Updated : 01 Apr, 2021

If a system does not employ either a deadlock prevention or deadlock avoidance algorithm then a deadlock situation may occur. In this case- 

  • Apply an algorithm to examine state of system to determine whether deadlock has occurred or not.
  • Apply an algorithm to recover from the deadlock. For more refer- Deadlock Recovery

Deadlock Avoidance Algorithm/ Bankers Algorithm: 
The algorithm employs several times varying data structures: 
 

  • Available – 
    A vector of length m indicates the number of available resources of each type.
  • Allocation – 
    An n*m matrix defines the number of resources of each type currently allocated to a process. Column represents resource and resource represent process.
  • Request – 
    An n*m matrix indicates the current request of each process. If request[i][j] equals k then process Pi is requesting k more instances of resource type Rj.

This algorithm has already been discussed here 
 

Now, Bankers algorithm includes a Safety Algorithm / Deadlock Detection Algorithm 
The algorithm for finding out whether a system is in a safe state can be described as follows:

Steps of Algorithm: 
 



  1. Let Work and Finish be vectors of length m and n respectively. Initialize Work= Available. For i=0, 1, …., n-1, if Requesti = 0, then Finish[i] = true; otherwise, Finish[i]= false.
  2. Find an index i such that both 
    a) Finish[i] == false 
    b) Requesti <= Work 
    If no such i exists go to step 4.
  3. Work= Work+ Allocationi 
    Finish[i]= true 
    Go to Step 2.
  4. If Finish[i]== false for some i, 0<=i<n, then the system is in a deadlocked state. Moreover, if Finish[i]==false the process Pi is deadlocked.

For example, 
 

allocation, request matrix

 

  1. In this, Work = [0, 0, 0] & 
    Finish = [false, false, false, false, false]
     
  2. i=0 is selected as both Finish[0] = false and [0, 0, 0]<=[0, 0, 0].
     
  3. Work =[0, 0, 0]+[0, 1, 0] =>[0, 1, 0] & 
    Finish = [true, false, false, false, false].
     
  4. i=2 is selected as both Finish[2] = false and [0, 0, 0]<=[0, 1, 0].
  5. Work =[0, 1, 0]+[3, 0, 3] =>[3, 1, 3] & 
    Finish = [true, false, true, false, false].
     
  6. i=1 is selected as both Finish[1] = false and [2, 0, 2]<=[3, 1, 3].
  7. Work =[3, 1, 3]+[2, 0, 0] =>[5, 1, 3] & 
    Finish = [true, true, true, false, false].
     
  8. i=3 is selected as both Finish[3] = false and [1, 0, 0]<=[5, 1, 3].
  9. Work =[5, 1, 3]+[2, 1, 1] =>[7, 2, 4] & 
    Finish = [true, true, true, true, false].
     
  10. i=4 is selected as both Finish[4] = false and [0, 0, 2]<=[7, 2, 4].
     
  11. Work =[7, 2, 4]+[0, 0, 2] =>[7, 2, 6] & 
    Finish = [true, true, true, true, true].
     
  12. Since Finish is a vector of all true it means there is no deadlock in this example.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :