MIPS虛擬地址到實體地址轉換過程
開啟虛擬地址使能的系統上,CPU發起的訪問最初都是虛擬地址VA,而真正從物理主存中獲取內容需給記憶體控制器的地址是實體地址PA,所以在CPU發起訪問後,需要一系列的動作完成VA到PA的轉換,這需要OS和硬體協同來完成。一些概念如MMU,TLB,頁表等如下所述:http://blog.csdn.net/kklvsports/article/details/9208511。簡要過程如下:VA以頁表大小取餘,得到PA的低位,關鍵是PA的高位(PFN)如何得到。記憶體中存放著頁表,頁表記錄的是VPN到PFN的對應關係(一般可能會分為多級頁表),以VPN查詢頁表即可獲得PFN。為了加速這個查詢,引入了TLB,TLB記錄的是一個記憶體頁表的一個子集,相當於是記憶體頁表的快取。所以MMU在以VPN索引先在TLB中查詢頁表,如果查詢TLB miss則會產生異常,由異常處理程式進行地址轉換。
VA轉換需要的相關暫存器:
EntryHi暫存器,各個位域的含義如下:
ASID: Address Space ID地址空間標示符
VPN2:Virtual PageNumber 虛擬頁號,2意思mips對映兩個物理頁表
Fill:VPN2的擴充套件
R:MIPS64才有,意義如下
PageMask暫存器用於配置頁表大小:
EntryLo0/EntryLo1暫存器
G:globalflag全域性標誌,如果該bit置位,在TLB匹配的時候忽略ASID
V:validflag有效標誌
D:dirtyflag“髒”標誌,指示該頁是否可寫,為1表示可寫
C:cacheabilityand Coherency
PFN:pageframe number物理幀號
Fill: 該位域對寫操作,讀操作返回全0;
虛擬地址轉換為實體地址過程為:
虛擬地址的高位(VPN)和當前程式的ASID送給TLB,與TLB中的所有entry表項同時進行匹配,匹配過程中如果有如下都滿足的TLB表項,從中讀取PFN,V,D域
1.當前程式(程序)的ASID等於TLB表項中的ASID(EntryHi的Gbit置位的話,不比較ASID)
2.虛擬地址的bit63~62與TLB表項的R欄位相同
3.虛擬地址的相應位域和TLB的VPN2相同,相應位域取決於PageMask暫存器設定的頁表大小
注意最終轉換是否成功取決於