2014-10-17 54 views
-1

據我所知,一個進程被分配了真實的內存空間,即RAM。這是固定的,所以如果進程需要更多的內存,它從虛擬內存中獲取它。虛擬內存是否總是爲進程提供更大的地址空間?

因此,虛擬內存所做的只是根據需要將頁面調入/調出進程內存空間,然而,進程REAL內存空間保持不變。

我的問題是,虛擬內存是否有可能在物理上改變進程的實際內存空間以增加內存?

+0

據我所知,虛擬內存的主要原因是傳統的令人興奮的代碼始終在內存中的相同地址開始。這意味着你只能運行一個程序,虛擬內存映射內存,以便程序不會重疊並覆蓋它們的可執行代碼。 – rekire 2014-10-17 05:17:26

+0

@rekire那麼這是否意味着當進程正在運行時,磁盤正在從虛擬內存讀取,因爲它的順序? – Ogen 2014-10-17 05:18:45

+0

沒有那是別的東西硬盤驅動器只用於如果內存滿了。這對於「隱藏」程序的性能不利,因爲在恢復時,它必須在硬盤驅動器上緩慢(延遲)地進行。 – rekire 2014-10-17 05:24:00

回答

1

在過分簡化的風險下,一個進程被分配一個頁表(爲了簡單起見,假設一個頁面)。頁面表中有許多條目。每個條目代表內存中的潛在頁面。頁表的最大大小受處理器地址空間的限制。但是,操作系統可能會限制頁面大小比此更小。 (假設每個可執行文件都啓動一個新進程)應用程序加載程序會將地址空間設置爲包括所有靜態數據,可執行代碼,預先分配的可修改數據和初始狀態的初始狀態。

此時沒有物理內存。

程序啓動時,它會引用虛擬內存中沒有物理內存(頁面錯誤)的頁面。操作系統然後將物理內存頁面分配給虛擬頁面。在啓動時會出現許多頁面錯誤。

隨着應用程序的運行,它可以分配更多的虛擬內存達到頁表大小的限制。

隨着應用程序的運行,操作系統可以將物理內存重新映射到虛擬內存。程序運行時,相同的虛擬地址可以有多個物理地址。

所以這是一個不正確的假設。

據我所知,一個進程被分配了真實的內存空間,即RAM。這是固定的,所以如果進程需要更多的內存,它從虛擬內存中獲取它。

這是不正確的:

那麼虛擬內存不只是交換頁面進入/退出進程的內存空間的要求,但是,過程實際內存空間保持不變。

是這樣的:

我的問題是,有可能是爲了給它更多的內存虛擬內存物理改變進程的真實內存空間?

相關問題