【问题标题】:How to calculate page table size?如何计算页表大小?
【发布时间】:2011-12-16 03:37:12
【问题描述】:

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

这台机器上页表的总大小是多少,假设valid、protection、dirty和use位共占4位,所有虚拟页都在使用中。

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

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

谢谢。

【问题讨论】:

  • 你已经尝试了什么?你被困在哪里了? SO 不是“解决我的作业”页面。
  • @Femaref:我已经更新了我的问题。
  • @sarnold:我已经更新了我的问题。
  • @sarnold:你知道怎么解决这个问题吗?
  • 对不起,不够好,无法给出答案。我可以建议您考虑两层、三层或四层页表,以尽量减少与实际存储比率的开销...

标签: virtual virtual-memory


【解决方案1】:

对那些可能想知道的人做一点澄清,因为我在 CSAPP 中没有找到明确的定义,并且在我学习时感到困惑。 Physical Page Number (PPN)指的是这个PA在哪个页。如果PPN=0,那么这个PA在第0页表,如果PPN=11,那么这个PA在第3页表.一个技巧是偏移的位数决定了该位置的大小。如果 page offset 是 14 位,那么页面的大小是该位置的 2^14 个单位(这里是每个 PTE)。如果我错了,请纠正我。

【讨论】:

    【解决方案2】:

    见下面一种计算页表大小的方法:

    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) 作为最近使用的页面条目的缓存。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

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

      此外,由于您的物理地址是 32 位,而偏移量占这 32 位中的 14 位,因此您剩下的 18 位必须来自页表。

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

      无论如何,每个条目,使用的位数 = 18

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

      【讨论】:

      • 计算的页表项大小不正确。 18 位仅用于物理页码 (PPN) - 它不包括每个条目所需的额外位。
      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 2023-03-22
      • 2014-07-28
      • 2015-02-26
      • 2012-05-28
      • 1970-01-01
      • 2022-06-16
      相关资源
      最近更新 更多