操作系统实验报告银行家算法班级:计算机()班姓名:李君益学号:(号)提交日期:指导老师: 林穗一、设计题目加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。
二、设计要求内容:编制银行家算法通用程序,并检测思考题中所给状态的安全性。
要求:(1)下列状态是否安全?(三个进程共享个同类资源)进程已分配资源数最大需求数(状态)(状态)(2)考虑下列系统状态分配矩阵最大需求矩阵可用资源矩阵问系统是否安全?若安全就给出所有的安全序列。
若进程请求(),可否立即分配?三、设计分析一.关于操作系统的死锁.死锁的产生计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。
两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。
正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。
一个进程需要使用独占型资源必须通过以下的次序:●申请资源●使用资源●归还资源若申请施资源不可用,则申请进程进入等待状态。
对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。
只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。
在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。
这种现象称为“死锁”。
2.死锁的定义一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。
.死锁的防止.死锁产生的条件:●互斥条件●占有和等待条件●不剥夺条件●循环等待条件以上三个条件是死锁存在的必要条件,胆不是充分条件。
第四个条件是钱唢呐个条件同时存在时产生的结果,所以,这些条件并不完全独立。
但单独考虑每个条件是有用的,只要能破坏这四个必要条件之一,死锁就可以防止。
.实用死锁防止方法●静态分配策略●层次分配策略.死锁的避免破坏死锁的四个条件之一能防止系统发生死锁,但这会导致低效率的进程运行和资源使用率。
死锁的避免则相反,他允许系统中同时存在三个必要条件,如果能掌握并发进程中与每个进程有关的资源动态申请情况,做出明智和合理的选择,仍然可以避免死锁的发生。
每当在为申请者分配资源前先测试系统状态,若把资源分配个申请者会产生死锁的话,则拒绝分配,否则接受申请,为它分配资源。
死锁避免不是通过队进程随意强加一些规则,而是通过对每一次资源申请进行仔细的分析来判断它是否能安全的分配。
问题是:是否存在一种算法总能做出正确的选择从而避免死锁?二.单种资源的银行家算法()提出了一种能够避免死锁的调度方法,称为一银行家算法。
它的模型基于一个小城镇的银行家,现将该算法描述如下:假定一个银行家拥有资金,数量为∑,被个客户共享。
银行家对客户提出下列约束条件:●每个客户必须预先说明自己所要求的最大资金量;●每个客户每次提出部分资金量申请和获得分配;●如果银行满足了客户对资金的最大需求量,那么,客户在资金运作后,应在有限时间内归还银行。
只要每个客户遵守上述约束,银行家将保证做到:若一个客户所要求的最大资金量不超过∑,则银行一定接纳该客户,并可处理他的资金需求;银行在受到一个客户的资金申请是,可能因资金不足而让客户等待,但保证在有限时间内让客户获得现金。
在银行家算法中,客户可看作进程,资金可看作资源,银行家可看作操作系统名字已使用最大名字已使用最大名字已使用最大可用:可用:可用:安全安全不安全银行家算法就是对每一个请求进行检查,检查这次资源申请是否会导致不安全状态,若是,则不满足该请求,否则便满足。
检查状态是否安全的方法是看他是否有足够的资源满足一个距最大需求最近的客户,如此反复下去。
如果所有投资都最终被收回,则该状态是安全的,最初的请求可以批准。
三.多种资源的银行家算法银行家算法可以被推广用来处理系统中有任意数目的进程,任意种类的资源,并且每种资源有多个实例的情况。
下图示出了其工作原理:进程磁带机绘图仪打印机-进程磁带机绘图仪打印机-源检查一个状态是否安全的步骤如下:(1)查找右边矩阵是否有一行,其未被满足的设备数均小于或等于向量。
如果找不到,则系统将死锁,因为任何进程都无法运行结束。
(2)若找到这样一行,则可以假设它获得所需的资源并运行结束,将该进程标记为结束,并将资源加到向量上。
(3)重复以上两步,知道所有的进程都标记为结束。
若达到所有进程结束,则状态示安全的,否则将发生死锁。
如果在第一步中同时存在若干进程均符合条件,则不管挑选哪一个运行都没有关系,因为,可用资源或者将增多,或者在最坏的情况下保持不变。
图中所示的状态示安全的,进程现在再申请一台打印机,可以满足它的请求,而且保持系统状态仍然示安全的(进程可以结束,然后是或,剩下的进程最后结束)。
假设进程获得一台打印机后,试图获得最后的一台打印机,若分配给,可用资源向量将减到,这时将导致死锁,显然的请求不能立即满足,必须延迟一段时间。
该算法最早由于年发表。
从那以后几乎每本操作系统的专著都详细的描述它,许多论文的内容也围绕该算法讨论,其主要优点是不需要死锁预防中加上的种种限制,如资源剥夺或重新运行进程。
但很少由作者指出该算法缺乏实用价值。
因为,进程很难在运行前就知道其所需资源的最大量;而且系统中的进程必须是无关的,相互之间没有同步要求;进程的个数和分配的资源数目应该是固定的。
这些要求往往事先难以满足。
.实现原理.数据结构假设有个进程类资源,则有如下数据结构:[*] 个进程对类资源的最大需求量[] 系统可用资源数[*] 个进程已经得到类资源的资源量[*] 个进程还需要类资源的资源量.银行家算法设进程提出请求[],则银行家算法按如下规则进行判断。
()如果[]<[,],则转();否则,出错。
()如果[]<,则转();否则,出错。
()系统试探分配资源,修改相关数据:()系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
.安全性检查()设置两个工作向量;[]()从进程集合中找到一个满足下述条件的进程,[]<如找到,执行();否则,执行()()设进程获得资源,可顺利执行,直至完成,从而释放资源。
()如所有的进程[],则表示安全;否则系统不安全。
、程序执行过程四、程序代码设计思路A、设计进程对各在资源最大申请表示及初值确定。
B、设定系统提供资源初始状态。
C、设定每次某个进程对各类资源的申请表示。
D、编制程序,依据银行家算法,决定其申请是否得到满足。
主要数据结构假设有个进程类资源,则有如下数据结构:[*] 个进程对类资源的最大需求量[] 系统可用资源数[*] 个进程已经得到类资源的资源量[*] 个进程还需要类资源的资源量主要代码结构()()()()源程序<><><>{;;;;};{;;;;};{;;;;};{;;;;} ;{;;;;;}[];[];***************************** ()读入{("各进程的:\");*;("","");( <){(,"\"[][][][][][][][][] );[][][];[][][];[][][];[][][];("\"[][][][][]);}();}*****************************()分配{(":\");("\");;( <)[];(<){( <){([]>[]>[]>[]>[]){[];[];[];[];[];;[][];;}}禁止循环过多(>) ;};}*****************************(){;("请输入进程号和请求资源!例如:题目要求:(进程号和资源之间个空格)\");("");(<[]<[]<[]<[]){(<<<<){[];[];[];[];[][][];[][][];[][][];[][][];("各进程的:\");( <)("\"[][][][][]);;}(">\让等待......\"[]);}(">\让等待......\"[]);;}*****************************(){;;<<"\\\\\\\\\\ ";( <)<<"*";<<<<"\"<<" 操作系统\"<<;<<<<"\"<<" 银行家算法\"<<;<<<<"\"<<" 姓名:李君益\"<<;<<<<"\"<<" 学号\"<<;<<<<"\"<<" 日期\"<<; ("\ ");( <)("*");("\\\\\");();("\ 请确认已经在\"\"中正确输入各进程的有关信息\"); ();();;;;;(){(<){[];[];[];[];}(()){("\这样配置资源是安全的\");("其安全序列是:");( <)(">"[]);("\");("有进程发出请求向量吗???( )\");();(''''){(());;} ;}{("不安全\");}}}五、执行结果和结果分析.程序运行还是介面如下:单资源状态情况下列状态是否安全?(三个进程共享个同类资源)进程已分配资源数最大需求数(状态) 在文件里面输入以上内容,点击单资源状态运行,显示如下:经过验证状态情况是安全的单资源状态情况下列状态是否安全?(三个进程共享个同类资源)(状态) 在文件里面输入以上内容,点击单资源状态运行,显示如下:经过验证状态情况是不安全的考虑下列系统状态分配矩阵最大需求矩阵可用资源矩阵问系统是否安全?若安全就给出所有的安全序列。