银行家算法的模拟实现实验报告(共17页).doc

上传人:飞****2 文档编号:14201902 上传时间:2022-05-03 格式:DOC 页数:9 大小:82.50KB
返回 下载 相关 举报
银行家算法的模拟实现实验报告(共17页).doc_第1页
第1页 / 共9页
银行家算法的模拟实现实验报告(共17页).doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《银行家算法的模拟实现实验报告(共17页).doc》由会员分享,可在线阅读,更多相关《银行家算法的模拟实现实验报告(共17页).doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上银行家算法的模拟实现一、 实验题目:模拟实现银行家算法的处理过程二、 实验目的:银行家算法是避免死锁的代表性算法。本实习旨在加深了解有关资源申请、避免死锁、状态安全性等概念,并体会和运用避免死锁的具体实施方法。然后依照本实习,自行设计模拟程序。三、 实验原理:1. 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源。当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进

2、程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。2. 安全状态:如果存在一个由系统中所有进程构成的安全序列P1,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。 不安全状态:不存在一个安全序列。不安全状态一定导致死锁。安全序列:一个进程序列P1,Pn是安全的,如果对于每一个进程Pi(1in),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j i )当前占有资源量之和。3. 设

3、requesti为进程pi的请求向量,如果requestij=K,表示进程pi需要K个Rj资源。当系统发出请求后,系统按下述步骤开始检查: 1)如果requestij=needij,转向步骤2;否则报告出错,申请的资源已经大于它需要的最大值。 2)如果requestij=availablej,转向步骤3;否则报告出错,尚无足够的资源。 3)系统试探着把资源分配给pi,并修改下列数据结构中的值: availablej=availablej-requestj allocationij=allocationij+requestj needij=needij-requestj 4)系统进行安全性算法,

4、检查此次分配后,系统是否还处于安全状态,若安全,把资源分配给进程pi;否则,恢复原来的资源分配状态,让进程pi等待。4. 安全性算法: int workRESOURCE_NUMBER; bool finishPROCESS_NUMBER; 1) Work=Available; Finish=false; 2) 寻找满足条件的i: A、Finishi=false; B、NeediWork; 如果不存在,则转4) 3) Work:=Work+Allocationi; Finishi:=true;转2) 4) 若对所有i,Finishi=true,则系统处于安全状态,否则处于不安全状态 四、 数据结

5、构: 数组五、 程序代码:#include#include#include#includeusing namespace std;#define N 3 /进程数#define M 3 /资源数int AvailableM; /可用的资源数int NeedNM=0; /还需要的资源数int MaxNM; /最大需求量int AllocationNM = 0; /当前分配到的资源数int RequestNM=0; /请求的资源数int n;time_t t;int isFinishN =0; /判断进程是否已经请求资源结束int test1 = 0;void Requester(); /进程随机

6、请求资源数目void Handle(); /处理该请求bool Check(); /安全性算法检查void show(); /打印出当前的进程资源状态int Finish(int); /进程是否已经完成,若完成返回1,否则为0void main()int i;int j;cout 请输入各个资源的可用数目:;for(i=0; i Availablei; cout 请依次输入各个进程对各个资源的最大需求数目: endl;for(i=0; iN; i+)for(j=0; j Maxij;Needij = Maxij - Allocationij;cout -原始状态- endl;show();in

7、t test = 0;int testP = 0;int testR = 0;doRequester ();test+;while(test != 10);int Finish(int i)int test = 0;int w = i; for(int j=0; jM; j+)if(Needwj = 0) /对j资源的需求量已经为0test+;if(test = M) /如果对每个资源的需求量都已经为0isFinishw = 1; /则将其设为1,代表已经完成return isFinishw;void Requester ()time_t t;int test = 0;srand(unsign

8、ed)time(&t)+rand();n = rand()%N;for(int j=0; jM; j+) if(Neednj = Availablej)test+;for(j=0; jM; j+)if(test=N ) Requestnj = Neednj;elsesrand(unsigned)time(&t)+rand(); Requestnj = rand()%4;Handle();void Handle() /处理请求int test1 = 0;int test2 = 0;for(int j=0; jM; j+)if(Requestnj=Neednj)if(Requestnj = Ava

9、ilablej)test1+;else cout 目前没有足够的资源分配给你的进程 n 的请求;for(j=0; jM; j+) cout Requestnj ;cout ,请等待! endl endl;elsecout 你的进程 n 所请求的资源; for(j=0; jM; j+) cout Requestnj ;cout 已经超过进程的需求数目! endl endl;if(test1 = M) /请求资源数目均小于可用资源数目cout 处理你的进程 n 的请求; for(j=0; jM; j+) cout Requestnj ; cout endl ;for(j=0; jM; j+) Av

10、ailablej = Availablej- Requestnj; Allocationnj = Allocationnj+Requestnj; Neednj = Neednj-Requestnj;if(Check()=true) /安全性算法检查是安全的,则打印出来show();if(Finish(n) = 1) /如果此次分配后该进程已经结束,那么久释放其占用的资源数目cout 进程 n 已经结束,会释放资源 endl;for(j=0; jM; j+) Availablej = Availablej + Allocationnj; Allocationnj = 0; Neednj = 0;

11、show(); else cout 你的进程 n 所请求的资源; for(j=0; jM; j+) cout Requestnj ; cout 系统不安全!本次资源申请不成功!endl endl;for(j=0; jM; j+) /如不安全则收回此次分配的资源数目 Availablej = Availablej + Requestnj; Allocationnj = Allocationnj - Requestnj; Neednj = Neednj + Requestnj;bool Check() /安全性算法检测int workM =0;bool finishN;for(int j=0; j

12、M; j+) workj = Availablej;for(int i=0; iN; i+)finishi = false;int test = 0;bool flag;int k=0;for(j=0; jM; j+)if(Neednj = workj)test+;if(test = M)flag = true;elseflag = false;test = 0;for(i=0;iN;i+) for(i=0;iN;i+) /循环检测 if(finishi = false & flag = true) for(j=0; jM; j+) workj = workj + Allocationnj;

13、finishi = true; test+;if(test = N)return true;elsereturn false;void show()cout - endl;cout 资源请求 t 已分配资源 t 尚需资源t 剩余可用资源 endl;cout 进程名称 tA B C tA B C t A B C endl;for(int i=0; iN; i+)cout P i t;for(int j=0; jM; j+)cout Allocationij ;cout t;for(j=0; jM; j+)cout Needij ;if( i=0 )cout t ;for(j=0; jM; j+)

14、cout Availablej ;cout endl;cout - endl endl;六、 运行结果: 七、 实验心得:这次的实验模拟实现银行家算法虽然用程序算法实现了模拟进程请求资源以及根据安全性检测是否要分配资源的整个过程,自己考虑整个代码的框架过程中期初觉得思路清晰,应该比较简单,但是列出框架以及主要函数之后开始用代码实现的时候,发现了很多隐藏的细节的考虑,比较繁琐而且环环相扣,要真的实现并没有当初以为的那么简单,比如我现在目前的算法虽然模拟了大致的过程,并且也可以不断循环请求,但是在进程请求资源那一块的实现还是有缺陷,没能很好的优化,目前只是如果有足够的资源,就让随机产生的进程i申请最大需求量,如果无法满足,则随机产生随机资源数目进行申请。但是这个请求资源并不是很优化需要进一步改造,但是还是对银行家算法有了更深入更清楚的了解,以后的程序编写不论是实验还是项目开发,无论大小,都应该把程序的整体框架构建好,提高重用性,再进行一步步实现。您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