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