操作系统_第八章 死锁的避免

1 安全状态

如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于安全状态。处于安全状态的系统不会发生死锁, 处于不安全状态的系统可能会发生死锁。

应当注意: “不安全状态” 与“死锁” 两者并不等同。  不安全状态隐含着将会发生死锁, 死锁状态集是不安全状态集的一个子集, 如图所示

                                   

2 银行家算法

怎样才能使系统保持在安全状态呢? 一个古典的测试方法是银行家算法。

银行家可以把一定数量的资金供多个用户周转使用。 为保证资金的安全, 银行家规定:

  1. 当一个用户对资金的最大需求量不超过银行家现有的资金时, 就可接纳该用户;
  2. 用户可以分期贷款, 但贷款总数不能超过最大需求量;
  3. 当银行家现有的资金不能满足用户的尚需贷款数时, 可以推迟支付, 但总能使用户在有限的时间里得到贷款;
  4. 当用户得到所需的全部资金后, 一定能在有限时间里归还所有的资金。

    我们可以把系统看做银行家, 把进程看做用户, 把系统管理的资源看做银行家管理的资金,把进程向系统请求资源看成做用户向银行家贷款。 操作系统按银行家制定的规则为进程分配资源。 当进程首次申请资源时, 要测试该进程对资源的最大需求量。 如果系统现存的资源可以满足它的最大需求量, 则按当前的申请量分配资源, 否则就推迟分配。


    当进程在执行中继续申请资源时, 先测试该进程已占用的资源数与本次申请的资源数之和是否超过该进程对资源的最大需求量。 如果超过,则拒绝分配资源,否则再测试系统现存的资源能否满足该进程尚需的最大资源量。若能满足, 则按当前的申请量分配资源, 否则也要推迟分配。

    看一个例子:

例子2:某系统有A、B、C、D 4类资源, 供5个进程P1, P2, P3, P4,P5 共享。 系统对这4类资源的拥有量为: A类3个,B类14个,C类12个, D类12个, 表示为(3,  14, 12, 12). 设现在各个进程对资源的需求和分配情况如表8-6所示。

由于5个进程对4类资源的占有量为(2,9,10,12), 故当前系统中各类资源的剩余量为(1,5,2,0).  根据各进程对各类资源的最大需求和已占有量可知它们尚需的资源量如下:

进程P1 不再需要

进程P2尚需(0, 7, 5, 0)

进程P3尚需(1, 0, 0, 2)

进程P4尚需(0, 0, 2, 0)

进程P5尚需(0, 6, 4, 2)

可见,进程P1不会再申请资源。按银行家算法, 如果现在进程P2提出需要(0,7,5,0)个资源, 则暂时不能满足它的请求。为保证系统的安全,根据系统当前的剩余量,可先满足进程P4的需求, 当进程P4执行结束后归还所占的全部资源,又可继续分配给其他进程。 如果按表8-7中的顺离分配和回收资源, 则可保证所有进程在有限时间里得到所需的全部资源。

3 总结归纳:

银行家算法是在保证至少有一个进程能得到所需的全部资源的前提下进行资源分配的, 能确保系统时刻处于安全状态,避免了进程共享资源时可能发生的死锁。 但这种算法必须不断测试各个进程占用和申请资源的情况, 需花费较多的时间。

银行家算法虽然保守, 但能保证系统的绝对安全, 因而可以借助银行家算法来预测系统的安全性。

例如: 某系统有同类资源m个, 可并发且共享该类资源的进程最多 n个, 而每个进程申请该类资源的最大量为x (1<=x<=m), 只要不等式

n * (x-1) +1 <= m    成立,则系统一定不会产生死锁。

分析:  因为进程最多申请x个资源,最坏的情况是每个进程都已得到了(x-1)个资源, 现均要申请最后一个资源。  只要系统至少还有一个资源就可使其中一个或几个进程得到所需的全部资源。 在它们执行结束后,归还的资源又可供其他进程使用, 因而不可能发生死锁。

       解上述不等式, 可以得到:

     

如果在设计系统时能预测到并发执行的进程数和申请资源量的情况,那么只要每个进程所需资源的最大量不超过x, 就可不必受任何资源分配策略的限制, 只要有空闲资源就可分配给申请者, 系统不会有死锁现象。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值