一、4GB地址空間的局限
首先我們還必須要先瞭解兩個概念&
其一是“實體記憶體”。大家常說的實體記憶體就是指安裝在主板上的記憶體條,其實不然,在電腦的系統中,實體記憶體不僅包括裝在主板上的記憶體條(RAM),還應該包括主板BIOS晶片的ROM,顯卡上的顯存(RAM)和BIOS(ROM),以及各種PCI、PCI-E裝置上的RAM和ROM。
其二是“地址空間”。地址空間就是對實體記憶體編碼(地址編碼)的範圍。" ~# R
所謂編碼就是對每一個實體儲存體單元(一個位元組)分配一個唯一的地址號碼,這個過程又叫做“編址”或者“地址映射”。這個過程就好像在日常生活中我們給每家每戶分配一個地址門牌號。與編碼相對應的是“定址”過程——分配一個地址號碼給一個儲存單元的目的是為了便於找到它,完成資料的讀寫,這就是“定址”,因此地址空間有時候又被稱作“定址空間”。系統不僅要給主板上的記憶體條編址,還要給上述的其它實體記憶體編址;它們都被編在同一個地址空間內,編址後的實體記憶體就可以被系統資源使用或佔用。%
從Pentium Pro處理器開始,CPU的地址匯流排已經升級到36位,定址能力達到64GB,按理說CPU支援4GB的記憶體是沒有問題的;因此,晶片集(北橋—MCH)地址匯流排的數量就成了決定實體記憶體地址空間大小的決定性因素。在Intel 945系列和945以前的晶片集,nForce 550系列和550以前的晶片集都只有32條地址線,為系統提供4GB的地址空間,即最高可以安裝4GB的記憶體條。
雖然可以安裝4GB記憶體條,但這4GB的記憶體空間不能全部紛配給記憶體,因為從4GB空間的頂端地址(FFFF_FFFFh)開始向下要有400MB-1GB的地址空間要分配給主板上的其他實體記憶體。
我們可以看到4GB的地址空間可以分為兩大部分,0MB~實體記憶體頂端的地址分配給主板上安裝的實體記憶體,4GB到實體記憶體頂端的地址分配給BIOS(ROM)和PCI/PCI-E裝置的儲存空間。由於這些儲存空間基本上是用於系統的輸入和輸出,所以Intel又把這段地址空間稱之為“MMio”(Memory-Mapped I/O—I/O儲存空間映射)。當系統安裝3GB以下的記憶體時,MMio地區不會與實體記憶體條的地址空間相重疊,作業系統可以訪問幾乎全部的實體記憶體,而作業系統屬性裡顯示的實體記憶體基本接近實際記憶體的容量。!
而當系統安裝上4GB記憶體時,問題出現了。由於位於4GB下面的部分地址空間要優先分配給MMio,記憶體條上對應的這段區間就得不到編址,所以作業系統就不能使用。
嚴格意義上來說,即使安裝2GB記憶體時作業系統也不可能使用到全部的記憶體容量,諸如傳統DOS的UMA區就有部分被佔用的地址空間,但因為被佔用的容量相比之下實在太少,所以就被很多讀者忽略了。MMio佔用的地址空間在256MB~1GB之間,這麼大的“浪費”大家肯定不能“熟視無睹”。
因為受4GB晶片集地址空間的限制(32條地址線的限制),Intel 945系列及以前的晶片集、NVIDIA nForce 550及以前的晶片集都沒有辦法繞過這個限制。具體原因有三方面:其一是晶片集沒有剩餘空間分配來供作業系統來調配;其二是實體記憶體的編址必須是連續的,不能被割斷;其三是系統開機時必需先從4GB的頂端地址(FFFF_FFFFh)讀取BIOS資料, 這是IA32架構和4GB地址空間的局限.
所以建議使用這些晶片集主板的使用者不要安裝4GB的記憶體,這樣會有部分記憶體容量不能被作業系統所使用。而解決4GB記憶體限制的唯一辦法就是擴充地址空間。
二、支援大於4GB記憶體的晶片集和“記憶體重新對應”技術
面對原有晶片集4GB記憶體的局限,Intel和NVIDIA早就開始未雨綢繆,他們對傳統的32位地址匯流排進行了調整,將其升級到36位,並推出了一系列可以突破4GB記憶體限制的晶片集,這就是Intel的965系列以及975系列、NVIDIA的nForce 570/590以及680系列
註:AMD的64位Socket AM2 CPU把記憶體控制器放到CPU中,提供40bit的物理地址匯流排,地址空間可達到1000GB。具體支援的地址空間和記憶體量取決於晶片集及主板的匯流排設計。
從上面的晶片集參數來看,地址匯流排從32位提升到36位,地址空間達到64GB,支援安裝8GB的實體記憶體。但由於IA32架構的規則是開機時必須從4GB的FFFF_FFFFh地址讀取BIOS資訊,儘管晶片集支援的地址空間變大了,且最大支援的實體記憶體容量也達到了8GB(或以上),但從本質上來說仍然不能解決MMio地址佔用4GB記憶體編址的問題。這要怎麼辦呢?.
36位地址匯流排最大可以支援64GB的地址空間,這就為移動MMio地址區提供了條件。現在解決這個問題的辦法就是“記憶體重新對應”技術——就是在IA32架構的基礎上,把BIOS(ROM)和PCI/PCI-E裝置佔用的MMio地址區段重新對應到記憶體條頂端地址以上 (例如4GB以上)的地址空間,從而把IA32架構規定的這一段作業系統不可使用的、位於4GB下面的MMio地址空間回收給實體記憶體使用,保證實體記憶體編址的連續性。
三、BIOS必須支援“記憶體重新對應”
“記憶體重新對應”技術必須通過BIOS完成。所以BIOS必須具有支援記憶體重新對應的功能模組,以便根據使用者安裝的記憶體容量來確定是否需要啟用記憶體重新對應功能。同時,在BIOS的設定選單中也要有“Memory Re-Mapping”的設定選項,使用4GB或者4GB以上記憶體的使用者一定要將此項設定設為“Enable”。
四、解決4GB記憶體問題還需要作業系統支援
我們常使用的案頭作業系統是32位的,支援4GB的地址空間。前面我們介紹瞭解決4GB問題的晶片集是支援64GB地址空間的,在這樣的晶片集主板上安裝32位的作業系統,就只能使用4GB的地址空間,因此安裝4GB記憶體不能使用僅支援4GB地址空間的32位的作業系統。應該使用支援大於4GB地址空間的32位作業系統或64位的作業系統。
五、小結.
1、由於iA32架構要求BIOS(ROM)晶片的地址, PCI、PCI-E儲存空間地址、APCI中斷路由地址等必須佔用從4GB開始以下的256M-1GB空間。這段MMio地址區不能分配給記憶體條。4GB的記憶體條有256MB-1GB的容量不能編址而浪費。&
2、使用4GB或者以上的記憶體條,必須使用地址(編址)空間64GB的晶片集主板。
3、記憶體重新對應就是把被MMio佔用的地址移到記憶體條容量以上的地址空間。)
4、BIOS應具有支援“記憶體重新對應”功能,設定項裡有 Memory Remap Feature 選項,並設定為Enable。
5、必須安裝定址空間大於4GB的作業系統。比如Windows 2000進階伺服器版,以及64位作業系統。
6、所有地址空間為4GB的晶片集(Intel945和nForce550之前的),和32位作業系統均不能利用“記憶體重新對應”技術解決4GB記憶體問題