- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
xx大学 操作系统 实验报告
姓名: 学号: 班级:
实验日期:实验名称:预防进程死锁的银行家算法
实验三 预防进程死锁的银行家算法
1.实验目的:通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。理解银行家算法的运行原理,进一步掌握预防进程死锁的策略及对系统性能的评价方法。:
2. 需求分析
(1) 输入的形式和输入值的范围;
输入:首先输入系统可供资源种类的数量n 范围:0n=100
资源1的名称:
资源的数量:
资源2的名称:
资源的数量:
。。。。。。。。
。。。。。。。。
输入作业的数量m 范围:0m=100
输入个进程的最大需求量m*n矩阵[Max]:
输入个进程已经申请的资源量m*n矩阵[Allocation]:
(2) 输出的形式
系统目前可用的资源[Avaliable]:
(资源名)
(资源名)
(资源名)
进程名
Max
Allocation
Need
(资源名)
(资源名)
(资源名)
(资源名)
(资源名)
(资源名)
(资源名)
(资源名)
(资源名)
(显示系统是否安全)
分配序列:
(3)程序所能达到的功能
通过手动输入资源种类数量和各进程的最大需求量、已经申请的资源量,运用银行家算法检测系统是否安全,若安全则给出安全序列,并且当用户继续输入某进程的资源请求时,能够继续判断系统的安全性。
(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
正确输入
输入参数(已申请资源数)错误
3、概要设计
所有抽象数据类型的定义:
int Max[100][100]; //各进程所需各类资源的最大需求
int Avaliable[100]; //系统可用资源
char name[100] };//资源的名称
int Allocation[100][100]; //系统已分配资源
int Need[100][100] }; //还需要资源
int Request[100]; //请求资源向量
int temp[100]; //存放安全序列
int Work[100];//存放系统可提供资源
int M=100; //作业的最大数为100
int N=100; //资源的最大数为100
主程序的流程:
* 变量初始化;
* 接收用户输入n,m,Maxij ,Allocationij;
* 按照银行家算法判断当前状态安全与否,安全给出安全序列,不安全给出提示;
* 如果安全,提示用户输入下一时刻进程Pk的资源请求Request(R1, … ,Rm);
* 如果不安全或者无新请求则退出。
各程序模块之间的层次(调用)关系
使用Main函数对全局变量进行初始化,然后调用showdata函数对各资源和进程进行整合显示,最后调用safe函数即银行家算法判定系统是否安全。若安全,并想继续对某进程进行资源请求,则调用request函数进行操作,其中request函数又调用changedata函数、showdata函数和safe函数进行请求后的数据修改、显示以及对系统安全性的判定。
4、详细设计
实现程序模块的具体算法。
int safe()//安全性算法
{
int i,k=0,m,apply,Finish[100]={0};
int j;
int flag=0;
Work[0]=Avaliable[0];
Work[1]=Avaliable[1];
Work[2]=Avaliable[2];
for(i=0;iM;i++){
apply=0;
for(j=0;jN;j++){
if (Finish[i]==FalseNeed[i][j]=Work[j]){
apply++;
if(apply==N){
for(m=0;mN;m++)
Work[m]=Work[m]+Allocation[i][m];//变分配数
Finish[i]=True;
temp[k]=i;
i=-1;
k++;
flag++;
}
}
}
}
for(i=0;iM;i++){
if(Finish[i]==False){
cout系统不安全endl;//不成功系统不安全
return -1;
}
}
cout系统是安全的!endl;//如果安全,输出成功
cout安全序列:;
for(i=
文档评论(0)