4. 虚拟memory
一个处理器的虚拟memory(virtual memory,VM)子系统实作了提供给每个行程的虚拟定址空间。这令每个行程都认为它是独自在系统中的。虚拟memory的优点清单会在其它地方仔细地描述,所以这里就不重复这些了。这一节会聚焦在虚拟memory子系统的实际的实作细节、以及与此相关的成本。
虚拟定址空间是由 CPU 的memory管理单元(Memory Management Unit,MMU)实作的。操作系统必须填写分页表(page table)资料结构,但大多数 CPU 会自行做掉剩下的工作。这真的是个非常复杂的机制;理解它的最佳方式是引入使用的资料结构来描述虚拟定址空间。
由 MMU 实行的地址转译的输入为一个虚拟地址。它的值通常有极少量 –– 如果有的话 –– 的限制。在 32 位元系统上的虚拟地址为 32 位元的值,而在 64 位元系统上为 64 位元的值。在某些系统上,像是 x86 与 x86-64,使用的地址实际上牵涉到另一层级的间接性:这些架构使用了分段(segment),其只不过是将偏移量加到每个逻辑地址上。我们可以忽略地址产生过程的这个部分,它很琐碎,而且就memory管理的效能而言,不是程序开发者必须要关心的东西。24
24. x86 上的分段限制是攸关效能的,但这又是另一个故事了。 ↩