如何计算页面大小?

Jak*_*ake 14 virtual virtual-memory

给定:64位虚拟字节地址,16 KB页面,32位物理字节地址.

假设有效,保护,脏和使用位总共占用4位并且所有虚拟页面都在使用中,则本机上页表的总大小是多少.

到目前为止,我知道页表条目的总数:2 ^ 64/2 ^ 14 = 2 ^ 50,但我无法理解如何查找每个条目的大小.

如问题中所述,每个条目确实包含4位,但是可以从物理字节地址中找到条目的大小其余部分吗?我在这部分感到困惑.

谢谢.

Zor*_*ayr 28

请参阅下面的一种计算页表大小的方法:

  1. 首先通过计算log2(页面大小,以字节为单位)获取页面偏移量.在您的示例中,页面大小为16 KB,因此log2(16*2 ^ 10)为14; 也就是说,页面偏移是14位.

  2. 然后,通过从为物理地址分配的总位数减去页面偏移量来计算物理页数(PPN)大小.因为在您的示例中,物理地址是32位,PPN = 32 - 14或18位.

  3. 现在,您可以通过向计算的PPN添加有效位,保护位等来计算页表输入(PTE)大小.该值将是每页输入所需的总位数.在我们的示例中,PTE将是22位.

  4. 我们需要的最后一条信息是页表中的页面条目数.我们可以通过从虚拟页面编号的总位数中减去页面偏移量来获得此结果; 也就是说,64 - 14 = 50即我们需要2 ^ 50个条目来表示虚拟地址的全部范围.

因此总页面表大小达到2 ^ 50*22位,即2.75PB.由于这在内存中很多,并且可能昂贵且缓慢,现代处理器使用Translation Lookaside Buffer(TLB)作为最近使用的页面条目的缓存.

希望这可以帮助!


小智 8

您的页面大小为16 KB = 2 ^ 14,因此页面偏移需要14位.在64位虚拟地址中,如果取出这个偏移量,你将剩下50位.这意味着您的页表中有2 ^ 50个条目.

此外,由于您的物理地址是32位,并且偏移量占这32位中的14位,因此您将留下必须来自页表的18位.

在这18位中,4位是您的有效,使用等.

无论如何,每个条目,使用的比特= 18

页表的总内存(这是每个进程,因此如果指定的话,你必须将它乘以进程数)= 2 ^ 50*18位

  • 计算的页表条目大小不正确.18位仅用于物理页码(PPN) - 它不包括每个条目所需的额外位. (4认同)