Appearance
题目
某系统采用改进型 CLOCK 置换算法,页表项中字段 A 为访问位,M 为修改位。A=0 表示页最近没有被访问,A=1 表示页最近被访问过。M=0 表示页没有被修改过,M=1 表示页被修改过。按 (A, M) 所有可能的取值,将页分为四类:(0, 0)、(1, 0)、(0, 1) 和 (1, 1),则该算法淘汰页的次序为( )。
错因
B
把"修改成本"放后于"近期访问"了——觉得 A 重要、M 是次要因素。但改进型 CLOCK 的核心理念是先看 A 再看 M——A=0 是首选(最近没访问),同样 A=0 时优先选 M=0 的(不用写回)。第二轮才让 A=1 的页参与,这时也是 M 优先。把顺序排成"先 A 再 M"会得到 (0,0) → (1,0) → (0,1) → (1,1),但这不符合"M=0 优先"的写回成本逻辑——A 同等条件下应当 M 优先。
C
把 (1,1) 放在 (1,0) 前——但已访问 + 已修改的页是改进型 CLOCK 最不愿动的(写回慢 + 最近还在用)。把它排到第三是把"修改成本"看得太重,忽略了"最近用过"的局部性预测意义。算法实际把 (1,1) 排最后:双重不利。
D
(1,1) 第二,(0,1) 第三——多半把"已修改"看成绝对优先级、把 A 位忽略了。但 A 位是评估"短期内还会用"的关键信号,A=1 的页无论 M 如何都比 A=0 的页更不该换。
总解析
改进型 CLOCK 把 (A, M) 分四类,按"两个轴"决定优先级:
| 轴 | 含义 | 偏好 |
|---|---|---|
| A 访问位 | 最近是否使用 | A=0 优先(不影响局部性) |
| M 修改位 | 是否要写回外存 | M=0 优先(无写回开销) |
A 比 M 更重要——因为 A 位反映"未来还会不会用",是最直接的预测;M 位只影响"换出时是否要写回",是成本但不是预测。所以排序优先级:
- 第一优先:A=0(不影响局部性的页)
- A 同级时:M=0(不用写回的)
按这个原则排:
| 排名 | (A, M) | 含义 | 替换代价 |
|---|---|---|---|
| 1 | (0, 0) | 没访问、没改 | 最低(直接丢) |
| 2 | (0, 1) | 没访问、改过 | 较低(要写回) |
| 3 | (1, 0) | 访问过、没改 | 较高(牺牲局部性) |
| 4 | (1, 1) | 访问过、改过 | 最高(局部性 + 写回) |
速记:A 是大维度(先看),M 是小维度(同 A 等级时再比)。最理想:从来没访问过 + 没改 = (0,0),扔掉零成本;最不愿动:刚用过 + 还改过 = (1,1)。
实际算法走法:
| 轮 | 找哪类 | 路径动作 |
|---|---|---|
| 1 | (0, 0) | 找到就换,没找到不动位 |
| 2 | (0, 1) | 找到就换;同时沿途清 A 位(让 (1,) 退化成 (0,) 给后续轮用) |
| 重复 1, 2 | 直到找到 |
最终淘汰次序:(0,0) → (0,1) → (1,0) → (1,1)。
最终答案是 A。