我对linux如何利用ARMv7 MMU硬件进行3级页面表行走感到困惑。 MMU只有2个寄存器ttbr0和ttbr1(一个用于内核,另一个用于用户空间)。 mmu如何知道linux的多级页表走?
谢谢, HVR
答案 0 :(得分:1)
如果虚拟地址的高N
位全部为零,则转换从TTBR0
其他TTBR1
开始。 N
来自TTBCR
。 TTBRn
寄存器包含第一级表的基础的物理地址。将加载第一级表的相应条目,并且条目的各个位确定转换是否使用第二级表,如果是,则确定其物理地址是什么。
MMU可以配置为使用短描述符(32位物理地址)或长描述符(40位物理地址)。使用简短描述符时,最多只能使用两级翻译表。使用长描述符时,可以有三个级别。
这忽略了第2阶段的翻译(管理程序)。所有内容都记录在ARMARM for v7-A& R部分B3.3中: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0406c/index.html