0 参考资料
ARM Cortex-A(armV7)编程手册V4.0.pdf
1 Cortex-A7:一级页表(First level address translation)描述符格式及虚拟地址(VA)到物理地址(PA)转换过程
1.1 一级页表(First level address translation)描述符格式
一级页表描述符支持4种格式,格式如下:
从上到下依次为:
(1)Fault。无效描述符。当使用到无效一级页表描述符做地址转换时将会产生一个缺页异常。
(2)Pointer to 2nd level page table,指向2级页表,粗表。粗表存储了粗粒度的二级页表基地址,能将1级页表管理的1MB内存空间进一步细分。
(3)Section,段。直接使用一级页表管理内存空间,里面存储了段基地址。使用4Byte管理1MB内存空间。
(4)Supersection,超级段。直接使用一级页表管理内存空间,里面存储了超级段基地址。超级段使用4Byte管理16MB内存空间。
1.2 一级页表(First level address translation)虚拟地址(VA)到物理地址(PA)转换过程
1.2.1 查找虚拟地址对应的一级页表描述符地址
假设一级页表基地址是0x12300000,访问的虚拟地址是0x00100000。那么一级页表描述符地址=0x12300000+0x004(虚拟地址高12bit值)=0x12300004。
虚拟地址的高12bit决定了一级页表描述符的偏移地址,因为一个一级页表描述符管理1MB内存空间。关系可以参照下表:
也可以这么理解,将4GB(0-4294967295)包含的虚拟地址写成如下形式:
VA = 1MB*x(高12bit)+(0-1MB)(低20bit)
x取值范围为0-4095,且每一个内存地址都会有唯一的一级页表描述符地址与之对应。
1.1.2 根据一级页表描述符进行地址转换
一级页表描述符格式包含4种,每种格式的转换操作也不一样。本例以一级页表描述符格式为段的情况介绍其地址转换过程。下图是虚拟地址到物理地址的转换过程:
操作非常简单,在找到了虚拟地址对应的一级页表描述符地址后,将一级页表描述符存储的段基地址+虚拟地址的低20bit组成物理地址。简单来说就是:
PA = 段基地址 + VA低20bit。
3 总结
(1)一级页表描述符支持4种格式,分别是Fault(无效描述符)、粗表、段(4Byte管理1MB内存空间)、超级段(4Byte管理16MB内存空间)。
(2)使用段作为一级页表描述符格式,地址转换过程可以用如下示意图表示: