ARM存儲器之:存儲管理單元MMU
一級頁表和二級頁表的特征如表15.21所示。
表15.21 一級頁表和二級頁表特征
類型 | 頁表占用的存儲空間 (單位:KB) | 支持的頁大小 (單位:KB) | 頁表項(xiàng)數(shù)目 |
一級頁表 | 16 | 1024 | 4096 |
粗二級頁表 | 1 | 1,4,64 | 1024 |
細(xì)二級頁表 | 4 | 1,4,64 | 256 |
(2)傳輸表基地址
當(dāng)處理器發(fā)出地址請求信號,而其要求的虛擬地址沒有包含在TLB中時(shí),MMU將會初始化一個(gè)產(chǎn)生過程。傳輸過程需要的地址轉(zhuǎn)換表——傳輸表的基地址存放在協(xié)處理器寄存器c2中,MMU通過此基地址找到傳輸表,準(zhǔn)備一次地址傳輸過程。
(3)基于一級頁表的地址變換過程
基于一級頁表的地址變換過程是指從虛擬地址到物理地址的轉(zhuǎn)換只需要一級頁表就能完成的地址轉(zhuǎn)換。一級頁表地址轉(zhuǎn)換過程如圖15.25所示。
圖15.25一級頁表地址轉(zhuǎn)換過程
圖15.25中,CP15寄存器c2中存放的是內(nèi)存中一級頁表的基地址。因?yàn)橐患夗摫泶笮?6KB,也就是說,一級頁表是16KB地址對齊的,所以c2中bits[13∶0]=0,bits[31∶14]為內(nèi)存中頁表基地址。
CP15的寄存器c2的bits[31∶14]和虛擬地址的bits[31∶20]結(jié)合作為一個(gè)31位數(shù)的高30位值,忽略32位值的最后兩位,可以使用該值從頁表中查到一個(gè)4字節(jié)的地址頁表項(xiàng)。
一級頁表支持以下4種類型的頁表項(xiàng)。
·1MB段轉(zhuǎn)換項(xiàng);
·指向細(xì)二級頁表的目錄項(xiàng);
·指向粗二級頁表的目錄項(xiàng);
·產(chǎn)生中止異常的錯(cuò)誤項(xiàng)。
系統(tǒng)通過頁表項(xiàng)的低兩位bits[1:0]來確定頁表項(xiàng)的類型。頁表項(xiàng)的格式要求二級頁表的地址必須與其頁大小的倍數(shù)對齊。一級頁表的各種頁表項(xiàng)的格式如圖15.26所示。
圖15.26一級頁表項(xiàng)
如果bits[1:0]=0b10時(shí),該頁表項(xiàng)為段描述符(SectionDescriptor),段描述符定義了對應(yīng)的1MB的虛擬存儲空間的地址映射關(guān)系。
如果bits[1:0]=0b01時(shí),該頁表項(xiàng)包含了粗二級頁表的物理地址。該粗二級頁表定義了對應(yīng)的1MB虛擬存儲空間的地址映射關(guān)系。它可以實(shí)現(xiàn)以大頁和小頁為單位的地址映射。
如果bits[1:0]=0b11時(shí),該頁表項(xiàng)包含了細(xì)二級頁表的物理地址。該細(xì)二級頁表定義了對應(yīng)的1MB虛擬存儲空間的地址映射關(guān)系。它可以實(shí)現(xiàn)以大頁、小頁和極小頁為單位的地址映射。
如果bits[1:0]=0b00時(shí),說明此頁表項(xiàng)是一個(gè)錯(cuò)誤頁表項(xiàng)。它將產(chǎn)生一個(gè)存儲頁錯(cuò)誤。錯(cuò)誤條件會導(dǎo)致預(yù)取指令中止或數(shù)據(jù)中止,這取決于具體的存儲器訪問類型。
存儲器相關(guān)文章:存儲器原理
評論