Appearance
题目
在页式虚拟存储管理系统中,采用某些页面置换算法,会出现 Belady 异常现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。下列算法中,可能出现 Belady 异常现象的是( )。
I. LRU 算法
II. FIFO 算法
III. OPT 算法
错因
B
把 Ⅰ LRU 误以为也会 Belady 异常。其实 LRU 是栈算法——栈算法的性质保证了"页框越多、内存中持有的页只增不减",所以缺页次数单调不增,理论上不会出现 Belady。把 LRU 当成 FIFO 那样按顺序换出是常见误识。
C
把 OPT 也算进去了。OPT(最佳置换)按"未来最长时间不用"换出,同样满足栈算法性质——缺页率绝对不会因为页框增加而变差。OPT 的本质是上界最优,把它和 FIFO 归在一起说明没区分"按到达时间换"和"按未来访问换"。
D
把 LRU 排除却把 OPT 选进去——可能是把 OPT 误以为是"按某种历史信息预测"所以会出现意外。但 OPT 的"按未来最长不用"是数学上的最优,无论页框多少都给出最少缺页次数,结构上不可能 Belady。
总解析
Belady 异常:增加页框反而让缺页次数变多。能不能出现这种异常,看算法是不是"栈算法"。
栈算法性质:在任何时刻,n 个页框时驻留的页集合是 (n+1) 个页框时驻留页集合的子集。也就是"页框越多,内存里能装下的页是上次的超集"。这种算法绝不可能 Belady。
| 算法 | 选择换出谁 | 是栈算法吗? | 可能 Belady? |
|---|---|---|---|
| Ⅰ LRU | 最近最久未用 | 是 | 不会 ✗ |
| Ⅱ FIFO | 最早进入内存的 | 不是("先到先走",跟"近期使用"无关,加一框后驻留集会变) | 会 ✓ |
| Ⅲ OPT | 未来最长时间不用的 | 是 | 不会 ✗ |
速记:LRU、OPT 是栈算法(因为换出依据"使用时间序",加页框只会让"留得久"的页活得更久);FIFO 不是栈算法(按"入场顺序"换,加页框可能让原本被留住的"老但常用"页提前被换)。
经典 Belady 反例(FIFO,页面序列 1,2,3,4,1,2,5,1,2,3,4,5):
- 3 个页框:9 次缺页
- 4 个页框:10 次缺页
页框反而多了一个、缺页却变多了——这就是 Belady。
最终答案是 A。