ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:117.07KB ,
资源ID:15353175      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15353175.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(春操作系统大作业银行家死锁避免算法模拟0501要点Word文档下载推荐.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

春操作系统大作业银行家死锁避免算法模拟0501要点Word文档下载推荐.docx

1、三、设计思想 73.1算法思路 73.2银行家算法步骤 73.3安全性算法步骤 7四、数据定义 84.1主要用到的数据结构 84.2程序的模块 9五、处理流程 10六、源程序 11七、运行结果截图 241、进程信息的输入与输出调试 242、进程请求资源输入出错提示信息处理 253、判断是否可以试分配函数 254、求安全序列函数int check_safe() 26八、设计体会 27一、摘要Dijkstra (1965)提出了一种能够避免死锁的调度算法,称为银行家算法。它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需

2、要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。这里将客户比作进程,贷款比作设备,银行家比作系统。客户们各自做自己的生意,在某些时刻需要贷款。在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。如果忽然所有的客户都申请,希望得到最大贷款额,而银行家无法满足其中任何一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要其最大贷款额度,但银行家不敢抱这种侥幸心理。银行家算法就是对每一个请求进行检查,检查如果满足它是否会导致不安全状态

3、。若是,则不满足该请求;否则便满足。检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查下一个距最大需求最近的客户,如此反复下去。如果所有投资最终都被收回,则该状态是安全的,最初的请求可以批准。在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。要预防死锁,有摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃

4、“环路等待”条件等方法。但是,在预防死锁的几种方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统状态分为安全状态和不安全状态,便可避免死锁的发生。而最具代表性的避免死锁的算法,便是Dijkstra的银行家算法。利用银行家算法,我们可以来检测CPU为进程分配资源的情况,决定CPU是否响应某进程的的请求并为其分配资源,从而很好避免了死锁的产生。二、需求分析2.1问题描述当系统在进行资源管理时,如果对进城申请的资源分配不当,可能会使系统进入死锁状态,因而后面到来的进程也无法顺利执行。银行家算法中,要对当前申请资源的进程申请资源

5、的数目进行判断,如果可以试分配,则试求出一个安全序列,如果可以求出,则说明给这个进程分配资源后系统不会进入不安全状态,将该进程申请的资源分配给他,若求不出安全序列,则说明将资源分配给该进程后系统会进入不安全状态,所以就使该进程进入阻塞状态,等待以后可以分配资源时再执行该进程,然后系统继续服务其它进程。通过这样一个过程,可以有效避免系统进入死锁状态。2.2基本要求(1)从键盘输入当前系统的资源信息,包括当前可用资源,每个进程对各类资源的最大需求量,每个进程当前已分配的各个资源量和每个进程尚需要的各个资源量,输出结果显示在DOS界面上;(2)输入进程请求,按照设计好的安全性算法进行检查,得到结果并

6、输出整个执行过程的相关信息和最终结果(主要包括资源分配表和安全序列)(3)要求要有各种异常的处理,程序的可控制性和可连续性执行。包括对进程的存在有无检查,请求向量的不合法检查,试分配失败后的数据恢复和重新接受进程请求等。2.3概要分析在避免死锁的算法中,允许进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性。若此次分配不会使系统进入不安全状态,便将资源分配给该进程否则进程等待。所谓安全状态是指系统能按某种顺序如(称为安全序列),就这样来为每个进程分配资源,直至最大需求。使每个进程都可以顺序地执行完毕。若系统不存在这样一个安全序列,那么系统此时会进入不安全状态。虽然并非所有的不安

7、全状态都会产生死锁状态,但当系统进入不安全状态后,便可能进而进入死锁状态;反之,只要系统处于安全状态,系统便可避免进入死锁状态。因此,避免死锁的实质在于,如何使系统不进入不安全状态,银行家算法就是用来判断某种情况会不会进入不安全状态。2.4数据流模型三、设计思想 3.1算法思路先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。3.2银行家算法步骤(1)如果Requestior =Need,则转向步骤(2);否则,认为出错,因为它所需要的资

8、源数已超过它所宣布的最大值。(2)如果Requestor=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Requesti; Allocation=Allocation+Request; Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3.3安全性算法步骤(1)设置两个向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;布

9、尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finishi=false,当有足够资源分配给进程时,令Finishi=true。(2)从进程集合中找到一个能满足下述条件的进程:Finishi=falseNeedor=Work如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Finishi=true;转向步骤(2)。(4)如果所有进程的Finishi=true,则表示系统处于安全状态;否则,系统处于不安全状态。四、数据定义4.1主要用到的数据

10、结构(1)进程名向量 char processnemaN; /进程名(2)可利用资源向量 int AvailableM; /资源清单系统中现有各资源空闲个数。(3)最大需求矩阵 int MaxNM; /最大需求矩阵每个进程对各资源的最大需求数分配矩阵 (4)已分配矩阵 int AllocationNM;/分配矩阵系统给每个进程已分配的各类资源数 (5)需求矩阵 int NeedNM; /需求矩阵每个进程还需要每种资源的个数申请各类资源数量 (6)申请向量 int Request M /进程申请资源的向量(7)工作向量 int WorkNM; /初始第一个向量为Available,随寻找安全序列

11、时为其余每个向量赋值,可以防止安全序列未找到而丢了初始状态的值(8)安全序列向量 int sequenceN=0;/存放安全序列号(9)标志向量 int FinishN /求安全序列时记录每个进程是否可以顺利执行 4.2程序的模块void main() /系统主函数int check_distribution() /安全性检查函数int check_safe() /银行家算法函数void print() /输出函数五、处理流程六、源程序#includestdlib.h#define N 5 /进程个数#define M 3 /资源种类数void print();int check_safe()

12、;int check_distribution(int* p,int k);char processnameN;int RequestM; /请求向量int FinishN; /标记某一个进程是否可以执行int WorkNM; /初始为Available,随寻找安全序列而变化,防止安全序列未找到而丢了初始状态的值int AvailableM; /资源清单-系统中现有各资源空闲个数int Work_AllocationNM;int MaxNM; /最大需求矩阵-每个进程对各类资源的最大需求数int AllocationNM;/分配矩阵-系统给每个进程已分配的各类资源数int NeedNM; /需

13、求矩阵-每个进程还需要每种资源的个数int sequenceN=0;void main() int i=0,j=0,k=0;/记录申请资源的进程的序列号 int flag=0; /标记输入的进程名是否存在 int safe=0; /标志系统是否出于安全状态,0表示不安全,1表示安全 int distribution=0; /标志是否可以进行试分配0表示可以,1表示不可以 char flag1; /标记是否有进程申请资源 /NeedNM=MaxNM-AllocationNM; char name; /要请求资源的进程名 printf(银行家算法n); 请分别初始化各矩阵信息 n*请输入各进程的进程名n /进程名连续输入 for(i=0; iN; i+) scanf(%c,&processnamei); printf(请输入现有各资源空闲个数n for(i=0;M; scanf(%dAvailablei); 请分别输入每个进程对各类资源的最大需求数n for(j=0; j j+) scanf(Maxij); 请分别输入系统给每个进程已分配的各类资源数n for(j=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1