某系统当前 Available=(3,3,2)。进程 P1 的 Allocation=(2,0,0),Max=(3,2,2),现提出 Request=(1,0,2)。按银行家算法,系统还应完成哪一步,才能决定是否正式分配?
本题 Request≤Need=(1,2,2),也满足 Request≤Available,但这两项只说明请求合法且当前拿得出来。银行家算法还要假设分配:Available 变为 (2,3,0),P1 的 Allocation 变为 (3,0,2)、Need 变为 (0,2,0),再运行安全性算法;只有新状态安全,才能正式分配。
选项分析
错误。当前资源够用只代表能分,不代表分配后的系统仍安全。
错误。Request 应与尚需量 Need 比较,而不是只与最大需求 Max 比较;之后还要做安全性检查。
正确。试分配和安全性检查是决定是否正式分配的关键步骤。
错误。银行家算法不要求进程每次申请前先释放全部已占资源。
本题为什么容易错
同学容易把‘可满足’和‘可安全满足’混为一谈。Available 是眼前余额,安全序列关心的是未来能否逐个完成并归还资源,判断层次不同。
简短答案
银行家算法收到资源请求后,为什么不能满足条件就立即分配,正确答案是 C(先试分配,再检查新状态是否仍存在安全序列)。本题 Request≤Need=(1,2,2),也满足 Request≤Available,但这两项只说明请求合法且当前拿得出来。银行家算法还要假设分配:Available 变为 (2,3,0),P1 的 Allocation 变为 (3,0,2)、Need 变为 (0,2,0),再运行安全性算法;只有新状态安全,才能正式分配。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 只要 Request≤Available,就立即分配 | 本题干扰项 | 错误。当前资源够用只代表能分,不代表分配后的系统仍安全。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 只检查 Request≤Max,即可立即分配 | 本题干扰项 | 错误。Request 应与尚需量 Need 比较,而不是只与最大需求 Max 比较;之后还要做安全性检查。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 先试分配,再检查新状态是否仍存在安全序列 | 本题正确答案 | 正确。试分配和安全性检查是决定是否正式分配的关键步骤。 | 看到题干核心场景时优先联想到它 |
| 要求 P1 先释放现有资源,再重新申请全部资源 | 本题干扰项 | 错误。银行家算法不要求进程每次申请前先释放全部已占资源。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 只要 Request≤Available,就立即分配:错误。当前资源够用只代表能分,不代表分配后的系统仍安全。
- 只检查 Request≤Max,即可立即分配:错误。Request 应与尚需量 Need 比较,而不是只与最大需求 Max 比较;之后还要做安全性检查。
- 要求 P1 先释放现有资源,再重新申请全部资源:错误。银行家算法不要求进程每次申请前先释放全部已占资源。
知识点详解
银行家算法通过限制资源分配,使系统始终留在安全状态。请求算法先检查 Request≤Need 和 Request≤Available,然后临时更新三组数据,再调用安全性算法。安全性算法用 Work 模拟可用资源,反复寻找 Need≤Work 的未完成进程,并在其模拟完成后回收 Allocation。
备考速记
请求不过三道门:不超需求、手里够给、给后安全。
死锁避免在死锁避免场景中的作用
死锁避免在本题中的核心价值,是解决“某系统当前 Available=(3,3,2)。进程 P1 的 Allocation=(2,0,0),Max=(3,2,2),现提出 Request=(1,0,2)。按银行家算法,系统还应完成哪一步,才能决定是否正式分配”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 判断某次资源请求能否批准
- 根据 Allocation 和 Max 求 Need
- 给定状态寻找安全序列或判断是否安全
死锁避免在软件设计师软考中的考法
软考选择题通常不会只考概念定义,还会把死锁避免放到死锁避免场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
老师在这里最怕大家看见 Available 足够就点头。银行家算法不是问‘现在有没有’,而是问‘给完以后大家还能不能按某个顺序全部做完’。所以先把账面数字临时改掉,再找安全序列,这一步不能省。
考点定位
资源请求算法有三道门:不超过自身尚需量、不超过当前可用量、试分配后仍然安全。前两道门通过,不等于一定可以正式分配。
易错提醒
- 用 Request 与 Max 比较,忘记先计算 Need=Max-Allocation
- 通过数量检查后没有做试分配
- 找到某个暂时不能完成的进程就误判为不安全,没有继续寻找其他可完成进程
备考提示
- 草稿纸固定画四列:Available、Allocation、Need、Work,数字不容易串。
- 在书木兰软考题库 https://www.shumulan.com/ 做同类题时,可把错误归因分成‘请求越界’和‘安全序列中断’,复盘会更快。
你可能还想了解
- 银行家算法为什么要试分配?
- Request应该和Need还是Max比较?
- 银行家算法安全序列怎么找?
- 没有安全序列就一定已经死锁了吗?
本文小结
Request 同时不超过 Need 和 Available 后,仍需先试分配并运行安全性算法;新状态存在安全序列,才可正式批准请求。