Skip to content

2024年 408 操作系统 第 27 题

操作系统2024年选择题2分

题目

回收分区时,仅合并大小相等的空闲分区的算法是( )。

错因

B

把"分配策略"和"回收策略"混为一谈。最佳适应是分配时找最小够用块,回收时只看"是否物理相邻"——相邻空闲分区不论大小都合并。"最佳"修饰的是分配查找策略,对合并规则没有特殊约束。

C

同 B 的思路。最坏适应是分配时找最大块(避免产生小碎片),回收时同样只看相邻就合并,不要求大小相等。

D

同 B 的思路。首次适应是分配时按地址顺序找第一个够用块,回收时合并相邻空闲分区——也不要求大小相等。

B/C/D 的共同特点:它们都是"动态分区分配"家族的成员,回收策略一致(相邻就合并),区别只在分配时的查找方式。把"分配策略不同"误推成"回收规则也不同",是这三个选项被选中的常见误解。

总解析

伙伴算法核心:内存按 2 的幂次切块(1KB, 2KB, 4KB, ..., 1MB ...)。每个块只能跟它的"伙伴"合并。

伙伴的定义:两个块同时满足——

  1. 大小相等(同为
  2. 物理相邻
  3. 来自同一个父块(即合并它们后能恰好拼出一个 的块)

回收时,OS 检查被释放块的伙伴:

  • 伙伴空闲 → 合并成 的块,再递归检查上一层伙伴
  • 伙伴占用 → 不合并

这正对应题面的"仅合并大小相等的空闲分区"——而且伙伴算法还有一个隐式约束:必须是同父的伙伴对,不是任意两个等大块都能合。

对比四种算法

算法分配查找策略回收合并规则
伙伴算法(A)分级链表,从最小够用的层级取大小相等且互为伙伴才合并
最佳适应(B)空闲分区链表(按容量升序),找最小够用物理相邻就合并(不论大小)
最坏适应(C)空闲分区链表(按容量降序),找最大块物理相邻就合并
首次适应(D)空闲分区链表(按地址升序),找第一个够用物理相邻就合并

关键区分:B/C/D 都是动态分区分配——分区任意大小,回收只看相邻;伙伴算法是定长分级——分区只能 2 的幂次,回收只合伙伴

为什么伙伴算法这样设计:分级管理 + 伙伴约束让分配/回收的复杂度都是 ,且能高效抑制碎片(合并到上一层后块更大、可用性更强)。代价是只能分配 2 的幂次大小,会有一定内部碎片。

最终答案是 A

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数