每个工程师都应该了解“虚拟内存”知识.pdf

每个工程师都应该了解“虚拟内存”知识.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
每个工程师都应该了解的“虚拟内存”知识 4 虚拟内存 处理器的虚拟内存子系统为每个进程实现了虚拟地址空间。这让每个进程认 为它在系统中是独立的。虚拟内存的优点列表别的地方描述的非常详细,所以这 里就不重复了。本节集中在虚拟内存的实际的实现细节,和相关的成本。 虚拟地址空间是由CPU的内存管理单元(MMU)实现的。OS必须填充页表数据 结构,但大多数CPU自己做了剩下的工作。这事实上是一个相当复杂的机制;最 好的理解它的方法是引入数据结构来描述虚拟地址空间。 由MMU进行地址翻译的输入地址是虚拟地址。通常对它的值很少有限制 — 假设还有一点的话。虚拟地址在32位系统中是32位的数值,在64位系统中是 64位的数值。在一些系统,例如x86和x86-64,使用的地址实际上包含了另一 个层次的间接 寻址:这些结构使用分段,这些分段只是简单的给每个逻辑地址 加上位移。我们可以忽略这一部分的地址产生,它不重要,不是程序员非常关心 的内存处理性能方面的东西。{x86的分段限制是与性能相关的,但那是另一回 事了} 4.1 最简单的地址转换 有趣的地方在于由虚拟地址到物理地址的转换。MMU可以在逐页的基础上重 新映射地址。就像地址缓存排列的时候,虚拟地址被分割为不同的部分。这些部 分被用来做多个表的索引,而这些表是被用来创建最终物理地址用的。最简单的 模型是只有一级表。 Figure 4.1: 1-Level Address Translation 图 4.1 显示了虚拟地址的不同部分是如何使用的。高字节部分是用来选择 一个页目录的条目;那个目录中的每个地址可以被OS分别设置。页目录条目决定 了物理内存页的 地址;页面中可以有不止一个条目指向同样的物理地址。完整的 内存物理地址是由页目录获得的页地址和虚拟地址低字节部分合并起来决定的。 页目录条目还包含一 些附加的页面信息,如访问权限。 页目录的数据结构存储在内存中。OS必须分配连续的物理内存,并将这个 地址范围的基地址存入一个特殊的寄存器。然后虚拟地址的适当的位被用来作为 页目录的索引,这个页目录事实上是目录条目的列表。 作为一个具体的例子,这是 x86机器4MB分页设计。虚拟地址的位移部分 是22位大小,足以定位一个4M页内的每一个字节。虚拟地址中剩下的10位指 定页目录中1024个条目的一 个。每个条目包括一个10位的4M页内的基地址, 它与位移结合起来形成了一个完整的32位地址。 4.2 多级页表 4MB的页不是规范,它们会浪费很多内存,因为OS需要执行的许多操作需 要内存页的队列。对于4kB的页(32位机器的规范,甚至通常是64位机器的 规 范),虚拟地址的位移部分只有12位大小。这留下了20位作为页目录的指针。 具有220个条目的表是不实际的。即使每个条目只要4比特,这个表也要 4MB 大小。由于每个进程可能具有其唯一的页目录,因为这些页目录许多系统中物理 内存被绑定起来。 解决办法是用多级页表。然后这些就能表示一个稀疏的大的页目录,目录中 一些实际不用的区域不需要分配内存。因此这种表示更紧凑,使它可能为内存中 的很多进程使用页表而并不太影响性能。. 今天最复杂的页表结构由四级构成。图4.2显示了这样一个实现的原理图。 Figure 4.2: 4-Level Address Translation 在这个例子中,虚拟地址被至少分为五个部分。其中四个部分是不同的目录 的索引。被引用的第4级目录使用CPU中一个特殊目的的寄存器。第4级到第2 级 目录的内容是对次低一级目录的引用。如果一个目录条目标识为空,显然就 是不需要指向任何低一级的目录。这样页表树就能稀疏和紧凑。正如图4.1,第 1级目 录的条目是一部分物理地址,加上像访问权限的辅助数据。 为了决定相对于虚拟地址的物理地址,处理器先决定最高级目录的地址。这 个地址一般保存在一个寄存器。然后CPU取出虚拟地址中相对于这个目录的索引 部 分,并用那个索引选择合适的条目。这个条目是下一级目录的地址,它由虚 拟地址的下一部分索引。处理器继续直到它到达第1级目录,那里那个目录条目 的值就是 物理地址的高字节部分。物理地址在加上虚拟地址中的页面位移之后 就完整了。这个过程称为页面树遍历。一些处理器(像x86和x86-64)在硬件中 执行这 个操作,其他的需要OS的协助。 系统中运行的每个进程可能需要自己的页表树。有部分共享树的可能,但是 这相当例外。因此如果页表树需

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档