#include<stdio.h>
#include<conio.h>
int a[10][10],m[10][10],n[10][10],av[10],finish[10],safe[10],nor,nop;
void acceptdata(int x[][10])
{
int i,j;
for(i=0;i<nop;i++)
{
printf("P%d\n",i);
for(j=0;j<nor;j++)
{
printf("%c",65+j);
scanf("%d",&x[i][j]);
}
}
}
void acceptavailability()
{
int i;
for(i=0;i<nor;i++)
{
printf("%c",65+i);
scanf("%d",&av[i]);
}
}
void displaydata()
{
int i,j;
printf("\n\tAllocation\t\tMax\t\tNeed\n");
printf("\t");
for(i=0;i<3;i++)
{
for(j=0;j<nor;j++)
{
printf("%4c",65+j);
}
printf("\t");
}
for(i=0;i<nop;i++)
{
printf("\n%d\t",i);
for(j=0;j<nor;j++)
printf("%4d",a[i][j]);
printf("\t");
for(j=0;j<nor;j++)
printf("%4d",m[i][j]);
printf("\t");
for(j=0;j<nor;j++)
printf("%4d",n[i][j]);
}
printf("\nAvailable\n");
for(j=0;j<nor;j++)
printf("%4d",av[j]);
}
void calcneed()
{
int i,j;
for(i=0;i<nop;i++)
for(j=0;j<nor;j++)
n[i][j]=m[i][j]-a[i][j];
}
int checkneed(int pno)
{
int i;
for(i=0;i<nor;i++)
if(n[pno][i]>av[i])
return 0;
return 1;
}
void banker()
{
int i=0,j=0,k=0,flag=0;
while(flag<2)
{
if(!finish[i])
{
printf("\nNeed%d(",i);
for(j=0;j<nor;j++)
printf("%d",n[i][j]);
if(!checkneed(i))
{
printf("\b)>Available(");
for(j=0;j<nor;j++)
printf("%d",av[j]);
printf("\b)");
printf("\nNeed cannot be satisfied consider next process");
}
else
{
printf("\b)<=Available(");
for(j=0;j<nor;j++)
printf("%d",av[j]);
printf("\b");
printf("\nNeed can be satisfied,so allocate required resources");
printf("\n\tAllocation %d\t\tAvailable\t\tNeed%d\n",i,i);
for(j=0;j<nor;j++)
{
a[i][j]=m[i][j];
av[j]-=n[i][j];
n[i][j]=0;
}
for(j=0;j<nor;j++)
printf("%4d",a[i][j]);
printf("\t");
for(j=0;j<nor;j++)
printf("%4d",av[j]);
printf("\t");
for(j=0;j<nor;j++)
printf("%4d",n[i][j]);
printf("\nAfter P%d terminates it will release all its resources",i);
printf("\tAllocation%d\t\tAvailable\t\tNeed%d\n",i,i);
for(j=0;j<nor;j++)
{
av[j]+=a[i][j];
a[i][j]=0;
}
for(j=0;j<nor;j++)
printf("%4d",a[i][j]);
printf("\t");
for(j=0;j<nor;j++)
printf("%4d",av[j]);
printf("\t");
for(j=0;j<nor;j++)
printf("%4d",n[i][j]);
safe[k++]=i;
finish[i]=1;
}
}
if((i+1)%nop==0)
flag++;

i=(i+1)%nop;

}
if(k==nop)
{
printf("\nSystem is in safe state");
printf("\nSafe Sequence:");
for(i=0;i<k;i++)
printf("P%d->",safe[i]);
printf("\b\b");
}
else
{
printf("\nSystem is in not safe state");

}
}
void main()
{
clrscr();
printf("Enter no of processes and no of resources: ");
scanf("%d%d",&nop,&nor);
printf("Enter allocation\n");
acceptdata(a);
printf("Enter Max requirement\n");
acceptdata(m);
printf("Enter availability \n");
acceptavailability();
calcneed();
displaydata();
banker();
getch();
}

Post a Comment

Previous Post Next Post