Sei sulla pagina 1di 5

#include<stdio.

h>
int select_process(int need[10][10],int available[10],int *process_running,int n
Process,int nResources)
{
int safe,i,j;
for(i=0;i<nProcess;i++)
{
safe=1;
for(j=0;j<nResources;j++)
{
if(need[i][j]>available[j])
{
safe=0;
}
}
if(safe&&process_running[i]==0)
{
process_running[i]=1;
return i+1;
}
}
return -1;
}
void Readmatrix(int matrix[10][10],int nProcess,int nResources)
{
int i,j;
for(i=0;i<nProcess;i++)
{
for(j=0;j<nResources;j++)
{
scanf("%d",&matrix[i][j]);
}
}
}
void Printmatrix(int matrix[10][10],int nProcess,int nResources)
{
int i,j;
printf("\n--------------------------------------- \n");
for(i=0;i<nProcess;i++)
{
for(j=0;j<nResources;j++)
{
printf("%d ",matrix[i][j]);
}
printf("\n");
}
}
int exec_process(int need[10][10],int available[10],int index,int nResources)
{
int i,j;
for(i=0;i<nResources;i++)
{
if(need[index][i] > available[i])
return 0;
}
return 1;
}
void gen_sequence(int need[10][10],int available[10],int allocated[10][10],int *
process_running,int nResources,int nProcess)
{
int j,i;
while((j=select_process(need,available,process_running,nProcess,nResourc
es))!=-1)
{
printf("P%d ",j);
for(i=0;i<nResources;i++)
available[i]+=allocated[j-1][i];

}
}
int exec_sequence(int seq[10],int need[10][10],int allocated[10][10],int availab
le[10],int nProcess,int nResources)
{
int i=0,j;
while(i<nProcess)
{
if(exec_process(need,available,seq[i],nResources)==0)
return 0;
else
{
for(j=0;j<nResources;j++)
available[j]+=allocated[seq[i]][j];
}
i++;
}
return 1;
}

void permute(int seq[],int d,int nProcess,int nResources,int need[10][10],int al


located[10][10],int available[10])
{
int i,j,total=0;
if (d ==nProcess)
{
if(exec_sequence(seq,need,allocated,available,nProcess,nResource
s)==1)
{
for(j=0;j<nProcess;j++)
printf("P%d ",seq[j]+1);
printf("\n");
}
else;
}
else
{
for( i = d ;i<nProcess;i++)
{
int temp =seq[d];
seq[d]=seq[i];
seq[i]=temp;
permute(seq,d+1,nProcess,nResources,need, allocated, available);
temp =seq[d];
seq[d]=seq[i];
seq[i]=temp;
}
}
}

void all_safe_seq(int all_seq[800][10],int need[10][10],int allocated[10][10],i


nt available[10],int nProcess,int nResources,int total)
{
int i,j;
for(i=0;i<total;i++)
{
if(exec_sequence(all_seq[i],need,allocated,available,nProcess,nR
esources)==1)
{
for(j=0;j<nProcess;j++)
printf(" %d ",all_seq[i][j]);
printf("\n");
}
}
}
int main()
{
int nProcess,nResources,choice;
int i,j,need[10][10],available[10];
int max_for_process[10][10],all_seq[800][10];
int allocated[10][10],seq[5]={0,1,2,3,4};
int *process_running,total;
printf("\nPlease Enter Number of Process and Resources : ");
scanf("%d%d",&nProcess,&nResources);
printf("\nPlease Enter Resources : ");
for(j=0;j<nResources;j++)
scanf("%d",&available[j]);
printf("\nPlease Enter Allocated Matrix : ");
Readmatrix(allocated,nProcess,nResources);

printf("\nPlease Enter Max Matrix : ");


Readmatrix(max_for_process,nProcess,nResources);
process_running=(int*)calloc(sizeof(int),nProcess);
for(i=0;i<nProcess;i++)
{
for(j=0;j<nResources;j++)
{
available[j]-=allocated[i][j];
need[i][j]=max_for_process[i][j]-allocated[i][j];
}
}
//0 1 0 2 0 0 3 0 2 2 1 1 0 0 2 7 5 3 3 2 2 9 0 2 2 2 2 4 3 3
do
{
printf("\n1.Print Max Matrix ");
printf("\n2.Print Allocated Matrix ");
printf("\n3.Print Need Matrix ");
printf("\n4.Generate Safe Sequence ");
printf("\n5.Execute Given Sequence ");
printf("\n6.Generate all possible safe Sequences");
printf("\n0.Exit ");
printf("\nPlease Enter Your Choice : ");
scanf("%d",&choice);
switch(choice)
{
case 0:
break;
case 1:
printf("\nMax Martix is : ");
Printmatrix(max_for_process,nProcess,nResources)
;
break;
case 2:
printf("\nAllocated martix is : ");
Printmatrix(allocated,nProcess,nResources);
break;
case 3:
printf("\nNeed martix is : ");
Printmatrix(need,nProcess,nResources);
break;
case 4:
gen_sequence(need,available,allocated,pr
ocess_running,nResources,nProcess);
break;
case 5:
printf("\nPlease Enter The Sequence :");
for(i=0;i<nProcess;i++)
scanf("%d",&seq[i]);
if(exec_sequence(seq,need,allocated,avai
lable,nProcess,nResources)==1)
printf("\nThe sequence is safe");
else
printf("\nThe sequence is un safe");
break;
case 6:
printf("\nAll Possible Safe sequences are :\n");
permute(seq,0,5,nResources,need,allocated,available);
break;
default:
printf("\nInavlid Option Please enter Zero to ex
it ");
break;

}
}while(choice!=0);

Potrebbero piacerti anche