1、 操作系统课程设计操作系统课程设计 进程管理进程管理 死锁避免算法设计死锁避免算法设计 姓 名: 学 号: 系 别: 计算机科学与工程 专 业: 计算机科学与技术 年 级: 指导教师: 2011 年 5 月 16 日 一、课程设计项目介绍(含项目介绍及设计目的) 项目介绍:项目介绍: 1、前言介绍:在多道程序系统中,虽可借助于多个进程的并发执行,来改善系 统的资源利用提高吞吐量,但可能发生一种危险死锁。当进程处于这种僵持状 态时,若无外力作用,他们都无法再向前推进。 在操作系统的资源分配也有类似的问题,如果资源分配不得当就会发生进程循 环等待资源,就会出现死锁的现象。而最有代表性的避免死锁的算
2、法就是银行家算 法。银行家算法是避免死锁的一种重要方法,本次课程设计用 C 语言编写和调试一 个简单的银行家算法程序, 用银行家算法检查是否允许分配资源给进程, 避免死锁。 2 2、设计内容: 内容:实现教材 3.6.3 节中所描述的银行家避免死锁算法。 要求:可自定义进程数目、资源类型和每种类型资源的数目; 可输入每个进程对每种资源的最大需求、已经获得的数量; 当某进程发起某种资源请求时,计算系统状态是否安全。 设计目的:设计目的: 1、加深我们对了解有关资源申请、避免死锁等概念,提高了我们分析、解决问 题的能力。 2、通过课程设计深入理解避免死锁的原理,并加深我们对银行家算法理解。 二、总
3、体设计(含系统的总体结构、原理框图或各模块介绍等) 总体结构:总体结构: 1 1、初始化进程数以及资源数; 2 2、银行家算法; 3 3、安全性算法。 模块介绍:模块介绍: 1 1、主函数 main() (1) 、确定初始进程数 (2) 、确定初始资源种类数以及可用资源的数目 (3) 、确定初始各进程所需最大的资源数以及目前已分配的资源数目 (4)、调用其他模块 2 2、银行家算法 Bank() (1)、如果 RequestAVAILABLEj) /输入不合法的资源量的处理 printf(“*进程%d 申请的资源数大于系统可用%d 类资 源的资源量!“,i,j); printf(“申请不合理,
4、出错!请重新选择! n“); flag=0; /申请不合理 break; if(flag) changdata(i); /更改资源分配数情况 if(chkerr(i) rstordata(i); /系统不安全时还原预分配的资源 else showdata(); /显示资源分配情况 printf(“n“); printf(“是否继续银行家算法演示,按 1 键继续,按 0 键退出演示: n 选择: “); scanf(“ %d“, void showdata() /显示资源分配情况 int i,j; printf(“*系统可用的资源数为: n“); for (j=0;jF;j+) printf(“
5、资源%d: %d “,j,AVAILABLEj); printf(“n“); printf(“*各进程已经得到的资源量:n “); for (i=0;iE;i+) printf(“进程%d: “,i); for (j=0;jF;j+) printf(“资源%d: %d “,j,ALLOCATIONij); printf(“n“); printf(“n“); printf(“*各进程还需要的资源量: n“); for (i=0;iE;i+) /输入各进程还需要的资源量 printf(“进程%d: “,i); for (j=0;jF;j+) printf(“资源%d: %d “,j,NEEDij); printf(“n“); printf(“n“); void changdata(int k) /修改资源分配情况 int j; for (j=0;jF;j+) AVAILABLEj=AVAILABLEj-Requestj; /把可用资源数减去请求资源数 的值赋值给可用资源 ALLOCATIONkj=ALLOCATIONkj+Requestj; /把已分配资源数加上 请求资源数赋值给已分配资源 NEEDkj=NEEDkj-Requestj; /把资源需求数减去请求资源数的值 赋值给资源需求数 ; void rstordata(