596 字
3 分钟
页面置换算法有哪些?FIFO、LRU 和 Clock
  1. 1操作系统面试学习路线与知识地图
  2. 2什么是用户态和内核态
  3. 3什么是系统调用?它和普通函数调用有什么区别
  4. 4进程和线程有什么区别
  5. 5进程的五种状态:新建、就绪、运行、阻塞与终止
  6. 6fork、exec 和 wait 分别做什么
  7. 7什么是竞态条件和临界区?如何保证互斥
  8. 8互斥锁和自旋锁有什么区别?分别适合什么场景
  9. 9死锁的四个必要条件是什么?如何逐个预防
  10. 10缺页异常如何处理?虚拟内存不等于 Swap
  11. 11阻塞、非阻塞、同步、异步 I/O 怎么区分
  12. 12抢占式调度是什么?SJF 和 MLFQ 适合什么假设
  13. 13进程间通信如何选择?管道、共享内存、信号和 Socket
  14. 14线程切换时,操作系统要做哪些操作
  15. 15进程上下文切换要保存什么?为什么有开销
  16. 16死锁是什么?如何预防和避免死锁?
  17. 17银行家算法如何避免死锁?死锁检测后怎样恢复
  18. 18活锁、饥饿和死锁有什么区别
  19. 19进程调度算法:FCFS、SJF、优先级、时间片轮转与多级反馈队列
  20. 20调度指标有哪些?什么是优先级反转
  21. 21为什么要有虚拟内存
  22. 22TLB、多级页表和虚拟地址转换是怎么工作的
  23. 23什么是分段,什么是分页
  24. 24页面置换算法有哪些?FIFO、LRU 和 Clock本文
  25. 25信号量是什么?计数信号量和二元信号量怎么用
  26. 26条件变量是什么?为什么要和互斥锁配合使用
  27. 27进程间通信方式:管道、消息队列、共享内存、信号量与套接字
  28. 28I/O 模型有哪些:阻塞、非阻塞与多路复用
  29. 29select、poll 和 epoll 有什么区别
  30. 30epoll 的 LT 和 ET 模式有什么区别
  31. 31什么是异步 I/O?它和非阻塞、多路复用的区别
  32. 32什么是僵尸进程和孤儿进程?如何处理
  33. 33原子操作是什么?原子性、可见性和有序性有什么区别
  34. 34什么是工作集和抖动?内存不足时为何系统变慢
  35. 35mmap 是什么?文件映射和匿名映射怎么理解
  36. 36什么是写时复制?fork 和私有映射如何利用 COW

当进程访问的页面不在内存、又没有空闲页框时,内核需要回收页面。干净的文件映射页通常可直接丢弃,之后从文件重新读取;匿名页若没有其他副本,可能需要先写入 Swap。置换策略希望减少代价高的缺页,同时兼顾实现成本、工作集和内存回收公平性。

FIFO按进入内存的先后回收最早页面,实现简单,但可能淘汰很快还会用到的页面,并存在 Belady 异常:增加页框数反而可能增加缺页数。理想 OPT淘汰未来最晚才会访问的页,可作为理论下界比较,但真实系统不知道未来访问序列。

LRU淘汰最长时间未被访问的页面,利用局部性假设近期访问过的页面更可能再次访问。精确维护每次访问的时间顺序很贵,实际操作系统通常用访问位、时钟算法或其他近似策略。Clock把页面组织成环形,检查访问位:最近访问过就清位并跳过,未访问则作为候选回收。增强型策略还可能结合脏位,优先选择干净页以减少写回成本。

真实内核回收远不止教科书中对一个进程做 LRU。它会考虑文件缓存与匿名页、脏页写回、NUMA 节点、内存 cgroup、回收成本和并发访问;不同内核版本策略会演进。因此面试回答应先讲经典模型,再说明实现通常近似且受系统约束。

常见追问#

Q:为什么不能精确实现 LRU?
A:每次内存访问都更新全局顺序会带来很高的硬件和软件成本。常见实现利用访问位或采样近似近期使用程度。

Q:FIFO 为什么会出现 Belady 异常?
A:FIFO 只看装入时间,增加页框会改变队列淘汰顺序,可能使后续访问序列产生更多缺页;这不是所有置换算法都会出现的性质。

Q:脏页和干净页回收成本有什么差别?
A:脏页内容比磁盘副本新,回收前通常需要写回;干净文件页可丢弃后按需重读,成本往往较低。

页面置换算法有哪些?FIFO、LRU 和 Clock
https://blog.xqcherry.top/posts/interview/operating-system/page-replacement-algorithms/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0