1、 课课 程程 设设 计计 报报 告告 课程设计名称:课程设计名称: 银行家算法模拟实现银行家算法模拟实现 系系 别:别: 二系二系 姓姓 名:名: 班班 级:级: 学学 号:号: 成成 绩:绩: 指导教师:指导教师: 开课时间开课时间: 20142015 学年学年 2 学期学期 目录 第一章 需求目的 . 1 第二章 课题内容 . 1 第三章 详细设计 . 1 3.1 初始化 . 1 3.2 安全性检查算法 . 2 3.3 银行家算法 3 第四章 调试分析 . 4 第五章 总结 . 6 第六章 附录 . 7 1 第一章 需求目的 1.1 了解多道程序系统中,多个进程并发执行的资源分配。 1.2
2、 掌握死锁的产生的原因、产生死锁的必要条件和处理死锁的基本方法。 1.3 掌握预防死锁的方法,系统安全状态的基本概念。 1.4 掌握银行家算法,了解资源在进程并发执行中的资源分配策略。 1.5 理解死锁避免在当前计算机系统不常使用的原因。 第二章 课题内容 2.1 复习银行家算法,设计一个具有若干(不少于 3 种)资源和若干(不少于 5 个) 进程的系统。 2.2 定义系统的初始状态,即进程获得的资源数,还需要的资源数以及系统可用的资 源数。 2.3 以用户输入的方式提出资源请求,并用银行家算法避免可能发生的死锁,若系统 安全,允许用户继续申请资源。 2.4 设计的系统要求结构清晰,与用户的交
3、互界面友好,能动态地实现资源的申请和 分配。 第三章 详细设计 银行家算法可分为几个主要的功能模块,其描述如下: 3.1 初始化 由用户输入数据,分别对运行的进程数、总的资源种类数、总资源数、各进程所需要 的最大资源数量(Max) ,已分配的资源数量赋值。 初始化算法流程图: 2 3.2 安全性检查算法 (1)设置两个工作向量 Work=AVAILABLE;FINISH=false; (2)从进程集合中找到一个满足下述条件的进程, FINISH=false; NEEDA V AILABLEj) /若请求的资源数大于可用资源数 printf(“进程P%d申请的资源数大于系统可用%d类资源的资源量
4、!“,i,j); printf(“申请不合理,出错!请重新选择!nn“); flag=N; break; if(flag=Y|flag=y) changdata(i-1); /调用changdata(i)函数,改变资源数 if(chkerr(i-1) /若系统安全 rstordata(i-1); /调用rstordata(i)函数,恢复资源数 showdata(); /输出资源分配情况 else /若系统不安全 showdata(); /输出资源分配情况 else /若flag=N|flag=n showdata(); printf(“n“); printf(“是否继续银行家算法演示,按Y或y
5、键继续,按N或n键退出演示: “); scanf(“%c“, void main() /主函数 int i=0,j=0,p; printf(“ * n“); printf(“ 银行家算法的模拟实现 n“); printf(“ * nn“); printf(“请输入总进程数:“); scanf(“%d“, printf(“请输入总资源种类:“); scanf(“%d“, printf(“请输入总资源数(all_resource):“); for(i=0;iALL_RESOURCEj); printf(“依次输入各进程已经占据的资源数量(allocation):n“); for (i=0;iMAXij); /初始化资源数量 for (j=0;jN;j+) p=ALL_RESOURCEj; for (i=0;iM;i+) p=p-ALLOCA TIONij;/减去已经被占据的资源 A V AILABLEj=p; if(A V AILABLEj0) A V AILABLEj=0; for (i=0;iM;i+) for(j=0;jN;j+) NEEDi