给定:64位虚拟字节地址,16 KB页面,32位物理字节地址。
假设有效,保护,脏和使用位总共占用4位并且所有虚拟页面都在使用中,则本机上页表的总大小是多少。
到目前为止,我知道页表条目的总数:2 ^ 64/2 ^ 14 = 2 ^ 50,但我无法理解如何查找每个条目的大小。
如问题中所述,每个条目确实包含4位,但是可以从物理字节地址中找到条目的大小其余部分吗?我在这部分感到困惑。
谢谢。
请参阅下面的一种计算页表大小的方法:
因此总页面表大小达到2 ^ 50 * 22位,即2.75PB。由于这需要保留在内存中,并且可能昂贵且缓慢,现代处理器使用Translation Lookaside Buffer (TLB)作为最近使用的页面条目的缓存。
希望这可以帮助!
您的页面大小为16 KB = 2 ^ 14,因此页面偏移需要14位。在64位虚拟地址中,如果你取出这个偏移量,你将剩下50位。这意味着您的页表中有2 ^ 50个条目。
此外,由于您的物理地址是32位,并且偏移量占这32位中的14位,因此您将留下必须来自页表的18位。
在这18位中,4位是您的有效,使用等。
无论如何,每个条目,使用的比特= 18
页表的总内存(这是每个进程,因此如果指定的话,你必须将它乘以进程数)= 2 ^ 50 * 18位
对于那些可能想知道的人来说,有点澄清,因为我没有在CSAPP中找到明确的定义,而且在我上学的时候会感到困惑。物理页码(PPN)是指此PA所在的页面。如果PPN = 0,则此PA位于第0页表中,如果PPN = 11,则PA位于第3个表中。一个技巧是偏移的位数决定了该位置的大小。如果页面偏移是14位,那么页面的大小是该位置的2 ^ 14单位(这里是每个PTE)。如我错了请纠正我。