# include "stdio.h"
# define M 50
int max[M][M];星期三的英语单词
int allocation[M][M];
int need[M][M];
int available[M];
int i, j, n, m, anquan,x=0;
main()
短裙配什么上衣 { void check();
int p,q,control;
int req[M],allocation1[M][M],need1[M][M],available1[M];
printf("输入进程总数:");
scanf("%d", &n);
printf("输入资源种类数量:");
scanf("%d", &m);
printf("输入需求矩阵Max:\n");
for(i=0;i<n; i++)
for(j=0;j<m; j++)
scanf("%2d",&max[i][j]);
printf("输入已分配矩阵Allocation:\n");
for(i=0;i<n; i++)
controler for(j=0;j<m; j++)
scanf("%d", &allocation[i][j]);
for (i=0;i<n; i++)
for(j=0;j<m; j++)
need[i][j]=max[i][j]-allocation[i][j];
printf("输入资源的系统初始值:\n");
for (j=0;j<m;j++)
scanf("%d", &available[j]);
for (j=0;j<m;j++)
for(i=0;i<n;i++)
available[j]=available[j]-allocation[i][j];
山羊的拼音 check();
if (anquan==1) //如果已知的状态安全则执行以下代码
{
for(control=0;;control++)
{ p=0,q=0;
printf("输入请求的进程号: ");
scanf("%d", &i);
printf("输入该进程的请求资源数组:");
for(j=0;j<m; j++)
bi是什么 scanf("%d",&req[j]);
for(j=0;j<m; j++)
if(req[j]>need[i][j])
p=1;
if(p)
printf("请求资源大于该进程还需要的资源!\n");
el
{
for(j=0;j<m; j++)
韩文 if(req[j]>available[j])//判断请求是否大于可用资源
q=1;
if(q)
printf("可用资源不能满足请求!\n");
el
{
for(j=0;j<m; j++) //满足两大条件
{
法硕就业前景
available1[j]=available[j]; //保持资源的当前
allocation1[i][j]=allocation[i][j];
need1[i][j]=need[i][j];
available[j]=available[j]-req[j]; //尝试把资源分配给进程
allocation[i][j]=allocation[i][j]+req[j];
need[i][j]=need[i][j]-req[j];
if(need[i][j]==0)
x=x+1; //当进程满足时释放资源
}
if(x==m)小高考查分
for(j=0;j<m;j++)
{
available[j]=available[j]+allocation[i][j];
allocation[i][j]=0;
available1[j]=available[j];
x--;
}
el x=0;
check();
if(anquan==0)
{for (j=0;j<m; j++)
{ available[j]=available1[j]; //还原分配前的状态
allocation[i][j]=allocation1[i][j];
need[i][j]=need1[i][j];
}
2014世界杯分组 printf("执行该进程不安全!返回继续操作。\n");
}
}
}
printf("是否继续分配?\n");
}
}
}
void check() //安全性算法
{ int k, f, no=0;
int work[M],a[M];
char finish[M];莎士比亚十四行诗
anquan=1;
for(i=0;i<n; i++)
finish[i]='F';
for(j=0;j<m; j++)
work[j]=available[j];
k=n;
do
{
for (i=0;i<n; i++)
{if (finish[i]=='F')
{ f=1;
for (j=0;j<m; j++)
if (need[i][j]>work[j])
f=0;
if (f==1) //找到还没完成的且需求数小于可提供进程继续运行的
{ finish[i]='T';
a[no++]=i; //记录安全序列号
for (j=0;j<m; j++)
work[j]=work[j]+allocation[i][j]; //释放该进程已分配的资源
available[j] =work[j];
}
}
}
k--;
}while(k>0);
f=1;
for (i=0;i<n; i++) //判断有没有进程没完成
{
if (finish[i]=='F')
{
f=0;
break;
}
}
if (f==0)
{
printf("不安全状态!\n");
anquan=0;
}
el
{
printf("处于安全状态.");
printf("安全序列号:");
for (i=0;i<n;i++)