- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编程验证银行家算法实验目的银行家算法是避免死锁的一种重要方法,本设计要求编程实现银行家算法程序。了解银行家算法运行的规律币,加深对银行家算法的了解。实验原理银行家算法的思路:??1)、进程一开始向系统提出最大需求量.??2)、进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.??3)、若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的剩余资源量,若不超出,则分配,否则等待.银行家算法的数据结构.??1)、系统剩余资源量A[n],其中A[n]表示第I类资源剩余量.??2)、各进程最大需求量,B[m][n],其中B[j][i]表示进程j对i类资源最大需求.??3)、已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量.??4)、剩余需求量.D[m][n],其中D[j][i]对第i资源尚需的数目.银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作:??1)、判定E[n]是否大于D[j][n],若大于,表示出错.??2)、判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待.??3)、若以上两步没有问题,尝试分配,即各变量作调整.??4)、按照安全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待.安全性检测算法??1)、先定义两个变量,用来表示推算过程的数据.??????F[n]=A[n],表示推算过程中,系统中剩余资源量的变化.??????J[n]=False表示推算过程中各进程是否假设已完成??2)、流程:??????在剩余的进程中(在推算)过程中,一些进程假设已完成,查找D[j][n]=F[n]的进程,找到后令J[j]=True(假设该进程完成),F[n]+D[j][n](该进程所占资源释放),如此循环执行.若最后,所有的F[n]=True(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.实验内容在codeblock编译器下编写代码首先现编写一个库文件‘s.h’,定义一个结构体:typedef struct { int A; int B; int C;}RESOURCE; 结构体里面的三个域分别表示三种资源的数量。按书中的数据初速化三个矩阵RESOURCE Max[PROCESSES_NUMBER] = {{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//最大需求矩阵RESOURCE Allocation[PROCESSES_NUMBER] = {{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//已分配资源数矩阵RESOURCE Need[PROCESSES_NUMBER] = {{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};//需求矩阵RESOURCE Available = {3,3,2};//可用资源向量int safe[PROCESSES_NUMBER];上面定义好数据后就可以开始运行代码。运行后如图:可以得到T0时刻的安全序列是(P1,P3,P4,P2,P0)这里选择输入0 1 1 0,使Request0为(1,1,0)输出结果为可以得到安全序列为(P1,P3,P0,P2,P4)继续输入2 1 5 7,使Request2为(1,5,7)输出结果为因为请求向量大于需求向量,所以此时分配失败。继续输入1 1 0 2,使Request1为(1,0,2)此时系统进入不安全状态,有可能导致死锁。附录:主函数代码#include stdio.h#include string.h#include s.h//进行试探分配void ProbeAlloc(int process,RESOURCE *res){Available.A -= res-A;Available.B -= res-B;Available.C -= res-C;Allocation[process].A += res-A;Allocation[process].B += res-B;Allocation[process].C += res-C;Need[process].A -= res-A;Need[process].B -= res-B;Need[process].C -= res-C;}//若进入不安全状态,则返回void RollBack(int process,RESOURCE *res){Available.A += res-A;Available.B += res-B;Available.C += res-C;Allocation[proc
文档评论(0)