基于C语言实现的操作系统银行家算法

happybirthday

发布日期: 2019-06-07 11:51:02 浏览量: 605
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、选题背景

这次课程设计要求完成一个资源管理系统,掌握使用银行家算法管理系统资源分配的工作原理。深入认识在多道程序系统中合理资源分配的重要性,加深死锁有关概念的理解。模拟实现银行家算法对系统资源进行分配,以防止死锁的出现。本课题肯定不可能实现对实际操作系统的资源管理,而是通过对模拟资源数据的处理,检测银行家算法在防止死锁出现的作用。

二、方案论证

模拟实现银行家算法对系统资源进行分配,以防止死锁的出现。本课题肯定不可能实现对实际操作系统的资源管理,而是通过对模拟资源数据的处理,检测银行家算法在防止死锁出现的作用。先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。

三、实验环境

  • 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个,方能完成任务。

即:

  1. int M ; // 总进程数
  2. int N ; // 资源种类
  3. int ALL_RESOURCE[W]; // 各种资源的数目总和
  4. int Max[W][R]; // 最大需求矩阵,M个进程对N类资源最大资源需求
  5. int Available[R]; // 可利用资源向量,
  6. int Allocation[W][R];// 分配矩阵,各个进程M已经得到N类资源的资源数
  7. int Need[W][R]; // M个进程还需要N类资源的资源量
  8. 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)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:

  1. Available[j]=Available[j]-Request[j];
  2. Allocation[k][j]=Allocation[k][j]+Request[j];
  3. 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语言进行了复习,让我获益匪浅。在本次的课程设计过程,我也遇到了很多这样或那样的问题,但是通过我上网查资料,去图书馆借书,以及向老师和同学请教,最终把问题给解决了,这样又锻炼了我实际动手操作能力。

上传的附件 cloud_download 基于C语言实现的操作系统银行家算法.7z ( 325.66kb, 2次下载 )
error_outline 下载需要8点积分

发送私信

都说你眼中开倾世桃花,却如何一夕桃花雨下

6
文章数
11
评论数
最近文章
eject