一、 实验目的
银行家算法是由Dijkstra设计的最具代表性的避免死锁的算法,本实验要求用高级语言编写一个银行家的模拟算法,通过本实验可以对预防死锁和银行家算法有更深刻的认识。 二、 实验仪器设备
仪器设备名称 规格型号 PC 软件 三、 实验内容 1.设置数据结构
包括可利用资源向量(Availiable),最大需求矩阵(MAX),分配矩阵(Allocation),需求矩阵(Need) 2.设计安全性算法
设置工作向量Work表示系统可提供进程继续运行可利用资源数目,Finish表示系统是否有足够的资源分配给进程。 四、 实验代码
#include
#include
/*M个进程对N类资源最大资源需求量*/
int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
编号 备注 64位操作系统 Windos 7 Vc++
/*系统可用资源数*/
int AVAILABLE[N]={3,3,2};
/*M个进程已分配到的N类数量*/
int ALLOCATION[M][N]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; /*M个进程已经得到N类资源的资源量*/
int NEED[M][N]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; /*M个进程还需要N类资源的资源量*/ int Request[N]={0,0,0}; void main() {
int i=0,j=0; char k; char flag;
void showdata(); void changdata(int); void rstordata(int); int chkerr(int); showdata(); enter: {
printf(\请输入需申请资源的进程号(从0到\printf(\printf(\):\scanf(\}
if(i<0||i>=M) {
printf(\输入的进程号不存在,重新输入!\\n\goto enter; } err: {
printf(\请输入进程\printf(\
printf(\申请的资源数\\n\printf(\类别:ABC\\n\printf(\
for(j=0;j scanf(\if(Request[j]>NEED[i][j]) { printf(\printf(\号进程\ printf(\申请的资源数>进程\printf(\printf(\还需要\printf(\ printf(\类资源的资源量!申请不合理,出错!请重新选择!\\n\goto err; } else { if(Request[j]>AVAILABLE[j]) { printf(\进程\printf(\ printf(\申请的资源数大于系统可用\printf(\ printf(\类资源的资源量!申请不合理,出错!请重新选择!\\n\goto err; } } } } changdata(i); if(chkerr(i)) { rstordata(i); showdata(); } else showdata(); printf(\ printf(\按'y'或'Y'键继续,否则退出\\n\flag=getch(); if(flag=='y'||flag=='Y') { goto enter; } else { exit(0); } } /*显示数组*/ void showdata() {