簡體   English   中英

幾乎連續的與物理上連續的記憶

[英]Virtually contiguous vs. physically contiguous memory

幾乎連續的記憶也總是在物理上連續嗎? 如果沒有,如何在物理上非連續的RAM塊上分配幾乎連續的內存並進行內存映射? 詳細的答案表示贊賞。

簡短回答:您無需關心(除非您是內核/驅動程序開發人員)。 對你來說都是一樣的。

更長的答案:相反,幾乎連續的記憶通常不是物理上連續的(只是非常少量)。 除了巧合,或機器剛剛啟動后不久。 但是,這不是必要的。

分配大量物理連續RAM的唯一方法是使用大頁面(因為一頁內的內存需要是連續的)。 然而,這是一個無用的嘗試,因為您的過程沒有可觀察到的差異,您認為它是連續的內存是否實際上是連續的,但使用大頁面存在缺點。

在物理上非連續的RAM上的存儲器映射不是特別“特殊”的方式。 它遵循所有內存管理遵循的相同方法。

操作系統在“頁面”中划分虛擬內存,並為您的進程創建頁表條目。 當您訪問某個位置的內存時,相應的頁面根本不存在,或者它存在並對應於RAM中的實際頁面,或者它存在但與RAM中的實際頁面對應。

如果頁面存在於RAM中,則根本不會發生任何事情1 否則會生成故障並運行某些操作系統代碼。 如果事實證明頁面根本不存在(或者沒有正確的訪問權限),則您的進程會因分段錯誤而終止。

否則,操作系統會選擇一個未使用的任意頁面(或者交換掉它認為最不重要的頁面),然后將數據從磁盤加載到該頁面中。 在內存映射的情況下,數據來自映射文件,否則它來自交換(對於全新分配的內存,復制零頁)。 然后操作系統將控制權返回給您的流程。 你永遠不會知道這件事。

如果您訪問位於不同頁面的“連續”(或者您認為!)內存區域中的另一個位置,則會運行完全相同的過程。


1實際上,它有點復雜,因為頁面可能存在於RAM中但不是“正式”存在,是要回收的頁面列表的一部分。 但這太復雜了。

不,它不必。 虛擬內存的任何頁面都可以映射到任意物理頁面。 因此,您可以讓虛擬內存的相鄰頁面指向不相鄰的物理頁面。 該映射由OS維護,並由CPU的MMU單元使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM