大家好,又见面了,我是你们的朋友全栈君。
自存
#include <stdio.h>
#include <stdlib.h>
struct process{
int a,b,c; //max值
int x,y,z; //allocation值
int need1,need2,need3; //need值
int finish;
}p[5];
int n=5,i,t;
int resource[5]={0};
int sum[5]={0};
int avai[3]={0};
int work[3]={0};
int request[3]={0};
void Security_Algorithm(){
int i;
printf("系统的available值为:%d %d %d\n",avai[0],avai[1],avai[2]);
int flag=1;
int t=0;
int f[6]={0};
while(1){
for(i=0;i<n;i++){
if((p[i].finish==0)&&(p[i].need1<=work[0]&&p[i].need2<=work[1]&&p[i].need3<=work[2])){
work[0]+=p[i].x;
work[1]+=p[i].y;
work[2]+=p[i].z;
p[i].finish=1;
flag++;
f[t++]=i; //记录安全序列数
}
}
if(flag>=5) break;
}
for(i=0;i<n;i++){
if(p[i].finish!=1) {
printf("系统状态不安全\n");
break;
}
}
if(i==n) {
printf("系统状态安全\n");
printf("安全序列为: ");
for(i=0;i<t;i++){
printf("P%d",f[i]);
}
printf("\n");
}
}
int main()
{
struct process;
printf("注:本算法代码分析有5个进程、3类资源的问题\n");
printf("请输入三类资源的总数量为:\n");
for(i=0;i<3;i++){
scanf("%d",&resource[i]);
}
printf("请按次序输入5个进程(p0-p4)的max值:\n");
for(i=0;i<n;i++){
scanf("%d %d %d",&p[i].a,&p[i].b,&p[i].c);
p[i].finish=0;
}
printf("请按次序输入5个进程(p0-p4)的allocation值:\n");
for(i=0;i<n;i++){
scanf("%d %d %d",&p[i].x,&p[i].y,&p[i].z);
}
for(i=0; i<n; i++){
sum[0]+=p[i].x;
sum[1]+=p[i].y;
sum[2]+=p[i].z;
}
for(i=0;i<n;i++){
p[i].need1=p[i].a-p[i].x;
p[i].need2=p[i].b-p[i].y;
p[i].need3=p[i].c-p[i].z;
}
//先调用安全算法
for(i=0;i<3;i++){
avai[i]=resource[i]-sum[i];
work[i]=avai[i];
}
Security_Algorithm();
//将finish置零
for(i=0;i<n;i++){
p[i].finish=0;
}
printf("请输入你想让哪个进程发出请求(0-4):");
scanf("%d",&t);
printf("请输入进程发出的请求序列:");
for(i=0;i<3;i++){
scanf("%d",&request[i]);
}
if(request[0]<=p[t].need1&&request[1]<=p[t].need2&&request[2]<=p[t].need3)
{
if(request[0]<=avai[0]&&request[1]<=avai[1]&&request[2]<=avai[2])
{
//修改allocation值
p[t].x+=request[0];
p[t].y+=request[1];
p[t].z+=request[2];
printf("假分配后allocation值:%d %d %d\n",p[t].x,p[t].y,p[t].z);
//修改need值
p[t].need1-=request[0];
p[t].need2-=request[1];
p[t].need3-=request[2];
printf("假分配后need值:%d %d %d\n",p[t].need1,p[t].need2,p[t].need3);
//修改available值
avai[0]-=request[0];
avai[1]-=request[1];
avai[2]-=request[2];
for(i=0;i<3;i++){
work[i]=avai[i];
}
Security_Algorithm();
printf("系统可以分配资源\n");
}
else printf("不满足available值,无法分配\n");
}
else printf("不满足条件任何一个进程的need值,无法分配\n");
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138860.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...