MMU怎么知道這個頁表在內(nèi)存中的具體地址呢?
通常CPU會提供一個頁表基址寄存器給操作系統(tǒng)使用,用于給MMU指示頁表的基地址。不同處理器架構(gòu)對應(yīng)的寄存器也不一樣:
x86:CR3(Control Register 3)
ARM-v8:系統(tǒng)寄存器TTBR(Translation Table Base egister)
RISC-V:SATP(Supervisor Address Translation and Protection)
頁表基址寄存器存儲了第一級頁表的基地址,通過訪問該寄存器,就能知道頁表在那個位置。
多級頁表轉(zhuǎn)換過程
實際使用中,都是用多級頁表來存儲虛擬地址和物理地址的映射關(guān)系,
以二級頁表為例(假設(shè)是32位系統(tǒng)),其虛擬地址轉(zhuǎn)換為物理地址的過程如圖所示:
PGD:Pgea Global Directory,全局頁目錄,存儲了下一級頁表的基地址
PTE:Page Table Entrys,頁表入口,PTE才是真正存儲了物理地址的頁表
VA到PA的轉(zhuǎn)換過程:
MMU通過訪問頁表基址寄存器,得到一級頁表PGD的基地址,再結(jié)合虛擬地址中的PGD index找到了下一級頁表PTE的基地址;得到了PTE的基址,再結(jié)合虛擬地址中的PTE index找到PFN,然后再和VA相加得到物理地址。
這里需要注意,使用多少級的頁表、以及虛擬地址、物理地址的格式、PTE的格式等等,與32系統(tǒng)還是64位系統(tǒng)有關(guān),也與處理器的架構(gòu)有關(guān),需要根據(jù)不同系統(tǒng)、不同處理器架構(gòu)分析。
但是MMU工作原理都是一樣的,不管是二級頁表、三級頁表還是四級頁表,都是通過第一級頁表找到第二級頁表,通過第二級頁表找到第三級頁表。最終找到物理地址。只要明白了MMU的工作原理,分析其他的頁表也是大同小異。
-
寄存器
+關(guān)注
關(guān)注
31文章
5401瀏覽量
122797 -
Linux
+關(guān)注
關(guān)注
87文章
11420瀏覽量
212351 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3102瀏覽量
74889 -
MMU
+關(guān)注
關(guān)注
0文章
92瀏覽量
18575
發(fā)布評論請先 登錄
相關(guān)推薦
關(guān)于頁表和MMU的問題
帶你走進嵌入式ARM MMU神秘的內(nèi)部世界
ARM MMU 理解(基于ARM 920T)
MMU的產(chǎn)生及MMU工作過程詳解
裸機加強版MMU章節(jié)頁表創(chuàng)建,地址映射相同
CC2541燒寫加密設(shè)置的具體地址在哪里?
ARM的內(nèi)存管理(MMU)是如何實現(xiàn)的?
鴻蒙內(nèi)核源碼分析(內(nèi)存映射篇):虛擬地址與物理地址之間是如何映射的
為什么要用MMU?為什么要用虛擬地址?
MMU原理:CPU是如何訪問到內(nèi)存的?

MMU內(nèi)存管理單元的宏觀理解

評論