虛擬機可以使用 Windows 未能使用的 4G 內存嗎?
我的電腦是4G內存,安裝了32位的win8。只能識別3個G。現在我安裝了一個虛擬機,虛擬機跑著ubuntu。那麼虛擬機會把我未能使用的1G內存給使用起來嗎?換句話說,這樣4G內存是否都可以利用起來了?
虛擬機也是通過操作系統來分配內存的,不是直接到硬體上劃分,所以操作系統能識別多少內存,那麼虛擬機最大也只能分配多少。
然後解釋一下為什麼只能用到3GB內存:
32位版本的Windows可使用的最大地址範圍是2^32,也就是4GB大小,但這是定址範圍,這些地址里,包括了內存地址,也包括其它地址,比如:顯存,網卡,各種PCI設備等等。
操作系統要訪問外部設備的寄存器、存儲器的時候,是把外部設備的這些資源,映射到某一塊內存地址上,寫某塊內存地址,就是寫對應的寄存器。
所以,硬體本身要保留一些內存地址用於映射硬體內存,結果就是4GB的內存地址里,有一些是不能給物理內存使用的,越是新板子,或者裝了大顯存的板子,映射硬體內存的區域就更大,可用的物理內存地址就越小。
實際上在DOS時代也是這樣的,1MB以下的內存地址里,0xA000-0xFFFF這一塊,就是640K-1M這個區域,也是不能用來給物理內存使用的,這個區域映射了字元模式的顯存。
當然了,32位系統其實也有能力訪問到超過32位(4GB以上)的內存地址的,Linux內核已經實現了,但Windows似乎不打算這麼做,這種技術就是PAE(物理地址擴展),Windows XP以及後續的所有家用版本都不真正支持PAE,據說Windows的server版支持,這一點沒有驗證過。PAE是使用頁交換的方式,單個進程的地址空間(虛擬地址)仍然是4G,但整個系統可以訪問超過4G的物理地址。
所以32位Windows上使用4G內存是必然要浪費一些內存的,我家裡XP可用內存只有1.99GB,因為我顯卡是1G的顯存,顯存映射要佔用物理地址。
如果換64位就沒沒問題了。
-------------------------
為什麼64位就能用上那一塊內存了?解釋一下:
大概畫一個圖,實際上1M以下也有地址變換,我這裡省略了
圖中的數值不一定對應真實值(有一些軟體能顯示出來,忘記叫啥了)
物理地址空間 實際內容
1GB-3GB =&> 物理內存1GB-3GB
3GB-3.5GB =&> 顯存512MB
3.5GB-3.8GB =&> PCI地址
3.8GB-4GB =&> BIOS保留地址
4GB-5GB =&> 物理內存3GB-4GB
在32位環境下丟失的那1GB內存被映射到4-5GB這一段地址上了。
具體要查看哪個設備映射了哪個地址,打開Windows設備管理器,雙擊某個設備,比如顯卡,點「資源」這個標籤,可以看到有一個內存範圍的東西,這裡就標識了哪一段內存地址被映射到顯卡顯存上了
第一段就有128M地址被映射了(我用的是虛擬機)
------------------------------------------------------------
根據@鋼盅郭子 說的,我按照了Buffalo這個虛擬內存工具,有三張圖,先貼一下:
可以看出來系統總可用內存數發生了改變。也就是說Buffalo這個軟體是在Windows內存管理器啟動之前,就已經劃分走了內存,那麼它可能是在系統啟動階段,或者啟動之前(NTLDR階段)就已經佔用了內存,此時是可以用PAE方式划走內存的。這部分內存對於後來啟動的WindowsXP來說是不可見的。並且每次修改都需要重啟。但虛擬機的內存是在運行時可配置的,這就要求虛擬機必須通過Windows的內存管理器分配內存。那麼這樣可以解釋了Buffalo在Windows系統啟動之前(至少是內存管理器啟動之前)就已經取走了內存,那麼它就有能力訪問4G和4G以上內存,但這不是一種通用的做法,因為不能動態調整,每次修改都要重啟。
不能。你可以開PAE識別,但是不能完美利用。
很久以前不懂的時候在Win 2003 上(x86 16G)開了PAE 虛擬了win 2008 (x64 8G),巨卡無比具體細節已記不太清,後來直接重裝成2008 x64了
虛擬機也是通過HOST的底層介面來訪問內存,HOST不能使用的內存虛擬機怎麼使用?
直接重裝一個 64 位系統,連手機都走向 64 位了,還抱著 32 位系統不放,什麼心態?
32位只能用4g就是誤區了吧 pae技術可以支持4g以上內存
不能,親測
推薦閱讀:
※如何在 Windows 7 系統中實現立體聲混音?
※怎麼樣讓 Windows 7 筆記本為手機提供無線 Wi-Fi?
※為什麼 64 位操作系統可以運行 32 位應用程序?
※win7 windows explorer has stooped working是什麼情況?怎麼解決?