#include<stdio.h>
#include<stdlib.h>
typedef struct proc
{
int rm[10];
int ra[10];
int rn[10];
int pf;
int pid;
}proc;
proc p[25];
int ar[10];
int np,nr;
int banker(proc p1[25],int ar1[10]);
void display();
void display1(proc p1[25]);
void request1();
void main()
{
int i,j,val;
proc p1[25];
int ar1[10];
printf("\n Enter No of proocesses : ");
scanf("%d",&np);
printf("\n Enter No of Resources : ");
scanf("%d",&nr);
printf("\n Enter Process Details.....");
for(i=0;i<np;i++)
{
printf("\n Enter Process ID : ");
scanf("%d",&p[i].pid);
p[i].pf=0;
printf("\n Enter Maximum Resources Needed : ");
for(j=0;j<nr;j++)
{
printf("\n R%d=",j);
scanf("%d",&p[i].rm[j]);
}
printf("\n Enter Resources Allocated : ");
for(j=0;j<nr;j++)
{
printf("\n R%d=",j);
scanf("%d",&p[i].ra[j]);
p[i].rn[j]=p[i].rm[j]-p[i].ra[j];
}
}
printf("\n Enter Resources Available : ");
for(j=0;j<nr;j++)
{
printf("\n R%d=",j);
scanf("%d",&ar[j]);
}
display();
for(i=0;i<np;i++)
{
p1[i]=p[i];
}
display1(p1);
printf("\n Available Resources : ");
for(i=0;i<nr;i++)
{
ar1[i]=ar[i];
printf("\t%d",ar1[i]);
}
val=banker(p1,ar1);
request1();
}
void display()
{
int i,j;
system("clear");
printf("\n PID Max_Need_Resources Allocated_Resources");
for(i=0;i<np;i++)
{
printf("\n %d",p[i].pid);
printf(" ");
for(j=0;j<nr;j++)
{
printf(" %d",p[i].rm[j]);
}
printf(" ");
for(j=0;j<nr;j++)
{
printf(" %d",p[i].ra[j]);
}
printf("\n");
}
}
int banker(proc p1[25],int ar1[10])
{
int i,id,j,k=0,flg=0;
// int ar1[10];
// proc p1[25];
printf("\n Sequence Of Execution : ");
while(k<np)
{
for(i=0;i<np;i++)
{
if(p[i].pf==0)
{
for(j=0;j<nr;j++)
{
if(p1[i].rn[j]<=ar1[j])
{
flg=0;
}
else
{
flg=1;
break;
}
}
if(flg==0)
{
for(j=0;j<nr;j++)
{
ar1[j]=ar1[j]+p1[i].ra[j];
p[i].pf=1;
}
printf("=====>>%d",p[i].pid);
k++;
break;
}
}
}//end for
if(flg==1)
{
printf("\n System is in Unsafe state.....");
return(0);
}
}//end while
if(k==np)
{
printf("\n System is in Safe State......");
return(1);
}
printf("\n");
}
void request1()
{
int i,id,r[10],j,val;
proc p2[25];
int ar2[10];
//========requesting for resources========
for(i=0;i<np;i++)
{
p2[i]=p[i];
}
display1(p2);
printf("\n Available Resources : ");
for(i=0;i<nr;i++)
{
ar2[i]=ar[i];
printf("\t%d",ar2[i]);
}
printf("\n Enter Process Id : ");
scanf("%d",&id);
printf("\n Enter Requested resources : ");
for(i=0;i<nr;i++)
{
scanf("%d",&r[i]);
p2[id].ra[i]=p2[id].ra[i]+r[i];
ar2[i]=ar2[i]-r[i];
printf("Resource %d",i);
}
printf("\n caall to banker.....");
val=banker(p2,ar2);
if(val==1)
{
printf("\n Requested Resources Are Allocated.....");
}
else
{
printf("\n Requested Resources Are Not Allocated.....");
}
}
void display1(proc p1[25])
{
int i,j;
// system("clear");
printf("\n PID Max_Need_Resources Allocated Cur_Need");
for(i=0;i<np;i++)
{
printf("\n %d",p1[i].pid);
printf(" ");
for(j=0;j<nr;j++)
{
printf(" %d",p1[i].rm[j]);
}
printf(" ");
for(j=0;j<nr;j++)
{
printf(" %d",p1[i].ra[j]);
}
printf(" ");
for(j=0;j<nr;j++)
{
printf(" %d",p1[i].rn[j]);
}
printf("\n");
}
}