银行家算法,C语言程序设计
分类:欧美明星 热度:

  死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。

  在这里插入图片描述

  在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。

  银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。

  要解释银行家算法,必须先解释操作系统安全状态和不安全状态。

  安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

  安全状态

  如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。

  不安全状态

  不存在一个安全序列。不安全状态不一定导致死锁。

  在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。

  银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。

  设进程cusneed提出请求REQUEST [i],则银行家算法按如下规则进行判断。

  (1)如果REQUEST [cusneed] [i]<=NEED[cusneed][i],则转(2);否则,出错。

  (2)如果REQUEST [cusneed] [i]<=AVAILABLE[i],则转(3);否则,等待。

  (3)系统试探分配资源,修改相关数据:

  AVAILABLE[i]-=REQUEST[cusneed][i];

  ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];

  NEED[cusneed][i]-=REQUEST[cusneed][i];

上一篇:芜湖3D电影银幕品牌企业 安徽影动环球银幕 下一篇:没有了
猜你喜欢
各种观点
热门排行
精彩图文