帮忙检查一下,安全性算法哪错了?

时间:2022-08-03 18:42:25
# include<stdio.h>
# include <string.h>
# define M 100
# define N 100
int r;
typedef struct {
int Available[N];
int Max[M][N];
int Allocation[M][N];
int Need[M][N];
int Work[N];
char Finish[M];
}bank;

 test(int a,int b,bank d)// n为进程数,m为资源总类//
{
 d.Finish[M],d.Work[M];
int i,j,k,flag;//i为行数,j为列数,k为未完成的进程数,flag标志进程的状态//
int c[100];//用于记录安全序列//
r=1;int v=0;

for(i=0;i<a;i++)
d.Finish[i]=false;   // 初始化进程均没得到足够资源数并完成
for(i=0;i<b;i++)
    d.Work[i]=d.Available[i];//work[i]表示可提供进程继续运行的各类资源数
k=a;
do{
for(i=0;i<a;i++)
{
if(d.Finish[i]==false)
{
flag=1;
for(j=0;j<b;j++)
if(d.Need[i][j]>d.Work[j])
flag=0;
if(flag==1)      //找到还没有完成且需求数小于可提供进程继续运行的资源数的进程
{
d.Finish[i]=true;
c[v++]=i;   //记录安全序列号
for(j=0;j<b;j++)
d.Work[j]+=d.Allocation[i][j];  //释放该进程已分配的资源
}
}
}
k--;      //每完成一个进程分配,未完成的进程数就减1
}while(k>0);
flag=1;
for(i=0;i<a;i++)    //判断是否所有的进程都完成
{
if(d.Finish[i]==false)   
{
flag=0;
break;
}
}
if(flag==0)       //若有进程没完成,则为不安全状态
{
printf("系统处在不安全状态!");
r=0;
}
else
{
printf("\n系统当前为安全状态,安全序列为:\n");
for(i=0;i<a;i++)
printf("p%d  ",c[i]);  //输出安全序列
}
}


void main()

int m,n,i,j,e,p,res,need[M][N];//m代表资源种类,n代表进程个数,i代表行数,j代表列数,e代表所需最大资源数,p代表分配的资源数//
char name[20];
bank b;
printf("Input the type of resource and number of customer:\n");
scanf("%d%d",&m,&n);
printf("Input the amount of resource (maximum , allocated) of each customer:\n");
for(i=0;i<n;i++)
{
scanf("%s",name);
for (j=0;j<m;j++)
{
scanf ("%d",&e);
b.Max[i][j]=e;
}
for (j=0;j<m;j++)
{
scanf("%d",&p);
b.Allocation[i][j]=p;
}
}
for (i=0;i<n;i++)

for (j=0;j<m;j++)
b.Need[i][j]=b.Max[i][j]-b.Allocation[i][j];
printf("Input the amount of resource(available)\n");
for(j=0;j<m;j++)
{
scanf("%d",&res);
res=b.Available[j];
}
test(n,m,b);
}
//检测安全序列//




不论怎么输,出来的都是不安全状态

3 个解决方案

#1


樓主這個程序在做什麽? 帮忙检查一下,安全性算法哪错了?

#2


该回复于2012-12-01 09:19:28被管理员删除

#3


操作系统耶,没学深入,有点难度

#1


樓主這個程序在做什麽? 帮忙检查一下,安全性算法哪错了?

#2


该回复于2012-12-01 09:19:28被管理员删除

#3


操作系统耶,没学深入,有点难度