![](/img/trans.png)
[英]Why do we write pgd address to TTBR0/TTBR1 during each context switch?
[英]In ARMv7, is the address used in TTBR0 and TTBR1 physical or virtual
我一直在B3節中的《 v7-A和v7-R的ARM體系結構參考手冊》中查找,無法確定TTBR0和TTBR1寄存器中使用的地址是虛擬地址還是物理地址。
身體上最有意義,但我想確切地知道。
那么,該地址應該是物理地址還是虛擬地址?
是否需要將頁表位置映射為身份地址(PA == VA)?
想象這是一個虛擬地址...
CPU將事務發送到虛擬地址。 為了翻譯它,MMU需要進行桌子行走。 為此,它需要知道要在總線上尋址的RAM的哪一位,因此它在基址寄存器中查找。 太好了,現在它具有虛擬基址,只需要將其轉換為物理地址即可知道總線上要尋址的RAM的哪一位,因此它需要進行表遍歷。 為此,它需要...等等等等。
簡而言之,是的,它們絕對是物理地址。 在LPAE實現中TTBRn是64位的事實也有點線索。 *
一旦設置了頁表並且MMU處於打開狀態,就不需要保留它們的映射關系了,更不用說以任何特定的關系了-如果數據實際上存在於RAM中,則MMU非常滿意。 CPU僅在更新表時才需要將該RAM映射到其地址空間-其余時間它們只是浪費地址空間。
* ...這當然是涉及虛擬化擴展的一個完整謊言;)在這種情況下,它們是中間的物理地址,完全受第二階段轉換的要求。 適用於上述情況。 樂趣。
根據代碼,將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)
物理。 在這方面,它與ARMv5相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.