操作系统课程设计银行家算法模拟实现

上传人:pu****.1 文档编号:545368323 上传时间:2022-09-08 格式:DOCX 页数:15 大小:125.91KB
返回 下载 相关 举报
操作系统课程设计银行家算法模拟实现_第1页
第1页 / 共15页
操作系统课程设计银行家算法模拟实现_第2页
第2页 / 共15页
操作系统课程设计银行家算法模拟实现_第3页
第3页 / 共15页
操作系统课程设计银行家算法模拟实现_第4页
第4页 / 共15页
操作系统课程设计银行家算法模拟实现_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《操作系统课程设计银行家算法模拟实现》由会员分享,可在线阅读,更多相关《操作系统课程设计银行家算法模拟实现(15页珍藏版)》请在金锄头文库上搜索。

1、操作系统原理课程设计课设名称:银行家算法模拟实现姓名:郝碧涛班级:13软件3班学号:1310321308指导教师:万方一设计题目银行家算法模拟实现二主要内容设计目的1、了解多道程序系统中,多个进程并发执行的资源分配。2、掌握思索的产生原因、产生死锁的必要条件和处理死锁的基本方法。3、掌握预防死锁的方法,系统安全状态的基本概念。4、掌握银行家算法,了解资源在进程并发执行中的资源分配策略。5、理解死锁避免在当前计算机系统不常使用的原因。三银行家算法的概念银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进 程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全 性,若

2、分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算 法,系统必须设置若干数据结构。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列P1,Pn是安全的,即对于每一个进程 Pi(1in),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j i )当前占有资源量之和。四银行家算法原理及思想在银行家算法中,为了决定是否对挡墙申请资源的进程进行资源分配,将 系统状态划分为安全状态与不安全状态。若为当前申请资源的进程分配资源后系 统进入安全状态,则接受进程请求为其分配资源,否则拒绝进程请求,不为其分 配资源。(安全状态:从当前时刻起,若系统能按

3、某种进程顺序( p1,p2pn)逐个分配所需全部剩余资源,使各个进程依次运行完毕,则称此时刻系统处于安 全状态,上述进程序列称为安全序列。否则系统处于不安全状态)注:前提是假设从当前时刻起,进程一次性申请全部剩余资源,而且一直 保持当时已经占有的资源直至运行完毕。五解决的问题银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许 进程动态地申请资源,但银行家算法在系统在进行资源分配之前 (并不是真的不 分配,这样就没法做了,只不过是试探性分配,不满足的话再恢复 ),应先计算 此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等 待。六、程序设计1. 需求分析1、始化

4、这组进程的最大资源请求和一次申请的资源序列。把各进程已占用和需求资源 情况记录在进程控制块中。假定进程控制块的内容包括:进程名,状态,当前申请量,资源 需求总量,已占资源量,能执行完标志。其中,进程的状态有:就绪,等待和完成。当系统 不能满足进程的资源请求时,进程出于等待状态。资源需求总量表示进程运行过程中对资源 的总的需求量。已占资源量表示进程目前已经得到但还为归还的资源量。因此,进程在以后 还需要的剩余资源量等于资源需要总量减去已占资源量。陷入每个进程的资源需求总量不应 超过系统拥有的资源总量。2、银行家算法分配资源的原则是:当某个进程提出资源请求时,假定先分配资源给它, 然后查找各进程的

5、剩余请求,检查系统的剩余资源量是否由于进程的分配而导致系统死锁。 若能,则让进程等待,否则,让进程的假分配变为真分配。A)查找各进程的剩余请求,检查系统的剩余资源量是否能满足其中一进程,如果能, 则转 B)。B)将资源分配给所选的进程,这样,该进程已获得资源最大请求,最终能运行完成。 标记这个进程为终止进程,并将其占有的全部资源归还给系统。重复第A)步和B)步,直到所有进程都标记为终止进程,或知道一个死锁发生。若所有 进程都标记为终止进程,则系统的初始状态是安全的,否则为不安全的。若安全,则正式将 资源分配给它,否则,假定的分配作废,让其等待。2. 概要设计2.1 设计思想当某个进程提出资源请

