#include<stdio.h>
main()
{
int nr=3,np=5,i,j;
puts("Enter number of resources and processes");
scanf("%d%d",&nr,&np);
int ins[nr],all[np][nr];
int max[np][nr],avl[nr],work[nr];
//ins-instances , all-allocation
//max-maximum , avl-available
// work-to save available
puts("Enter the total instances of resources");
for(j=0;j<nr;j++)
scanf("%d",&ins[j]);
puts("Enter the allocations");
for(i=0;i<np;i++)
{
for(j=0;j<nr;j++)
scanf("%d",&all[i][j]);
}
puts("Enter the maximum resources required");
for(i=0;i<np;i++)
{
for(j=0;j<nr;j++)
scanf("%d",&max[i][j]);
}
puts("Enter the availability of resources");
for(j=0;j<nr;j++)
scanf("%d",&avl[j]);
int need[np][nr];
AGAIN:for(i=0;i<np;i++)
{
for(j=0;j<nr;j++)
need[i][j]=max[i][j]-all[i][j];
}
puts("\n\n\nTotal instances of resources");
for(j=0;j<nr;j++)
printf("For Resource %d = %d\n",j+1,ins[j]);
puts("\n\nA L L O C A T I O N");
for(i=0;i<np;i++)
{
for(j=0;j<nr;j++)
printf("%d ",all[i][j]); //allocation print
printf("\n");
}
puts("\n\nM A X I M U M");
for(i=0;i<np;i++)
{
for(j=0;j<nr;j++)
printf("%d ",max[i][j]); //maximum print
printf("\n");
}
puts("\n\nA V A I L A B L E");
for(j=0;j<nr;j++)
printf("%d ",avl[j]);
puts("\n\nN E E D");
for(i=0;i<np;i++)
{
for(j=0;j<nr;j++)
printf("%d ",need[i][j]); //need print
printf("\n");
}
int finish[np];
int flag=0;
for(i=0;i<np;i++)
{
finish[i]=0;
if(i<nr)
work[i]=avl[i];
}
i=0;
int count=0;
//SAFETY ALGORITHM
puts("\n\nP R O C E S S S E Q U E N C E");
while(count<np)
{
flag=0;
if(finish[i]==0)
{
for(j=0;j<nr;j++)
{
if(need[i][j]>avl[j])
{
flag=1;
break;
}
}
if(flag==0)
{
finish[i]=1;
for(j=0;j<nr;j++)
avl[j]=avl[j]+all[i][j];
printf("PROCESS = %d\t",i+1);
for(j=0;j<nr;j++)
printf("%d ",avl[j]);
printf("\n");
}
}
else count++;
if(i==np-1)
i=0;
else i++;
}
flag=0;
for(i=0;i<nr;i++)
{
if(avl[i]!=ins[i])
{
flag=1;
break;
}
}
if(count==np&&flag==0)
puts("S A F E S T A T E");
else
puts("N O T S A F E S T A T E");
//RESOURCE REQUEST ALGORITHM
REQUEST:puts("Any request enter 1");
scanf("%d",&flag);
if(flag==1)
{
puts("Enter process no.");
scanf("%d",&count);
//count is utilised here for saving process no.
int req[nr];
puts("Enter resource request");
for(i=0;i<nr;i++)
scanf("%d",&req[i]);
for(i=0;i<nr;i++)
{
if(req[i]>need[count-1][i])
{
puts("request is more than need");
goto REQUEST;
}
}
for(i=0;i<nr;i++)
{
if(req[i]>work[i])
{
puts("AVAILABILITY IS INSUFFICIENT");
goto REQUEST;
}
}
for(i=0;i<nr;i++)
{
avl[i]=work[i]-req[i];
all[count-1][i]+=req[i];
}
goto AGAIN;
}
else
puts("TERMINATE");
}
Comments
Post a Comment