虛擬地址到物理地址轉(zhuǎn)換過(guò)程
虛擬地址和物理地址都被劃分了兩部分:

虛擬地址由虛擬頁(yè)面號(hào)VPN和虛擬地址偏移VA offset兩部分組成。同樣,物理地址由物理頁(yè)幀號(hào)PFN和物理地址偏移PA offset兩部分組成。
虛擬地址轉(zhuǎn)換成物理地址時(shí),需要將VPN轉(zhuǎn)成PFN。PA offset通常就是VA offset。
所以物理地址 = PFN + VA offset
這里的核心就是VPN到PFN的映射,而VPN到PFN的映射關(guān)系是通過(guò)頁(yè)表記錄。就是說(shuō),頁(yè)表存儲(chǔ)了VPN和PFN的映射關(guān)系,MMU根據(jù)VPN,在頁(yè)表中找到PFN,再把PFN和VA offset相加,就得到了物理地址,從而將虛擬地址轉(zhuǎn)為物理地址。
這里要區(qū)分一下,頁(yè)表存儲(chǔ)了VA到PA的映射關(guān)系,所以說(shuō)找到頁(yè)表就找到了物理地址。但是這個(gè)頁(yè)表是軟件提供的,MMU只負(fù)責(zé)將虛擬地址翻譯成物理地址,翻譯的依據(jù)就是頁(yè)表,MMU本身不負(fù)責(zé)創(chuàng)建頁(yè)表。所以說(shuō),在開(kāi)啟MMU之前,系統(tǒng)就要提前建立好虛擬地址到物理地址的映射關(guān)系,然后保存到頁(yè)表中,這樣開(kāi)啟MMU時(shí),MMU才能正確找到對(duì)應(yīng)的物理地址。
頁(yè)表在哪
頁(yè)表都存儲(chǔ)在物理內(nèi)存中, MMU將虛擬地址轉(zhuǎn)換為物理地址,需要訪問(wèn)物理內(nèi)存中對(duì)應(yīng)的頁(yè)表。
實(shí)際上,頁(yè)表通常就是用一個(gè)數(shù)組來(lái)表示。
這里可能會(huì)一些疑問(wèn):
疑問(wèn):放到物理內(nèi)存,每次轉(zhuǎn)換都要訪問(wèn)內(nèi)存,速度不慢嗎?
答:慢。怎么解決呢?如果有cache是不是就很快了?是的,這塊cache就叫TLB。
疑問(wèn):都放到物理內(nèi)存,占用物理內(nèi)存空間不大嗎?
答:大,怎么解決?多級(jí)頁(yè)表+缺頁(yè)異常!多級(jí)頁(yè)表可以減少內(nèi)存占用,而通常只需將一級(jí)頁(yè)表存儲(chǔ)到物理內(nèi)存,查找的時(shí)候,找不到二級(jí)頁(yè)表,觸發(fā)一個(gè)缺頁(yè)異常,這時(shí)再分配頁(yè)表,從而節(jié)省內(nèi)存。
關(guān)于頁(yè)表放到物理內(nèi)存的問(wèn)題,涉及到cache和其他的一些知識(shí),內(nèi)容很多且比較復(fù)雜,暫時(shí)不深究,知道頁(yè)表是放在內(nèi)存中的即可。
-
Linux
+關(guān)注
關(guān)注
88文章
11622瀏覽量
217812 -
內(nèi)存
+關(guān)注
關(guān)注
9文章
3170瀏覽量
76091 -
MMU
+關(guān)注
關(guān)注
0文章
92瀏覽量
19099
發(fā)布評(píng)論請(qǐng)先 登錄
操作系統(tǒng)中的邏輯地址和物理地址
請(qǐng)問(wèn)ARM虛擬地址 物理地址 加載地址 運(yùn)行地址的聯(lián)系是什么?
為什么MMU的地址映射中物理地址會(huì)跳變?
【HarmonyOS】虛擬地址<->物理地址是如何映射的
物理地址到虛擬地址的轉(zhuǎn)換步驟
linux kernel實(shí)現(xiàn)物理地址到虛擬地址空間的切換方法
RT-Thread smart內(nèi)存虛擬地址到物理地址的轉(zhuǎn)換是一個(gè)什么樣的流程
用戶(hù)態(tài)得到虛擬地址對(duì)應(yīng)的物理地址
鴻蒙內(nèi)核中虛擬地址與物理地址之間是如何映射的
虛擬地址物理地址等眾多地址及MMU相關(guān)知識(shí)
虛擬地址翻譯物理地址的流程有哪些呢?
Linux系統(tǒng)為什么需要引入虛擬地址
Linux虛擬地址空間和物理地址空間的關(guān)系

Linux虛擬地址到物理地址轉(zhuǎn)換過(guò)程
評(píng)論