【发布时间】: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