Wednesday 28 November 2012

Deadlock Detection algorithm


/* Banker's algorithm
This is a deadlock avoidance/prevention algorithm means avoid/prevent the happening of deadlock.
This is a  resource allocation algorithm means allocate the resources in way in which deadlock should not occur. This is a deadlock detection algorithm means if there is no way to prevent deadlock, then say deadlock occurred. This algorithm was developed by Edsger Dijkstra. */

#include <stdio.h>;
#include <conio.h>;

void main()
{
 int found,flag,l,p[4][5],tp,tr,c[4][5],i,j,k=1,m[5],r[5],a[5],temp[5],sum=0;
 clrscr();
 printf("Enter total no of processes");
 scanf("%d",&tp);
 printf("Enter total no of resources");
 scanf("%d",&tr);
 printf("Enter claim (Max. Need) matrix\n");
 for(i=1;i<=tp;i++)
 {
  printf("process %d:\n",i);
  for(j=1;j<=tr;j++)
  scanf("%d",&c[i][j]);
 }
 printf("Enter allocation matrix\n");
 for(i=1;i<=tp;i++)
 {
  printf("process %d:\n",i);
  for(j=1;j<=tr;j++)
  scanf("%d",&p[i][j]);
 }
 printf("Enter resource vector (Total resources):\n");
 for(i=1;i<=tr;i++)
 {
  scanf("%d",&r[i]);
 }
 printf("Enter availability vector (available resources):\n");
 for(i=1;i<=tr;i++)
 {
  scanf("%d",&a[i]);
  temp[i]=a[i];
 }

 for(i=1;i<=tp;i++)
 {
  sum=0;
  for(j=1;j<=tr;j++)
  {
   sum+=p[i][j];
  }
  if(sum==0)
  {
   m[k]=i;
   k++;
  }
 }
 for(i=1;i<=tp;i++)
 {
  for(l=1;l<k;l++)
  if(i!=m[l])
  {
   flag=1;
   for(j=1;j<=tr;j++)
   if(c[i][j]<temp[j])
   {
    flag=0;
    break;
   }
  }
  if(flag==1)
  {
   m[k]=i;
   k++;
   for(j=1;j<=tr;j++)
   temp[j]+=p[i][j];
  }
 }
 printf("deadlock causing processes are:");
 for(j=1;j<=tp;j++)
 {
  found=0;
  for(i=1;i<k;i++)
  {
   if(j==m[i])
   found=1;
  }
  if(found==0)
  printf("%d\t",j);
 }
 getch();
}
//program written by Mars. 27/11/2011. OS lab.

Output-

Enter total no. of processes : 4
Enter total no. of resources : 5
Enter claim (Max. Need) matrix :
0 1 0 0 1
0 0 1 0 1
0 0 0 0 1
1 0 1 0 1
Enter allocation matrix :
1 0 1 1 0
1 1 0 0 0
0 0 0 1 0
0 0 0 0 0
Enter resource vector (Total resources) :
2 1 1 2 1
Enter availability vector (available resources) :
0 0 0 0 1
deadlock causing processes are : 2 3

Note-
See the algorithm at: http://en.wikipedia.org/wiki/Banker%27s_algorithm

5 comments:

  1. I want algorithm to this program please provide me

    ReplyDelete
  2. thank you....so much

    ReplyDelete
  3. .thank you for sharing useful post.
    web programming tutorial
    welookups

    ReplyDelete
  4. Code gets dumped after getting all the required fields. Kindly rectify it!.

    ReplyDelete

You are welcome, your comment helps me to make this blog more better.