1. 程式人生 > >ARMV8架構之memory管理與模型(一)

ARMV8架構之memory管理與模型(一)

一個典型系統的memory map會被分隔成不同的邏輯區域,每個區域都要求有不同的memory屬性,比如說:

Access Permission屬性定義的在User/Privileged模式下的讀寫許可權. Caching屬性定義了該memory空間是否會有副本存在於cache中. Buffering屬性定義了訪問該memory空間的操作是否能支援提前返回寫response.等等. 如圖1所示,作業系統OS與應用程式APP的程式碼一般會被存放在不同的memory空間,而且有不同的訪問許可權.訪問OS需要更高的許可權.而外設的memory地址空間一般是uncached的(為什麼呢?).各種向量比如中斷一般是隻讀的,不可隨意修改.

圖1  典型系統的Momory map

系統的實體地址map由Hardware決定,而OS在虛擬地址空間工作,這個虛擬地址空間由軟體決定.虛實地址的轉換規則由translation table定義.虛擬地址的存在,使得OS對記憶體的管理更靈活,比如說,一塊非連續的實體地址空間,通過頁錶轉換,可以被OS當作是連續的虛擬地址空間進行訪問.如圖2所示,OS程式碼與APP的程式碼可以是非連續的存放在RAM(例如DDR)中,但是在虛擬地址空間卻是連續的.

圖2 虛擬地址到實體地址的對映

虛擬地址轉換為實體地址的過程叫做"table walking",由硬體MMU(memory management unit)實現.MMU處理整個虛實地址轉換過程並且快取頁表(translation table),當MMU使能時,所有由Core發出的訪問都回經過它,如圖3所示.

圖3 MMU在系統中的位置

那麼如何得到一個實體地址? 

一般來說,core發出的虛擬地址(VA)有64-bit,VA的高位決定了哪一塊memory block會被訪問,即作為頁表的index值.而低位則給出了在該block中的偏移值.MMU將偏移值與translation table中的block物理基地址拼接成為最終的實體地址(PA),如圖4所示.

圖4 虛實地址轉換原理

對於多級translation table,以2級table為例,如圖5,第1級表的基地址,由translation table base register(TTBR)配置決定.VA的第一部分bit位(L1 index)定址.1級表的一個entry可以包含512M memory block的物理基地址,或是指向第2級頁表的指標.第2級頁表,在1級頁表的基礎上,將memory空間劃分為更小的部分.2級頁表由VA的二部分bit位(L2 index)定址,它包含了指向64K memory block的物理基地址.

圖5 2級虛實地址轉換