1. 程式人生 > >MIPS虛擬地址到實體地址轉換過程

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對映兩個物理頁表

FillVPN2的擴充套件

R:MIPS64才有,意義如下


PageMask暫存器用於配置頁表大小:


EntryLo0/EntryLo1暫存器


Gglobalflag全域性標誌,如果該bit置位,在TLB匹配的時候忽略ASID

Vvalidflag有效標誌

Ddirtyflag髒”標誌,指示該頁是否可寫,為1表示可寫

Ccacheabilityand Coherency

PFNpageframe number物理幀號

Fill: 該位域對寫操作,讀操作返回全0

虛擬地址轉換為實體地址過程為:

虛擬地址的高位(VPN)和當前程式的ASID送給TLB,與TLB中的所有entry表項同時進行匹配,匹配過程中如果有如下都滿足的TLB表項,從中讀取PFN,V,D

        1.當前程式(程序)ASID等於TLB表項中的ASID(EntryHiGbit置位的話,不比較ASID)

2.虛擬地址的bit63~62TLB表項的R欄位相同

3.虛擬地址的相應位域和TLB的VPN2相同,相應位域取決於PageMask暫存器設定的頁表大小

注意最終轉換是否成功取決於

V,D域。如果V無效,該entry無效,產生TLB無效異常;如果D指示不可寫,而有寫操作會產生TLB修改異常。如果沒有上述異常,即是TLB命中,命中entryPFN和虛擬地址低位(1KBpage的話是低10bit4KBpage的話低12bit)構成最終的實體地址。