2.4.3 死锁避免之 银行家算法与安全性算法 的联系 以及 work向量的作用

在学习银行家算法的时候,我把 银行家算法 和 安全性算法 这两个概念搞混过,因此在这里做一个总结。

1.联系

银行家算法 = 检查进程的请求是否合理 + 试探性满足进程请求 + 用安全性算法检查此后系统是否处于安全状态

安全性算法 是 银行家算法 的核心

2. work向量的作用

一开始看书的时候,我一直很疑惑为什么要有个和初值和 available 相等的向量?直接用 available不好么?

其实在这里,work就是用来作为available的副本,就是在寻找安全序列的过程中充当 available的角色(相当于用一个假假的available进行模拟试探)。

如果使用work的话,在寻找安全序列的过程中发现某个序列的一部分不满足条件时,可以停止该序列的构建,回退还原work到之前的状态,并重新开始检查其他未完成的进程。可想而知,如果回退到序列的第一个进程之前,我们的work需要还原到最初的available值。

因此我们可以看到,work就像一个临时变量,如果直接用available的话,如果某一次尝试分配失败,你要从头开始重新尝试的时候,你的available已经不是原来的了(丢失原来的值)。

3. 一个错题的分享(25王道OS,P161 30.)

这一题我选的D。因为我看书上关于银行家算法的描述里面,只需要判断现存资源量available能满足本次的request量,并不需要让available与Need比较。所以我的理解是不需要满足尚需的最大资源量。

书上讲解如下:

但是事实上,我理解错误的地方在于题中所问是“检测到()时才分配资源”。

回忆一下开头所讲:

银行家算法 = 检查进程的请求是否合理 + 试探性满足进程请求 + 用安全性算法检查此后系统是否处于安全状态

题目这里问的已经是 安全性算法检查 时的步骤了,检查一通过就可以分配资源。而在安全性检查的过程中,我们要做的就是 不断寻找 Need < Work的行,即选项中所谓 能满足尚需的最大资源量。

以上所讲仅为帮助个人易于理解,很多地方缺乏严谨的表述。嗯,理解意思就行了,请多包涵。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值