Appearance
题目
下列选项中,不会影响系统缺页率的是( )。
错因
A
A 当然影响——置换算法(FIFO / LRU / OPT / CLOCK)决定淘汰哪一页。淘汰的越是"马上又要再用"的页,下次访问就越容易缺页,LRU 比 FIFO 好的差别正在这里。把"算法"理解成"随便挑一个扔掉"就会觉得它跟缺页率无关,但挑得准不准直接决定下次访存命不命中。
B
工作集是进程在一段时间内集中访问的页集合。如果工作集 > 分配给进程的页框数,进程就会反复换入换出(颠簸 / thrashing);工作集 ≤ 页框数,进程"待在内存里跑"基本不缺页。工作集大小和缺页率直接挂钩。
C
进程多 → 物理内存被分摊得更稀 → 每个进程分到的页框少 → 装不下自己的工作集 → 缺页率上升。这也是"多道程序数过多触发抖动"的来源。只盯单进程的局部行为、忽略大家抢内存的全局效应,就会误判 C 不影响。
总解析
把"缺页率"拆成它的定义看:
要影响这个比率,要么改"分子"(让缺页发生得更多 / 更少),要么改"分母"(不现实,访存模式由程序决定)。所以重点看每个选项是否改变缺页中断发生的次数。
| 选项 | 影响什么 | 是否改变缺页中断次数 |
|---|---|---|
| A 置换算法 | 决定淘汰哪一页 | ✓ 淘汰错了下次就缺页 |
| B 工作集大小 | 工作集超出页框数就颠簸 | ✓ 直接和缺页频度挂钩 |
| C 进程数量 | 进程多→单进程页框少 | ✓ 间接拉高缺页率 |
| D 页缓冲队列长度 | 加快缺页处理速度 | ✗ 不改变缺页发生次数 |
为什么页缓冲队列不影响缺页率?
页缓冲队列是 OS 在"换出但未真正释放"的页之间多加的一层缓冲——被换出的页先入队,若在被覆盖前又被访问,可以直接从队列取回,省掉一次磁盘 I/O。
但关键是:缺页中断本身仍然会发生——MMU 看到存在位是 0 就直接触发缺页,进了缺页处理程序后才发现"哦这页其实还在缓冲队列里",可以快速取回。整个过程还是被记成一次缺页。
所以页缓冲队列长度影响的是"每次缺页的处理速度",不影响"缺页发生的次数",缺页率公式里的分子分母都不动。
最终答案是 D。