2014-02-25 128 views

回答

1

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

2

簡短回答:您不必在意(除非您是內核/驅動程序開發人員)。這對你來說都是一樣的。

較長的答案:相反,虛擬連續的內存是通常不是物理連續(只有非常少量)。除巧合之外,或機器剛啓動後不久。然而,這不是必需的。

分配大量物理連續RAM的唯一方法是使用大頁面(因爲一頁內的內存需要連續)。然而,這是無用的努力,因爲你的過程沒有明顯的區別,你認爲它的連續內存是實際上是連續的,但是使用大頁面存在缺點。

通過物理上非連續的RAM進行內存映射的工作方式並不特別「特殊」。它遵循所有內存管理遵循的相同方法。

操作系統在「頁面」中劃分虛擬內存併爲您的進程創建頁表項。當您訪問某個位置的內存時,對應的頁面根本不存在,或者它存在並對應於實際的頁面,內存。

如果該頁面存在於RAM中,則完全沒有任何反應。。否則會產生故障,並運行一些操作系統代碼。如果結果表明該頁面根本不存在(或沒有正確的訪問權限),則您的進程將被分段錯誤終止。

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

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


在現實中,它是一個有點複雜,因爲一個頁面可能在RAM中存在,但不存在「正式」,是的要被回收或頁面等列表的一部分。但是這太複雜了。