1.arm32 MMU
- 32位arm MMU支持2级页表,L1和L2(这里不考虑LAPE),支持如下特性
- VA--PA,最多2级页表转换
- 支持32bit的物理地址
- 支持如下的内存大小
- 1M或16M的段
- 4K或64K的页
2.一级页表映射
- 一级页表的映射过程
- 图中L1采用1M section映射
- TTBA[31:14]表示L1的基地址
- 一级页表项占4字节,VA[31:20] << 2表示虚拟地址在页表中的偏移
- TTBA[31:14] | (VA[31:20] << 2)表示虚拟地址的一级页表项的地址
- L1页表项的内容由 PA[31:20] | mmu_flags | [1:0]组成,其中最后2bit表示表的类型
- PA[31:20] | VA[19:0]则获得段式映射的PA
- TTBA从何而来?
- TTBA保存在CP15 c2中,从图中可以看出其地址是16KB对齐
- TTBA地址具体由TTRB0和TTRB1决定,其中TTRB0对应用户空间,TTRB1对应内核空间
- L1如何跟VA对应?
- 每个页表项占4个字节,低2bit为0b00,VA[31:20] <<2即为页表偏移量
- 每个页表项表示1M的空间,4K个页表项代表4G的进程空间
- 一级页表项内容如何定义?
- [1:0]低2位表示页表类型
- 0b00 ---- invalid
- 0b01 ---- 页式映射,[31:10]表示二级页表基地址,二级页表1K对齐
- 0b10 ---- 段式映射(1M/16M)
- [1:0]低2位表示页表类型
3.二级页表映射
- 二级页表映射过程
- 图中L1采用1M section映射,L2采用4K page映射
- L1部分跟之前完全一致
- L1 entry可以得到L2的基地址
- VA[19:12] << 2得到地址在L2页表中的偏移
- L2页表项的[31:12]对应PA[31:12],(PA[31:12] | VA[11:0])得到转换后的PA
- L2与VA如何对应?
- VA[19:12] << 2得到二级页表项的偏移
- 1M的段对应256个页表项,每个page 4K
- 二级页表项内容如何定义?
- 低2位[1:0]用来区分页类型
- 0b00 ---- invalid
- 0b01 ---- 大页,64KB page
- 0b1x ---- 小页,4KB page
- 低2位[1:0]用来区分页类型