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

tec*_*hno 17 assembly intel microprocessors

我经常在微处理器和微控制器Paradigm中听到术语地址空间.我知道地址用于指代物理内存中的特定内存块(主要).

如果我是对的,地址空间是所有这些地址的超级集合.对?

通过使用虚拟内存/分页,我们使用二级存储扩展地址空间.

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

pet*_*rdn 33

在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表包含指向许多页面目录之一的条目.

" 英特尔架构开发人员手册"提供了有关该主题的更多信息,特别是在第3章和第4章中.

  • 操作系统通常会为每个进程维护单独的页面目录和表,从虚拟地址到物理地址提供不同的映射.回想一下,当前页面目录的基地址存储在一个特殊的寄存器中.在上下文切换到另一个进程期间,OS会更改此寄存器中的值.因此,尽管进程A和进程B的索引相同,但它们会索引到不同的页面目录中. (4认同)
  • 但这是否意味着当两个不同的程序尝试访问虚拟地址 0x0041FF10 时,它们将获得相同的物理地址?CPU 使用相同的位数从相同的虚拟地址中进行索引,这会转化为相同的索引。 (2认同)
  • 在 Intel x86 上,这是通过 CR3 寄存器控制的。 (2认同)
  • @jeffhu 22 位是指_地址空间_ 的大小,即地址将是 22 位值(不是 22 字节值)。然后,正如您正确推理的那样,这为该地址提供了总共 2^22 个可能的值。 (2认同)