页面 Table 和页面目录之间的区别

Difference Between Page Table and Page Directory

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

如果我是对的,地址 space 是所有此类地址的超集。对吗?

通过使用虚拟 memory/paging,我们正在使用辅助存储扩展地址 space。

在此范例中,页 table、页 table 条目和页目录到底是什么?我理解首先 p.memory 是逻辑分段的,这些段被分成页面。那么页面 table 到底是什么? table 包含页面?什么是页目录,页表的超级table?

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

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

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

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

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