虛擬地址到物理地址轉換過程
虛擬地址和物理地址都被劃分了兩部分:
虛擬地址由虛擬頁面號VPN和虛擬地址偏移VA offset兩部分組成。同樣,物理地址由物理頁幀號PFN和物理地址偏移PA offset兩部分組成。
虛擬地址轉換成物理地址時,需要將VPN轉成PFN。PA offset通常就是VA offset。
所以物理地址 = PFN + VA offset
這里的核心就是VPN到PFN的映射,而VPN到PFN的映射關系是通過頁表記錄。就是說,頁表存儲了VPN和PFN的映射關系,MMU根據VPN,在頁表中找到PFN,再把PFN和VA offset相加,就得到了物理地址,從而將虛擬地址轉為物理地址。
這里要區分一下,頁表存儲了VA到PA的映射關系,所以說找到頁表就找到了物理地址。但是這個頁表是軟件提供的,MMU只負責將虛擬地址翻譯成物理地址,翻譯的依據就是頁表,MMU本身不負責創建頁表。所以說,在開啟MMU之前,系統就要提前建立好虛擬地址到物理地址的映射關系,然后保存到頁表中,這樣開啟MMU時,MMU才能正確找到對應的物理地址。
頁表在哪
頁表都存儲在物理內存中, MMU將虛擬地址轉換為物理地址,需要訪問物理內存中對應的頁表。
實際上,頁表通常就是用一個數組來表示。
這里可能會一些疑問:
疑問:放到物理內存,每次轉換都要訪問內存,速度不慢嗎?
答:慢。怎么解決呢?如果有cache是不是就很快了?是的,這塊cache就叫TLB。
疑問:都放到物理內存,占用物理內存空間不大嗎?
答:大,怎么解決?多級頁表+缺頁異常!多級頁表可以減少內存占用,而通常只需將一級頁表存儲到物理內存,查找的時候,找不到二級頁表,觸發一個缺頁異常,這時再分配頁表,從而節省內存。
關于頁表放到物理內存的問題,涉及到cache和其他的一些知識,內容很多且比較復雜,暫時不深究,知道頁表是放在內存中的即可。
-
Linux
+關注
關注
87文章
11508瀏覽量
213546 -
內存
+關注
關注
8文章
3118瀏覽量
75204 -
MMU
+關注
關注
0文章
92瀏覽量
18727
發布評論請先 登錄
操作系統中的邏輯地址和物理地址
請問ARM虛擬地址 物理地址 加載地址 運行地址的聯系是什么?
為什么MMU的地址映射中物理地址會跳變?
【HarmonyOS】虛擬地址<->物理地址是如何映射的
linux kernel實現物理地址到虛擬地址空間的切換方法
RT-Thread smart內存虛擬地址到物理地址的轉換是一個什么樣的流程
鴻蒙內核中虛擬地址與物理地址之間是如何映射的

虛擬地址物理地址等眾多地址及MMU相關知識

虛擬地址翻譯物理地址的流程有哪些呢?

Linux系統為什么需要引入虛擬地址

評論