第4章 虚拟内存¶
虚拟内存让每个进程看到独立、连续而且通常比物理内存更大的地址空间。它同时解决三个问题:程序如何方便地使用地址,多个进程如何隔离,有限内存如何按需分配并在必要时回收。
地址翻译主线¶
虚拟地址不是“假的地址”,而是进程使用的正式地址命名空间;页表和 TLB 负责把它映射到当前可用的物理页框。
小结目录¶
- 地址空间与分页:从基址—界限和分段的局限引出固定大小分页、共享与写时复制。
- 页表、TLB 与缺页:计算多级页表索引,区分 TLB miss、次要缺页和主要缺页。
- 页面置换与内存分配:比较 FIFO、LRU、Clock 与工作集思想,并连接伙伴系统和 slab 分配器。
学完应能回答¶
- 页大小为什么既不能无限小,也不能无限大?
- 多级页表怎样节省稀疏地址空间的页表内存?
- TLB miss 为什么不一定进入内核,缺页为什么也不一定访问磁盘?
- 写时复制如何让
fork在常见情况下更便宜? - 系统何时出现抖动,增加并发进程为何可能反而降低吞吐量?
与文件和 I/O 的连接¶
文件映射页和匿名页都由虚拟内存管理。页缓存中的文件数据可以直接映射进进程地址空间;内存压力下,干净文件页可直接丢弃,脏页需要先写回,匿名页则可能进入交换空间。下一章会把这些路径接到文件系统和块设备。