燃 燒
因?yàn)閮?nèi)存價(jià)格的持續(xù)走低,目前各大內(nèi)存廠商相繼推出了單條2GB的DDR2 800內(nèi)存,這些內(nèi)存給人最大的感覺就是價(jià)格便宜量又足。很多用戶就直接買了兩條2GB的內(nèi)存,想組成雙通道使用??赡没丶乙豢?,原本4GB的內(nèi)存容量被識(shí)別出來的只有3 2GB左右。通過檢查,發(fā)現(xiàn)內(nèi)存本身并沒有問題。那又是什么吞食了你的內(nèi)存呢?這就是我們將要給大家說清楚的一個(gè)問題。
800MB內(nèi)存被吞食了
大家或許會(huì)發(fā)現(xiàn)一種很奇怪的現(xiàn)象,在我們的Windows XP和Vista中,安裝4GB內(nèi)存后,顯示出來的只有3,2GB左右甚至更少,有800多MB的內(nèi)存“無緣無故”地消失了,這讓人感覺十分費(fèi)解,主板和操作系統(tǒng)之所以不能使用全部的4GB內(nèi)存,問題的根源就在于計(jì)算機(jī)那32位X86架構(gòu)。32位X86架構(gòu)是指個(gè)人電腦的地址總線是32位的,CPU、內(nèi)存控制器、操作系統(tǒng)都是按32位地址總線設(shè)計(jì)的。32位地址總線可以支持的內(nèi)存地址代碼是4096MB,也就是有4GB的地址代碼,可以編4GB個(gè)地址。這4GB個(gè)地址碼正好可以分配給4GB內(nèi)存。但是,這4GB個(gè)地址碼不能全部分配給安裝在主板上的物理內(nèi)存。因?yàn)閭€(gè)人電腦還有很多設(shè)備需要地址代碼,以便CPU可以根據(jù)地址碼找到它們,同時(shí)CPU和這些設(shè)備交換數(shù)據(jù)需要暫時(shí)存放數(shù)據(jù)的存儲(chǔ)器——寄存器,這些寄存器也需要地址代碼。比如硬盤控制器、軟驅(qū)控制器、管理插在PCI槽上的PCI卡的PCI總線控制器,PCI-E總線控制器和PCI-E顯卡,它們都有寄存器,都需要系統(tǒng)分配給它們地址代碼。這些地址由系統(tǒng)分配,電腦用戶在使用中感覺不到。這樣一來,當(dāng)我們?yōu)殡娔X插上總?cè)萘繛?GB的內(nèi)存時(shí),就有一部分內(nèi)存分配不到地址代碼而不能使用。
要深入了解4GB內(nèi)存之謎,我們就得弄清楚各部件與4GB內(nèi)存關(guān)系,其中涉及到的部件有CPU、內(nèi)存控制器(Intel平臺(tái)集成在北橋,AMD平臺(tái)集成在CPU)和操作系統(tǒng)。
CPU能支持4GB內(nèi)存
從386時(shí)代開始,CPU的地址總線就是32位的,可以訪問4GB的地址代碼。從奔騰Ⅱ到奔騰Ⅳ,理論上已經(jīng)可以訪問64GB的地址編碼。后來支持64位架構(gòu)的奔騰Ⅳ到現(xiàn)在的酷睿2。地址總線已經(jīng)升級(jí)到64位,64位地址總線可以訪問千億GB的地址編碼。實(shí)際上用不到這么多的地址總線,一般用42位足夠了,可以編碼的地址量有4TB。兼容64位架構(gòu)的CPU用在32位系統(tǒng)時(shí)地址總線就縮小為36位。所以現(xiàn)在的CPU支持4GB內(nèi)存是沒有問題的。
內(nèi)存控制器的地址總線
與主板安裝的內(nèi)存直接關(guān)聯(lián)的是內(nèi)存控制器。內(nèi)存控制器一邊管理內(nèi)存,一邊通過地址總線與CPU通信。內(nèi)存控制器的地址總線決定了可以支持的內(nèi)存地址編碼數(shù)量,同時(shí)內(nèi)存控制器的實(shí)際連接內(nèi)存的地址線決定了可以支持的內(nèi)存容量。Intel把內(nèi)存控制器放在北橋,AMD把內(nèi)存控制器放在CPU。所以要分開介紹。
(1)Intel的內(nèi)存控制器
由于Intel的內(nèi)存控制器放在北橋內(nèi),內(nèi)存控制器的改變就與北橋密切相關(guān)。
從P965開始內(nèi)存控制器已經(jīng)是36位地址總線,可以編64G8的地址代碼,除系統(tǒng)占用的地址碼,分配給主板安裝的4GB內(nèi)存綽綽有余。所以,從P965開始InteI的北橋支持4GB內(nèi)存是沒有問題的。
(2)AMD的內(nèi)存控制器
AMD從支持64位架構(gòu)的CPU(Athlon64)開始把內(nèi)存控制器集成到CPU。內(nèi)存控制器的地址總線是64位架構(gòu)的,使用40位,可以支持1000GB的地址編碼。所以,AMD從Athlon64開始。內(nèi)存控制器支持4GB內(nèi)存也是沒有問題的。
BIOS能支持4GB內(nèi)存
BIOS不是主板廠家自己開發(fā)的,BIOS版權(quán)控制在AMI等幾個(gè)公司。它們與Intel和AMD合作共同開發(fā)BIOS。所以當(dāng)InteI和AMD提出“映射”方式解決4GB內(nèi)存問題,AMI等廠商就會(huì)開發(fā)出相應(yīng)的BIOS。早期的BIOS里面會(huì)顯示出“映射”選項(xiàng),用戶可以開啟或關(guān)閉。現(xiàn)在已經(jīng)是默認(rèn)開啟,不再顯示這項(xiàng)設(shè)置。所以可以說,對(duì)于現(xiàn)在的BIOS來講,在支持4GB內(nèi)存方面是沒問題的。
4GB內(nèi)存的“原罪”:X86架構(gòu)
CPU和內(nèi)存控制器從硬件上為使用4GB內(nèi)存提供了保障。但是還沒有解決4GB內(nèi)存的問題。障礙來自于個(gè)人電腦的體系標(biāo)準(zhǔn)一32位X86架構(gòu)。早在8086時(shí)代,內(nèi)存是焊接在主板上的,一般也就11KB的內(nèi)存,IBM規(guī)定640KB的地址是最高端,這個(gè)地址分配給BIOS,接下來有一段地址分配給系統(tǒng)的顯示設(shè)備和IIO設(shè)備。電腦的迅速發(fā)展很快突破640KB內(nèi)存達(dá)到并超過1 MB。但是640KB下面這一段地址分配不能改變,因?yàn)镃PU、DOS操作系統(tǒng)都是從640KB讀取BlOS,通過640KB下面的顯示設(shè)備寄存地址,I/O設(shè)備寄存地址與顯示設(shè)備、I/O設(shè)備通信、交換數(shù)據(jù)。如果更改,以前的所有電腦都要作廢。所以必須尋找一個(gè)辦法。既不改變640KB地址分配,又可以使用640KB到1MB的內(nèi)存。那就是這種地址分配規(guī)則不變,采用“內(nèi)存地址映射”技術(shù),把640KB到500多KB的這一段地址映射到640KB-1MB的空間里,映射工作由BIOS負(fù)責(zé)。操作系統(tǒng)則由兩條DOS命令HIMEM,SYS和EMM386,SYS負(fù)責(zé),熟悉DOS的用戶,都會(huì)知道這兩條命令。通過映射,就可以讓DOS軟件使用更多的內(nèi)存。內(nèi)存發(fā)展到4MB、16MB,都是通過“內(nèi)存映射”技術(shù)解決的。到現(xiàn)在,個(gè)人電腦只要兼容DOS,就必須遵守640KB這種地址內(nèi)存分配規(guī)則。
奔騰Ⅱ時(shí)代,SDRAM內(nèi)存容量達(dá)到1 28MB。那時(shí)候的地址總線是32位,最大地址空間是4GB,當(dāng)時(shí)32位X86架構(gòu)已經(jīng)完全形成。除保留以前的內(nèi)存地址分配規(guī)則外,還要把BIOS地址映射到地址空問的頂端4GB。一直到815時(shí)代的DDR內(nèi)存。915時(shí)代的DDR2內(nèi)存。真正使用的內(nèi)存單條最大容量為512MB,系統(tǒng)使用的內(nèi)存不會(huì)超過2GB。所以4GB內(nèi)存問題沒有顯現(xiàn)。
945時(shí)代時(shí)1GB的DDR2內(nèi)存出現(xiàn)后,內(nèi)存控制器的設(shè)計(jì)者們開始考慮主板安裝4GB的內(nèi)存條。但當(dāng)時(shí)很少有用戶使用4GB內(nèi)存,4GB內(nèi)存問題依然沒有凸顯。
其實(shí),Intel在915時(shí)期就提出要解決32位X86架構(gòu)硬件支持4GB內(nèi)存的問題。到P965正式解決時(shí),解決方案還是“內(nèi)存地址映射”。這個(gè)方案不是新想出來的,在32位X86架構(gòu)的服務(wù)器系統(tǒng)早已經(jīng)采用,只是被移植到個(gè)人電腦上來。
從64GB的地址空間頂部開始,映射PCI設(shè)備的I/O地址,然后映射系統(tǒng)占用的3GB到4GB的地址。把3GB到4GB的這段地址代碼留給安裝在主板上的物理內(nèi)存,就可以使用安裝的全部內(nèi)存了。
為什么必須要采用“映射”的辦法?因?yàn)閮?nèi)存的編址必須是連續(xù)的,不能斷開。而系統(tǒng)的地址空間(也叫邏輯地址)是可以不連續(xù)的。就
像我們給街道兩邊的房屋編號(hào)碼牌一樣,編制方案(相當(dāng)干邏輯地址)可以規(guī)劃很大,可以分割。給這一條街房屋編的號(hào)碼牌必須是連續(xù)的,這是真實(shí)的地址。以便于人們按地址尋找房屋。
當(dāng)然這種“映射”工作還是由BlOS完成。要支持4GB內(nèi)存,還必須要BIOS支持。
通過內(nèi)存地址重映射把系統(tǒng)占用的4GB地址還給物理內(nèi)存,是32位X86架構(gòu)的規(guī)則。AMD也要采用這個(gè)規(guī)則,雖然它的內(nèi)存控制器集成在CPU內(nèi)。也正是由于內(nèi)存控制器集成在CPU內(nèi),北橋不再含有內(nèi)存控制器。主板廠家開發(fā)AMD平臺(tái)主板時(shí),會(huì)依據(jù)市場定位設(shè)計(jì)主板支持的內(nèi)存容量。有支持2GB的,也有支持4GB、8GB或更多。所以AMD平臺(tái)的4GB問題還要看主板。
操作系統(tǒng)才是“罪魁禍?zhǔn)住?/p>
操作系統(tǒng)管理和使用物理內(nèi)存,因此在操作系統(tǒng)內(nèi)也必須有一個(gè)邏輯(虛擬)地址系統(tǒng),與主板上的所有存儲(chǔ)地址(包括內(nèi)存的、I/O設(shè)備的、BIOS的)對(duì)應(yīng),也有類似“地址總線”的結(jié)構(gòu)。32位操作系統(tǒng)是按32位地址總線設(shè)計(jì)32位的地址寄存器,因此只能管理4GB的地址,去掉系統(tǒng)占用的,也不能完全使用全部4GB內(nèi)存。個(gè)人電腦的32位操作系統(tǒng)都不能支持4GB內(nèi)存,即使是VISTA 32 SPl也不能。VISTA 32 SPl比XP 32 SP3進(jìn)步一點(diǎn)的是在系統(tǒng)屬性里面可以顯示實(shí)際安裝多少內(nèi)存。
32位的Vista SPl已經(jīng)能順利識(shí)別4GB內(nèi)存
在任務(wù)管理器可以看到系統(tǒng)真正使用的內(nèi)存不到4GB。
那么哪些操作系統(tǒng)可以支持并使用4GB內(nèi)存?第一是64位操作系統(tǒng),因?yàn)?4位操作系統(tǒng)是按64位地址總線設(shè)計(jì)的。比如Win-dows XP 64,Vista 64。第二是具有物理地址擴(kuò)展功能,并且地址寄存器大于32位的服務(wù)器操作系統(tǒng),但有些具備物理地址擴(kuò)展的服務(wù)器操作系統(tǒng),由于地址寄存器限于32位也不能支持4GB。
寫在最后
我們可以看出,現(xiàn)在的主板芯片組或內(nèi)存控制器已經(jīng)不再是吞食我們內(nèi)存的主要原因。而罪魁禍?zhǔn)讋t是出在我們使用的32位操作系統(tǒng)上。雖然現(xiàn)在的Vista SPI已經(jīng)能識(shí)別到完整的4GB內(nèi)存,但實(shí)際使用的內(nèi)存還是和以前的那3GB左右的沒區(qū)別。所以現(xiàn)在來談4GB內(nèi)存的普及依然為時(shí)過早。另一方面,有的內(nèi)存廠商為了避免出現(xiàn)內(nèi)存浪費(fèi)的情況發(fā)生,推出了三條1GB內(nèi)存的組合套裝,這也是相當(dāng)貼心的一個(gè)設(shè)計(jì)。