【问题标题】:How PAGE table size is calculated herePAGE 表大小在此处如何计算
【发布时间】:2016-08-13 07:01:22
【问题描述】:

我很难通过以下链接计算页面大小:

http://www.embedded-bits.co.uk/2011/mmucode/

我们知道这个表中的页表条目有 4 个字节长,最多有 4096 个条目(每个 1MB 地址空间一个),我们可以计算出表的大小为 16KB

现在页表的总大小为 4096 个条目 * 4 字节宽条目 = 16384 字节 = 16kb

但是从上面的语句中,每个 4096 条目对应 1 Mb 的地址空间,这意味着 1 个条目 = 1MB。

由于有 4096 个条目,存储它所需的空间是 4096MB,但我们只有 16kb 的页表大小。

另外,这个 1mb 的部分有多少虚拟地址,250000?

编辑:

对不起,如果我的结果会更愚蠢。我试图再次理解它。这 1 Mb 的部分是物理内存的一部分,而不是虚拟内存/页表(我之前理解的)。

现在每个条目都是 4 字节长,这是否意味着 4 个虚拟地址将覆盖 1 Mb 的物理内存部分?

【问题讨论】:

  • 1MB 的虚拟地址空间包含 1048576 个虚拟地址根据定义...我真的不明白剩下的问题是什么,因为“我们知道一个页面表项占用 4 个字节,并描述了如何映射 1MB 区域,因此 4 == 1048576 并且我没有剩余内存”的推理显然是无意义的。
  • 你能告诉我,你是怎么计算出来的。 1MB = 1024KB 和 1024KB = 1024 * 1024 Bytes = 1048576 每个地址占用 4bytes ,所以虚拟地址 = 1048574 % 4 = 262144 ?
  • 什么?没有。有 4096 个虚拟 1MB 区域,每个区域都可以映射到 4096 个物理 1MB 区域之一(或者什么都没有,或者由 2 级表描述的更细粒度的布局,但让我们忽略它)。这就是 PTE 中 12 位地址的含义。 VA 的低位形成到该虚拟区域的偏移量,并且到物理区域的相同偏移量形成最终的 PA。参见例如these illustrations(公共 AArch64 版本用于说明,但要注册一个帐户并获取 ARMv7-A 指南了解详情)。
  • 谢谢,我理解您的观点,即低 12 位地址用作页面偏移或页面索引。另外,我知道 1 MB 中有 1048576 VA(内存是字节可寻址的)。但正如你所说,有 4096 个虚拟 1MB 区域,是否意味着页表大小 = 4096* 1MB?
  • 页表大小为 16k。它可以映射的空间(即虚拟到物理)是4G(4096*1MB),也就是32bits的地址空间。所以 L1 表只有它需要的大小;它还必须与 16k 对齐!

标签: operating-system arm paging


【解决方案1】:

不太清楚问题在问什么,但在典型的 AArch32 MMU(除了较新的扩展)中,您将在典型配置中拥有第一级和第二级转换表。

第一级转换表将整个地址空间分成 1MB 的部分,并且通常包含指向 2 级表的指针,该表将这些 1MB 的部分分成细粒度的页面(传统上大多数机器上为 4KB)。第二级转换表存储对应于这些虚拟地址的物理地址(每个条目存储一个物理地址以及一些标志)。虚拟地址由它在 L1 和 L2 表中的位置决定。为了进一步说明,存储在页表中的所有地址(包括 L1 表中 L2 表的地址)都是物理

第一级转换表的大小是固定的,但根据您运行的架构,您可以更改其大小(许多 ARM 内核使用它来提供用户/内核地址空间分割)。每 GB 的虚拟内存空间在 4096 字节页面大小的 L1 表中需要 4096 字节。

为了进一步澄清,据我所知,您可以使用 L1 条目直接映射 1MB 块而不使用 L2 表,L1 条目的类型由它的低位表示。

(对不起,如果我弄错了单位后缀)

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多