下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、海南大学三亚学院计算机操作系统课程设计死锁的避免一一银行家算法专业班级:成员:提交时间:一、问题描述(标题:宋体四号)内容: 1、解释什么是银行家算法(宋体,小四,行间距倍)银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次
2、分配,否则,只要进程集合非空,系统便处于不安全状态,本次不能分配给他。请进程等待我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前
3、的申请量分配资源,否则也要推迟分配。2、银行家算法提出的原因在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock), 是指多个进程在运行中因争夺资源而造成的一种僵局(Deadly_Embrace), 当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。二、实验目的1、掌握死锁概念、死锁发生的原因、死锁产生的必要条件2 、掌握死锁的预防、死锁的避免3 、深刻理解死
4、锁的避免:安全状态和银行家算法三、问题分析1、什么是死锁死锁如何产生所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力的作用,它们都将无法再向前推进。死锁产生的原因:( 1)竞争资源( 2)进程间推进顺序非法产生死锁的必要条件:互斥条件,请求和保持条件不剥夺条件,环路等待条件。只要下面四个条件中有一个不具备,系统就不会出现死锁。互斥条件:即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。不可抢占条件:进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。占有且
5、申请条件:进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。循环等待条件:存在一个进程等待序列P1,P2, ,Pn, 其中P1 等待 P2 所占有的某一资源,P2 等待 P3 所占有的某一资源,而Pn等待P1 所占有的某一资源,形成一个进程循环等待环。2、死锁对多道程序系统带来的影响在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的 资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。 所谓死锁 (Deadlock), 是指多个进程在运行中因争夺资源而造成的一种僵局(Deadly_Embrace
6、), 当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。3、如何预防死锁摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环路等待”条件4、死锁的预防:什么是安全态如何保证多个进程在某个时刻是处于安全态的所谓安全态是指系统能按某种进程顺序( P1, P2, ,Pn)(称(P1, P2,,Pn)序列为安全序列)来为每个进程Pi 分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都顺利的完成。四、设计方案1、数据结构的建立1) . 可利用资
7、源向量AVAILABLE。这是一个含有M个元素的数组,其中的每一个元素代表一类可利用的资源数目,其3初始值是系统中所配置的该类全部可哦那个资源的数目,其数值随该类资源的分配和回收而动态的改变。2) . 最大需求矩阵MAX。这是一个M*N的矩阵,它定义了系统中N个进程中的每一个进程对M类资源的最大需求。3) . 分配矩阵ALLOCATIO。这也是一个 NM*N的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。4) . 需求矩阵NEED。这也是一个M*N的矩阵,用以表示每一个进程5) .NEEDR,W=MAXR,W-ALLOCATIONR,W数据结构详细介绍如下:假设有M个进程N类资源
8、,则有如下数据结构:#define W 10#define R 20int A ;标记向量Finish 是一个纵向量,表示进程在此次检查中中是否被满足,使之运行完成,开始时对当前未满足的进程做Finishi =false ;当有足够资源分配给进程(Needi<=Free) 时,Finishi=true , Pi 完成,并释放资源。(1) 从进程集中找一个能满足下述条件的进程Pi Finishi = false( 未定 ) Needi <= Free ( 资源够分)(2) 当 Pi 获得资源后,认为它完成,回收资源:Free = Free + Allocationi ;Finishi
9、 = true ;Go to step(1);试探此番若可以达到Finish0.n:=true ,则表示系统处于安全状态, 然后再具体为申请资源的进程分配资源。否则系统处于不安全状 态。3、算法的优化4、研究问题的推广五、方案实施1、任务划分(1) 流程图初始化算法流程图银行家算法流程图:安全性算法流程图:2、具体代码#include <>#include <iostream>using namespace std ;# define FALSE 0# define TRUE 1# define W 10 / 最大进程数W=10# define R 20 / 最大资源总
10、数R=20int M ;int N ;int ALL_RESOURCEW;int AVAILABLER; / 可利用资源向量int MAXWR; / 最大需求矩阵需求矩阵进程请求向量数据输入数据显示进程请求资源数据改变数据恢复系统安全性的检测检测最大需求int ALLOCATIONWR; / 分配矩阵int NEEDWR; / int RequestR; / void inputdata(); / void showdata(); / void changdata(int k);/ void restoredata(int k); / int chksec(int s); / int chkm
11、ax(int s); / void bank(); / 检测分配的资源是否合理void main() int i,j;inputdata();for(i=0;i<M;i+) j=chksec(i);if (j=0) break;if (i>=M)cout<<" 错误提示:经安全性检查发现,系统的初始状态不安全! ! n"<<endl;else cout<<" 提示:经安全性检查发现,系统的初始状态安全!"<<endl;bank();void inputdata() int i=0,j=0,p;c
12、out<<" 请输入总进程数:"<<endl;docin»M;if (M>W) cout«endl«"总进程数超过了程序允许的最大进程数,请重新输入:"«endl;while (M>W);cout«endl;cout«"请输入资源的种类数:"«endl;do cin»N;if (N>R)cout«endl«"资源的种类数超过了程序允许的最大资源种类数,请重新输入:"vvend
13、l; while (N>R);cout«endl;cout«"请依次输入各类资源的总数量,即设置向量all_resource:"«endl;for(i=0;i<N;i+)cin»ALL_RESOURCEi;cout«endl;cout«"请依次输入各进程所需要的最大资源数量,即设置矩阵 max:"«endl;for (i=0;i<M;i+)(for (j=O;j<N;j+)(do cin»MAXij;if (MAXij>ALL_RESOURCEj
14、)cout«endl«"该最大资源数量超过了声明的该资源总数,请重新输A:"«endl;while (MAXij>ALL_RESOURCEj);)cout«endl;cout«"请依次输入各进程已经占据的各类资源数量,即设置矩阵allocation:"«endl;for (i=0;i<M;i+)for (j=0;j<N;j+)do cin>>ALLOCATIONij;if (ALLOCATIONij>MAXij) cout<<endl<<
15、;" 已占有的资源数量超过了声明的最大资源数量请重新输入:"<<endl;while (ALLOCATIONij>MAXij);cout<<endl;for (i=0;i<M;i+)for(j=0;j<N;j+)NEEDij=MAXij-ALLOCATIONij;for (j=0;j<N;j+) p=ALL_RESOURCEj;for (i=0;i<M;i+) p=p-ALLOCATIONij;AVAILABLEj=p;if(AVAILABLEj<0)AVAILABLEj=0; void showdata() in
16、t i,j;cout<<" 各种资源的总数量,即向量all_resource 为 :"<<endl;cout«"for (j=O;j<N;j+)cout«"资源"vvjvv": "«ALL_RESOURCEj;cout«endl«endl;cout«"当前系统中各类资源的可用数量,即向量 available 为:"vvendl;cout«"for (j=O;j<N;j+)cout«
17、"资源"vvjvv": "«AVAILABLEj;cout«endl«endl;cout«"各进程还需要的资源数量,即矩阵 need为:"vvendlvvendl;for (i=0;i<M;i+)cout«"进程 P"«i«":for (j=O;j<N;j+)cout«NEEDij«"cout«endl;)cout«endl;cout«"各进程已经得到的资
18、源量,即矩阵 allocation "«endl«endl;for (i=0;i<M;i+) cout«"进程 P"«i«":for (j=O;j<N;j+)cout«ALLOCATIONij«"cout«endl; cout«endl;) void changdata(int k) intj;for (j=0;j<N;j+)AVAILABLEj=AVAILABLEj-Requestj;ALLOCATIONkj=ALLOCATIONkj+
19、Requestj;NEEDkj=NEEDkj-Requestj;void restoredata(int k)int j;for (j=0;j<N;j+) AVAILABLEj=AVAILABLEj+Requestj;ALLOCATIONkj=ALLOCATIONkj-Requestj;NEEDkj=NEEDkj+Requestj;int chksec(int s)int WORK,FINISHW;int i,j,k=0;for(i=0;i<M;i+)FINISHi=FALSE;for(j=0;j<N;j+) WORK=AVAILABLEj;i=s;do if(FINISHi
20、=FALSE&&NEEDij<=WORK)WORK=WORK+ALLOCATIONij;FINISHi=TRUE;i=0;elsei+;while(i<M);for(i=0;i<M;i+)if(FINISHi=FALSE) return 1; return 0;int chkmax(int s) int j,flag=0;for(j=0;j<N;j+)if (MAXsj=ALLOCATIONsj) flag=1;AVAILABLEj=AVAILABLEj+MAXsj;MAXsj=0; return flag;void bank()int i=0,j=0;
21、char flag='Y'while(flag='Y|flag='y,)(i=-1;while(i<O|i>=M)cout«"请输入需申请资源的进程号(从 P0到P"«M-1«",否则重新输入!):";cout«"p"cin»i;if(i<0|i>=M)coutvv”输入的进程号不存在,重新输入!"«endl;)cout«" 请输入进程P"«i«"申请
22、的资源数:"«endl;for (j=O;j<N;j+) cout«" 资源"vvjvv":”;cin»Requestj;if(Requestj>NEEDij) cout«" 进程P"«i«"申请的资源数大于进程 P"«i«"还需要 "«j«"类资源的资源量!"cout«" 申请不合理,出错!请重新选择!"vvendlvvendl;flag='N'break;)elseif(Requestj>AVAILABLEj) cout<<" 进程 P"<<i<<" 申请的资源数大于系统可用"<<j<<" 类资源的资源
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某石油厂钻井作业办法
- 某纺织厂用工规范制度
- 2026秋人教PEP小学英语句型转换万能方法(肯定句、否定句、一般疑问句)专项精讲+练习
- 制药厂设备校验细则
- 化工厂生产安全规范
- 助产士职业发展路径
- 2026年北京货物销售合同二篇
- 2026城乡执法面试题及答案
- 2026单片机销售面试题及答案
- 2026东营党建面试题目及答案
- 盾构渣土处理及再利用技术规程
- 2025-2026学年重庆市南开中学高二下学期5月期中英语试题
- 2026四川达州市面向高校毕业生招聘园区产业发展服务专员37人笔试参考题库及答案解析
- 2026年新版事故应急处置卡模板(新版27类事故分类依据YJT 32-2025要求编制)
- 教育强国建设三年行动计划(2025-2027年)
- 雨课堂学堂在线学堂云《企业伦理(大连海事)》单元测试考核答案
- 会计管理费用明细科目大全35个
- 2022新能源光伏发电数据采集技术规范
- Unit+3+Reading+Friendship+on+the+rocks高一牛津译林版(2020)必修第一册
- 临时用地复垦方案96962
- 广东省义务教育阶段学生转学申请表
评论
0/150
提交评论