跳转至

第4章 虚拟内存

虚拟内存让每个进程看到独立、连续而且通常比物理内存更大的地址空间。它同时解决三个问题:程序如何方便地使用地址,多个进程如何隔离,有限内存如何按需分配并在必要时回收。

地址翻译主线

CPU 产生虚拟地址
  -> TLB 尝试命中翻译
  -> 未命中则查询多级页表
  -> 权限或存在位不满足则触发缺页异常
  -> 内核建立映射,必要时换入页面
  -> 重新执行引发异常的指令

虚拟地址不是“假的地址”,而是进程使用的正式地址命名空间;页表和 TLB 负责把它映射到当前可用的物理页框。

小结目录

学完应能回答

  • 页大小为什么既不能无限小,也不能无限大?
  • 多级页表怎样节省稀疏地址空间的页表内存?
  • TLB miss 为什么不一定进入内核,缺页为什么也不一定访问磁盘?
  • 写时复制如何让 fork 在常见情况下更便宜?
  • 系统何时出现抖动,增加并发进程为何可能反而降低吞吐量?

与文件和 I/O 的连接

文件映射页和匿名页都由虚拟内存管理。页缓存中的文件数据可以直接映射进进程地址空间;内存压力下,干净文件页可直接丢弃,脏页需要先写回,匿名页则可能进入交换空间。下一章会把这些路径接到文件系统和块设备。