银行家算法-实验报告

上传人:px****h 文档编号:211690164 上传时间:2021-11-17 格式:PDF 页数:14 大小:482.67KB
返回 下载 相关 举报
银行家算法-实验报告_第1页
第1页 / 共14页
银行家算法-实验报告_第2页
第2页 / 共14页
银行家算法-实验报告_第3页
第3页 / 共14页
银行家算法-实验报告_第4页
第4页 / 共14页
银行家算法-实验报告_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《银行家算法-实验报告》由会员分享,可在线阅读,更多相关《银行家算法-实验报告(14页珍藏版)》请在金锄头文库上搜索。

1、课程设计报告课 程 设 计 名 称共享资源分配与银行家算法系 ( 部 )专业班级姓名学号指导教师年月日目录一、课程设计目的和意义. . 3二、方案设计及开发过程. 31. 课题设计背景. 32. 算法描述. 33. 数据结构. 44. 主要函数说明. 45. 算法流程图 . 5三、调试记录与分析四、运行结果及说明 . 61执行结果. 62结果分析. 7五、课程设计总结. 8一、程设计目的和意义计算机科学与技术专业学生学习完计算机操作系统课程后,进行的一次全面的综合训练,其目的在于加深催操作系统基础理论和基本知识的理解,加强学生的动手能力. 银行家算法是避免死锁的一种重要方法。通过编写一个模拟动

2、态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法二、方案设计及开发过程1. 课题设计背景银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次分配,否则,只要进

3、程集合非空,系统便处于不安全状态,本次不能分配给他。请进程等待2. 算法描述1)如果 Requesti 是进程 Pi 的请求向量,如果 Requesti ,j=K, 表示进程 Pi需要 K个 Rj 类型的资源。当 Pi 发出资源请求后,系统按下述步骤进行检查:如果 Requestij= Needi,j,便转向步骤 2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。2)如果 Requestij=Availablej,便转向步骤 3,否则,表示尚无足够资源,进程 Pi 须等待。3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:Availablej:=Availablej-

4、Requestij;Allocationi,j:=Allocationi,j+Requestij;Needi,j:=Needi,j-Requestij;4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程pi 等待。3. 数据结构1. 可利用资源向量 AVAILABLE 。这是一个含有 M 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其3初始值是系统中所配置的该类全部可哦那个资源的数目,其数值随该类资源的分配和回收而动态的改变。2. 最大需求矩阵 MAX 。这

5、是一个 M*N 的矩阵,它定义了系统中N 个进程中的每一个进程对M 类资源的最大需求。3. 分配矩阵 ALLOCATION。这也是一个 M*N 的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。4. 需求矩阵 NEED 。这也是一个 M*N 的矩阵,用以表示每一个进程尚需的各类资源数。R,W=MAXR,W-ALLOCATIONR,W4. 主要函数说明主要的常量变量#define W 10 法流程图三、调试记录与分析调试通过 , 程序未出错四、运行结果及说明1. 执行结果2. 结果分析银行家算法就是当接收到一个系统资源的分配后找到一个安全序列,使得进程间不会发生死锁,若发生死锁则让进

6、程等待。五、课程设计总结通过本次银行家算法实验,加深了我对银行家算法的了解,掌握了如何利用银行家算法避免死锁。实验中遇到点问题,通过查阅资料、询问老师顺利解决。通过这次的实践,使我的理论知识更加的牢固。附录程序源码 :#include using namespace std;#define FALSE 0#define TRUE 1#define W 10 /最大进程数 W=10#define R 20 /最大资源总数 R=20int M ;int N ;int ALL_RESOURCEW;int AVAILABLER; /可利用资源向量int MAXWR; /最大需求矩阵int ALLOCA

7、TIONWR; /分配矩阵int NEEDWR; /需求矩阵int RequestR; /进程请求向量void inputdata(); /数据输入void showdata(); /数据显示void changdata(int k);/进程请求资源数据改变void restoredata(int k); /数据恢复int chksec(int s); /系统安全性的检测int chkmax(int s); /检测最大需求void bank(); /检测分配的资源是否合理int main() int i,j; inputdata();/安全性算法 for(i=0;i=M) cout错误提示:经

8、安全性检查发现,系统的初始状态不安全!nendl; else cout提示:经安全性检查发现,系统的初始状态安全!endl; bank(); return 0;void inputdata()/数据输入 int i=0,j=0,p; cout请输入总进程数 :M; if (MW) coutendl总进程数超过了程序允许的最大进程数,请重新输入:W); coutendl; cout请输入资源的种类数 :N; if (NR) coutendl资源的种类数超过了程序允许的最大资源种类数,请重新输入:R); coutendl; cout请依次输入各类资源的总数量,即设置向量all_resource:e

