OS 银行家算法

来源:百度知道 编辑:UC知道 时间:2024/05/01 16:39:48
银行家算法
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

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

#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][