2

我一直在查看第 B3 节中的 v7-A 和 v7-R 的 ARM 架构参考手册,但我无法确定 TTBR0 和 TTBR1 寄存器中使用的地址应该是虚拟地址还是物理地址。

物理最有意义,但我想确切地知道。

那么,这个地址应该是物理地址还是虚拟地址?

是否需要将页表位置映射为身份地址(PA == VA)?

4

3 回答 3

2

As per the code, Physical address of pgd is written to 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)
于 2015-02-24T09:39:08.593 回答
2

想象一下它是一个虚拟地址......

CPU 向虚拟地址发出事务。为了翻译它,MMU 需要做一个 table walk。为此,它需要知道要在总线上寻址的 RAM 位,因此它会查看基址寄存器。太好了,现在它有了虚拟基地址,只需将其转换为物理地址即可知道要在总线上寻址的 RAM 位,因此它需要进行表遍历。为此,它需要......等等等等。

简而言之,是的,它们绝对是物理地址。TTBRn 在 LPAE 实现上是 64 位的这一事实也是一个线索。*

一旦设置了页表并且 MMU 处于打开状态,则根本不需要保持它们的映射关系,更不用说以任何特定的关系 - 如果数据物理地存在于 RAM 中,MMU 就会非常高兴。如果 CPU 正在更新表,CPU 只需要将该 RAM 映射到其地址空间 - 其余时间它们只是浪费地址空间。

* ...当涉及到虚拟化扩展时,这当然是一个完全的谎言;)在这种情况下,它们是中间物理地址,完全受第 2 阶段转换的影响。以上适用。乐趣。

于 2014-11-26T21:32:09.893 回答
1

身体的。在这方面,它与 ARMv5 没有变化。

于 2014-11-26T21:36:23.080 回答