Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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;
}
}
}while(choice!=0);