我已经在第B3节中查看了ARM体系结构参考手册中的v7-A和v7-R,但我无法确定TTBR0和TTBR1寄存器中使用的地址是否应该是虚拟或实际地址。
身体最有意义,但我想明确地知道。
那么,这个地址应该是物理的还是虚拟的?
是否需要将页表位置映射为身份地址(PA == VA)?
答案 0 :(得分:2)
想象一下,这是一个虚拟地址......
CPU向虚拟地址发出事务。为了翻译它,MMU需要做一个桌子走路。为此,它需要知道总线上要寻址的RAM位,因此它在基址寄存器中查找。好的,现在它有虚拟基地址,只需将其转换为物理地址即可知道要在总线上寻址的RAM位,因此需要进行表格遍历。为此它需要......等等。
简而言之,是的,他们绝对是物理地址。 TTBRn在LPAE实现上是64位的事实也是一个线索。 *
一旦设置了页面表并且MMU处于打开状态,就不需要对它们进行映射,更不用说任何特定关系了 - 如果数据实际存在于RAM中,MMU非常高兴。如果更新表,CPU只需要将RAM映射到其地址空间 - 其余时间它们只是浪费地址空间。
* ...当涉及到虚拟化扩展时,这当然是一个完全的谎言;)在这种情况下,它们是中间物理地址,完全受到一时兴起第2阶段翻译。以上适用。乐趣。子>
答案 1 :(得分:2)
根据代码,pgd的物理地址写入TTBR。
http://lxr.free-electrons.com/source/arch/arm/include/asm/proc-fns.h#L116
#define cpu_switch_mm(pgd,mm) cpu_do_switch_mm(virt_to_phys(pgd),mm)
答案 2 :(得分:1)
物理。在这方面,它与ARMv5没有变化。