死锁避免:银行家算法

概念

Dijksta提出(1965): 仿照银行家发放贷款时采取的控制方式而设计的一种死锁避免算法。

应用条件

  1. 固定数量的进程中共享数量固定额资源
  2. 每个进程预先制定完成工作所需的最大资源数量
  3. 进程不能申请比系统中可用资源总数还多的资源
  4. 进程等待资源的时间是有限的。
  5. 如果系统满足了进程对资源的最大需求,那么进程应该在有限的时间内使用资源,然后
    归还给系统。

具体实现

算法结构

  1. 可利用资源向量Available  ARRAY[1…m]of interger
    是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。   
  2. 最大需求矩阵Max   ARRAY[1…n,1…m]of interger
    这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。   
  3. 分配矩阵Allocation  ARRAY[1…n,1…m]of interger 
    这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。   
  4. 需求矩阵Need   ARRAY[1…n,1…m]of interger
    这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。   
    Need[i,j]=Max[i,j]-Allocation[i,j]
  5. Request ARRAY[1…n,1…m]of interger
    本次进程对资源的申请多少。
    注释:为了方便一下简写为:AVAILABLE;Max[i]; Allocation[i]; Need[i]; Request[i]

银行家算法具体实现:

当进程Pi提出资源申请时,系统执行下列步骤:
1. 如果Request[i]<= Need[i] ,则转(2) ;否则,报错返回。
2. 如果Request[i]<= AVAILABLE[i] ,则转(3) ;否则,进程等待。
3. 假如系统分配资源,则有:
AVAILABLE[i]=AVAILABLE[i]-Request[cusneed][i];
Allocation[cusneed][i]=Allocation[i]+Request[cusneed][i];
Need[i]-=Request[i];
到此时系统进入了一个新的状态,需要进行判断
4. 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状, 进程等待。

安全性检查算法

  1. 数据结构
    Work ARRAY[1…m]of interger
    Finish ARRAY[1…m]of Boolean
  2. 安全性检查步骤
    (1) Work=AVAILABLE;
    FINISH = false;
    (2) 从进程集合中找到一个满足下述条件的进程i,
    Finish[i]==false;
    Need[i]<=Work;
    如找到,执行(3) ; 否则,执行(4)
    (3) 设进程获得资源,可顺利执行,直至完 成,从而释放资源。
    Work+=ALLOCATION[i];
    Finish[i]=true;
    转到(2)
    (4) 如所有的进程i,Finish= true ,则表示安全;否则系统不安全。

操作系统安全状态和不安全状态:   

全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。
如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
  不存在一个安全序列。不安全状态不一定导致死锁(有的数上说是一定,不一定的应该是动态分配资源吧)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值