银行家算法模拟程序设计
银行家算法模拟程序设计
目录
一、课程设计的目的3
二、课程设计的要求3
三、课程设计题目描述3
四、算法流程图4
1、银行家算法流程图4
2、安全性检查算法流程图5
五、课程设计之银行家算法原理5
1.银行家算法的思路5
2.银行家算法5
3.安全性检查算法(IsSafe()函数)6
六、源程序结构分析及代码实现7
1.程序结构7
2.数据结构7
3.函数声明8
4. 源代码8
6. 运行界面14
七、课程设计的总结16
一、课程设计的目的
操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。《操作系统课程设计》是《操作系统》理论课的必要补充,是复习和检验所学课程的重要手段,本课程设计的目的是综合应用学生所学知识,通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。
二、课程设计的要求
1.分析设计,给出解决方案(要说明设计实现的原理,采用的数据结构)。2.画出程序的基本结构框图和流程图。3.对程序的每一部分要有详细的设计分析说明。4.源代码格式要规范。5.设计合适的测试用例,对得到的运行结果要有分析。6.设计中遇到的问题,设计的心得体会。7.按期提交完整的程序代码、课程设计报告。
否
是
否
是
不安全
安全
2、安全性检查算法流程图
未找到
是不是
找到
五、课程设计之银行家算法原理
1.银行家算法的思路
先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。
2.银行家算法
进程mi发出请求申请k个j资源,Request [mi][j]=k
(1) Request [mi][j]<=need[mi][j],检查申请量是否不大于需求量,若条件不符重新输入,不允许申请大于需求量。
(2) Request [mi][j]<=available[mi][j],检查申请量是否小于系统中的可利用资源数量,若条件不符就申请失败,阻塞该进程,重新申请资源。
(3) 若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:
Available[i] -= Request[mi][i];
Allocation[mi][i] += Request[mi][i];
Need[mi][i] -= Request[mi][i]
(4) 试分配后,执行安全性检查,调用IsSafe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
(5) 用while 循环语句实现输入字符y/n判断是否继续进行资源申请。
3.安全性检查算法(IsSafe()函数)
(1) 设置两个向量:
工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work= Available。
Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]=0;当有足够的资源分配给进程时,再令Finish[i]=1。
(2) 在进程中查找符合以下条件的进程:
条件1:Finish[i]=0;
条件2:need[i][j]<=Work[j]
若找到,则执行步骤(3)否则,执行步骤(4)
(3) 当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work[j]= Work[j]+ Allocation[i][j];
Finish[i]=1;
(4) 如果所有的Finish[i]=1都满足,则表示系统处于安全状态,否则,处于不安全状态
六、源程序结构分析及代码实现
1.程序结构
程序共有以下七个部分:
安全性检查IsSafe():用于判断当前状态安全性,根据不同地方的调用提示处理不同。
初始化算法1Read():用于程序开始进行初始化数据,从文件中读入数据:进程数量、资源种类、各种资源可利用