虚拟地址到物理地址的转换过程

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)

 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

猜你喜欢

转载自www.cnblogs.com/ant-man/p/11585529.html