操作系统实验2-银行家算法模拟实验
实验二 银行家算法模拟实验
一. 实验目的
通过对银行家算法的模拟加深对死锁问题和避免死锁策略的理解。
二. 实验内容
用C语言实现银行家算法的模拟
三. 实验类别
死锁问题的解决
四. 实验类型
模拟实验
五. 主要仪器
电脑
六. 运行结果
系统安全可以分配的:
系统不安全,不可以进行分配:
七. 程序清单
#include
#include
#include
#define W 10 //最大进程数W=10
#define R 20 //最大资源总数=20
int AVAILABLE[R];//可利用资源向量
int MAX[W][R];//最大需求矩阵
int ALLOCATION[W][R]; //分配矩阵
int NEED[W][R];//需求矩阵
int REQUEST[R];//进程请求向量
int WORK[R];//可利用的各资源数
char FINISH[W];//各进程的完成状态
void check();//安全性检查算法函数声明
int m,n,i,j;//m为进程数目,n为资源总类数目
int k;//记录提出资源请求的进程号
int main(int argc, char* argv[])
{
printf("请输入进程数目:\n"); scanf("%d",&m); printf("请输入资源的总类:\n"); scanf("%d",&n); printf("请输入每个进程最多需要的资源数目:\n"); for(i=0;i
for(i=0;i
printf("请输入各资源现有数目:\n");//输入各资源现有数目
printf("提出请求的是进程几?(0~m-1)\n");
scanf("%d",&k);
printf("请输入此进程的对各个资源的请求数目:\n"); for(j=0;j
ALLOCATION[k][j]+=REQUEST[j];
NEED[k][j]-=REQUEST[j];
}
void check()
{
for(int i=0;iWORK[j]) { } f=0;//没有找到满足要求的进程 WORK[j]=AVAILABLE[j];//WORK[i]表示可提供进程继续运行的各类资源数 FINISH[i]=false; // 初始化进程均没得到足够资源数并完成 for(int j=0;j
f=1; } } { } FINISH[i]=true; p=1; for(j=0;j
NEED[k][j]+=REQUEST[j];
} } else printf("系统安全,可以进行资源分配!!!!\n");