linux內存管理 (二) [硬件1] MMU及其運行過程 關鍵過程二 translation table walk

前言

===========================================
虛擬地址和物理地址的轉換 關鍵過程2 TableWalkUnit從主存中的轉換表(頁表)中獲取pa
	1.轉換表地址 (CP15 的 c2 寄存器中,存放的是頁表基址的物理地址) // Translation table base (TTB) register
	2.轉換表條目
		轉換表通過將虛擬地址空間劃分爲相等大小的塊,將物理地址空間劃分爲相等大小的塊,並在轉換表中提供一個條目來表示其映射關係。條目0提供了塊0的映射,條目1提供了塊1的映射,依此類推。
		
		每個條目的地址
			對應相應物理內存塊的地址
		每個條目均包含	
			相應物理內存塊的地址
			訪問物理地址時要使用的屬性

轉換過程總述

	3.一級轉換表
		虛擬地址
			which entry + offset in block
		一級頁表
			一級頁表條目組成
				PA base + Attributes
		一級頁表索引過程 // Walk Table
			IN  : 虛擬地址
			OUT : 物理地址
			過程: 
				1. 根據 虛擬地址的 which entry  和 頁表基址(物理地址) 索引到 一級頁表項A,得到 PA base + Attributes(標記了PA base 塊的訪問屬性)
					轉換表基址寄存器的位[31:14]與修改後的虛擬地址(VMA)的位[31:20]和兩個零位串聯,以產生32位物理地址
					此地址選擇一個四字節的轉換表條目,該條目是節的第一級描述符或指向第二級頁表的指針。
				2. 校驗 Attributes ,通過則開始3,否則 MMU 異常
					這一塊 在 DDI0100I_armv4v5v6_architecture_reference_manual.pdf 閱讀筆記 中 詳述
				3. 算出 物理地址 = PA base + offset in block
			反思:
				其實根據虛擬地址中的 PA base 做了兩件事情
					1. 塊的映射,根據 which entry 找到了 PA base
					2. 屬性校驗,根據 which entry 找到了 Attributes,並根據 Attributes 校驗

		Attributes 校驗方法:
			一個 PA base 塊 有一個屬性 Attributes ,肯定是要做比較的.// 一般考慮的是比較,但arm定義的不是比較,是聯合定義(一起確定一種行爲)
			屬性中 有 Domain[8:5] , 在第一階段 和 Register 3: Domain access control 定義四種行爲
			屬性中 有   AP[11:10] , 在第二階段 和 當前執行指令時的特權級  定義四種行爲
			
	4.多級表
		一級表的問題:
			不能描述不同大小的塊
		多級表
			這種多級別  方法可以描述較大的塊和較小的塊。
			處理器在開始表查找時不知道轉換的大小。處理器通過執行表遍歷計算出要轉換的塊的大小。
			
			大塊與小塊特徵
				大塊比小塊需要更少級別的讀取來翻譯。另外,大塊更有效地緩存在TLB中。
				小塊可讓軟件對內存分配進行細粒度控制。但是,小的塊在TLB中緩存的效率較低。緩存效率較低,因爲小塊需要多次讀取各個級別才能轉換。
			爲了管理這種折衷,操作系統必須在使用大型映射的效率與使用較小映射以獲得最佳性能的靈活性之間取得平衡。
			
			在Armv8-A中,最大級別數爲4,級別編號爲03

轉換過程中使用到的頁表項的內容

  • IHI0062D_c_system_mmu_architecture_specification.pdf 閱讀筆記
AArch32翻譯方案使用4KB的翻譯粒度,這意味着翻譯表可以以4KB的粒度定義內存區域的屬性。
  • DDI0100I_armv4v5v6_architecture_reference_manual.pdf 閱讀筆記
Page 715 Figure B4-2 Sequence for checking faults 描述了 tablewalk 的過程


頁目錄表項內容
	Table B4-1 First-level descriptor format (VMSAv6, subpages enabled) 中的 Section 中描述了 level0-頁表項(描述了一個block,而不是二級頁表) 的值
	一個頁表項/頁目錄項 爲 4個 字節.
	[31:20] : Section base address(PA base)
	[19:0]  : Attributes
		[19:15] : SBZ // should be zero
		[14:12] : TEX
		[11:10] : AP  // Access permissions
		[9]     : IMP
		[8:5]   : Domain
		[4]     : SBZ // should be zero
		[3]		: C
		[2]     : B
		[1:0]   : 10 // 表示這個頁表項是 Section,指向block,而不是二級頁表


	關注點:
		Attributes 包括  AP[11:10] 和 Domain[8:5]

