// Program to implement Banker's Algorithm
#include<stdio.h>
char res[10]={'A','B','C','D','E','F','G','H','I','J'};
void disp(int m,int n,int alloc[5][5],int max[5][5],int avble[5],int need[5][5]);
void safesq(int m,int n,int alloc[5][5],int avble[5],int need[5][5]);
main()
{
int i,j,ch,n,m,work1[5];
int avble[5],alloc[5][5],max[5][5],need[5][5];
printf("\nENTER THE NUMBER OF PROCESSES : \t");
scanf("%d",&n);
printf("\nENTER THE NUMBER OF RESOURCES : \t");
scanf("%d",&m);
printf("\nENTER THE MAXIMUM INSTANCES OF EACH RESOURCE\n");
for(i=0;i<m;i++)
{
printf("\n\tRESOURCE %c:\t",res[i]);
scanf("%d",&avble[i] );
}
printf("\nENTER THE MAXIMUM DEMAND OF EACH PROCESS FOR A RESOURCE\n");
for(i=0;i<n;i++)
{
printf("\n\tFOR PROCESS P%d \n",i);
for(j=0;j<m;j++)
{
printf("\n\tRESOURCE %c : \t",res[j]);
scanf("%d",&max[i][j]);
}
}
printf("\nENTER THE MAX NO. OF INSTANCES OF A RESOURCE ALLOCATED TO");
printf(" A PROCESS.\n");
for(i=0;i<n;i++)
{
printf("\n\tFOR PROCESS P%d \n",i);
for(j=0;j<m;j++)
{
printf("\n\tRESOURCE %c : \t",res[j]);
scanf("%d",&alloc[i][j]);
}
}
for(i=0;i<m;i++)
{
work1[i]=0;
for(j=0;j<n;j++)
work1[i]+=alloc[j][i];
avble[i]=avble[i] - work1[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
need[i][j]=max[i][j]-alloc[i][j];
}
}
while(1)
{
printf("\n\n\tMENU:\n\t1]DISPLAY DATA\n\t2]GENERATE SAFE SEQUENCE");
printf("\n\t3]EXIT\n\tENTER YOUR CHOICE:\t");
scanf("%d",&ch);
switch(ch)
{
case 1:
disp(m,n,alloc,max,avble,need);
break;
case 2:
safesq(m,n,alloc,avble,need);
break;
case 3:
exit(0);
default:
printf("\n\tINVALID CHOICE ENTERED.\n");
}
}
}
void disp(int m,int n,int alloc[5][5],int max[5][5],int avble[5],int need[5][5])
{
int i,j;
printf("\n\t\tALLOCATION\tMAX\tNEED\t AVAILABLE");
printf("\t\t");
for(i=0;i<4;i++)
{
for(j=0;j<m;j++)
printf("%c ",res[j]);
printf(" ");
}
for(i=0;i<n;i++)
{
printf("\n\tP%d\t",i);
for(j=0;j<m;j++)
printf("%d ",alloc[i][j]);
printf(" ");
for(j=0;j<m;j++)
printf("%d ",max[i][j]);
printf("\t");
for(j=0;j<m;j++)
printf("%d ",need[i][j]);
printf(" ");
if(i==0)
{
for(j=0;j<m;j++)
printf("%d ",avble[j]);
}
}
}
void safesq(int m,int n,int alloc[5][5],int avble[5],int need[5][5])
{
int i,j,k=0,l,work[5],work1[5],fin[5],flag=0,flag1=0,safesq[6];
for(i=0;i<m;i++)
work[i]=avble[i];
for(i=0;i<n;i++)
fin[i]=0;
for(l=0;l<n;l++)
{
for(i=0;i<n;i++)
{
flag1=0;
if(fin[i]==0)
{
for(j=0; j<m; j++)
{
if(need[i][j] > work[j])
{
flag1=1;
break;
}
}
if(flag1==0)
{
for(j=0;j<m;j++)
work[j]=work[j]+alloc[i][j];
fin[i]=1;
safesq[k]=i;
k++;
}
}
}
}
for(i=0;i<n;i++)
{
if(fin[i]==0)
{
printf("\n\tFOR THE GIVEN REQUIREMENT THE SYSTEM IS");
printf(" NOT IN A SAFE STATE.\n");
flag=1;
break;
}
}
if(flag==0)
{
printf("\n\tTHE SAFE SEQUENCE IS:\t");
for(i=0;i<n;i++)
printf("P%d ",safesq[i]);
}
}
---------------------------------------------------O/P---------------------------------------------------------------
computer@computer-OptiPlex-745:~$
cc bka.c
bka.c: In function ‘main’:
bka.c:138:5: warning:
incompatible implicit declaration of built-in function ‘exit’
[enabled by default]
computer@computer-OptiPlex-745:~$
./a.out
ENTER THE NUMBER OF
PROCESSES : 4
ENTER THE NUMBER OF
RESOURCES : 3
ENTER THE MAXIMUM INSTANCES
OF EACH RESOURCE
RESOURCE A: 13
RESOURCE B: 7
RESOURCE C: 10
ENTER THE MAXIMUM DEMAND OF
EACH PROCESS FOR A RESOURCE
FOR PROCESS P0
RESOURCE A : 4
RESOURCE B : 3
RESOURCE C : 3
FOR PROCESS P1
RESOURCE A : 7
RESOURCE B : 2
RESOURCE C : 4
FOR PROCESS P2
RESOURCE A : 4
RESOURCE B : 2
RESOURCE C : 5
FOR PROCESS P3
RESOURCE A : 5
RESOURCE B : 3
RESOURCE C : 3
ENTER THE MAX NO. OF
INSTANCES OF A RESOURCE ALLOCATED TO A PROCESS.
FOR PROCESS P0
RESOURCE A : 2
RESOURCE B : 1
RESOURCE C : 1
FOR PROCESS P1
RESOURCE A : 7
RESOURCE B : 2
RESOURCE C : 3
FOR PROCESS P2
RESOURCE A : 3
RESOURCE B : 2
RESOURCE C : 2
FOR PROCESS P3
RESOURCE A : 1
RESOURCE B : 1
RESOURCE C : 3
MENU:
1]DISPLAY DATA
2]GENERATE SAFE SEQUENCE
3]EXIT
ENTER YOUR CHOICE: 1
ALLOCATION MAX NEED
AVAILABLE A B C A B C A B C A B C
P0 2 1 1 4 3 3 2 2 2 0 1 1
P1 7 2 3 7 2 4 0 0 1
P2 3 2 2 4 2 5 1 0 3
P3 1 1 3 5 3 3 4 2 0
MENU:
1]DISPLAY DATA
2]GENERATE SAFE SEQUENCE
3]EXIT
ENTER YOUR CHOICE: 2
THE
SAFE SEQUENCE IS: P1 P2 P3 P0
guest-stEO95@computer-OptiPlex-745:~$
gedit 123.c
guest-stEO95@computer-OptiPlex-745:~$
cc 123.c
123.c: In function ‘main’:
123.c:138:17: warning:
incompatible implicit declaration of built-in function ‘exit’
[enabled by default]
guest-stEO95@computer-OptiPlex-745:~$
./a.out
ENTER THE NUMBER OF
PROCESSES : 4
ENTER THE NUMBER OF
RESOURCES : 3
ENTER THE MAXIMUM INSTANCES
OF EACH RESOURCE
RESOURCE A: 2
RESOURCE B: 3
RESOURCE C: 2
ENTER THE MAXIMUM DEMAND OF
EACH PROCESS FOR A RESOURCE
FOR PROCESS P0
RESOURCE A : 4
RESOURCE B : 5
RESOURCE C : 3
FOR PROCESS P1
RESOURCE A : 6
RESOURCE B : 3
RESOURCE C : 1
FOR PROCESS P2
RESOURCE A : 4
RESOURCE B : 0
RESOURCE C : 0
FOR PROCESS P3
RESOURCE A : 5
RESOURCE B : 6
RESOURCE C : 1
ENTER THE MAX NO. OF
INSTANCES OF A RESOURCE ALLOCATED TO A PROCESS.
FOR PROCESS P0
RESOURCE A : 4
RESOURCE B : 2
RESOURCE C : 0
FOR PROCESS P1
RESOURCE A : 2
RESOURCE B : 3
RESOURCE C : 4
FOR PROCESS P2
RESOURCE A : 2
RESOURCE B : 0
RESOURCE C : 5
FOR PROCESS P3
RESOURCE A : 6
RESOURCE B : 2
RESOURCE C : 3
MENU:
1]DISPLAY DATA
2]GENERATE SAFE SEQUENCE
3]EXIT
ENTER YOUR CHOICE: 1
ALLOCATION MAX NEED
AVAILABLE A B C A B C A B C A B C
P0 4 2 0 4 5 3 0 3 3 -12 -4
-10
P1 2 3 4 6 3 1 4 0 -3
P2 2 0 5 4 0 0 2 0 -5
P3 6 2 3 5 6 1 -1 4 -2
MENU:
1]DISPLAY DATA
2]GENERATE SAFE SEQUENCE
3]EXIT
ENTER YOUR CHOICE: 2
FOR
THE GIVEN REQUIREMENT THE SYSTEM IS NOT IN A SAFE STATE.
No comments:
Post a Comment