文档详情

2017年冬季 银行家死锁避免算法大作业.doc

发布:2018-06-11约9.01千字共10页下载文档
文本预览下载声明
华南理工大学 “计算机操作系统”课程设计大作业 一、实验题目: 银行家死锁避免算法模拟 二、实验目的:通过本次实验掌握银行家死锁避免算法的基本思想。当进程提出资源申请时,能够用该算法判断是否拒绝进程请求。 三、实验内容 认真阅读教材(计算机操作系统(第三版),汤小丹,西安电子科技大学出版社)P108-P111页3.6.3节银行家算法的实现思想,理解该算法是如何能够实现死锁避免的。编写一个银行家算法模拟程序用于处理进程的资源申请。 1。假设系统共有5类资源,分别以A、B、C、D、E来标识,每类资源的初始数量全部为50。 2。进程可以通过程序界面随时提交新的资源申请,提交的信息包括进程名称、对5类资源的最大需求数量。 3。每次当有资源申请时,先输出系统当前状态(5类资源当前可用数量,每个进程已分配的每类资源数量),再利用银行家算法判断是否该满足进程请求。如果可以分配,输出给该进程分配资源后的系统状态,再输出至少一个“安全序列”。 四、实验要求: 每人完成一份大作业实验报告。报告包括死锁以及死锁避免算法的设计思想;银行家算法的数据定义、处理流程和源程序;程序运行结果截图;心得体会等部分。 给出数据定义和详细说明; 给出实现思想和设计流程; 调试完成源程序; 屏幕观察运行结果; 总结自己的设计体会; 编程语言及操作系统平台不限。 五、提交内容 本大作业每个人必须单独完成。最后需提交的内容包括:源程序(关键代码需要注释说明)、可运行程序、算法思路及流程图、心得体会。大作业直接在网络学院的网站上提交。 大作业严禁抄袭。发现抄袭一律以不及格论。大作业内容要完整,一定要有算法思路、流程图、心得体会、运行输出信息截屏等内容,如果只提交源代码则大作业成绩记为不合格。 答: 1、 ( (2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 安全性算法步骤 (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程: ①Finish[i]=false ②Needor=Work 如找到,执行步骤(3);否则,执行步骤(4)。 (3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work=Work+Allocation; Finish[i]=true; 转向步骤(2)。 (4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。 数据定义 主要用到的数据结构 (1)进程名向量 char processnema[N]; //进程名 (2)可利用资源向量 int Available[M]; //资源清单——系统中现有各资源空闲个数。 (3)最大需求矩阵 int Max[N][M]; //最大需求矩阵——每个进程对各资源的最大需求数分配矩阵 (4)已分配矩阵 int Allocation[N][M];//分配矩阵—— 9 系统给每个进程已分配的各类资源数 (5)需求矩阵 int Need[N][M]; //需求矩阵——每个进程还需要每种资源的个数申请各类资源数量 (6)申请向量 int Request [M] //进程申请资源的向量 (7)工作向量 int Work[N][M]; //初始第一个向量为Available[],随寻找安全序列时为其余每个向量赋值,可以防止安全序列未找到而丢了初始状态的值 (8)安全序列向量 int sequence[N]={0};//存放安全序列号 (9)标志向量 int Finish[N] //求安全序列时记录每个进程是否可以顺利执行Request[i]<or =Need 3、 Yes 找不到所有的inish赋值NO 回到赋值前边 源
显示全部
相似文档