给定:64位虚拟字节地址,16 KB页面,32位物理字节地址。
本机上页表的总大小是多少,假设有效,保护,脏和使用位总共需要4位且所有虚拟页面都在使用中。
到目前为止,我知道页表条目的总数:2 ^ 64/2 ^ 14 = 2 ^ 50,但我无法理解如何查找每个条目的大小。
每个条目确实包含问题中所述的4位,但是可以从物理字节地址中找到条目的大小吗?我对这部分感到困惑。
感谢。
答案 0 :(得分:27)
请参阅下面的一种计算页面大小的方法:
首先通过计算log2(页面大小,以字节为单位)获取页面偏移量。在您的示例中,页面大小为16 KB,因此log2(16 * 2 ^ 10)为14;也就是说,页面偏移是14位。
然后,通过从为物理地址分配的总位数减去页面偏移量来计算物理页码(PPN)大小。因为在您的示例中,物理地址是32位,PPN = 32 - 14或18位。
现在,您可以通过向计算的PPN添加有效位,保护位等来计算页表项(PTE)大小。该值将是每页输入所需的总位数。在我们的示例中,PTE将是22位。
我们需要的最后一条信息是页面表中的页面条目数。我们可以通过从虚拟页面编号的总位数中减去页面偏移量来获得此结果;也就是说,64 - 14 = 50,即我们需要2 ^ 50个条目来表示虚拟地址的全部范围。
因此总页数表大小达到 2 ^ 50 * 22位,大约为2.75PB。由于这需要保留在内存中,并且可能昂贵且速度慢,现代处理器使用Translation Lookaside Buffer (TLB)作为最近使用的页面条目的缓存。
希望这有帮助!
答案 1 :(得分:7)
您的页面大小为16 KB = 2 ^ 14,因此页面偏移需要14位。 在64位虚拟地址中,如果你取出这个偏移量,你将剩下50位。 这意味着您的页表中有2 ^ 50个条目。
此外,由于您的物理地址是32位,并且偏移量占这32位中的14位,因此您将留下必须来自页表的18位。
在这18位中,4位是您的有效,使用等。
无论如何,每个条目,使用的位数= 18
页表的总内存(这是每个进程,因此如果指定的话,你必须将它乘以进程数)= 2 ^ 50 * 18位
答案 2 :(得分:0)
对那些可能会想知道的人进行了一些澄清,因为我在CSAPP中找不到明确的定义,并且在我学习时变得困惑。 物理页码(PPN)是指此PA所在的页面。如果PPN = 0,则此PA在第0页表中;如果PPN = 11,则PA在第3页表中。一种技巧是,偏移量的位数确定该位置的大小。如果页面偏移量为14位,则页面大小为该位置的2 ^ 14单位(此处为每个PTE)。如果我错了请纠正我。