操作系统实验项目银行家算法.docVIP

  • 238
  • 0
  • 约 8页
  • 2016-11-29 发布于重庆
  • 举报
操作系统实验项目银行家算法

实验四、银行家算法 目的和要求 银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法。本实验要求用高级语言编写一个银行家的模拟算法。通过本实验可以对预防死锁和银行家算法有更深刻的认识。 实验内容 设置数据结构 包括可利用资源向量(Availiable),最大需求矩阵(Max),分配矩阵(Allocation),需求矩阵(Need) 设计安全性算法 设置工作向量Work 表示系统可提供进程继续运行可利用资源数目,Finish 表示系统是否有足够的资源分配给进程 实验环境 pc vc++ (四)、程序源代码: /*子函数声明*/ int Isprocessallover(); //判断系统中的进程是否全部运行完毕 void Systemstatus(); //显示当前系统中的资源及进程情况 int Banker(int ,int *); //银行家算法 void Allow(int ,int *); //若进程申请不导致死锁,用此函数分配资源 void Forbidenseason(int ); //若发生死锁,则显示原因 /*全局变量*/ int Availiable[3]={3,3,2}; //初始状态,系统可用资源量 int Max[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //各进程对各资源的最大需求量 int Allocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; //初始状态,各进程占有资源量 int Need[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; //初始状态时,各进程运行完毕,还需要的资源量 int over[5]={0,0,0,0,0}; //标记对应进程是否得到所有资源并运行完毕 #include iostream.h /*主函数*/ void main() { int process=0; //发出请求的进程 int decide=0; //银行家算法的返回值 int Request[3]={0,0,0}; //申请的资源量数组 int sourcenum=0; //申请的各资源量 /*判断系统中进程是否全部运行完毕*/ step1: if(Isprocessallover()==1) { cout系统中全部进程运行完毕!; return; } /*显示系统当前状态*/ Systemstatus(); /*人机交互界面*/ step2: cout\n输入发出请求的进程(输入 “0”退出系统): ; cinprocess; if(process==0) { cout放弃申请,退出系统!; return; } if(process1||process5||over[process-1]==1) { cout系统无此进程!\n; goto step2; } cout此进程申请各资源(A,B,C)数目:\n; for(int h=0;h3;h++) { coutchar(65+h)资源:; cinsourcenum; Request[h]=sourcenum; } /*用银行家算法判断是否能够进行分配*/ decide=Banker(process,Request); if (decide==0) { /*将此进程申请资源分配给它*/ Allow(process,Request); goto step1; } else { /*不能分配,显示原因*/ Forbidenseason(decide); goto step2; } } /*子函数Isprocessallover( )的实现*/ int Isproc

文档评论(0)

1亿VIP精品文档

相关文档