欢迎来到天天文库
浏览记录
ID:56964657
大小:579.54 KB
页数:16页
时间:2020-07-29
《银行家死锁避免算法模拟课程设计(C#).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、华南理工大学序号课程名称:操作系统指导老师:XXX学号:10563387120188008学生姓名:XXX学习中心:学院直属班提交日期:2017-05-30评审日期__________成绩_________评审教师(签名)__________华南理工大学继续教育学院16华南理工大学一、实验目的:通过本次实验掌握银行家死锁避免算法的基本思想。当进程提出资源申请时,能够用该算法和安全性检查判断是否拒绝进程请求。二、实验内容:认真阅读教材“利用银行家算法避免死锁”内容,理解该算法是如何能够实现死锁避免的。编写一
2、个银行家算法模拟程序用于处理进程的资源申请。1。假设系统共有5类资源,分别以A、B、C、D、E来标识,每类资源的初始数量全部为50。2。进程可以通过程序界面随时提交新的资源申请,提交的信息包括进程名称、对5类资源的最大需求数量。3。每次当有资源申请时,先输出系统当前状态(5类资源当前可用数量,每个进程已分配的每类资源数量),再利用银行家算法判断是否该满足进程请求。如果可以分配,输出给该进程分配资源后的系统状态,再输出至少一个“安全序列”。三、实验原理:1.产生死锁的四个条件:互斥条件---进程要求对所分配
3、的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。占有并等待条件---当进程因请求资源而阻塞时,对已获得的资源保持不放。非抢占条件---进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。循环等待条件---在发生死锁时,必然存在一个进程--资源的环形链。2.避免死锁实际上是从破坏以上四个必要条件来实现,下面利用银行家算法来进行演示。3.银行家算法步骤:(1)如果进程Pi发出请求Requesti[j]≤Need[i,j],则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过
4、它所宣布的最大值。(2)如果Requesti[j]≤Available[j],则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available[j]=Available[j]-Requesti[j]; Allocation[i,j]=Allocation[i,j]+Requesti[j]; Need[i,j]=Need[i,j]-Requesti[j];(4)系统执行安全性算法,检查此次资源
5、分配后,系统是否处于安全状态。4.安全性算法步骤:(1)设置两个向量①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;16华南理工大学②布尔向量Finish。它表示系统是否有足够的资源分配给进程i,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。(2)从进程集合中找到一个能满足下述条件的进程:①Finish[i]=false;②Need[i,j]≤Work[j];如找到
6、,执行步骤(3);否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work[j]=Work[j]+Allocation[i,j];Finish[i]=true;转向步骤(2)。(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态,并恢复试分配的资源。四、实验环境:1.开发工具:MicrosoftVisualStudioCommunity20172.开发语言:C#五、实验方法1.算法数据结构:1)可利用资
7、源向量Available,它是一个最多含有50个元素的数组,其中的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available(j)=k,表示系统中现有j类资源k个。2)最大需求矩阵Max,这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k,表示进程i需要j类资源的最大数目为k。3)分配矩阵Allocation,这也是一个n×m的矩阵,它定义了系统中的每类资源当前一
8、分配到每一个进程的资源数。如果Allocation(i,j)=k,表示进程i当前已经分到j类资源的数目为k。Allocationi表示进程i的分配向量,有矩阵Allocation的第i行构成。4)需求矩阵Need,这还是一个n×m的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=k,表示进程i还需要j类资源k个,才能完成其任务。Needi表示进程i的需求向量,由矩阵Need的第i行构成。5)上述三个矩阵间
此文档下载收益归作者所有