内存满时缺页要调入新页就必须淘汰旧页——选哪个?这就是页面置换,目标是缺页率最低。
设访问串 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,3 个页框:
Belady 异常:页框增多,缺页反而增加。FIFO 独有(LRU、OPT 有栈性质,不出现)。
访问串 1 2 3 4 1 2 5 1 2 3 4 5
3 个页框:缺页 9 次
4 个页框:缺页 10 次 ← 页框变多,缺页反增
原因:FIFO 淘汰的「最早调入」与「将来最久使用」之间没有关联,淘汰决策盲目。
抖动(thrashing):进程频繁缺页、忙于换页,CPU 利用率暴跌。根因:分配的页框数小于其工作集。
工作集(working set):进程在时间窗口 Δ 内实际访问的页集合,W(t, Δ) 随 Δ 增大最终稳定。
一次缺页:陷入内核 → 查页表确认缺页 → 找空闲页框(无则按 7.1 置换)→ 从磁盘读入 → 更新页表 → 重启被中断指令。
p 是缺页率,即使只有 1%,EAT 也可能慢几十倍。
同一访问串、3 页框。
| 算法 | 缺页次数 | 实现 | 硬件支持 | 异常 |
|---|---|---|---|---|
| OPT | 9(理论最低) | 不可实现 | — | 无 |
| LRU | 12 | 栈/链表/计数器 | 高 | 无 |
| CLOCK | 14 | 访问位 | 低(1 bit) | 无 |
| FIFO | 15 | 队列 | 无 | 有 Belady |