如何计算PAGE表大小

时间:2016-08-13 07:01:23

标签: operating-system arm paging

我很难从下面的链接计算页面大小:

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的物理内存部分?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

(对不起,如果我的单位后缀错误)