软件设计师 · 高频练习

银行家算法收到资源请求后,为什么不能满足条件就立即分配?

中级 单选题 第 956 题 困难 软件设计师银行家算法资源请求算法安全状态死锁避免
题目

某系统当前 Available=(3,3,2)。进程 P1 的 Allocation=(2,0,0),Max=(3,2,2),现提出 Request=(1,0,2)。按银行家算法,系统还应完成哪一步,才能决定是否正式分配?

A 只要 Request≤Available,就立即分配
B 只检查 Request≤Max,即可立即分配
C 先试分配,再检查新状态是否仍存在安全序列
D 要求 P1 先释放现有资源,再重新申请全部资源
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

本题 Request≤Need=(1,2,2),也满足 Request≤Available,但这两项只说明请求合法且当前拿得出来。银行家算法还要假设分配:Available 变为 (2,3,0),P1 的 Allocation 变为 (3,0,2)、Need 变为 (0,2,0),再运行安全性算法;只有新状态安全,才能正式分配。

选项分析

A

错误。当前资源够用只代表能分,不代表分配后的系统仍安全。

B

错误。Request 应与尚需量 Need 比较,而不是只与最大需求 Max 比较;之后还要做安全性检查。

C

正确。试分配和安全性检查是决定是否正式分配的关键步骤。

D

错误。银行家算法不要求进程每次申请前先释放全部已占资源。

本题为什么容易错

同学容易把‘可满足’和‘可安全满足’混为一谈。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 后,仍需先试分配并运行安全性算法;新状态存在安全序列,才可正式批准请求。