页表自映射

原文地址

注:本文仅针对32位、两级页表的系统。如X86

采用页表自映射方案的最终目的是,节省4KB的空间(对于32位,两级页表的系统来说)。

具体来说,如果不采用页表自映射方案,那么映射整个4GB的虚拟空间共需要

4KB+10244KB=4KB+4KB1024=4MB+4KB

页表自映射的思想是,把所有的页表(4KB)放到连续的4MB 虚拟地址 空间中,并且要求这段空间4MB对齐,这样,会有一张页表的内容与页目录的内容完全相同,从而节省了页目录的空间。代价则是需要从虚拟地址空间中分配出连续的4MB对齐的4MB的空间。
用语言说实在太抽象了,下面上图。
页表自映射

上图中,页表和页目录都位于虚拟地址空间的连续内存中,换句话说,这4MB的页表可以对应到虚拟地址空间的一个Table Frame中。

我们采用上图中的术语描述所谓的自映射关系。

  1. 页表位于Table Frame x
  2. Table Frame x中的每个4KB大小的Page Frame 0-1023分别存储了页表的Table 0-1023
  3. 页目录的Entry 0-1023也需要分别指向页表的Table 0-1023。
  4. Table x 指向了 Table Frame x。(注意这里的x,是相同的x
  5. Table x 中的页表项(Page Table Entry, PTE)0-1023,分别指向Table Frame x的1024个Page Frame(4KB),也就是Table 0-1023(根据第【2】条)。
  6. Table x 等价于页目录。页目录中的Entry x指向Table x。

这就被称为自映射,节省了页目录的4KB空间。

事实上,只要确定了页表所在的4MB空间的位置,就可以确定出页目录的地址。

例题


一个32位的虚拟存储系统有两级页表,其逻辑地址中,第22到31位是第一级页表,12位到21位是第二级页表,页内偏移占0到11位。一个进程的地址空间为4GB,如果从0x80000000开始映射4MB大小页表空间,请问第一级页表(页目录)所占4KB空间的起始地址?并说明理由。(注意B代表字节,一个32位地址占4字节)


题目中说映射4MB大小的页表空间,所以采用的是自映射方案。

页表4M空间起始地址为0x80000000,换算成Table Frame的编号,也就是

0x800000004MB=0x80000000>>22=0x200=512

也就是说页表位于Table Frame 512,那么页目录则位于Table 512。
页目录的地址,也就是Table 512的地址为。
0x80000000+5124K=0x80000000+0x200000=0x80200000

此外,我们还可以算出指向Table 512的页目录项Entry 512的地址(不重要)
0x80200000+5124B=0x80200800

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-22
  • 2021-12-16
  • 2022-12-23
  • 2021-07-11
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-14
  • 2022-12-23
  • 2021-09-20
  • 2021-08-01
  • 2021-11-17
  • 2022-02-09
相关资源
相似解决方案