MMU怎么知道這個(gè)頁(yè)表在內(nèi)存中的具體地址呢?
通常CPU會(huì)提供一個(gè)頁(yè)表基址寄存器給操作系統(tǒng)使用,用于給MMU指示頁(yè)表的基地址。不同處理器架構(gòu)對(duì)應(yīng)的寄存器也不一樣:
x86:CR3(Control Register 3)
ARM-v8:系統(tǒng)寄存器TTBR(Translation Table Base egister)
RISC-V:SATP(Supervisor Address Translation and Protection)
頁(yè)表基址寄存器存儲(chǔ)了第一級(jí)頁(yè)表的基地址,通過訪問該寄存器,就能知道頁(yè)表在那個(gè)位置。
多級(jí)頁(yè)表轉(zhuǎn)換過程
實(shí)際使用中,都是用多級(jí)頁(yè)表來存儲(chǔ)虛擬地址和物理地址的映射關(guān)系,
以二級(jí)頁(yè)表為例(假設(shè)是32位系統(tǒng)),其虛擬地址轉(zhuǎn)換為物理地址的過程如圖所示:
PGD:Pgea Global Directory,全局頁(yè)目錄,存儲(chǔ)了下一級(jí)頁(yè)表的基地址
PTE:Page Table Entrys,頁(yè)表入口,PTE才是真正存儲(chǔ)了物理地址的頁(yè)表
VA到PA的轉(zhuǎn)換過程:
MMU通過訪問頁(yè)表基址寄存器,得到一級(jí)頁(yè)表PGD的基地址,再結(jié)合虛擬地址中的PGD index找到了下一級(jí)頁(yè)表PTE的基地址;得到了PTE的基址,再結(jié)合虛擬地址中的PTE index找到PFN,然后再和VA相加得到物理地址。
這里需要注意,使用多少級(jí)的頁(yè)表、以及虛擬地址、物理地址的格式、PTE的格式等等,與32系統(tǒng)還是64位系統(tǒng)有關(guān),也與處理器的架構(gòu)有關(guān),需要根據(jù)不同系統(tǒng)、不同處理器架構(gòu)分析。
但是MMU工作原理都是一樣的,不管是二級(jí)頁(yè)表、三級(jí)頁(yè)表還是四級(jí)頁(yè)表,都是通過第一級(jí)頁(yè)表找到第二級(jí)頁(yè)表,通過第二級(jí)頁(yè)表找到第三級(jí)頁(yè)表。最終找到物理地址。只要明白了MMU的工作原理,分析其他的頁(yè)表也是大同小異。
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120385 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209543 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3025瀏覽量
74060 -
MMU
+關(guān)注
關(guān)注
0文章
91瀏覽量
18300
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論