OS 银行家算法

银行家算法
Output() 输出某时刻的资源分配情况;
Bank() 银行家算法的步骤 1、2、3、及4调用安全性算法;
Security() 进行安全性检查;
Main() 各种数据结构的定义。
假设 有0-4 五个进程(假设系统的当前状态是安全的),三类资源 即:A、B、C
(以下各种数据均取自课本P97例子)
T0 时刻的资源分配表(各种资源的数量分别为:10、5、7)
资源情况
进程 Max
A B C Allocation
A B C Need
A B C Available
A B C
P0 7 5 3 0 1 0 7 4 3 3 3 2
P1 3 2 2 2 0 0 1 2 2
P2 9 0 2 3 0 2 6 0 0
P3 2 2 2 2 1 1 0 1 1
P4 4 3 3 0 0 2 4 3 1
T0 时刻的资源分配表(各种资源的数量分别为:10、5、7)
资源情况
进程 Max Allocation Need Available
A B C A B C A B C A B C
P0 7 5 3 0 1 0 7 4 3 3 3 2
P1 3 2 2 2 0 0 1 2 2
P2 9 0 2 3 0 2 6 0 0
P3 2 2 2 2 1 1 0 1 1
P4 4 3 3 0 0 2 4 3 1
最新回答
柏拉图爱恋

2024-09-09 02:18:21

明天考操作系统了。
我实验时编的程序:

#include<stdio.h>
#include<string.h>
#define P 5 // 进程数
#define M 3 // 资源数
int Max[P][M]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
int Allocation[P][M]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
int Need[P][M]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
int Available[M]={3,3,2};
int Work[M];
int Finish[M];
int sta[P]; // 进程安全序列
int ok;
void DFS(int w)
{
int i,j,flag;
if(w==P)
{
for(i=0;i<P;i++) printf("%d ",sta[i]);
printf("\n");
ok=1;
return;
}
for(i=0;i<P;i++)
{
if(Finish[i]==0)
{
flag=1;
for(j=0;j<M;j++)
{
if(Need[i][j]>Work[j])
{
flag=0;
break;
}
}
if(flag==1)
{
for(j=0;j<M;j++)
{
Work[j]+=Allocation[i][j];
}
Finish[i]=1;
sta[w]=i;
DFS(w+1); // 参数 进程个数
for(j=0;j<M;j++) // 回溯
{
Work[j]-=Allocation[i][j];
}
Finish[i]=0;
//if(ok==1) return ;
}
}
}
}

int IsSave()
{
int i;
ok=0;
for(i=0;i<M;i++)
{
Work[i]=Available[i];
Finish[i]=0;
}
DFS(0);
return ok;

}

int main()
{
if(IsSave()==0)
{
printf("系统处于非安全状态!\n");
return 0;
}
printf("ok\n");

}
佐佐木惠理

2024-09-09 05:31:07

银行家算法 我会 但是你写的我真的看不懂 什么意思 能不能写的清楚点,特别是 NEED AVAILABLE ALLOCATION MAX 能不能对齐了写