MMU虛擬記憶體到實體記憶體
阿新 • • 發佈:2019-02-15
MMU的主要作用:虛擬地址到實體地址的轉換;訪問許可權控制;設定虛擬儲存空間的緩衝。
虛擬儲存器:程式一般存於掉電不丟失的硬碟中,但是硬碟讀寫速度慢。所以系統上電後一般只在ROM中完成小部分硬體初始化程式,並把程式搬運到記憶體中。然後,從記憶體中開始執行程式。但是,記憶體有限,不能一次性把所有程式碼載入到記憶體中,所以只把當前用到的一部分程式碼載入過來,把沒用到的搬回磁碟。此時的效果等同於把所有程式載入到記憶體中,使用者看來系統具有的記憶體比實際記憶體大的多。對於32位的CPU系統中虛擬地址空間有4GB大小,而嵌入式系統中的實際實體地址空間可能遠小於此。
把虛擬地址空間分成一個個固定大小的塊,每一塊為一頁。實體地址空間也分為同樣大小的頁。MMU要實現虛擬地址到實體地址的對映,CPU核發出虛擬地址VA;VA被轉換為變換後的虛擬地址MVA給MMU;MMU把MVA轉換成實體地址PA。 頁表:位於記憶體中,頁表的基地址存於CP15的C2暫存器中,表中每一行(叫一個地址變換條目entry)對應於虛擬儲存空間的一個頁,這個entry包含虛擬記憶體塊和物理塊地址的對應關係、該頁的許可權、該頁的緩衝特性。 TLB(快表):CPU和記憶體速度級別相差較大,每次到記憶體中查表代價較大。根據程式區域性性原理,把當前訪問需要的條目存放在一個和CPU中暫存器速度差不多16字左右的TLB中。MMU把儲存空間分為16個域,PC15中C3每兩位控制一個域的訪問許可權。 ARM支援的儲存塊:段1MB;大頁64KB(可分為16KB子頁);小頁4KB(可分為1KB子頁);極小頁1KB(只能儲存在細頁表中)。 大致過程: 1)根據VA和C2找到一級頁表條目 2)若是段描述符,返回實體地址 3)若該條目是二級頁表描述符,繼續根據虛擬地址找下一個條目 4)找到第二個頁描述符,返回實體地址 一級頁表描述符
(function () {('pre.prettyprint code').each(function () { var lines =[1:0]=01粗頁表:256行,佔記憶體1KB,每個條目表示4KB空間;[31:10]是二級頁表地址。如:粗頁表+大頁,因為指向物理空間只能為1MB,所以256/16*64K或64/4;連續16個條目儲存同一大頁描述符。 C2[31:14]+MVA[31:20]+0b00->粗頁描述符; 粗頁描述符[31:10]+MVA[19:12]+0b00->大頁描述符; 大頁描述符[31:16]+MVA[15:0]->PA [1:0]=10段,[31:20]一塊1MB實體地址空間的起始地址。MVA[19:0]在這塊中定址。 P15的C2[31:14]+MVA[31:20]+0b00——>段描述符。 段描述符[31:20]+MVA[19:0]-->PA。 [1:0]=11細頁表,1024行,每個條目表示1KB空間;[31:12]是二級頁表地址;細頁表+大頁,1024/64*64K或64/1,每個條目表示1KB,連續64個條目儲存同一大頁描述符 二級頁表描述符