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文章
5336瀏覽量
120230 -
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209326 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3019瀏覽量
74003 -
MMU
+關(guān)注
關(guān)注
0文章
91瀏覽量
18283
發(fā)布評論請先 登錄
相關(guān)推薦
評論