【问题标题】:Difference Between Page Table and Page Directory页表和页目录的区别
【发布时间】:2015-07-08 19:46:20
【问题描述】:

我经常在微处理器和微控制器范式中听到术语地址空间。我了解地址用于引用物理内存(主)中的特定内存块。

如果我是对的,地址空间是所有此类地址的超集。对吧?

通过使用虚拟内存/分页,我们正在使用辅助存储扩展地址空间。

在这个范例中,页表、页表条目和页目录到底是什么?我知道第一个 p.memory 在逻辑上是分段的,这些段被分成页面。那么究竟什么是页表呢?包含 Pages 的表?什么是页目录超级表的页表?

【问题讨论】:

标签: assembly x86 virtual-memory page-tables


【解决方案1】:

在 x86 架构中,页目录和页表一起提供了虚拟地址(应用程序使用的内存地址)和物理地址(物理内存硬件中的实际位置)之间的映射。

页面只是一块连续的内存。 x86(32 位)支持 3 种大小的页面:4MB、2MB 和 4KB,后者是主流操作系统中最常用的。 页表是一个由 1024 * 32 位条目组成的数组(方便地放入单个 4KB 页面)。每个条目都指向页面的物理地址。因为单个页表不能单独代表整个地址空间(1024 个条目 * 4KB = 只有 22 位地址空间),所以我们需要一个二级页表:页目录 .页目录还包含 1024 * 32 位条目(同样适合单个页面),每个条目都指向一个页表。我们可以看到现在 1024 * 1024 * 4KB = 32 位,通过这个 3 级结构,我们能够映射整个 4GB 虚拟地址空间。

当 CPU 被要求访问一个虚拟地址时,它使用 10 个最高位 (31:22) 来索引页目录表(其基地址存储在一个特殊的寄存器中)。接下来的 10 个最高位 (21:12) 用于索引页目录项指向的页表。最低 12 位(11:0)最终用于索引页表项指向的页中的一个字节。

在其他系统中,可能需要更多或更少级别的页表,具体取决于虚拟地址空间的大小和支持的页面大小。例如,具有 4MB 页面的 x86 只需要一个页面目录。在具有 4KB 页面的 64 位模式中,使用 4 级系统:页面映射级别 4 表包含指向多个页面目录之一的条目。

Intel Architectures Developer's Manual 提供有关该主题的更多信息,尤其是在第 3 章和第 4 章中。

【讨论】:

  • 但这不是说当两个不同的程序尝试访问虚拟地址 0x0041FF10 时,它们会得到相同的物理地址吗? CPU 使用相同数量的位来索引相同的虚拟地址,这将转换为相等的索引..
  • 操作系统通常会为每个进程维护单独的页面目录和表,提供从虚拟地址到物理地址的不同映射。回想一下,当前页目录的基地址存储在一个特殊的寄存器中。该寄存器中的值在上下文切换到另一个进程期间由操作系统更改。因此,虽然进程 A 和进程 B 的索引相同,但它们索引到不同的页面目录。
  • 在 Intel x86 上,通过 CR3 寄存器控制。
  • > 一个页面只是一块连续的内存我认为你应该明确表示虚拟/逻辑内存,因为物理内存 进程使用的是非连续的。
  • @jeffhu 22 位是指 地址空间 的大小,即地址是 22 位值(不是 22 字节值)。然后正如您正确推理的那样,这为该地址提供了总共 2^22 个可能的值。
猜你喜欢
  • 2021-09-28
  • 2017-01-30
  • 2017-07-04
  • 2011-12-16
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多