Advertisement
Bewin

bankers algo

Jul 14th, 2024
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.79 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. typedef struct{
  4.     int max[100];
  5.     int allocation[100];
  6.     int need[100];
  7.     int finish;
  8. }Process;
  9.  
  10. int n,m,ans[100],front=-1,rear=-1;
  11.  
  12. void enqueue(int item){
  13.     if(front==-1){
  14.         front++;
  15.     }
  16.     ans[++rear] = item;
  17. }
  18.  
  19. int dequeue(){
  20.     int item = ans[front];
  21.     if(front==rear) {
  22.         rear = -1;
  23.         front = -1;
  24.     }
  25.     else
  26.         front++;
  27.     return item;
  28. }
  29.  
  30. void getInstanceDetails(int t[]){
  31.     for (int i = 0; i < m; ++i) {
  32.         printf("\nEnter total instance of resource %d:",i+1);
  33.         scanf("%d",&t[i]);
  34.     }
  35. }
  36.  
  37. void getProcessDetails(Process p[]){
  38.     for (int i = 0; i < n; ++i) {
  39.         printf("\nEnter Details of Process P%d:\n",i);
  40.         for (int j = 0; j < m; ++j) {
  41.             printf("Max of Instance %d:",j+1);
  42.             scanf("%d",&p[i].max[j]);
  43.         }
  44.         printf("\n");
  45.         for (int j = 0; j < m; ++j) {
  46.             printf("Allocation of Instance %d",j+1);
  47.             scanf("%d",&p[i].allocation[j]);
  48.             p[i].need[j] = p[i].max[j] - p[i].allocation[j];
  49.         }
  50.         p[i].finish = 0;
  51.     }
  52. }
  53.  
  54. void displayTable(Process p[]){
  55.     for (int i = 0; i < 4; ++i) {
  56.         printf("+++++++++++++++");
  57.     }
  58.     printf("\n|  Process  |      Max      |  Allocation   |     Need     |\n");
  59.     for (int i = 0; i < n; ++i) {
  60.         printf("|P%-10d|",i);
  61.         for (int j = 0; j < m; ++j) {
  62.             printf("%-5d",p[i].max[j]);
  63.         }
  64.         printf("|");
  65.         for (int j = 0; j < m; ++j) {
  66.             printf("%-5d",p[i].allocation[j]);
  67.         }
  68.         printf("|");
  69.         for (int j = 0; j < m; ++j) {
  70.             printf("%-4d",p[i].need[j]);
  71.         }
  72.         printf("|\n");
  73.         if (i<m-1) {
  74.             for (int j = 0; j < 4; ++j) {
  75.                 printf("---------------");
  76.             }
  77.         }
  78.         printf("\n");
  79.     }
  80.     for (int i = 0; i < 4; ++i) {
  81.         printf("+++++++++++++++");
  82.     }
  83. }
  84.  
  85. void findAvail(int a[], int t[], Process p[]){
  86.     printf("\nAvailable: { ");
  87.     for (int i = 0; i < m; ++i) {
  88.         int temp=0;
  89.         for (int j = 0; j < n; ++j) {
  90.             temp += p[j].allocation[i];
  91.         }
  92.         a[i] = t[i] - temp;
  93.         printf("%d ",a[i]);
  94.     }
  95.     printf("}\n");
  96. }
  97.  
  98. void bankersAlgorithm(Process process[], int totalInstance[]){
  99.     int availableInstance[m];
  100.     findAvail(availableInstance, totalInstance, process);
  101.     int prev_rear;
  102.     while (1){
  103.         for (int i = 0; i < n; ++i) {
  104.             prev_rear = rear;
  105.             if(!process[i].finish){
  106.                 for (int j = 0; j < m; ++j) {
  107.                     if(process[i].need[j] > availableInstance[j]){
  108.                         process[i].finish=0;
  109.                         break;
  110.                     }
  111.                     process[i].finish = 1;
  112.                 }
  113.                 if(process[i].finish){
  114.                     enqueue(i);
  115.                     for (int j = 0; j < m; ++j) {
  116.                         availableInstance[j] += process[i].allocation[j];
  117.                     }
  118.                 }
  119.             }
  120.         }
  121.         if(rear==n-1){
  122.             printf("\nThe Safe Sequence is: { ");
  123.             for (int j = 0; j < n-1; ++j) {
  124.                 printf("P%d, ",dequeue());
  125.             }
  126.             printf("P%d }\n",dequeue());
  127.             break;
  128.         }
  129.         else if(prev_rear==rear) {
  130.             printf("\nThe system is not Safe!\n");
  131.             break;
  132.         }
  133.     }
  134. }
  135.  
  136. int main(){
  137.     printf("Enter no. of resources:");
  138.     scanf("%d",&m);
  139.     int totalInstance[m];
  140.     printf("Enter no. of processes:");
  141.     scanf("%d",&n);
  142.     Process process[n];
  143.     getInstanceDetails(totalInstance);
  144.     getProcessDetails(process);
  145.     displayTable(process);
  146.     bankersAlgorithm(process, totalInstance);
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement