標籤

2008年11月17日 星期一

為什麼OS無法識別4GB的記憶體

http://3g.sina.com.cn/3g/tech/index.php?did=634253&cid=827&cpage=3&sid=0&page=3&pwt=rest3&tid=84&vid=44

記憶體控制器的地址總線  
  與主機板安裝的記憶體直接關聯的是記憶體控制器。記憶體控制器一邊管理記憶體,一邊通過地址總線與CPU通信。記憶體控制器的地址總線決定了可以支援的記憶體地址編碼數量,同時記憶體控制器的實際連接記憶體的地址線決定了可以支援的記憶體容量。Intel把記憶體控制器放在北橋,AMD把記憶體控制器放在CPU。所以要分開介紹。

1、Intel的記憶體控制器
  由於Intel的記憶體控制器放在北橋內,記憶體控制器的改變就與北橋密切相關。我們可以看下面的北橋列表:

表1

  從上面的北橋地址總線發展表可以看出,從P965開始記憶體控制器已經是36位地址總線,可以編64GB的地址代碼,除系統佔用的地址碼,分配給主機板安裝的4GB記憶體綽綽有餘。所以,從P965開始Intel的北橋支援4GB記憶體是沒有問題的。

2、AMD的記憶體控制器
  AMD從支援64位架構的CPU(Athlon64)開始把記憶體控制器集成到CPU。記憶體控制器的地址總線是64位架構的,使用40位,可以支援1000GB的地址編碼。所以,AMD 從Athlon64開始,記憶體控制器支援4GB記憶體也是沒有問題的。

BIOS能支援4GB記憶體  
  BIOS不是主機板廠家自己開發的,BIOS版權控制在AMI等幾個公司。它們與Intel和AMD合作共同開發BIOS。所以當Intel和AMD提出「映射」方式解決4GB記憶體問題,AMI等廠商就會開發出相應的BIOS。早期的BIOS裡面會顯示出「映射」選項,用戶可以開啟或關閉。現在已經是默認開啟,不再顯示這項設置。所以可以說,對於現在的BIOS來講,在支援4GB記憶體方面是沒問題的。

4GB記憶體的「原罪」:X86架構
  CPU和記憶體控制器從硬體上為使用4GB記憶體提供了保障。但是還沒有解決4GB記憶體的問題。障礙來自於個人電腦的體系標準——32位X86架構。早在8086時代,記憶體是銲接在主機板上的,一般也就幾KB的記憶體,IBM規定640KB的地址是最高端,這個地址分配給BIOS,接下來有一段地址分配給系統的顯示設備和I/O設備。電腦的迅速發展很快突破640KB記憶體達到並超過1MB。但是640KB下面這一段地址分配不能改變,因為CPU、DOS操作系統都是從640KB讀取BIOS通過640KB下面的顯示設備暫存地址,I/O設備暫存地址與顯示設備、I/O設備通信、交換數據。如果更改,以前的所有電腦都要作廢。所以必須尋找一個辦法,既不改變640KB地址分配,又可以使用640KB到1MB的記憶體。那就是這種地址分配規則不變,採用「記憶體地址映射」技術,把640KB到500多KB的這一段地址映射到640KB-1MB的空間裡,映射工作由BIOS負責。
操作系統則由兩條DOS命令HIMEM.SYS和EMM386.SYS負責,熟悉DOS的用戶,都會知道這兩條命令。通過映射,就可以讓DOS軟件使用更多的記憶體。記憶體發展到4MB,16MB,都是通過「記憶體映射」技術解決。到現在,個人電腦只要兼容DOS,就必須遵守640KB這種地址記憶體分配規則。  

  奔騰Ⅱ時代,SDRAM記憶體容量達到128MB。那時候的地址總線是32位,最大地址空間是4GB,這時32位X86架構已經完全形成。除保留以前的記憶體地址分配規則外,還要把BIOS地址映射到地址空間的頂端——4GB。一直到815時代的DDR記憶體,915時代的DDR2記憶體。真正使用的記憶體單條最大容量為512MB,系統使用的記憶體不會超過2GB。所以4GB記憶體問題沒有顯現。  945時代時1GB的DDR2記憶體出現後,記憶體控制器的設計者們開始考慮主機板安裝4GB的記憶體條。但當時很少有用戶使用4GB記憶體,4GB記憶體問題依然沒有凸現。

圖1

  其實,Intel在915時期就提出要解決32位X86架構硬體支援4GB記憶體的問題。到P965正式解決時,解決方案還是「記憶體地址映射」。這個方案不是新想出來的,在32位X86架構的服務器系統早已經採用,只是被移植到個人電腦上來。  
從64GB的地址空間頂部開始,映射PCI設備的I/O地址,然後映射系統佔用的3GB到4GB的地址。把3GB到4GB的這段地址代碼留給安裝在主機板上的物理記憶體,就可以使用安裝的全部記憶體了。  

為什麼必須要採用「映射」的辦法?
  因為記憶體的編址必須是連續的,不能斷開。而系統的地址空間(也叫邏輯地址)是可以不連續的。就像我們給街道兩邊的房屋號碼牌一樣,編製方案(相當於邏輯地址)可以規劃很大,可以分割。給到這一條街房屋的號碼牌必須是連續的,這是真實的地址,以便於人們按地址尋找房屋。當然這種「映射」工作還是由BIOS完成。要支援4GB記憶體,還必須要BIOS支援。

圖2

  通過記憶體地址重映射把系統佔用的4GB地址還給物理記憶體,是32位X86架構的規則。AMD也要採用這個規則,雖然它的記憶體控制器集成在CPU內。也正是由於記憶體控制器集成在CPU內,北橋不再含有記憶體控制器。主機板廠家開發AMD平台主機板時,會依據市場定位設計主機板支援的記憶體容量。有支援2GB的,也有支援4GB、8GB或更多。所以AMD平台的4GB問題還要看主機板。

操作系統才是「罪魁禍首」  
  操作系統管理和使用物理記憶體,因此在操作系統內也必須有一個邏輯(虛擬)地址系統,與主機板上的所有存儲地址(包括記憶體的、I/O設備的、BIOS的)對應,也有類似「地址總線」的結構。32位操作系統是按32位地址總線設計,32位的地址暫存器,因此只能管理4GB的地址,去掉系統佔用的,也不能完全使用全部4GB記憶體。個人電腦的32位操作系統都不能支援4GB記憶體,即使是VISTA 32 SP1也不能。VISTA 32 SP1比XP 32 SP3進步一點的是在系統屬性裡面可以顯示實際安裝多少內。
32位的Vista SP1已經能順利識別4GB記憶體,但在任務管理器可以看到系統真正使用的記憶體不到4GB。

  那麼哪些操作系統可以支援並使用4GB記憶體?第一是64位操作系統,因為64位操作系統是按64位地址總線設計的。比如Windows XP 64,Vista 64。第二是具有物理地址擴展功能,並且地址暫存器大於32位的服務器操作系統,但有些具備物理地址擴展的服務器操作系統,由於地址暫存器限於32位也不能支援4GB。
寫在最後,我們可以看出,現在的主機板晶片組或記憶體控制器已經不再是吞食我們記憶體的主要原因。而罪魁禍首則是出在我們使用的32位操作系統上。雖然現在的Vista SP1已經能識別到完整的4GB記憶體,但實際使用的記憶體還是和以前的那3GB左右的沒區別。所以現在來談4GB記憶體的普及依然為時過早。另一方面,有的記憶體廠商為了避免出現記憶體浪費的情況發生,推出了三條1GB記憶體的組合套裝,這也是相當貼心的一個設計。

沒有留言: