操作系统银行家算法
在操作系统的资源分配问题中要解决的是:一组并发进程{P1,P2,⋯,Pn}共享一组临界资源{R1,R2,⋯,Rm},Ri指一类资源。;'前,有一个进程Pi向操作系统提出了资源请求Requesta=(rl,r2,⋯,rm)。若系统当前的可分配资源Available=(aba2,⋯,a.11)刁i能满足当前进程的资源请求,即4i符合条件Requesl卜<Available,则拒绝j‘铺百进程的资源请求,阻塞该进程;菪系统当前的可分配资源Available能满足当前进程的资源请求,即符合条件Requestt一<Available,是否分配给该进程所需资源呢?
死锁在操作系统中,是一个重要的概念,它不仅在操作系统中有提到,在数据库,以及只要涉及到并发操作的,几乎都提到了这个问题了……很多人为了解决死锁的困扰,也想出了很多办法,其中著名的就“有银行家算法”,以及“安全性检查算法”等等著名算法,这里,我盟就详细的说一下银行家算法。
银行家通过发放贷款而获取利润,要获取利润必须按时收㈦贷款本金和利息,即贷款企业要按时还本付息,而tI有各企业能不断获得所需资金最终完成项目才能还本付息。要避免的情况是:在某个时刻,备并行推进项目的企业均得到了一部分贷款,要使项目顺利推进还需要贷款,而银行家已经没有多余资金,从而导致各企业问循环等待埘方释放其占有的资金而使项目中断,造成一种僵滞局面,银行家冈收不回贷款而破产。操作系统的资源分配类似于银行家贷款。操作系统就像一个银行家,系统临界资源就像银行家的贷款本金,并发进程就像需要贷款的企业。冈此可把银行家规避风险的算法引入操作系统的资源分配,解决资源分配中的死锁问题。这就是银行家算法这一名称的由来。
这时,我们不得不提一下安全状态,安全状态是指如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。相反,当存在不存在一个安全序列。就有可能导致死锁。
而银行家算法也是基于这一个理念二形成的,在银行家算法中,为了决定是否对当前申请资源的进程进行资源分配,将系统状态划分为安全状态和不安全状态。若为当前申请资源的进程分配资源后系统进入安全状态,则接受进程请求为其分配资源,否则拒绝进程请求不为其分配资源。
(ห้องสมุดไป่ตู้作系统)银行家算法
———————————————————————————————— 作者:
———————————————————————————————— 日期:
解析银行家算法
(09信管一班2009970037许可成)
摘要:银行家算法是操作系统中采用避免死锁策略来解决死锁问题的一种算法。本文以银行家算法为主线,从银行家算法的起源,命名,再到算法的流程,深入解析了银行家算法的根本原理。
下面,详细说一下,银行家算法的根本原理:
(1)安全状态与不安全状态均指某一时刻的系统状态。安全状态并不意味着系统不会陷入死锁;不安全状态意味着系统可能陷入死锁,但是不一定。如果在系统的整个运行过程中,一直运用银行家算法保证系统始终处于安全状态,则肯定不会陷入死锁。否则,一个时刻的安全状态是毫无意义的,而且可能从安全状态转变成不安全状态。
(2)安全状态与不安全状态两个概念的引入使许多人产生误解,容易认为安全状态意味着系统刁i会陷入死锁,不安全状态意味着系统肯定会陷入死锁。其实,安全状态与不安全状态基于安全序列而定义,其实质是指是否存在一个安全序列。安全序列的意义不在于从某时刻起系统按安全序列的顺序分配资源使各进程依次执行完毕。在某时刻确定的一个安全序列预示着,从此刻起,一定可以找到一种避免死锁的资源分配方案。一种特殊方案就是按照安全序列的顺序依次满足各进程的后续资源需求,使各进程依次顺序执行完毕。银行家算法基于这样一个原理:如果在系统运行的整个过程中,始终存在一种避免死锁的资源分配方案,则系统肯定能顺利推进直至所有进程都运行完毕。可以反证法来证明这一结论:如果系统陷入死锁,则肯定不存在一种避免死锁的资源分配方案。银行家算法的作用就是使系统始终存在一个安全序列,即始终存在一种资源分配方案。存在一种资源分配方案不意味着一定按此方案进行实际的资源分配。
关键字:银行家算法,数据结构,死锁避免。
在操作系统中,有一个重要的东西,就是进程,可以说,进程直接关系到了运行的效率,然而,有一个问题也随之产生,那就是死锁问题:多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步。
(3)如果所有进程的最大资源需求都小于或等于系统资源总额,则在银行家算法的作用下,系统能始终保持安全状态(即时刻都有一个安全序列)。深入分析可知:系统的初始状态肯定是安全的。如果在某时刻存在着一个安全序列Sl,则意味着在银行家算法的作用下以后系统不会拒绝所有进程的资源请求而陷入死锁,总会有一个进程的资源请求能得到满足而继续推进,至少安全序列Sl中的第一个进程的资源请求能得到满足(这点很容易证明),且该次资源分配后系统仍然保持安全状态(即存在一个安全序列S2,S2可能不同予上一个安全序列S1):依次递推,则系统会一赢处于安全状态。
(4)如果在某时刻系统处于不安全状态,即不存在一个安全序列,则意味着到最后可能(不一定)有一些进程的资源请求永远得不到满足,相互之间循环等待而产生死锁。一个特例就是从当前时刻起,进程一次性申请全部剩余资源,而且一直保持当时已经占有的资源直至运行完毕才释放其占有的全部资源。在这种情况下,如果不存在一个安全序列,则最后肯定会有些进程陷入死锁。
((5)银行家算法是一种比较谨慎的资源分配方法。在银行家算法的作用下,如果满足当前进程P的资源请求后系统处于安全状态(即存在一个安全序列),那么就为P分配资源,否则拒绝P的资源请求。安全序列意味着一种资源分配方案,但不一定是唯一的资源分配方案,可能有另外的资源分配方案,只不过很难寻找。不存在安全序列并不意味着不存在一种可以避免死锁的资源分配方案。那么按银行家算法实施资源分配,就有可能拒绝一些不会导致死锁的资源请求,从而阻滞了某些进程的执行,而且降低了资源利用率。其他的资源分配方案难找是因为无法预知各进程以后申请资源的情况:分多少次申请,每次申清备类资源的数量是多少。