思考:
1、系统里有多少个MMU?MMU在哪里?
2、一个core里有多少个MMU?多少个Translation regime ? MMU和Translation regime有啥关系?
Translation Regime概念总结在当前的ARMV8/ARMV9体系中(暂不考虑armv9的RME扩展), 至少存在以下9类Translation regime(注意是9类,不是9个):
- Secure EL1&0 translation regime, when EL2 is disabled -- one stages,two VA range, 使用TTBR0EL1和TTBR1EL1
- Non-secure EL1&0 translation regime, when EL2 is disabled -- one stages,two VA range, 使用TTBR0EL1和TTBR1EL1 * Secure EL1&0 translation regime, when EL2 is enabled -- two stages,two VA range, 使用TTBR0EL1和TTBR1EL1
- Non-secure EL1&0 translation regime, when EL2 is enabled -- two stages,two VA range, 使用TTBR0EL1和TTBR1EL1
- Secure EL2&0 translation regime -- two VA range, 使用TTBR0EL2和TTBR1EL2
- Non-secure EL2&0 translation regime -- two VA range, 使用TTBR0EL2和TTBR1EL2
- Secure EL2 translation regime -- a single VA range, 使用TTBR0_EL2
- Non-secure EL2 translation regime -- a single VA range, 使用TTBR0_EL2
- Secure EL3 translation regime -- a single VA range, 使用TTBR0_EL3
相关寄存器的总结
- TTBR0_EL1: Translation Table Base Register 0 (EL1) -- 在switch cpucontext by security的时候,会切换该寄存器,所以从软件的视角来看,安全和非安全侧各有一个TTBR0_EL1
- TTBR0_EL2: Translation Table Base Register 0 (EL2) --
HCR_EL2.E2H=1
时,只有TTBR0,不可以使用TTBR1。另外在switch cpucontext by security的时候,会切换该寄存器,所以从软件的视角来看,安全和非安全侧各有一个TTBR0_EL2 - TTBR0_EL3: Translation Table Base Register 0 (EL3) -- 从软件视角来看,只有一个TTBR0_EL3。注意没有TTBR1_EL3寄存器。
- TTBR1_EL1: Translation Table Base Register 1 (EL1) -- 在switch cpu_context by security的时候,会切换该寄存器,所以从软件的视角来看,安全和非安全侧各有一个TTBR1_EL1
- TTBR1_EL2: Translation Table Base Register 1 (EL2) -- 只有Host Operating System is running in EL2(
HCR_EL2.E2H=1
)时,该寄存器才会被使用。另外在switch cpu_context by security的时候,会切换该寄存器,所以从软件的视角来看,安全和非安全侧各有一个TTBR1_EL2 - VSTTBR_EL2: Virtualization Secure Translation Table Base Register -- 切换VM的时候会切换
- VTCR_EL2: Virtualization Translation Control Register -- 切换VM的时候会切换
- VTTBR_EL2: Virtualization Translation Table Base Register -- 切换VM的时候会切换
Translation Regime模型总结