![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
![]() |
學校地址:湖南省 長沙市 雨花區 車站南路紅花坡路口 |
因為內存價格的持續走低,目前各大內存廠商相繼推出了單條2GB的DDR2 800內存,這些內存給人 大的感覺就是價格便宜量又足。很多用戶就直接買了兩條2GB的內存,想組成雙通道使用。可拿回家一看,原本4GB的內存容量被識別出來的只有3.2GB左右。通過檢查,發現內存本身并沒有問題。那又是什么吞食了你的內存呢?這就是我們本期將要給大家說清楚的一個問題。
800MB內存被吞食了?
大家或許會發現一種很奇怪的現象,在我們的Windows XP和Vista中,安裝4GB內存后,顯示出來的只有3.2GB左右甚至更少,有800多MB的內存“無緣無故”地消失了,這讓人感覺十分費解,主板和操作系統之所以不能使用全部的4GB內存,問題的根源就在于計算機那32位X86架構。 32位X86架構是指個人電腦的地址總線是32位的,CPU、內存控制器、操作系統都是按32位地址總線設計。32位地址總線可以支持的內存地址代碼是 4096MB,也就是有4GB的地址代碼,可以編4GB個地址。這4GB個地址碼正好可以分配給4GB內存。但是,這4GB個地址碼不能全部分配給安裝在主板上的物理內存。因為個人電腦還有很多設備需要地址代碼,以便CPU可以根據地址碼找到它們,同時CPU和這些設備交換數據需要暫時存放數據的存儲器 ――寄存器,這些寄存器也需要地址代碼。比如硬盤控制器、軟驅控制器、管理插在PCI槽上的 PCI卡的PCI總線控制器,PCI-E總線控制器和PCI-E顯卡,它們都有寄存器都需要系統分配給它們地址代碼。這些地址由系統分配,電腦用戶在使用中感覺不到。這樣一來,當我們為電腦插上總容量為4GB的內存時,就有一部分內存分配不到地址代碼而不能使用。
要深入了解4GB內存之謎,我們就得弄清楚各部件與4GB內存關系,其中涉及到的部件有CPU、內存控制器(Intel平臺集成在北橋,AMD平臺集成在CPU)和操作系統。
CPU、內存控制器、BIOS:能支持4GB
CPU能支持4GB內存
從386時代開始,CPU 的地址總線就是32位的,可以訪問4GB的地址代碼。從奔騰Ⅱ到奔騰Ⅳ,理論上已經可以訪問64GB的地址編碼。后來支持 64位架構的奔騰Ⅳ到現在的酷睿2,地址總線已經升級到64位,64位地址總線可以訪問千億GB的地址編碼。實際上用不到這么多的地址總線,一般用42位足夠了,可以編碼的地址量有4TB。兼容64位架構的CPU用在32位系統時地址總線就縮小為36位。所以現在的CPU支持4GB內存是沒有問題的。
內存控制器的地址總線
與主板安裝的內存直接關聯的是內存控制器。內存控制器一邊管理內存,一邊通過地址總線與CPU通信。內存控制器的地址總線決定了可以支持的內存地址編碼數量,同時內存控制器的實際連接內存的地址線決定了可以支持的內存容量。Intel把內存控制器放在北橋,AMD把內存控制器放在CPU。所以要分開介紹。
1、Intel的內存控制器
由于Intel的內存控制器放在北橋內,內存控制器的改變就與北橋密切相關。從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內存問題依然沒有凸現。
其實,Intel在915時期就提出要解決32位X86架構硬件支持4GB內存的問題。到P965正式解決時,解決方案還是“內存地址映射”。這個方案不是新想出來的,在32位X86架構的服務器系統早已經采用,只是被移植到個人電腦上來。
從64GB的地址空間頂部開始,映射PCI設備的I/O地址,然后映射系統占用的3GB到4GB的地址。把3GB到4GB的這段地址代碼留給安裝在主板上的物理內存,就可以使用安裝的全部內存了。
為什么必須要采用“映射”的辦法?因為內存的編址必須是連續的,不能斷開。而系統的地址空間(也叫邏輯地址)是可以不連續的。就像我們給街道兩邊的房屋號碼牌一樣,編制方案(相當于邏輯地址)可以規劃很大,可以分割。給到這一條街房屋的號碼牌必須是連續的,這是真實的地址,以便于人們按地址尋找房屋。
當然這種“映射”工作還是由BIOS完成。要支持4GB內存,還必須要BIOS支持。
通過內存地址重映射把系統占用的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內存的組合套裝,這也是相當貼心的一個設計。
|