欢迎来到天天文库
浏览记录
ID:41082717
大小:184.50 KB
页数:19页
时间:2019-08-16
《计算机操作系统作业_银行家算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、上海理工大学08级操作系统《银行家算法》《计算机操作系统—组队作业》银行家算法设计报告目录一、课程设计的目的2二、课程设计的要求2三、课程设计题目描述3四、课程设计之银行家算法原理3五、源程序结构分析及代码实现5六、课程设计的总结19一、课程设计的目的上海理工大学08级操作系统《银行家算法》操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。对知识进行实践是《计算机操作系统》理论课的必要补充,是复习和检验所学课程的重要手段,本课程设计的目
2、的是综合应用学生所学知识,通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。二、课程设计的要求1.分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。2.对程序的每一部分要有详细的设计分析说明。3.源代码格式要规范。4.设计合适的测试用例,对得到的运行结果要有分析。5.设计中遇到的问题,设计的心得体会。6.按期提交完整的程序代码、可执行程序和课程设计报告。三、课程设计题目描述银行家算法是一种最有代表性的避免死锁的算法。
3、 要解释银行家算法,必须先解释操作系统安全状态和不安全状态。 安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。 不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。 那么什么是安全序列呢? 安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj(j
4、》 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资
5、源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。四、课程设计之银行家算法原理1.银行家算法的思路先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。2.银行家算法中用到的主要数据结构可利用资源向量intAvailable[j]j为资源的种类。最大需求矩阵intMax[i][j]i为进程的数量。分配矩阵intAllocation[
6、i][j]需求矩阵intneed[i][j]=Max[i][j]-Allocation[i][j]申请各类资源数量intRequesti[j]i进程申请j资源的数量工作向量intWork[x]intFinish[y]3.银行家算法bank()进程i发出请求申请k个j资源,Requesti[j]=k(1)检查申请量是否不大于需求量:Requesti[j]<=need[i,j],若条件不符重新输入,不允许申请大于需求量。(2)检查申请量是否小于系统中的可利用资源数量:Requesti[j]<=avail
7、able[i,j],若条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。上海理工大学08级操作系统《银行家算法》(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:Available[i,j]=Available[i,j]-Requesti[j];Allocation[i][j]=Allocation[i][j]+Requesti[j];need[i][j]=need[i][j]-Requesti[j];(4)试分配后,执行安全性检查,调用sa
8、fe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。(5)用do{…}while循环语句实现输入字符y/n判断是否继续进行资源申请。4.安全性检查算法(safe()函数)(1)设置两个向量:工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work=Available。Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开
此文档下载收益归作者所有