轉換過程中Attributes的校驗

  • 頁目錄表中Attributes中的關鍵bit解析

Memory access control	
	對內存區域的訪問由TLB項中的訪問權限和域位控制。Domain的優先級比Access permissions要高.(先對域檢查,再對)
	在VMSAv6中添加了APX和XN(意思爲execute never)位。


	Domains
		域是內存區域的集合。ARM體系結構支持16個域
		每個頁表條目和TLB條目都包含一個字段,指定條目所在的域。// [8:5]
		對每個域的訪問由域訪問控制寄存器中的一個兩位字段控制。 // Register 3: Domain access control
		每個字段都允許快速啓用和禁用對整個域的訪問
			這樣整個內存區域就可以非常高效地交換虛擬內存。

		支持兩種域訪問
			客戶
				域的用戶(執行程序和訪問數據),由該域的TLB項的訪問權限保護。
			管理者
				控制域的行爲(域中的當前節和頁以及域訪問),並且不受該域中TLB項的訪問權限的保護。

		一個程序可以是某些域的客戶,同時是某些域的管理器,同時不能訪問其餘的域。
		這允許對訪問不同內存資源的程序進行非常靈活的內存保護。


		理解
			Register 3: Domain access control 和 頁表項中的 Domain[8:5]  定義了 四種情況

			一個程序在訪問前, Register 3: Domain access control 已經是 填好的,裏面有 對 16個域 的不同訪問權限
			一個頁目錄項對應的塊屬於一個域(16個域中的一個)
			如果程序在訪問前, Register 3 對域0 的內容是 00 , 且頁目錄項屬於域0(Domain[8:5]0b0000),(0b00 No access Any access generates a domain fault)
			如果程序在訪問前, Register 3 對域0 的內容是 01 , 且頁目錄項屬於域0,(0b01 Client Accesses are checked against the access permission bits in the TLB entry)
			如果程序在訪問前, Register 3 對域0 的內容是 10 , 且頁目錄項屬於域0,(0b10 Reserved Using this value has UNPREDICTABLE results)
			如果程序在訪問前, Register 3 對域0 的內容是 11 , 且頁目錄項屬於域0,(0b11 Manager Accesses are not checked against the access permission bits in the TLB entry, so a permission fault cannot be generated)



	Access permissions

		在Domain之後,Access permissions 對 其頁表項對應的block進行 訪問控制.
		如果在沒有(需要的)權限的情況下訪問內存區域,則會引發Permission Fault(此時訪問不到)

		訪問權限由以下組合確定.
			頁表中的AP及APX位 // 對於不支持APX位的頁表格式,APX=0。
			CP15寄存器Cr1中的S和R位
				VMSAv6不贊成使用S和R位。
				因爲對S和R位的更改不會影響TLB中已有項的訪問權限。
				必須刷新TLB才能使更新的S和R位值生效。

		理解:
			當前執行指令時的特權級 和 頁表項中的AP[11:10] 定義了四種情況




綜上:
	Page 715 Figure B4-2 Sequence for checking faults 描述了 tablewalk 的過程 : 先對 Domain 進行檢查,然後再對 Access permissions 檢查

	Domain的檢查
		Register 3: Domain access control 和 頁表項中的 Domain[8:5]  定義了 四種情況,其中一種情況要 繼續進行 Access permissions 的 檢查
	Access permissions 的 檢查
		當前執行指令時的特權級 和 頁表項中的AP[11:10] 定義了四種情況

根據 Attributes 和 當前狀態 確定權限
  • Attributes 中的 Domain[8:5] , 在第一階段 和 Register 3: Domain access control 定義四種行爲
Domain[8:5] 確定是 16個域中的哪一個(0開始),如果爲N,則Register 3中的[2*N-1:2*N-2]的值可以作爲 Table B4-2 中的 Value,來 索引 Access types

在這裏插入圖片描述

  • Attributes 中的 AP[11:10] , 在第二階段 和 當前執行指令時的特權級 定義四種行爲
VMSAv6不贊成使用S和R位。
對於不支持APX位的頁表格式,APX=0。
	First-level descriptor format (VMSAv6, subpages enabled) 中的 Section 不支持 APX 
特權級 
	請參考 [處理器架構 () armv4v5v6 架構參考手冊(1) 總介及cpu架構](https://blog.csdn.net/u011011827/article/details/103110736),在其中搜索關鍵字 特權

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章