Intel x86 Assembly& Microarchitecture 80386分页

示例

高级设计

80386是一个32位处理器,具有32位可寻址存储空间。Paging子系统的设计者注意到,一个4K页面设计以一种非常整洁的方式映射到这32位中-10位,10位和12位:

+-----------+------------+------------+

| Dir index | Page index | Byte index |

+-----------+------------+------------+

 3         2 2          1 1          0  Bit

 1         2 1          2 1          0  number

这意味着字节索引为12位宽,它将索引为4K页。Directory和Page索引是10位,每个索引都映射到1,024个条目的表中-如果这些表项每个都是4字节,则每个表将是4K:也是一个Page!

这就是他们所做的:

  • 每个程序都有自己的目录,即一个包含1,024个页面条目的页面,每个页面条目定义了下一级页面表所在的位置-如果有的话。

  • 如果有的话,该页面表将具有1,024个页面条目,每个页面条目定义了最后一级页面的位置-如果有的话。

  • 如果存在,则该页面可以直接读出其字节。

页面输入

顶级目录和下一页页面表均由1,024个页面条目组成。这些条目中最重要的部分是所索引内容的地址:页面表或实际页面。请注意,此地址不需要完整的32位-由于所有内容都是Page,因此仅高20位是有效的。因此,Page Entry中的其他12位可以用于其他用途:是否甚至存在下一个级别;关于页面是否已被访问或写入的内部管理;甚至是否应该允许写入!

+--------------+----+------+-----+---+---+

| Page Address | OS | Used | Sup | W | P |

+--------------+----+------+-----+---+---+

Page Address = Top 20 bits of Page Table or Page address

OS           = Available for OS use

Used         = Whether this page has been accessed or written to

Sup          = Whether this page is Supervisory - only accessible by the OS

W            = Whether this page is allowed to be Written

P            = Whether this page is even Present

请注意,如果该P位为0,则允许条目的其余部分具有操作系统想要放入的任何内容-例如页面内容在硬盘上的位置!

页面目录基本寄存器(PDBR)

如果每个程序都有其自己的目录,则硬件如何知道从何处开始映射?由于CPU一次仅运行一个程序,因此它只有一个控制寄存器来保存当前程序目录的地址。这是页面目录基本寄存器(CR3)。当操作系统在不同程序之间交换时,它将使用程序PDBR的相关页面目录进行更新。

页面错误

CPU每次访问内存时,都必须将指示的虚拟地址映射到适当的物理地址。这是一个三步过程:

  1. 将地址的高10位索引到所指示的页中,PDBR以获取适当的页表的地址;

  2. 将地址的后10位索引到目录指示的页面中,以获取适当页面的地址;

  3. 索引地址的最后12位以从该页中获取数据。

由于上述步骤1.和2.都使用Page Entries,因此每个Entry都可能表明存在问题:

  • 下一级可以标记为“不存在”;

  • 下一级可以标记为“只读”-操作是写操作;

  • 下一个级别可能被标记为“ Supervisor”-它是访问内存的程序,而不是OS。

当硬件指出了此类问题时,它没有完成访问,而是引发了错误:中断#14,页面错误。它还用故障发生原因的信息填充某些特定的控制寄存器。是否是主管访问权限;以及是否为写入尝试。

期望操作系统捕获该故障,解码控制寄存器,然后决定要做什么。如果访问无效,则可以终止故障程序。如果是虚拟内存访问,则操作系统应分配一个新页面(可能需要腾出已使用的页面!),并用所需的内容(全零或从磁盘加载回的先前内容)填充它),将新页面映射到适当的页面表中,将其标记为存在,然后继续执行错误指示。这次访问将成功进行,并且程序将在不知道发生任何特殊情况的情况下继续运行(除非需要注意时钟!)

以上是 Intel x86 Assembly& Microarchitecture 80386分页 的全部内容, 来源链接: utcz.com/z/326250.html

回到顶部