2012-04-27 79 views
1

我在這個領域的一個總的小白,所以請忍受我的問題和答案吧:)進程地址空間和虛擬內存

我讀到有關進程的地址空間,虛擬內存和分頁。我瞭解頁面交換進出RAM的機制。據記載,每個進程都有一個4GB的虛擬地址空間,其中一部分用於用戶空間(特定於每個進程--1或2GB),其餘部分是內核空間(這在所有進程中是通用的)。由於每個進程的虛擬地址空間都存儲在輔助存儲中,這是否意味着每次啓動進程時,它都會在我的硬盤中保留4 GB的空間?我每次開始一個進程時都看不到我的硬盤空間減少了4GB ......或者像虛擬空間沒有被保留爲一個塊一樣,而是從小規模開始,可以增長到4GB。請說清楚一點,如果你知道的話,也可以發表一些關於這個話題的鏈接..任何能夠幫助我理解這個複雜話題的東西。

回答

1

它在這裏是不重要的,可以詳細闡述數百頁的文本(請參閱關於此主題的cs書籍)。

但總之你錯了:虛擬內存是不是存儲在二級存儲。它可以在那裏,但通常不是。操作系統正在處理它,這取決於它將數據保存在正常內存中的信息(例如,當進程處於活動狀態時),或者它在硬盤上(例如,當內存很短並且進程處於非活動狀態時)。

虛擬化意味着,對於進程它是透明的,它不知道數據存儲在哪裏,它總是通過同一個指針訪問。系統可以根據情況更改底層存儲(然後交換數據)。

+0

感謝您的快速反應。所以,如果我說4GB的進程地址空間並不是每次啓動進程時「擱置」的東西,而是像上限一樣。 – Venky 2012-04-27 06:09:38

+0

@Venky:是的。每次開始流程時不會「擱置」。 – flolo 2012-04-27 15:21:07

0

虛擬地址空間沒有「存儲」在任何地方。只有爲進程分配的內存頁面可以存儲在內存中/磁盤上。

內存的分配取決於操作系統。即在Windows中分配和管理可以通過程序使用相應的memory functions來完成,例如VirtualAlloc將內存映射到地址空間,並使用VirtualProtect函數來指定在程序的地址空間中分配給內存塊的屬性應具有的屬性。

-1

那麼,這是一個很好的問題,在這個領域的總noob。真正發生的是,正在執行的過程被認爲它有所有的內存,而它只有少數內存將擴大爲它會增長。這個內存被稱爲虛擬內存。

我希望這個答案是有幫助的。

2

所有虛擬地址的存儲器管理的第一犯規利用輔助存儲器,它只是將您的程序和主存儲器分成一些分區大小和主存儲器分區稱爲幀和程序分區被稱爲頁在主存儲器和幀的每個分區是相同的尺寸(即分區之前的大小)

執行或使用的程序當過,內核檢查是否該程序的所有頁面都可以裝入主內存,如果因此它會繼續在主內存中的所有頁面其他明智的,將只保留首先需要的頁面,然後當其他頁面需要時,它將刪除其中一個頁面(即,(使用頁面替換算法),然後將請求的頁面傳輸到已刪除的幀(您剛纔選擇從主內存中刪除) 對於從頁面到幀的映射,內核使用頁面映射表 告訴正是在這種框架在主內存中這個特定頁面位於

檢查以下引用: https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html https://www.bottomupcs.com/virtual_addresses.xhtml

相關問題