9、ndl; for(i=0;iALL_RESOURCEi; coutendl; cout请依次输入各进程所需要的最大资源数量,即设置矩阵max:endl; for (i=0;iM;i+) for (j=0;jMAXij; if (MAXijALL_RESOURCEj) coutendl该最 大资 源数 量 超过了 声明 的该 资源 总数 , 请重 新输入:ALL_RESOURCEj); coutendl; cout请 依 次 输 入 各 进 程 已 经 占 据 的 各 类 资 源 数 量 , 即 设 置 矩 阵allocation:endl; for (i=0;iM;i+) for (j=0;j

10、ALLOCATIONij; if (ALLOCATIONijMAXij)coutendl 已占有的资源数量超过了声明的最大资源数量, 请重新输入 :MAXij); coutendl; for (i=0;iM;i+) for(j=0;jN;j+) NEEDij=MAXij-ALLOCATIONij; for (j=0;jN;j+) p=ALL_RESOURCEj; for (i=0;iM;i+) p=p-ALLOCATIONij; AVAILABLEj=p; if(AVAILABLEj0) AVAILABLEj=0; void showdata()/银行家算法 int i,j; cout各种资源

11、的总数量,即向量all_resource为:endl; cout ; for (j=0;jN;j+) cout 资源j: ALL_RESOURCEj; coutendlendl; cout当前系统中各类资源的可用数量,即向量available为:endl; cout ; for (j=0;jN;j+) cout 资源j: AVAILABLEj; coutendlendl; cout各进程还需要的资源数量,即矩阵need为:endlendl; for (i=0;iM;i+) cout进程 Pi: ; for (j=0;jN;j+) coutNEEDij ; coutendl; coutendl;

12、 cout各进程已经得到的资源量,即矩阵allocation为: endlendl; for (i=0;iM;i+) cout 进程 Pi: ; for (j=0;jN;j+) coutALLOCATIONij ; coutendl; coutendl;void changdata(int k)/进程请求资源数据改变 int j;for (j=0;jN;j+)AVAILABLEj=AVAILABLEj-Requestj;ALLOCATIONkj=ALLOCATIONkj+Requestj;NEEDkj=NEEDkj-Requestj;void restoredata(int k) /数据恢复i

13、nt j;for (j=0;jN;j+) AVAILABLEj=AVAILABLEj+Requestj;ALLOCATIONkj=ALLOCATIONkj-Requestj;NEEDkj=NEEDkj+Requestj;int chksec(int s)/系统安全性的检测int WORK,FINISHW; int i,j,k=0; for(i=0;iM;i+)FINISHi=FALSE; for(j=0;jN;j+) WORK=AVAILABLEj; i=s; do if(FINISHi=FALSE&NEEDij=WORK)WORK=WORK+ALLOCATIONij;FINISHi=TRUE

14、;i=0;else i+;while(iM); for(i=0;iM;i+)if(FINISHi=FALSE) return 1; return 0;int chkmax(int s) /检测最大需求 int j,flag=0;for(j=0;jN;j+)if (MAXsj=ALLOCATIONsj) flag=1;AVAILABLEj=AVAILABLEj+MAXsj;MAXsj=0; return flag;void bank() int i=0,j=0; char flag=Y; while(flag=Y|flag=y) i=-1; while(i=M) cout请输入需申请资源的进程号

15、(从P0 到 PM-1,否则重新输入! ):; couti; if(i=M) cout 输入的进程号不存在,重新输入!endl; cout请输入进程 Pi 申请的资源数 :endl; for (j=0;jN;j+) cout 资源jRequestj; if(RequestjNEEDij) cout进程 Pi 申请的资源数大于进程Pi 还需要 j类资源的资源量 !; cout申请不合理,出错 ! 请重新选择 !endlAVAILABLEj) cout进程 Pi 申请的资源数大于系统可用j 类资源的资源量 !; cout申请不合理,出错 ! 请重新选择 !endlendl; flag=N; bre

16、ak; if(flag=Y|flag=y) changdata(i); if(chksec(i) coutendl; cout该分配会导致系统不安全! 本次资源申请不成功,不予分配!endl; coutendl; restoredata(i); else coutendl;cout 经安全性检查,系统安全,本次分配成功,且资源分配状况如下所示: endl;coutendl;showdata();if(chkmax(i)cout 在资源分配成功之后,由于该进程所需的某些资源的最大需求量已经满足, endl;cout 因此在进程结束后系统将回收这些资源!endl; cout在资源收回之后,各进程的资源需求和分配情况如下所示:endl;showdata(); coutendl; coutflag;

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

当前位置:首页 > 中学教育 > 教学课件

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