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

時間 2021-05-07 03:12:03

1樓:

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

這些資料是什麼呢?比如說檔案的元資料這是很重要的,經常都是快取在記憶體中!額如果說元資料你不知道是什麼的話,那這麼說吧。

比如說檔案的資料你第一次讀取的時候有部分是快取在記憶體中的,以免你過一會就又重新讀取這個檔案(當然存在記憶體的時間看各種作業系統自己的機制啦,比如有的10ms就將資料刷回硬碟)。。繼續,然後,你再次讀取這個檔案,然後核心發現該檔案資料有部分儲存在記憶體中,可是有的不在!重點來了,意思是核心知道不在記憶體中的這部分資料是磁碟的哪部分資料的,因此就會去磁碟對應位置讀取這部分不在記憶體中的資料。

額,如果你非要問核心怎麼知道這部分不在記憶體中的資料在磁碟的什麼位置的話。。這。。說起來就很複雜啦。。

每個檔案在記憶體中有自己的乙個address space 維護還檔案的一顆radix-tree 這棵樹就描述著這個檔案的磁碟資料在磁碟的位置與物理記憶體page的對應關係(這樣說也不是很對。。可以這麼理解)。。核心發現要讀取的這個檔案的某個位置的資料對應的page不在這棵樹上(這樣說也不是很對,你就這麼理解吧)。。

然後就會提交乙個申請塊的bio 去磁碟申請資料去啦。。哎呀打完了。不對的地方求指教!

2樓:

其實Linux的實現很簡單,對於每個程序來說,每段記憶體段,比如對映的檔案的記憶體段,都用乙個VMA來描述,VMA結構體中,有乙個file指標指向它的backend硬碟檔案。當user space程序訪問此位址產生缺頁中斷後,會陷入核心態將硬碟檔案裡的內容準備好,程式就可以繼續執行了。不知道有沒有回答好你的問題?

C 虛函式的實現機制 虛表如何生成的

派生類構造的時候,基類部分先把自己的虛表建立好,然後派生類把自己重寫的虛函式在基類部分的表裡覆蓋了,然後如果派生類有新的虛函式,也放進這張表。單繼承情況 邱昊宇 補充下 C 標準對於虛函式的實現方式沒有任何要求,所以 C 虛函式的實現機制 無從說起。通過在物件模型中引入虛表來實現多型,只是各大編譯器...

中醫中的虛實錯雜中的虛中夾實和實中夾虛的區別是什麼。(請通俗易懂的說明)?

貓眼 虛中夾實和實中夾虛,分別代表的是這個病的本質是什麼。虛中夾實,本質上是虛證,但是很可能同時就夾著食積,痰溼,水飲,瘀血等實證。實中夾虛,本質是實證,比如實熱證,因為傷陰,往往都夾著陰虛的情況。 朵朵今天也要加油 其實我覺得125的教材寫的還挺清楚的 從我粗淺的理解 兩者的關聯是可以相互轉化 兩...

如何理解Linux中的OOM Out Of Memory Killer 機制?

最難不過二叉樹 針對題主的疑惑嘗試回答下 當物理記憶體不夠的時候啟用虛擬記憶體不就行了嗎?一般系統管理員會設定swap,記憶體不夠時會把暫時不用的記憶體頁swap到磁碟,騰出空間,也就是你說的虛擬記憶體了。但是這個swap大小都會設定為某乙個值,所以記憶體 swap 也會面臨都耗盡的情況。為什麼不可...