6、求时,假定先分配资源给它,然后查找各进程的剩余请求,检查 系统的剩余资源量是否由于进程的分配而导致系统死锁。若能,则让进程等待,否则,让进 程的假分配变为真分配。2.2数据结构假设有 m 个进程,则有如下数据结构:#define w 50 /宏定义#define r 50 /宏定义int m; /总进程数int allw;各种资源的数目总和int maxwr; /m 个进程最大资源需求量int availabler; /系统可用资源数int allocationwr; m个进程已经得到资源的资源量int needwr; m个进程还需要资源的资源量int requestr; /请求资源个数i=1

7、Yiv=mNNYi+YNY结束错 误max=资源总Need矩阵为该进程的Need向量为0调用银行家算法,及安全性算 法,完成分配,或并给出提示输入进程数m,各资源总数,初始化Available向量输入该进程的资源请求量Request任选一个进程作为当前进程(0到m-1)输入进程i的最大需求向量max。该进程已运行结 束初始化need Available,则进程i进入等待资源状态,返回。(3) 假设进程i的申请已获批准,于是修改下面数据结构中的数值: Available=Available-RequestAllocation=Allocation+RequestNeed=Need-Request

8、(4)系统执行安全性检查,如安全,则分配成立;否则恢复原来的资源分配状态,系统恢复 原状,进程等待。程序void bank()/银行家算法int i=0,j=0;char flag=Y; while(flag=Y|flag=y)i=-1;while(i=m)coutvv请输入需申请资源的进程号(从0到vvm-lvv):; cini;if(iv0lli=m)coutvv该进程号不存在,请重新输入!vvendl;coutvv 请输入进程vvivv申请的资源数:;for (j=0;j1;j+) coutrequestj;if(requestjneedij) 若请求的资源数大于进程还需要i类资源的资源

9、量j coutvv进程vvivv申请的资源数大于进程Nvivv还需要资源的资源量!”; coutvv申请不合理,请重新选择!vvendlvvendl;flag=1;break;elseif(requestjavailablej) /若请求的资源数大于可用资源数coutvv进程vvivv申请的资源数大于系统可用资源的资源量!”;coutvv申请不合理!请重新选择!vvendlvvendl;flag=1;break;if(flag=Y|flag=y)change(i); 调用change(i)函数,改变资源数if(chkerr(i) /若系统安全 rstore(i); 调用rstore(i)函数,

10、恢复资源数show();/输出资源分配情况else/若系统不安全show(); /输出资源分配情况else/若 flag=N|flag=nshow();coutvvendl;coutvv是否继续(Y/N):;cinflag;3.3安全性检查算法设置两个工作向量 Work=Available FinishM=False(2) 从进程集合中找到一个满足下述条件的进程,Finish i=FalseNeedv=Work如找到,执行(3);否则,执行(4)(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。Work=Work+AllocationFinish=TrueGO TO 2如所有的进程F

11、inishM=true,则表示安全;否则系统不安全。程序int chkerr(int s) /检查安全性 int work,FInISHw;int i,j,k=0; for(i=0;im;i+)FInISHi=false;for(j=0;j1;j+)work=availablej;i=s;do if(FInISHi=false&needij=work)work=work+allocationij; FInISHi=true; i=0;else i+;while(im); for(i=0;im;i+) if(FInISHi=false)coutendl;coutvv系统不安全!!本次资源申请不成

12、功!vvendl; coutendl;return 1;coutendl;coutvv系统安全,分配成功。vvendl;coutendl;return 0;3.4 修改数据结构中的数值 改变可用资源和已经拿到资源和还需要的资源的值 void change(int k) int j;for (j=0;jv1;j+)availablej=availablej-requestj; allocationkj=allocationkj+requestj; needkj=needkj-requestj;3.5 如果分配失败,则恢复原来的资源分配状态 恢复可用资源和已经拿到资源和还需要的资源的值void r

13、store(int k)int j;availablej=availablej+requestj; allocationkj=allocationkj-requestj; needkj=needkj+requestj;3.6 输出显示 实现人机交互的各类资源输出显示情况。void show() /输出资源分配情况int i,j;coutvv资源总量:;for (j=0;jv1;j+)coutvv vvallj; coutvvendlvvendl;coutvv系统目前资源可用数:;for (j=0;jv1;j+)coutvv vvavailablej;coutvvendlvvendl;coutvv进程名各进程还需要的资源量vvendl;for (i=0;ivm;i+)for (i=0;ivm;i+)coutvv进程vvivv:”;for (j=0;j1;j+)coutneedij;coutendl;coutendl;coutvv进程名各

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号