如何计算页面大小?

问题描述 投票:13回答:3

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

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

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

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

谢谢。

virtual virtual-memory
3个回答
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位


0
投票

对于那些可能想知道的人来说,有点澄清,因为我没有在CSAPP中找到明确的定义,而且在我上学的时候会感到困惑。物理页码(PPN)是指此PA所在的页面。如果PPN = 0,则此PA位于第0页表中,如果PPN = 11,则PA位于第3个表中。一个技巧是偏移的位数决定了该位置的大小。如果页面偏移是14位,那么页面的大小是该位置的2 ^ 14单位(这里是每个PTE)。如我错了请纠正我。

© www.soinside.com 2019 - 2024. All rights reserved.