2013-11-29 57 views
0

假設x86,我開始學習地址0x0到0x7FFFFFFF是爲進程;而任何更高的內容都保留給內核。Windows - 這種內存尋址是如何工作的?

我有三個好奇心:

1)是否一個過程調用過的地址不是高爲0x7FFFFFFF?我認爲它總會導致某種訪問被拒絕?拒絕訪問如何被強制執行?

2)「共享內存」IPC通過將兩個進程的虛擬地址映射到相同的物理地址範圍工作嗎?

3)機器中的RAM數量可能會有所不同。你可能有2GB,或者更像16GB。這如何影響RAM的尋址?內核是否會留下一堆未使用的RAM,因爲它是爲自己保留的,但不需要它?我怎樣才能看到這個?

回答

1

我不是很確定,但你會發現它是如何工作在這個MSDN doc最大: -

虛擬地址範圍是提供給一個過程 稱爲虛擬地址空間爲處理。每個用戶模式 進程都有其自己的專用虛擬地址空間。對於32位的 進程,虛擬地址空間通常是2千兆字節範圍 0x00000000到0x7FFFFFFF。對於64位進程,虛擬地址空間是8 TB範圍0x000'00000000到 0x7FF'FFFFFFFF。虛擬地址範圍有時稱爲虛擬內存範圍。

enter image description here

圖顯示了兩個64位進程的虛擬地址空間: Notepad.exe的和MyApp.exe的。每個進程都有自己的虛擬地址 空間,從0x000'0000000到0x7FF'FFFFFFFF。每個帶陰影的 塊表示虛擬或物理內存的一個頁面(大小爲4千字節)。請注意,記事本進程使用三個連續頁面 虛擬地址,從0x7F7'93950000開始。但是這三個連續的虛擬地址頁面在物理內存中映射到不連續的 頁面。另請注意,這兩個進程都使用從0x7F7'93950000開始的虛擬內存頁面 ,但這些虛擬頁面 被映射到物理內存的不同頁面。