Appearance
题目
若系统 S1 采用死锁避免方法,S2 采用死锁检测方法。下列叙述中,正确的是( )。
Ⅰ、S1 会限制用户申请资源的顺序,而 S2 不会 Ⅱ、S1 需要进程运行所需的资源总量信息,而 S2 不需要 Ⅲ、S1 不会给可能导致死锁的进程分配资源,而 S2 会
错因
A
承认了 Ⅱ Ⅲ 都不要,却选了错误的 Ⅰ。把"避免方法限制申请顺序"误记成了避免方法的特征——但限制申请顺序属于"死锁预防"(破坏循环等待条件),不是避免。避免方法(如银行家)允许任意顺序申请,只是临时拒绝那些会让系统进入不安全状态的分配请求。把"预防"和"避免"两个概念合并是常见误记。
C
同样把 Ⅰ 选进去了——再次混淆"预防 vs 避免"。死锁预防是事前结构上杜绝(破坏 4 条件之一,比如资源有序分配),银行家避免是事中动态判断(每次分配前算一下安不安全),两者机制完全不同。
D
把三条全选,等于完全没区分预防/避免/检测。Ⅰ 错(限制顺序是预防),Ⅱ Ⅲ 都对——把错的也勾上是没有具体梳理每个机制的工作方式所致。
总解析
死锁四种应对策略要分清:
| 策略 | 时机 | 做什么 | 需要的信息 |
|---|---|---|---|
| 预防 | 设计期 | 破坏 4 条件之一(如限制申请顺序、一次性分配等) | 静态约束 |
| 避免 S1 | 每次分配前 | 算一下分配后系统是否仍处于"安全状态"——不安全就拒绝分配 | 每个进程的最大资源需求(总量) |
| 检测 S2 | 运行时定期查 | 看看现在是不是已经死锁了(找资源分配图的环) | 当前的资源分配情况 |
| 解除 | 检测到死锁后 | 剥夺资源 / 撤销进程 / 回滚 | — |
逐条核对:
Ⅰ S1 限制申请顺序、S2 不限制 → ✗
限制申请顺序是死锁预防的手段(破坏循环等待),不是避免。S1 用银行家算法时,进程可以任意顺序申请,只是某次申请会因"会进不安全状态"被拒。S2 不限制顺序也对,但两者都不限制,所以这条说"S1 限制"是错的。Ⅱ S1 需要资源总量、S2 不需要 → ✓
银行家算法的核心数据是 Max 矩阵(每个进程最大需求量)+ Allocation + Need + Available;没有 Max,就算不了"进程未来还要多少、分了之后能不能保持安全"。检测算法只看当前状态(已分配 + 已请求),不需要 Max。Ⅲ S1 不分配可能导致死锁的资源、S2 会 → ✓
避免的本质就是事前拒绝——分配前模拟一遍,如果会进入不安全状态就直接不给。检测策略允许"先分配再说",等真死锁了再查、再解除——所以 S2 确实可能给出导致死锁的分配。
正确的是 Ⅱ Ⅲ。
最终答案是 B。