- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
死锁相关算法设计报告
操作系统课程设计报告题目:死锁相关算法院系:信息学院班级:信管11-2姓名:王裕辰学号:1101051024指导教师:赵华概述本次设计的程序主要功能是实现银行家算法、安全性算法、死锁检测算法,并根据输入的数据和相应的调度算法计算每个进程的调度结果,根据输入的数据,判断系统安全状态,判断进程的资源请求是否可以被满足,判定系统是否为死锁状态,然后输出各种判定结果(是否安全、安全序列、是否死锁、是否允许分配)。本程序根据当前进程对资源的占用和未分配资源的数量,判断当前系统是否处于安全状态,判定当前状态下进程对资源的请求是否能够被满足,然后判断当前系统是否产生死锁,这给进程的运行提供了较宽松的环境,有利于进程的并发执行。通过对银行家算法,安全性算法和死锁检测算法的模拟,加深了对这三种算法的理解,更好地掌握了死锁预防和检测的方法。二、设计的基本概念和原理(1)安全性算法安全状态:指系统能按某种进程顺序(P1,P2,…,Pn)(称 P1,P2,…,Pn 序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。(2)银行家算法银行家算法把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。为保证资金的安全,银行家规定:①当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;②顾客可以分期贷款,但贷款的总数不能超过最大需求量;③当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;④当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。(3)死锁检测算法①在资源分配图中,找出一个既不阻塞又非独立的进程结点Pi。在顺利地情况下,Pi可获得所需资源而继续运行,直至运行完毕,再释放其所占有的全部资源,这相当于消去Pi所有的请求边和分配边,使之成为孤立的结点。②重复上述过程,在进行一系列的简化后,若能消去图中所有的边,使所有的进程结点都成为孤立结点,则称该图是可简化的;若不能通过任何进程使该图完全简化,则称该图是不可完全简化的。③当且仅当某状态的资源分配图是不可完全简化时,此状态为死锁状态。三、总体设计本程序才用了结构化程序设计方法,将程序进行了模块化划分。首先定义几种算法中的数据结构,用数组来存放资源。用用户输入的数据来初始化相关数组,以此来表示不同种类、不同进程请求的资源数量。首先调用安全性算法检测当前系统是否处于安全状态。然后用户输入请求向量,调用银行家算法判断是否允许分配。本程序包括以下三个模块:预定义模块定义程序所用到的头文件并定义了进程数量和临界资源的种类。主程序模块包括以下五个步骤①输入当前系统状态②调用安全性算法检测系统是否处于安全状态。若安全执行步骤③,否则退出程序。③输入请求向量④调用银行家算法对资源矩阵进行假定修改⑤调用安全性算法判断上述假定修改后系统是否安全,若安全系统允许分配,否则不允许。其他函数模块定义安全性算法、银行家算法和死锁检测算法。程序流程图:四、详细设计每个模块的代码及分析如下:预定义模块#include stdafx.h#include iostream#define m 3 //资源类数#define n 5 //进程个数主程序模块int main(intargc, char* argv[]){intAvailable[m],Max[n][m],Allocation[n][m],Need[n][m],Request[n][m];//Available可用资源向量 Max最大需求矩阵 Allocation分配矩阵 Need需求矩阵 Request[i][j] 进程i请求资源j的数量inti,j,P,flag,bank;//bank表示调用银行家算法的返回值,为1表示分配完成,为0表示未分配;flag=1;////输入相关数据cout 死锁相关算法 endl;cout 请输入数据:endl;coutendl输入最大需求矩阵:endl;for(i=0;in;i++){for(j=0;jm;j++)cinMax[i]
文档评论(0)