Advertisement
_Black_Panther_

Write down a program that detects if there is a deadlock in the system by using resource allocation

Mar 31st, 2021 (edited)
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.60 KB | None | 0 0
  1. #include<stdio.h>
  2. int main() {
  3.     int alloc[10][10];
  4.     int request[10][10],avail[10],r[10],w[10];
  5.     static int mark[20];
  6.     int i,j,np,nr;
  7.     // open the input file and read the content of
  8.     // this program expects that all the input is stored in defined manner
  9.     // inside input.txt file
  10.     FILE* file = fopen ("in.txt", "r");
  11.     // read all the conetents
  12.     fscanf (file, "%d", &np);
  13.     fscanf (file, "%d", &nr);
  14.     for(i=0; i<nr; i++) {
  15.         fscanf (file, "%d", &r[i]);
  16.     }
  17.     // read the allocation matrix
  18.     for(i=0; i<np; i++)
  19.         for(j=0; j<nr; j++)
  20.             fscanf (file, "%d", &alloc[i][j]);
  21.     // read the request matrix
  22.     for(i=0; i<np; i++) for(j=0; j<nr; j++)
  23.             fscanf (file, "%d", &request[i][j]);
  24.     // solution starts here
  25.     printf("\n");
  26.     //marking processes with zero allocation
  27.     for(i=0; i<np; i++) {
  28.         int count=0;
  29.         for(j=0; j<nr; j++)      {
  30.             if(alloc[i][j]==0)
  31.                 count++;
  32.             else
  33.                 break;
  34.         }
  35.         if(count==nr)
  36.             mark[i]=1;
  37.     }
  38.     for(j=0; j<nr; j++)
  39.         w[j]=avail[j];
  40.  
  41.  
  42.  
  43.     //mark processes with request less than or equal to W
  44.     for(i=0; i<np; i++) {
  45.         int canbeprocessed=0;
  46.         if(mark[i]!=1) {
  47.             for(j=0; j<nr; j++) {
  48.                 if(request[i][j]<=w[j])
  49.                     canbeprocessed=1;
  50.                 else {
  51.                     canbeprocessed=0;
  52.                     break;
  53.                 }
  54.             }
  55.             if(canbeprocessed) {
  56.                 mark[i]=1;
  57.                 for(j=0; j<nr; j++) w[j]+=alloc[i][j];
  58.             }
  59.         }
  60.     }
  61.    
  62.     printf("printing the contents read from file: \n");
  63.     printf("Numer of processes: %d",np);
  64.     printf("\n");
  65.     printf("Numer of resources: %d",nr);
  66.     printf("\n");
  67.     printf("Availbaility vector\n");
  68.    
  69.     for(i=0; i<nr; i++) {
  70.         printf("%d ",r[i]);
  71.     }
  72.     printf("\n");
  73.    
  74.     printf("Allocation Matrix\n");
  75.     for(i=0; i<np; i++) {
  76.         for(j=0; j<nr; j++)
  77.             printf("%d ", alloc[i][j]);
  78.         printf("\n");
  79.     }
  80.    
  81.     printf("\n");
  82.     printf("Request Matrix\n");
  83.    
  84.     for(i=0; i<np; i++) {
  85.         for(j=0; j<nr; j++)
  86.             printf("%d ", request[i][j]);
  87.         printf("\n");
  88.     }
  89.     //checking for unmarked processes
  90.     int deadlock=0;
  91.     for(i=0; i<np; i++)
  92.         if(mark[i]!=1)
  93.             deadlock=1;
  94.     if(deadlock)
  95.         printf("\nThere exist a Deadlock");
  96.     else printf("\n There does not exists no Deadlock");
  97.     //fclose (file);
  98. }
  99.  
  100.  
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement