You are on page 1of 3

#include<stdio.

h>
int max[10][10],alloc[10][10],avail[10],need[10]
[10],work[10],p,r,i,j,finish[10],safe[10],req[10];
void accept_alloc()
{
printf("Enter allocation matrix\n");
for(i=0;i<p;i++)
for(j=0;j<r;j++)
scanf("%d",&alloc[i][j]);

printf("Alloction matrix is \n");

for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
printf("%d ",alloc[i][j]);
}
printf("\n");
}
}
void accept_max()
{
printf("Enter max \n");
for(i=0;i<p;i++)
for(j=0;j<r;j++)
scanf("%d",&max[i][j]);

printf("max matrix is \n");


for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
printf("%d ",max[i][j]);
}
printf("\n");
}
}
void accept_avail()
{
printf("Enter available matrix\n");
for(i=0;i<r;i++)
{
scanf("%d",&avail[i]);
}
printf("\n");
}
void calc_need()
{
printf("calculating need matrix\n");
for(i=0;i<p;i++)
for(j=0;j<r;j++)
need[i][j]=max[i][j]-alloc[i][j];
printf("Need matrix is \n");
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
printf("%d ",need[i][j]);
}
printf("\n");
}
}
void resource_req()
{
int pnum;
printf("Enter the process which has new request");
scanf("%d",&pnum);
printf("Enter a req for resources\n");
for(i=0;i<r;i++)
scanf("%d",&req[i]);
for(i=0;i<r;i++)
{
if (req[i]>need[pnum][i])
{
printf("Request cannot be fulfilled\n");
return;
}
}
for(i=0;i<r;i++)
{
if (req[i]>avail[i])
{
printf("process must wait\n");
return;
}
}
for(i=0;i<r;i++)
{
avail[i]=avail[i]-req[i];
alloc[pnum][i]=alloc[pnum][i]+ req[i];
need[pnum][i]=need[pnum][i]-req[i];
}
safe_seq();
}

void safe_seq()
{

for(i=0;i<p;i++)
finish[i]=0;

for(i=0;i<r;i++)
work[i]=avail[i];

int i=0 ,k=0,flag;


while (k<p)
{
if(finish[i]==0)
{
flag=1;
for(j=0;j<r;j++)
{
if (need[i][j]>work[j])
flag=0;
}
if (flag==1)
{
for(j=0;j<r;j++)
work[j]=work[j]+alloc[i][j];
finish[i]=1;
safe[k]=i;
k++;
}
}
if(i==(p-1))
i=0;
else
i++;
}

printf("Safe sequence is");


for(i=0;i<p;i++)
printf(" P%d",safe[i]);
printf("\n");
}
main()
{
printf("Enter number of process :\n");
scanf("%d",&p);
printf("Enter number of resources :\n");
scanf("%d",&r);
accept_alloc();
accept_max();
accept_avail();
calc_need();
safe_seq();
resource_req();

You might also like