第九章 虚拟存储器
• 为了更加有效地管理存储器并且少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟存储器(VM)。虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟存储器提供了三个重要的能力:
1)它将主存看成是一个存储在磁盘上的地址空间同,主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
2)它为每个进程提供了一致的地址空间,从而简化了存储器管理。
3)它保护了每个进程的地址空间不被其他进程破坏。
9.1 物理和虚拟寻址
计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址。CPU根据物理地址访问存储器的方式是物理寻址。
现代处理器使用的是一种称为虚拟寻址的寻址形式,参见图:
9.2 地址空间
• 地址空间是一个非负整数地址的有序集合。
• 一个地址空间的大小是由表示最大地址所需要的位数来描述的,例如一个包含N=2的n次方个地址的虚拟地址空间就叫做一个n位地址空间。现代系统典型地支持32位或者64位虚拟地址空间,一个系统还有一个物理地址空间,它与系统中物理存储器的M个字节相对应。
9.3 虚拟存储器作为缓存的工具
• 在任意时刻,虚拟页面的集合都分为三个不相交的子集
未分配的:VM系统还未分配(回或者创建)的页。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。
缓存的:当前缓存在物理存储器中的已分配页。
未缓存的:没有缓存在物理存储器中的已分配页。
9.3.2 页表
同任何缓存一样,虚拟存储器系统必须有某种方法来判定一个虚拟页是否存放在DRAM中的某个地方。如果是,系统还必须确定这个虚拟页存放在哪个物理页中。如果不命中,系统必须判断这个虚拟页存放在磁盘的哪个位置,在物理存储器中选择一个牺牲页,并将虚拟页从磁盘拷贝到DRAM中,替换这个牺牲页。
• 这些功能是由许多软硬件联合提供的,包括操作系统软件、MMU(存储器管理单元)中的地址翻译硬件和一个存放在物理存储器中叫做页表的数据结构,页表将虚拟页映射到物理页。每次地址翻译硬件将一个虚拟地址转换为物理地址时都会读取页表。操作系统负责维护页表的内容,以及在磁盘与DRAM之间来回传送页。
9.3.3 页命中
9.3.4 缺页
• 在虚拟存储器的习惯说法中,DRAM缓存不命中称为缺页。
• 缺页异常调用内核中的缺页异常处理程序,该程序会选择一个牺牲页,在此例中就是存放在PP3中的VP4。如果VP4已经被修改了,那么内核就会将它拷贝回磁盘。无论哪种情况,内核都会修改VP4的页表条目,反映出VP4不再缓存在主存中这一事实。
• 接下来,内核从磁盘拷贝VP3到存储器中的PP3,更新PTE3,随后返回。当异常处理程序返回时,它会重新启动导致缺页的指令,该指令会把导致缺页的虚拟地址重发送到地址翻译硬件。但是现在,VP3已经缓存在主存中了,那么页命中也能由地址翻译硬件正翻译硬件正常处理了。图4展示了在缺页之后我们的示例页表的状态:
9.3.5 分配页面
• 下图展示了当操作系统分配一个新的虚拟存储器页时对我们示例页表的影响,例如调用malloc的结果。
9.4 虚拟存储器作为存储器管理的工具
• 按需页面调度和独立的虚拟地址空间的结合,对系统中存储器的使用和管理造成了深远的影响。特别地,VM简化了链接和加载、代码和数据共享,以及应用程序的存储器分配。
• 简化链接
• 简化加载
• 简化共享
• 简化存储器分配