如何页表的大小,这里
我有很难计算页面大小,从下面的链接来计算:如何页表的大小,这里
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的物理内存部分?
不太清楚问题的要求,但在典型的AArch32 MMU中(禁止更新的扩展),您将在典型配置中拥有第一和第二级转换表。
第一级转换表将整个地址空间拆分为1MB段,通常包含指向2级表的指针,这些指针将这些1MB段拆分为粒度页(传统上大多数机器上为4KB)。第二级转换表存储对应于那些虚拟地址的物理地址(每个条目存储一个物理地址以及一些标志)。虚拟地址由其在L1和L2表中的位置决定。为了进一步说明,存储在页表中的所有地址(包括L1表中的L2表的地址)是物理。
第一级翻译表具有固定的大小,但取决于您正在运行的体系结构,您可以更改其大小(许多ARM内核使用该大小来提供用户/内核地址空间拆分)。每个千兆字节的虚拟内存空间需要4096字节页面大小的L1表中4096字节。
为了进一步阐明,据我所知,可以使用L1条目直接映射1MB块而不使用L2表,L1条目的类型用较低的位表示。
(很抱歉,如果我得到了单位后缀错)
虚拟地址空间的1MB包含_by定义1048576个虚拟地址_...我实在无法理解的问题的其余部分是什么,因为“我们知道一个页表项占用了4个字节,并描述了1MB区域是如何映射的,因此4 == 1048576并且我没有剩余内存“推理显然是荒谬的。 – Notlikethat
你能告诉我,你是怎么计算出来的。 1MB = 1024KB和1024KB = 1024 * 1024字节= 1048576,每个地址占用4byets,所以虚拟地址= 1048574%4 = 262144? –
什么?没有。有4096个虚拟1MB区域,每个区域可映射到4096个物理1MB区域中的一个区域(或者什么都不是,或者是由2级表格描述的更细粒度的布局,但我们忽略它)。这就是PTE中12位地址所表示的内容。 VA的较低位形成该虚拟区域的偏移,并且到物理区域的相同偏移产生所得到的PA。见例如[这些插图](http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/ch12s03.html)(公众AArch64版本的插图,但注册一个帐户,并获取ARMv7-A指南细节)。 – Notlikethat