如何知道物理記憶體中的某個頁幀屬於某個程序,或者說程序的某個頁表項?

時間 2021-05-05 15:48:35

1樓:DearFuture

以windows為例,系統對每個物理頁都會建立乙個叫PfnDatabase的結構(以下簡稱pfn),這個結構包含乙個PteAddress指向第一次引用這個物理頁的頁表項的虛擬位址,但這個物理頁「屬於」哪個程序(cr3)其實是不知道的,也不需要知道

對於private page,其實比較簡單,這種頁面的換入和換出都必然發生在這個程序的上下文內。物理頁換出時,需要根據物理頁號得到pfn,再根據pfn得到頁表項,並將頁表項的有效位置為0,再把整個換出物理頁的資料寫入pagefile,並將此次寫入到「pagefile的偏移」儲存到頁表項。而之後pfn就不再保留PteAddress的資訊了,因為這個物理頁已經變成了空閒頁,可以被別的程序或別的頁表項使用。

物理頁換入時,一般是因為訪問被換出的記憶體時發生了缺頁錯誤。缺頁處理程式根據發生缺頁錯誤時的虛擬位址得到對應的頁表項(win的虛擬位址和頁表項是一種簡單的線性對映關係),再根據頁表項紀錄的頁資料在「pagefile的偏移」將之前儲存的頁資料從pagefile讀出來,並拷貝到系統新分配的乙個空閒物理頁之中。最後頁表項填入這個新物理頁的頁號,而這個新物理頁對應的pfn->PteAddress又填入頁表項的虛擬位址…過程大概就是這樣

對於shared page,換頁涉及到pfn的共享計數和原型PTE等額外資訊,比較複雜,就不一一展開了

2樓:阿缺

硬體層面不是很了解,所以勉強說一下吧

真的要跟你的應用場景有關係

從軟體程式設計角度來看說,好像程式設計師也沒怎麼關心過這個問題:虛擬記憶體、記憶體對映一直是作業系統的範疇。約定的規則是:

由作業系統統一負責管理程序虛擬位址空間到物理空間的對映,所以程式中看到的差不多都是虛擬的東西

至於微控制器嵌入式之類的,之前倒是聽說過年代、機器型號不同,採用的位址對映方式也不同。所以,要真論起來,還得軟體硬體都門清的老把式來

Linux頁表中虛擬記憶體位址如何對映到硬碟資料塊位址

我來回答一下,不確定對不對。首先每個程序都有自己的名字空間,你說當發現需要的資料不在物理記憶體中的時候需要去磁碟讀取資料到記憶體中!這個問題是首先程序是知道自己需要什麼資料的,它才知道這些資料在不在物理記憶體中!這些資料是什麼呢?比如說檔案的元資料這是很重要的,經常都是快取在記憶體中!額如果說元資料...

如何知道某個英語單詞的多個釋義中,哪個是本義?哪個是引申義?

這需要一點聯想能力,要求你有一定的詞根儲備與詞彙量,加上一點由好奇心驅動的搜尋工作。舉個簡單的例子 以下所有英語單詞都可以代替中文句子裡的 打 這個字 slap,smite,beat,call,punch,strike,dozen,thrash,print,fight 可能你不太認得thrash,於...

如何理解人教版高中物理必修一 54 頁所說的 彈力和摩擦力在本質上都是由電磁力引起的 ?

學物理的菜雞 補充一下,彈力是保守力,但是摩擦力是非保守力,這兩點是非常不同的,我們知道庫侖力是保守力 電場環路積分為0 如果單純用庫侖力來解釋是顯然有問題的,問題就在於摩擦力對能量的耗散有乙個動的過程,用經典的模型就是乙個諧振的偶極子輻射電磁場,當兩個電荷的偶極矩二階導不為0時會輻射電磁波,這個時...