【操作系统】银行家算法

银行家算法--避免死锁

实现思想

当某进程请求分配资源时,系统假定先分配给他,之后若能找到一个进程完成序列,说明系统是安全的,可进行实际分配,否则让申请者等待

数据结构

数据结构

安全性算法

work和finish向量:work表示系统的可用资源数,finish表示系统是否有足够的资源分配给进程。
初始值:work=available
need<=work
finish=false

Work = Work + Allocation;

实例

假定系统中有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配情况如下图所示。
在这里插入图片描述
(1)T0时刻系统是否安全?

执行安全性算法进行检查:

  1. work向量初值:work=available=(3,3,2)

  2. 在进程中找到满足need<=work:need(1,2,2)<=work

  3. 假设P1顺利执行完成:
    work1=work+allocation=(3,3,2)+(2,0,0)=(5,3,2)
    在这里插入图片描述

  4. 此时work=(5,3,2),再重复上述步骤。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 所以系统存在安全序列{P1,P3,P0,P2,P4},所以T0时刻系统出于安全状态
    安全序列可以不唯一

(2)P1发出请求Request(1,0,2),系统能分配资源吗?

执行银行家算法:
Request<=Need
Request<=Available
答:因为P1的Request(1,0,2)<=Need(1,2,2);
Request(1,0,2)<=Available(3,3,2)
所以系统为P1进行预分配,并修改Available,Allocation,Need的值
Available1 = Available-Request
=(3,3,2)-(1,0,2)
=(2,3,0)
Allocation1 = Allocation+Request
=(2,0,0)+ (1,0,2)
=(3,0,2)
Need1=Need - Request
=(1,2,2)-(1,0,2)
=(0,2,0)
然后执行安全性算法:

  1. Work = Available =(2,3,0);
  2. 在进程中找到Need<=Work,即Need(0,2,0)
  3. 假设P1可以顺利执行完成,则Work = Work+Allocation
  4. Finish=true
  5. 以此类推,用Need<=Work寻找下一个进程
  6. 执行安全性算法,得到安全序列{P1,P3,P0,P2,P4},所以请求向量Request(1,0,2)发出时系统安全

(3)P4发出请求Request(3,2,1),系统能分配资源吗

执行银行家算法进行检查:
Request(3,2,1)<=Need(4,3,1)
但Request(3,2,1)不小于等于Available(2,3,0),注意此时的Available不是原来的(3,3,2),而是分配给P1进程后的Available。所以P4请求失败,让其等待。

(4)P0发出请求(0,2,0),系统能分配资源吗?
答:Request<=Need(7,4,3);
Request<=Available(2,3,0)
系统为P0做预分配,并修改有关数据:
Available = Available(原来)-Request;
Allocation = Request+Allocation(原来);
Need=Need(原来) - Request

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值