1. 前言
2. VMSA概述
2.1 ARMv8 VMSA naming
VMSAv8 |
整個轉換機中,地址轉換有一個或兩個stage |
VMSAv8-32 |
由運行AArch32的異常級別來管理 |
VMSAv8-64 |
由運行AArch64的異常級別來管理 |
2.2 某些異常級別使用AArch32的ARMv8 VMSA
|
2.3 VMSA地址類型和地址空間
- 地址類型
Virtral address(VA) |
虛擬地址主要用在指令中作為數據或指令地址,在PC/LR/SP/ELR中得都是虛擬地址 |
Intermediate physical address(IPA) |
(1)對支持兩個stages地址轉換的regimes,IPA是: 第一轉換stage的輸出地址; 第二轉換stage的輸入地址 (2)對於支持一個stage地址轉換的regime,IPA與PA相同,可以假定IPA不存在 |
Physical Address(PA) |
(1)物理地址是PE輸出給內存系統的輸出地址; (2)EL3和secure EL1針對secure 和 non-secrue提供了單獨的PA地址空間: Secure狀態下訪問VA可以轉換為secure或non-secure的PA; Non-secure狀態下訪問VA只能轉換為non-secure的PA |
- VA space
最大地址寬度為48bit,256TB,支持兩種VA ranges:
(1)轉換stage有一個VA range(0x0000000000000000 to 0x0000FFFFFFFFFFFF.);
(2)轉換stage有兩個VA ranges,一個在64bit的底部(0x0000000000000000 to 0x0000FFFFFFFFFFFF.),一個在64bit的頂部(0xFFFF000000000000 to 0xFFFFFFFFFFFFFFFF)
2.4 AArch64運行狀態的地址tagging
高8位地址將被忽略的情況
|
|
地址tag的控制 |
1. 對於支持2個VA范圍,使用1 stage的地址 (1)VA[55]==0: 決定由TCR_ELx.TBI0來決定是否使用地址tag,同時如果stgage 1 tanslation 使能,決定由TTBR0_ELx還是來保存translation table的base address (2)VA[55]==1: 決定由TCR_ELx.TBI1來決定是否使用地址tag,同時如果stgage 1 tanslation 使能,決定由TTBR1_ELx還是來保存translation table的base address (3)如果TBIn為1,則load到PC的地址的VA[63~56]按VA[55]做符號擴展
2. 對於支持1個VA范圍,使用1 stage的地址 (1)TCR_ELx.TBI決定是否使用地址tag; (2)同時如果stgage 1 tanslation 使能,決定由TTBR0_ELx還是來保存translation table的base address (3)如果TBIn為1,則load到PC的地址的VA[63~56]強制為0 |
地址tag使能位對PC值的影響??? |
|
Relaxation of the tagged address handling requirements on an Illegal exception return |
|
3. VMSAv8-64 地址轉換系統
3.1 術語說明
MMU |
控制地址轉換、存儲訪問權限、存儲屬性的檢測和檢查 |
MMU模型 |
|
轉換粒度 |
|
Translation tables |
將地址轉換及相關聯的內存屬性放在一個映射表中,這個映射表就叫tanslation tables |
Levels of lookup |
一個tanslation table lookup只涉及一部分VA bits,因此一次VA查找需要經過多級查找才能最終得到PA |
TLB |
Translation talbe的項可以放到Translation Lookaside Buffer,TLB也就成為了tanslation table的cache |
Translation entry |
定義了下面的一些屬性:
|
AArch64轉換機制 |
實例:
|
地址轉換與IA范圍 |
|
VMSAv8-64轉換表格式 |
|
3.2 控制地址轉換stage
地址轉換stage |
一個寄存器bit使能地址轉換的stage |
一個寄存器bit決定了tanslation table lookup的端 |
|
Translation control regsister控制了地址轉換的stage |
|
(Translation table base register)TTBR指明了translation table的基地址 |
|
和MMU操作相關的系統寄存器 |
![]() |
地址大小配置 |
PA大小 OA大小 IA大小 IPA大小 |
Atomicity of register changes on changing virtual machine |
|
Use of out-of-context translation regimes |
當從一個異常級別切換到另一個異常級別,則之前的異常級別下的內存訪問,在當前的異常級別下都不會被觀察到. (1) 當運行在EL3,EL2或secure EL1,PE不能使用non-secure EL1和non-secure EL0的translation機制進行內存的隨機訪問; (2) 當運行在EL3或secure EL1,PE不能使用EL2的translation機制進行內存的隨機訪問; (3) 當運行在EL3,EL2或non-secure EL1,PE不能使用secure EL1的translation機制進行內存的隨機訪問;
|
3.3 內存translation粒度size
Translation 粒度 |
(1)Translation table的大小; (2)Page的大小 |
粒度大小對轉換過程的影響(以4k頁為例) |
(1) VA[n~0] page offset,對4k page,則n=12; (2) VA[n-3] 表示一級tanslation table的bits。由於一個translation table大小一般是一個page,每個translation talbe entry用8個字節表示,則有PAGE_SIZE/8個tranlation table entry,需要用n-3個bit來表示 以4k頁為例,則4k/8=512,因此需要9個bit,也就是12-3 |
粒度大小對Translation table addressing和indexing的影響 |
|
減少的IA寬度的影響 |
(1) 第一級Translation talbe size減小; (2) 需要更多的TTBR位來存放更多的base address |
Concatenated translation tables |
(1) 增加第一級Translation talbe size; (2) 需要更少的TTBR位來存放更少的base address |
3.4 Translation table和translation過程
Translation table walks |
(1) PA,如果是在secure狀態下訪問,將返回訪問的是secure PA space還是non-secure PA space; (2) 目標存儲區域的屬性; (3) 目標存儲區域的權限
(1) 如果是walk的最后一項,則包含OA; (2) 如果還有下一級的lookup,則返回下一級lookup的基地址; (3) 如果描述符是無效的,內存將返回一個translation fault.
|
訪問translation table walks內存的順序 |
|
Translation table walks的安全狀態 |
|
Translation table walks的控制 |
對於支持2個 ranges的1 stage的translation,TCR_ELx. {EPD0, EPD1}位決定stage使用的translation tables是否是合法有效的 |
3.5 VMSA-v8-64地址轉換stage 概覽
VMSAv8-64地址轉換概覽(4K粒度) |
|
4.參考文檔
[1] DDI0487A_k_armv8_arm_iss10775.pdf