其實這是個老問題了,只是剛好最近又有人問到我這個問題。也就是為什麼在他的XP/Vista中,4G的記憶體只看的到3G左右而已。所以我把先前在BBS上寫的文章再拿出來貼到blog做個記錄…
※ 引述《eoda (eoda)》之銘言:
> 32bit OS 的只能定址到 4GB 的實體記憶體,這也是為什麼當你
> 實體記憶體超過 4GB 時預設是無法使用 4GB 以上的實體記憶體
> (因為定址不到)。Intel 在 Pentium Pro 後加上了
> PAE(Physical Address Extension) 增加 4bit 來讓定址能到 64GB。
> 所以以你的例子來說要在 boot.ini 中加上 /PAE 參處才能定址到所
> 有的記憶體。
> [略]
關於這個問題,我有稍微研究過。因為公司買的一批4GB RAM機器讓我花了不少時間解決這個問題,以下是我survey的一點心得,若有錯誤歡迎指教。
很不幸的,雖然32bits的OS可以定址到4GB的RAM,或是透過PAE擴展到36bits的位址線以支援到64GB [1]。但當你在32bits的XP/VISTA上安裝了4GB的RAM時,你在系統(OS)中看到的只會有不到4GB的記憶體(視硬體而定),也就是說你的可用記憶體到不了4GB的,可能是 2.x ~ 3.x GB。
雖然定址空間可以到4GB(或是開啟PAE到64GB)。但別忘了!硬體的記憶體也是需要定址,OS才能存取到的!所以僅管你可以定址到4GB,你也裝了4GB的RAM,但因為要做硬體記憶體映射,所以在4GB頂端的那些定址空間中,有部分的位址會被拿去mapping到hardware的memory,也是是所謂的MMIO (Memory Mapped Input/Output) [2]。
這部分的位址佔用是很恐怖的,光PCI, Chipset, DMI…等,就要用去600~1G以上不等的定址空間(如果有PCI-E的卡更傷,每張要額外佔用256MB的定址空間)。試想,如果你有1GB的定址空間被硬體映射佔用了,那不管你裝了幾GB的RAM,OS最多就只能用剩下的那3G的定址空間,因此你在OS裡當然就只看(抓)到的3G的RAM了,更別提如果是內建顯卡還要分記憶去放材質。
除此之外,因為當初Intel的標準是使用4GB頂端的那些位址(當時覺得沒人會有那麼多的RAM吧 XD),因此就算你的定址空間到64GB,你也裝了超過4G的RAM。但由於定址空間已因MMIO而不連續,所以將導致OS無法使用,所以還是不能使用到4GB以上的RAM。
在現今記憶體越來越便宜,容量越來越大的情況下,這實在是很令人傷心的一件事。因此廠商(Intel)就研發了新的技術來解決這個問題,也就是Memory Remapping [3]。(或稱 Intel Memory Remapping,畢竟Intel的錯誤還是要由他自已來解決XD)。簡單的來說就是可以將MMIO的部分搬移到實體記憶體之上的位址空間。如此一來就不會佔用了實體記憶體的定址空間,自然也就不會有上述問題了。但可惜的是只有伺服器的晶片組或桌上型較新的晶片組/CPU才有這樣的功能。如:
Intel: 955X, 975X, P965和多數的Server Chipset
AMD: Athlon 64以上(AMD的記憶體控制是做在CPU內的,不是在北橋晶片)
NVidia:680i SLI (for Intel CPU)
不過還有很重要的一點,就是作業系統本身支援度的問題。比方說像32bits的XP/Vista,雖然說在"規格"上支援到4GB的RAM(甚至說開啟PAE理論上可以支援到64GB的RAM),但由於作業系統本身對記憶體和Memory Remapping的支援不足,因此不管你怎麼搞,最多最多就是只有3.5GB的RAM出現在OS中(視硬體不同而定)。但像32bits的Windows 2003 Server Standard以上就可以正確的抓到4GB以上的RAM(With PAE mode)。
因此目前想在32bits的OS上使用4GB以上的RAM,以Windows來說只有2003 Server這個選擇,不然就只能選64bits的OS了(64bits的OS也不存在PAE的問題)。
除此之外,驅動程式的支援也是一環,像NVidia之前的driver是無法在4GB以上的位址運作的,因此一但被Remapping到4GB以上的位址就會有問題。(ATI就無此問題,這或許也是server onboard的vga幾乎ati的關係吧)
所以,要能完整的使用超過4GB的RAM,以下項目缺一不可 [4]
1.要有插4GB以上的RAM(廢話)
2.硬體支援Memory Remapping(通常BIOS中會有此選項,或像多數的server chipset預設就是開啟)
3.64bit的作業系統(或32bit+PAE,但XP/Vista支援不足)
4.驅動程式的支援
BTW, 64bits的Windows作業系統是沒有AWE API的,因為它原生就支援到8TB的RAM
References:
[1] PAE – http://en.wikipedia.org/wiki/Physical_Address_Extension
[2] MMIO – http://en.wikipedia.org/wiki/Memory-mapped_IO
[3] Intel® Chipset 4 GB System Memory Support White Paper, February 2005 Revision 1.0, Chapter 4 – http://dlsvr01.asus.com/pub/ASUS/mb/4GB_Rev1.pdf
[4] The system memory that is reported in the System Information dialog box in Windows Vista is less than you expect if 4 GB of RAM is installed – http://support.microsoft.com/?scid=kb%3Ben-us%3B929605&x=12&y=11
在〈“32位元Windows XP和Vista下安裝4G記憶體的問題”〉中有 3 則留言
剛好在找Memory Remap的資料,就看到這一篇文章了,
真是非常受用啊!謝謝學長~
@lucklin
哈哈~沒想到都沒在更新的bolg還能幫上你的忙~~
很棒的文章
非常感謝