一、选题背景
这次课程设计要求完成一个资源管理系统,掌握使用银行家算法管理系统资源分配的工作原理。深入认识在多道程序系统中合理资源分配的重要性,加深死锁有关概念的理解。模拟实现银行家算法对系统资源进行分配,以防止死锁的出现。本课题肯定不可能实现对实际操作系统的资源管理,而是通过对模拟资源数据的处理,检测银行家算法在防止死锁出现的作用。
二、方案论证
模拟实现银行家算法对系统资源进行分配,以防止死锁的出现。本课题肯定不可能实现对实际操作系统的资源管理,而是通过对模拟资源数据的处理,检测银行家算法在防止死锁出现的作用。先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。
三、实验环境
-
Windows操作系统
-
VS 2013
-
C语言
四、设计思想及实验步骤
4.1 设计思想
先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。
4.2 银行家算法中的数据结构
可利用资源向量Available。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。
最大需求矩阵Max。这是一个 的矩阵,它定义了系统中 个进程中的每一个进程对 类资源的最大需求。如果Max[I,j]=K,则进程i需要Rj类资源的最大数目为K。
分配矩阵Allocation。这也是一个 的矩阵,它定义了系统中每一类资源当前已分配给每一个进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已经分得Rj类资源的数目为K。
需求矩阵Need。这也是一个 的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成任务。
即:
int M ; // 总进程数
int N ; // 资源种类
int ALL_RESOURCE[W]; // 各种资源的数目总和
int Max[W][R]; // 最大需求矩阵,M个进程对N类资源最大资源需求
int Available[R]; // 可利用资源向量,
int Allocation[W][R];// 分配矩阵,各个进程M已经得到N类资源的资源数
int Need[W][R]; // M个进程还需要N类资源的资源量
int Request[R]; // 进程的请求资源个数
以上三个矩阵间存在下述关系:
4.3 银行家算法bank()
设Request i是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。发出请求后,系统按下述步骤进行检查:
-
(1)检查申请量是否不大于需求量。如果Request i[j]<=Need[i,j],便转向步骤(2);否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。
-
(2)检查申请量是否小于系统中的可利用资源数量。如果Requesti[j]<=Available[i,j],便转向步骤(2);否则认为尚无足够资源,Pi必须等待。
-
(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:
Available[j]=Available[j]-Request[j];
Allocation[k][j]=Allocation[k][j]+Request[j];
Need[k][j]=Need[k][j]-Request[j];
- (1)试分配后,系统执行安全性算法,调用safe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程,以完成本次分配,并将安全序列打印出来;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
4.4 安全性算法safe()
-
(1)设置两个向量
- 工作向量:Work,它表示系统可提供给进程继续运行所需要的各类资源数目,它含有m个元素,在执行安全性算法开始时,Work: =Available
- Finish,它表示系统是否有足够资源分配给进程,使之运行完成。开始时先做Finish[i]:=false;当有足够的资源分配给进程时,再令Finish[i]:=true
-
(2)从进程集合中找到一个满足下述条件的进程
- Finish[i]:=false;
- Need[i,j]<=Work[j];若找到,执行步骤(3),否则,执行步骤(4)
-
(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行
- (4)如果所有的进程Finish= true都满足,则表示系统处于安全状态;否则系统处于不安全状态
五、程序的基本结构框图和流程图
5.1 程序结构功能图
5.2 流程图
六、实例运行结果及分析
七、总结
银行家算法就是一个分配资源的过程,使分配的序列不会产生死锁。此算法的中心思想是:按该法分配资源时,每次分配后总存在着一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。
通过这两周的课程设计,我依然学到了很多的实用性知识。对以前学习到的知识又进行了巩固,除了更深的了解这个算法,还对C语言进行了复习,让我获益匪浅。在本次的课程设计过程,我也遇到了很多这样或那样的问题,但是通过我上网查资料,去图书馆借书,以及向老师和同学请教,最终把问题给解决了,这样又锻炼了我实际动手操作能力。
https://www.write-bug.com/article/2581.html
作者: happybirthday