You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么驱逐内存中的脏页时必须先将其写回磁盘?

你混淆了两种内存页的处理逻辑,OSTEP这里的描述特指**文件映射页(file-backed page)**的驱逐规则:

  • 内存中的页主要分两类:
    • 匿名页:没有对应的磁盘文件,比如进程的堆、栈、动态申请的私有内存,这类页的修改没有原生的持久化存储位置,驱逐时才会写入swap交换空间
    • 文件映射页:有明确对应的磁盘文件,比如程序的代码段、进程打开读取的文件内容、mmap映射的文件内容,这类页如果被修改为脏页,修改的是文件在内存中的临时副本,驱逐时必须把修改写回对应的原磁盘文件,否则修改就会永久丢失
  • swap的设计定位就是给匿名页做临时持久化的,不会用来存储文件映射页的修改:文件映射页本身就有固定的持久化位置(原文件),把修改写回原文件既符合文件系统的读写语义,也不会额外占用swap空间,是更合理的设计。

关于两次I/O的疑问:不存在驱逐脏页时产生两次I/O的情况。驱逐操作本身只会产生一次写I/O:匿名页写swap,文件映射脏页写原文件。后续需要再次访问该页时产生的读I/O是按需触发的,不属于驱逐操作本身的开销。

内容的提问来源于stack exchange,提问作者dazhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:45:03