BANKER'S ALGORITHM

#include<stdio.h>
main()
{
   int nr=3,np=5,i,j;

   puts("Enter number of resources and processes");
   scanf("%d%d",&nr,&np);

   int ins[nr],all[np][nr];
   int max[np][nr],avl[nr],work[nr];

   //ins-instances , all-allocation
   //max-maximum , avl-available
   // work-to save available

   puts("Enter the total instances of resources");
   for(j=0;j<nr;j++)
   scanf("%d",&ins[j]);

   puts("Enter the allocations");
   for(i=0;i<np;i++)
   {
      for(j=0;j<nr;j++)
      scanf("%d",&all[i][j]);
   }

   puts("Enter the maximum resources required");
   for(i=0;i<np;i++)
   {
      for(j=0;j<nr;j++)
      scanf("%d",&max[i][j]);
   }

   puts("Enter the availability of resources");
   for(j=0;j<nr;j++)
   scanf("%d",&avl[j]);

   int need[np][nr];

   AGAIN:for(i=0;i<np;i++)
   {
      for(j=0;j<nr;j++)
      need[i][j]=max[i][j]-all[i][j];
   }

   puts("\n\n\nTotal instances of resources");
   for(j=0;j<nr;j++)
   printf("For Resource %d = %d\n",j+1,ins[j]);

   puts("\n\nA L L O C A T I O N");
   for(i=0;i<np;i++)
   {
      for(j=0;j<nr;j++)
      printf("%d  ",all[i][j]);  //allocation print
      printf("\n");
   }

   puts("\n\nM A X I M U M");
   for(i=0;i<np;i++)
   {
      for(j=0;j<nr;j++)
      printf("%d  ",max[i][j]);   //maximum print
      printf("\n");
   }

   puts("\n\nA V A I L A B L E");
   for(j=0;j<nr;j++)
   printf("%d  ",avl[j]);

   puts("\n\nN E E D");
   for(i=0;i<np;i++)
   {
      for(j=0;j<nr;j++)
      printf("%d  ",need[i][j]); //need print
      printf("\n");
   }

   int finish[np];
   int flag=0;

   for(i=0;i<np;i++)
   {
      finish[i]=0;
      if(i<nr)
      work[i]=avl[i];
   }

   i=0;
   int count=0;

   //SAFETY ALGORITHM

   puts("\n\nP R O C E S S   S E Q U E N C E");
   while(count<np)
   {
      flag=0;
      if(finish[i]==0)
      {
         for(j=0;j<nr;j++)
         {
            if(need[i][j]>avl[j])
            {
               flag=1;
               break;
            }
         }
         if(flag==0)
         {
            finish[i]=1;
            for(j=0;j<nr;j++)
            avl[j]=avl[j]+all[i][j];
            printf("PROCESS = %d\t",i+1);
            for(j=0;j<nr;j++)
            printf("%d ",avl[j]);
            printf("\n");
         }
      }
      else count++;

      if(i==np-1)
      i=0;
      else i++;
   }

   flag=0;
   for(i=0;i<nr;i++)
   {
      if(avl[i]!=ins[i])
      {
         flag=1;
         break;
      }
   }

   if(count==np&&flag==0)
      puts("S A F E   S T A T E");
   else
      puts("N O T   S A F E   S T A T E");

   //RESOURCE REQUEST ALGORITHM

   REQUEST:puts("Any request enter 1");
   scanf("%d",&flag);

   if(flag==1)
   {
      puts("Enter process no.");
      scanf("%d",&count);
      //count is utilised here for saving process no.

      int req[nr];
      puts("Enter resource request");
      for(i=0;i<nr;i++)
      scanf("%d",&req[i]);
   
      for(i=0;i<nr;i++)
      {
         if(req[i]>need[count-1][i])
         {
           puts("request is more than need");
           goto REQUEST;
         }
      }

      for(i=0;i<nr;i++)
      {
         if(req[i]>work[i])
         {
            puts("AVAILABILITY IS INSUFFICIENT");
           goto REQUEST;
         }
      }

      for(i=0;i<nr;i++)
      {
         avl[i]=work[i]-req[i];
         all[count-1][i]+=req[i];
      }
      goto AGAIN;
   }
   else
   puts("TERMINATE");
}

Comments