- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
银行家算法实验报告
一、实验题目
为了了解系统的资源分配情况,假定系统的任何一种资源在任一种资源在任意时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能任由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。而银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法
二、实验要求
要求编写系统进行资源调度的程序,模拟进程的资源分配算法,了解死锁的产生和避免的办法。一个是随机动态地进行资源分配的模拟程序,即只要系统当前剩余资源满足进程的当前要求,就立即将资源分配给进程,以观察死锁产生情况;一个是采用银行家算法,有效地避免死锁的产生。
要求用银行家算法和随机算法实现资源分配。
设计3-4个并发进程,共享系统的10个同类不可抢占的资源。各进程动态进行资源的申请和释放。
用银行家算法和随机算法分别设计一个资源分配程序,运行这两个程序,观察系统运行情况,并对系统运行的每一步情况进行显示。
二、总的设计思想及语言环境、工具等
算法设计思路
银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次分配,否则,只要进程集合非空,系统便处于不安全状态,本次不能分配给他,请进程等待。
2. 语言环境、工具
计算机基本配置要求:
操作系统:WIN 98/2000/XP/2003 等Windows平台
内存:256MB及以上
主存64KB(Memory)(以KB为单位分配)
开发语言:Visual C++ 6.0
四、数据结构与模块说明(功能与框图)
五、源程序(指导老师验收通过)
#include string.h
#include iostream.h
#define FALSE 0
#define TRUE 1
#define W 10 //最大进程数W=10
#define R 20 //最大资源总数R=20
int M ;
int N ;
int ALL_RESOURCE[W];
int AVAILABLE[R]; //可利用资源向量
int MAX[W][R]; //最大需求矩阵
int ALLOCATION[W][R]; //分配矩阵
int NEED[W][R]; //需求矩阵
int Request[R]; //进程请求向量
void inputdata(); //数据输入
void showdata(); //数据显示
void changdata(int k);//进程请求资源数据改变
void restoredata(int k); //数据恢复
int chksec(int s); //系统安全性的检测
int chkmax(int s); //检测最大需求
void bank(); //检测分配的资源是否合理
void main()
{ int i,j;
inputdata();
for(i=0;iM;i++)
{ j=chksec(i);
if (j==0) break;
}
if (i=M)
cout错误提示:经安全性检查发现,系统的初始状态不安全!!!\nendl;
else
{ cout提示:经安全性检查发现,系统的初始状态安全!endl;
bank();
}
}
void inputdata()
{ int i=0,j=0,p;
cout请输入总进程数:endl;
do{
cinM;
if (MW) coutendl总进程数超过了程序允许的最大进程数,请重新输入:endl;
}while (MW);
coutendl;
cout请输入资源的种类数:endl;
do {cinN;
if (NR)
coutendl资源的种类数超过了程序允许的最大资源种类数,请重新输入:endl; }while (NR);
coutendl;
原创力文档


文档评论(0)