關(guān)于4g內(nèi)存在于32bit系統(tǒng)識(shí)別與利用_第1頁(yè)
關(guān)于4g內(nèi)存在于32bit系統(tǒng)識(shí)別與利用_第2頁(yè)
關(guān)于4g內(nèi)存在于32bit系統(tǒng)識(shí)別與利用_第3頁(yè)
關(guān)于4g內(nèi)存在于32bit系統(tǒng)識(shí)別與利用_第4頁(yè)
關(guān)于4g內(nèi)存在于32bit系統(tǒng)識(shí)別與利用_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、關(guān)于4G內(nèi)存在于32BIT系統(tǒng)識(shí)別與利用關(guān)于4G內(nèi)存在于32BIT系統(tǒng)識(shí)別與利用的討論,轉(zhuǎn)載兩篇較為有價(jià)值的文章                                         

2、60;    對(duì)于4GB內(nèi)存的完全支持始終是我心中的糾結(jié)。64bit系統(tǒng)的龐大與兼容性以及運(yùn)行32位程序時(shí)較低的效率, pc suite糟糕的支持是我都最終不得不割愛(ài)。今晚再次對(duì)于此問(wèn)題的研究發(fā)現(xiàn)了以下的兩篇強(qiáng)文,讓我對(duì)于X86架構(gòu)的內(nèi)存機(jī)制和微軟內(nèi)存拓展支持的伎倆有了較為深刻的理解??钟芯逃诎咧裰殻桓也厮?,轉(zhuǎn)貼于此。歡迎討論。下文從硬件設(shè)計(jì)和軟件開(kāi)發(fā)兩個(gè)角度分別講述了4GB內(nèi)存在計(jì)算機(jī)架構(gòu)中的分配,以及內(nèi)存為何在系統(tǒng)中未被完全識(shí)別的原因,并且探討了PAE方式回收內(nèi)存的原理,在設(shè)備管理器中使用內(nèi)存地址的方式進(jìn)行驗(yàn)證,最后還給出了32bitvista下通過(guò)替換s

3、erver2008文件識(shí)別4GB內(nèi)存的方式。 2樓的文章專門針對(duì)PAE方式利用內(nèi)存的效率進(jìn)行探討原文作者:FreeImagine我的內(nèi)存誰(shuí)也沒(méi)動(dòng):4GB內(nèi)存終極解迷(有圖有真相,最終版。下載位于6樓)原文地址: DDR2-800內(nèi)存的價(jià)格也已經(jīng)跌至百元,越來(lái)越多的朋友為愛(ài)機(jī)裝上了4GB內(nèi)存。隨著4GB電腦的逐漸增加,一個(gè)長(zhǎng)期存在的問(wèn)題又再次被人們所關(guān)注:為何我只能看到3.25GB物理內(nèi)存?無(wú)論是WinXP-32bit還是Vista-32bit,所有的用戶都可以發(fā)現(xiàn)自己的任務(wù)管理器中最多只顯示3.25GB物理內(nèi)存,更甚者還會(huì)有2.8GB甚至更低的數(shù)值出現(xiàn)。我們花錢購(gòu)買的內(nèi)存就這樣白白不見(jiàn)了么?人

4、們當(dāng)然不會(huì)允許這樣的事情發(fā)生,于是各種論壇上展開(kāi)了關(guān)于4GB內(nèi)存的大量討論。重裝系統(tǒng)、打開(kāi)PAE、使用Ramdisk、開(kāi)啟MemoryRemapping等等各種手段層出不窮,所有人都想找回那失去的內(nèi)存。再逐一嘗試之后,人們發(fā)現(xiàn)始終能夠在32bit系統(tǒng)上找到那0.75GB內(nèi)存的下落。人們所寄希望的Vista系統(tǒng)也僅僅是能夠在系統(tǒng)屬性上看到4.00GB的字樣,設(shè)備管理器的物理內(nèi)存依然安逸的保持在3.25GB。期間,各大電腦網(wǎng)站和雜志也刊登了一些關(guān)于這方面的文章,介紹了大量?jī)?nèi)容,最終人們將一切歸罪于32bit操作系統(tǒng)。這樣的審判似乎很正確,畢竟我們可以真實(shí)的看到64bit系統(tǒng)下那3.25GB的物理內(nèi)

5、存顯示,32bit系統(tǒng)顯然貪污掉了0.75GB內(nèi)存。然而事實(shí)上,操作系統(tǒng)卻在這里成為了不折不扣的替罪羊。因?yàn)槭聦?shí)上即使是在64bit系統(tǒng)中,內(nèi)存同樣會(huì)被“侵蝕”;而32bit系統(tǒng)也同樣可以使用超過(guò)4GB的內(nèi)存。為了讓廣大網(wǎng)友都能夠了解事實(shí)究竟,今天筆者就為操作系統(tǒng)客串一次辯護(hù)律師,為其平反這個(gè)內(nèi)存貪墨案,找尋那失落的內(nèi)存。真相永遠(yuǎn)只有一個(gè)!注:文本將以Intel當(dāng)代芯片組的內(nèi)存分配機(jī)制為例講述,其他品牌芯片組在細(xì)節(jié)上或許有與本文所描述不同之處,但結(jié)論上不會(huì)有太大出入。觀念上的錯(cuò)誤:32bit尋址32bit操作系統(tǒng),32bit處理器,有著32bit尋址能力,可以訪問(wèn)232 =4G物理地址,于是擁

6、有識(shí)別4GB內(nèi)存的能力,這似乎是完全順理成章的事情。然而其中有一個(gè)關(guān)鍵,什么是物理地址?物理地址就是物理內(nèi)存的地址?非也。物理地址是指處理器和系統(tǒng)內(nèi)存之間所用到地址,我們可以簡(jiǎn)單理解成是CPU“極方便訪問(wèn)的地址”。這個(gè)地址并非物理內(nèi)存獨(dú)享,盡管通常它基本都會(huì)與物理地址重疊,但也可以根據(jù)需要被其他設(shè)備占用,使得物理內(nèi)存實(shí)際上只能夠占用這4GB地址中的一部分。認(rèn)真看看上面這個(gè)P45芯片組的系統(tǒng)地址區(qū)域圖。圖中的方塊代表的是不同區(qū)域的“地址”,這些地址囊括了一臺(tái)電腦中所有能和操作系統(tǒng)以及芯片組關(guān)聯(lián)的設(shè)備地址,而不僅僅是“物理內(nèi)存地址”。同樣的,那個(gè)4G的紅線代表的是第4G個(gè)Byte的地址,并不是4G

7、B物理內(nèi)存的分界線,盡管內(nèi)存控制器很多時(shí)候確實(shí)會(huì)讓它們重疊在一起。P45芯片組是一款支持36bit尋址的產(chǎn)品,即可以支持64GB地址,但為了去迎合操作系統(tǒng)以及各種軟件,因此需要保證系統(tǒng)運(yùn)轉(zhuǎn)所必須的所有設(shè)備地址都可以在4GB范圍內(nèi)找到,否則會(huì)給硬件32bit驅(qū)動(dòng)程序的制作帶來(lái)很多麻煩,對(duì)驅(qū)動(dòng)程序兼容性造成極大程度的影響。很顯然,讓一個(gè)系統(tǒng)正常運(yùn)行并不僅僅包括內(nèi)存,還要包括各種I/O設(shè)備等。在4GB的尋址范圍內(nèi),物理內(nèi)存實(shí)際上只占據(jù)了一塊,就是那個(gè)被稱為Main Memory AddressRange的區(qū)域(圖中綠色框)。安裝4GB以下內(nèi)存的話,Windows的任務(wù)管理器會(huì)確認(rèn)1MB至TOLUD寄

8、存器數(shù)值作為系統(tǒng)可用的物理內(nèi)存(無(wú)板載顯卡占用)。TOLUD全稱是Top of Low UsableDram,這個(gè)16bit寄存器由BIOS賦予一個(gè)適當(dāng)?shù)臄?shù)值,其含義是4GB地址內(nèi)的可用物理內(nèi)存地址頂端。如果安裝2GB內(nèi)存,那么TOLUD的數(shù)值就是7FFFFFFFh,也就是16進(jìn)制的2GB(加上0地址),任務(wù)管理器一般會(huì)顯示2046MB(見(jiàn)小貼士)。既然內(nèi)存并不能占據(jù)整個(gè)4GB地址,那么其他地址主要被誰(shuí)占據(jù)了呢?小貼士:相信不少非4GB用戶會(huì)發(fā)現(xiàn)自己的內(nèi)存同樣被偷吃了幾MB,比如2GB內(nèi)存用戶通常在設(shè)備管理器中只能看到2047MB或者2046MB內(nèi)存等等。這是因?yàn)檫€有兩塊地址范圍被占據(jù),這兩個(gè)

9、區(qū)域分別是Legacy AddressRange和TSEG,他們會(huì)使用一部分內(nèi)存(比如加載系統(tǒng)BIOS)。由于這兩個(gè)區(qū)域都處于TOLUD以下的地址范圍內(nèi),包含了BIOS等底層部件的Legacy AddressRange更是固定占據(jù)00000000h至000FFFFFh的1MB最底層地址空間,所以無(wú)論系統(tǒng)安裝了多少內(nèi)存,Windows任務(wù)管理器顯示的數(shù)值都會(huì)受到影響。上面的圖中展示了00000000h至FFFFFFFFh共4GB地址的詳細(xì)分配(上圖中方塊大小于占用地址多少無(wú)關(guān)),4GB物理內(nèi)存本身會(huì)自然排布其上,但會(huì)有一些優(yōu)先級(jí)更高的分派來(lái)爭(zhēng)奪物理地址空間,使得真正留下的物理內(nèi)存只在MainMe

10、mory區(qū)域,而其他部分通常會(huì)占據(jù)幾MB最多十幾MB的地址空間,但其中有一個(gè)地址大戶:PCI Memory AddressRange(PCI Memory Range)。內(nèi)存地址“侵蝕者”:PCI Memory Address RangePCI Memory AddressRange這一部分包含了各種I/O設(shè)備,系統(tǒng)總線等部分所需的地址,上面的圖中我們可以看到ICH10的磁盤控制器、PCIE(顯卡)等該系統(tǒng)現(xiàn)有設(shè)備所占據(jù)的地址范圍。這些I/O設(shè)備地址被通過(guò)一種叫做MMIO的技術(shù)使得CPU可以高速便捷的訪問(wèn)它們。根據(jù)設(shè)備狀況的不同,PCI MemoryAddress Range的大小也會(huì)發(fā)生變化

11、,這都一切取決于硬件本身及硬件驅(qū)動(dòng)的需求,例如芯片組、顯卡等等。小貼士:MMIO全稱是Memory-mappedI/O,是一種在CPU和外圍設(shè)備之間執(zhí)行輸入輸出功能的途徑。MMIO簡(jiǎn)單說(shuō)就是將各種外圍設(shè)備的控制寄存器映射到物理內(nèi)存地址上,CPU可以像訪問(wèn)內(nèi)存一樣方便的訪問(wèn)I/O設(shè)備,而無(wú)需重復(fù)再三的去調(diào)用IO控制函數(shù)。CPU會(huì)將自己的尋址空間預(yù)留一塊用于I/O設(shè)備,這也意味著內(nèi)存地址被占用了一塊,但并不會(huì)真的占用物理內(nèi)存存儲(chǔ)空間。沒(méi)有板載顯卡的話,PCI Memory AddressRange基本可以與MMIO區(qū)域劃等號(hào)。MMIO會(huì)占據(jù)TOLUD至4GB的地址空間,不過(guò)這只是將物理地址分派給各

12、種外圍設(shè)備,而不會(huì)真的占用物理內(nèi)存。上圖中的系統(tǒng)只有2GB內(nèi)存,那么TOLUD的值就是2GB(7FFFFFFFh),PCI Memory AddressRange也就自動(dòng)占據(jù)了80000000h至FFFFFFFFh這剩下2GB的地址空間。而且很明顯,它不占用內(nèi)存,因?yàn)楹竺?GB根本沒(méi)有內(nèi)存。MMIO區(qū)域所占據(jù)的地址實(shí)際上對(duì)應(yīng)的物理設(shè)備是外圍設(shè)備的寄存器之類,相對(duì)于這些設(shè)備的寄存器來(lái)說(shuō),MMIO是一塊邏輯地址區(qū)間。上圖展示了P45芯片組(Intel芯片組)的典型MMIO分配,里面包含了大量系統(tǒng)所必須的內(nèi)容:HighBIOS、DMI總線、FSB中斷、APIC、PCIE等多方面的設(shè)備地址。這些都是一

13、款I(lǐng)ntel芯片組正常運(yùn)行所必須的東東,尤其是DMI總線(連接Intel芯片組南北橋)管理著主板上的大多數(shù)IO設(shè)備,它們自然必須在任何時(shí)候都享受著MMIO所分配的地址,而這個(gè)地址范圍通常就是0.75GB。DFI的X58主板給出了一個(gè)很有意思的選項(xiàng),名叫MemoryLowGap。這個(gè)選項(xiàng)可以讓用戶自定義選擇TOLUD的地址,或者說(shuō)自定義選擇MMIO區(qū)域的大小。該選項(xiàng)的范圍為1024M至3072M,即MMIO區(qū)域的大小為1024MB-3072MB??赡苁且?yàn)樾枰成涞轿锢淼刂返募拇嫫鲾?shù)量很大,一些頂級(jí)顯卡的驅(qū)動(dòng)程序會(huì)要求比較大的MMIO區(qū)域支持,例如NVIDIA的GTX280、GTX295之類。4

14、GB內(nèi)存用戶甚至可以發(fā)現(xiàn),當(dāng)更換顯卡后,設(shè)備管理器顯示的物理內(nèi)存大小竟然也會(huì)發(fā)生變化,甚至?xí)档偷?GB以下的數(shù)值,這就是因?yàn)槟承└唠A顯卡申請(qǐng)了更大的MMIO,使得內(nèi)存在4GB以下的地址空間被進(jìn)一步壓縮,我們可以在Windows的設(shè)備管理器內(nèi)看到地址分布的變化。當(dāng)我們把DFI X58主板BIOS中的MemoryLowGap調(diào)至一個(gè)巨額的數(shù)值之后,上圖中的景象就出現(xiàn)了。由于MMIO的進(jìn)一步擴(kuò)張,我們發(fā)現(xiàn)連2GB的內(nèi)存竟然也被侵蝕了好大一塊,50000000h(1280MB)之后的地址就已經(jīng)開(kāi)始被MMIO占據(jù)。4GB地址就像是一輛擁擠的公共汽車,空間總共就那么大,PCIMemory Address

15、 Range擠上去了、滿載了,內(nèi)存自然就上不去了。難道內(nèi)存就這么白費(fèi)了?真是萬(wàn)惡的PCI MemoryAddress Range,萬(wàn)惡的MMIO,萬(wàn)惡的美帝國(guó)主義。先不用著急,繼續(xù)向下看,我們會(huì)把內(nèi)存找回來(lái)的。尋找失落的內(nèi)存讓我們?cè)賮?lái)溫習(xí)一下這張圖,并再次明確一件事情:PCI Memory AddressRange中的MMIO占去的僅僅是物理地址,并不會(huì)去占據(jù)內(nèi)存空間。每個(gè)內(nèi)存顆粒中每個(gè)可以存儲(chǔ)1bit的晶體管本身并不會(huì)擁有地址,所有的地址都是由系統(tǒng)進(jìn)行分配的。這一切的地址排布與操作系統(tǒng)是多少位并無(wú)太多關(guān)聯(lián),而操作系統(tǒng)方面對(duì)MMIO大小的影響主要來(lái)自于系統(tǒng)自身驅(qū)動(dòng)以及設(shè)備驅(qū)動(dòng)程序等方面的要求。

16、因此我們可以發(fā)現(xiàn)在一些默認(rèn)功能開(kāi)啟較少,硬件驅(qū)動(dòng)地址開(kāi)銷較少的系統(tǒng)中(如WinSever),任務(wù)管理器顯示的物理內(nèi)存會(huì)大一些(例如3.6GB)。因?yàn)榇藭r(shí)的MMIO相對(duì)較小。從根本上來(lái)說(shuō),這是芯片組來(lái)自于兼容性方面的考量,必須讓MMIO位于4GB以內(nèi)。由于兼容性的考量,即使使用了64bit操作系統(tǒng)和64bit處理器,MMIO仍然會(huì)被芯片組安置于4GB地址以內(nèi)。MMIO必須占用這段地址空間,且MMIO有著比內(nèi)存更高的優(yōu)先級(jí),物理內(nèi)存又會(huì)老老實(shí)實(shí)的自然排布,這使得當(dāng)安裝了接近4GB或更多物理內(nèi)存時(shí),PCI MemoryAddress Range必然會(huì)與物理內(nèi)存交疊,在整個(gè)物理內(nèi)存地址中形成一個(gè)Mem

17、ory Hole。小貼士:Memory Hole其實(shí)很好理解,就像上面的圖中那樣,MainMemory被分成了兩段,而那段被占用的地址空間就像一個(gè)“洞”(Hole),所以稱之為Hole。上面圖中PCI MemoryAddress Range就充當(dāng)了這個(gè)Hole的角色,它并不占用內(nèi)存存儲(chǔ)空間,只是一個(gè)物理地址上的橫亙,使得Hole的地址與內(nèi)存地址發(fā)生了重疊。芯片組設(shè)計(jì)師們自然有其他的考量去解決物理內(nèi)存地址的分配問(wèn)題,畢竟會(huì)白白浪費(fèi)內(nèi)存的芯片組是不討人喜歡的。既然4GB以下地址如此緊張,我們?yōu)楹尾粚⑽锢韮?nèi)存分配到更高的地址空間去呢?于是,TOM、 TOUUD寄存器以及RECLAIMBASE、REC

18、LAIMLIMIT寄存器誕生了。TOM即“Top ofMemory”,其描述的是系統(tǒng)上所安裝的物理內(nèi)存的總量。TOM寄存器值并不見(jiàn)得代表最高內(nèi)存地址,因?yàn)镸MIO的地址分配要優(yōu)先于TOM寄存器,內(nèi)存地址中基本都會(huì)存在一些hole(PCI Memory AddressRange),所以TOM寄存器的地址最終還需要加上這些hole的地址,從而會(huì)更高一些。TOM寄存器之下將會(huì)有1-64MB內(nèi)存被Manageability Engine占用(圖中的EP-UMA),這是確確實(shí)實(shí)被占有的內(nèi)存。TOUUD即“Top of Upper UsableDRAM”,其描述的是可設(shè)定地址的物理內(nèi)存總量。TOLUD寄存

19、器會(huì)始終在4GB內(nèi)存地址以下工作,但我們知道現(xiàn)在的主流芯片組都能安裝高達(dá)16GB的內(nèi)存,TOUUD就可以解決這個(gè)問(wèn)題。TOUUD會(huì)在4GB以上地址定義物理內(nèi)存范圍,這個(gè)范圍會(huì)從4GB到可用物理內(nèi)存頂端(TOM),經(jīng)過(guò)鑒定的物理內(nèi)存可以直接被使用。這并不受操作系統(tǒng)的影響,而是芯片組的工作,也就是至少BIOS肯定是能夠接受16GB內(nèi)存的。OK,現(xiàn)在我們要回收那塊被“占用”的內(nèi)存地址了。MMIO占據(jù)了TOLUD到4GB的地址空間,所以芯片組需要去回收這段地址重疊的物理內(nèi)存。物理內(nèi)存并不能直接搬家,芯片組會(huì)開(kāi)啟一個(gè)remap window(Main Memory Reclaim AddressRang

20、e),其底端地址由RECLAIMBASE寄存器定義,頂端地址由RECLAIMLIMIT寄存器定義,總大小會(huì)與被MMIO占用的內(nèi)存地址范圍完全相等。然后會(huì)將原本將落在TOLUD至4GB地址之間的物理內(nèi)存回收,重映射到4GB以上EP StolenBase之下的地址空間中,屬于remap window中的地址都會(huì)去對(duì)應(yīng)由TOLUD至4GB的這段物理內(nèi)存。注:由于筆者目前不確定芯片組的Memory Reclaim功能是否可以通過(guò)主板BIOS開(kāi)關(guān),所以某些品牌主板BIOS中的Memory (Hole) Remapping選項(xiàng)可能控制了Memory Reclaim功能的開(kāi)關(guān)。當(dāng)然,我們的任務(wù)管理器中并不能

21、顯示出它們,因?yàn)槲覀兊奈锢淼刂分挥?GB,MMIO會(huì)占據(jù)一部分地址。被置于4GB以上地址區(qū)間的內(nèi)存顯然早已超出了TOLUD。不過(guò)在實(shí)際使用中我們其實(shí)能夠完整利用那些看不到的內(nèi)存,那些位于4GB地址以上的內(nèi)存。想知道究竟?請(qǐng)翻開(kāi)下一頁(yè)。虛擬內(nèi)存與物理地址擴(kuò)展(PAE)虛擬內(nèi)存在早年的計(jì)算機(jī)中,地址的轉(zhuǎn)換很單純,有效地址就直接等于物理存儲(chǔ)器的地址,這適合同一時(shí)間只有一個(gè)進(jìn)程在運(yùn)作。但Windows不會(huì)只有一個(gè)Window,多進(jìn)程并存是現(xiàn)代計(jì)算機(jī)的基本情形。后來(lái)人們決定為每個(gè)進(jìn)程劃定一塊專用內(nèi)存區(qū)域,這樣可以讓多個(gè)進(jìn)程同時(shí)運(yùn)作。但這種分段方式會(huì)讓內(nèi)存在進(jìn)程開(kāi)開(kāi)關(guān)關(guān)的過(guò)程中產(chǎn)生很多碎片,很多小塊內(nèi)存無(wú)

22、法被利用。由于內(nèi)存空間總是相對(duì)有限的,因此應(yīng)用程序也不能瘋狂的將所有東西直接塞進(jìn)內(nèi)存當(dāng)中。同時(shí)我們也不能依賴硬盤這個(gè)緩慢的二級(jí)存儲(chǔ)器去充當(dāng)內(nèi)存,那實(shí)在太慢了。為了調(diào)和這個(gè)矛盾,操作系統(tǒng)都引入了虛擬內(nèi)存機(jī)制。Windows的虛擬內(nèi)存并非簡(jiǎn)單的指位于我們硬盤上的那個(gè)pagefile.sys文件,或者是在內(nèi)存裝不下的時(shí)候用于應(yīng)急的“模擬內(nèi)存”。在當(dāng)代Windows系統(tǒng)中,任何一個(gè)進(jìn)程都會(huì)被賦予其自己的虛擬地址空間,這是一種邏輯地址空間,并不存在實(shí)體,該虛擬地址空間可以覆蓋了一個(gè)相當(dāng)大的范圍。對(duì)于一個(gè)32位進(jìn)程,其可以擁有的虛擬地址空間為232=4GB,典型情況為2GB用戶空間,2GB系統(tǒng)內(nèi)核空間(最

23、大可調(diào)整為3GB用戶空間和1GB內(nèi)核空間),這與安裝了多少物理內(nèi)存沒(méi)有任何關(guān)系。每個(gè)進(jìn)程的虛擬地址空間都會(huì)被標(biāo)上各自的ID,這樣兩個(gè)進(jìn)程之間的虛擬地址就不會(huì)互相干擾。雖然每一個(gè)32位進(jìn)程可使用4GB的地址空間,但并不意味著每一個(gè)進(jìn)程實(shí)際擁有4GB的物理地址空間或使用4GB物理內(nèi)存,虛擬地址僅僅是一種邏輯地址。應(yīng)用程序自然不能總在看不見(jiàn)摸不著的虛擬地址里溜達(dá),最終還是需要實(shí)實(shí)在在的物理存儲(chǔ)器關(guān)聯(lián)。應(yīng)用程序會(huì)去為其虛擬地址申請(qǐng)物理存儲(chǔ)空間,這個(gè)空間通常會(huì)小于應(yīng)用程序的總虛擬空間。這里所說(shuō)的物理存儲(chǔ)器并不局限于計(jì)算機(jī)內(nèi)存,還包括在磁盤空間上創(chuàng)建的頁(yè)文件(pagefile.sys),其存儲(chǔ)空間大小為計(jì)

24、算機(jī)內(nèi)存和頁(yè)文件存儲(chǔ)容量之和(所以Windows自動(dòng)管理時(shí)的pagefile.sys是很大的)。由于通常情況下磁盤存儲(chǔ)空間要遠(yuǎn)大于內(nèi)存的存儲(chǔ)空間,因此頁(yè)文件的使用對(duì)于應(yīng)用程序而言確實(shí)相當(dāng)于透明的增加了其所能使用的內(nèi)存容量,只是速度慢了點(diǎn)。有了虛擬內(nèi)存的存在,程序本身就不用完全裝入內(nèi)存,或者完全存于硬盤,系統(tǒng)會(huì)將目前需要的部分讀入內(nèi)存處理,暫時(shí)不需要的就放在硬盤的頁(yè)文件留作交換。不過(guò)CPU并不能直接去訪問(wèn)磁盤上的信息,每次磁盤訪問(wèn)都必須通過(guò)內(nèi)存,所以若所需的內(nèi)容在磁盤上的頁(yè)文件中,就需要先加載到內(nèi)存然后訪問(wèn)。應(yīng)用程序本身并不關(guān)心自己占用的內(nèi)存大小,它只要求提交物理存儲(chǔ)器,無(wú)論是磁盤還是內(nèi)存。那么

25、自然是盡量分配更多的高速的內(nèi)存作為物理存儲(chǔ)器最佳,所以我們也知道內(nèi)存大的機(jī)器在大量應(yīng)用程序啟動(dòng)時(shí)會(huì)快。當(dāng)一個(gè)進(jìn)程的虛擬內(nèi)存提交的物理存儲(chǔ)器是物理內(nèi)存時(shí),我們就可以省去從磁盤的頁(yè)文件加載數(shù)據(jù)到物理內(nèi)存的時(shí)間,程序的工作效率自然就會(huì)提高。盡管我們的內(nèi)存超出了32bit系統(tǒng)的地址結(jié)構(gòu)范圍,但我們只要將4GB地址以上的物理內(nèi)存為虛擬內(nèi)存所用就不會(huì)浪費(fèi)內(nèi)存了。物理地址擴(kuò)展(PAE)物理地址擴(kuò)展(PAE)是早在Pentium Pro時(shí)代就有的東東,它可以提高IA32處理器應(yīng)對(duì)4GB以上內(nèi)存的能力。當(dāng)啟用PAE之后,Windows操作系統(tǒng)將從兩級(jí)線性地址轉(zhuǎn)換變?yōu)槿龑拥刂忿D(zhuǎn)換,額外的一層轉(zhuǎn)換用于訪問(wèn)超過(guò)4GB

26、地址的物理內(nèi)存,可以將超出4GB地址的物理內(nèi)存映射為應(yīng)用程序進(jìn)程的虛擬地址空間以提升虛擬內(nèi)存性能。地址窗口擴(kuò)展(AWE)更是可以將未分頁(yè)的物理內(nèi)存轉(zhuǎn)換到進(jìn)程的虛擬地址。通過(guò)PAE,我們可以完整的利用到被回收至4GB以上地址的那部分內(nèi)存。至于開(kāi)啟PAE的方法網(wǎng)上遍地都是,我想就不用在這里多費(fèi)筆墨了。而且事實(shí)上,操作系統(tǒng)多數(shù)情況下會(huì)自動(dòng)開(kāi)啟PAE,在使用多核心處理器時(shí),無(wú)論安裝多少物理內(nèi)存,Windows都會(huì)因處理器需要而默認(rèn)開(kāi)啟PAE功能。換句話說(shuō),在這個(gè)雙核心處理器普及的時(shí)代我們基本上不用去考慮PAE的開(kāi)啟問(wèn)題。通過(guò)前面的講述,我們現(xiàn)在明白了三點(diǎn):1、MMIO只占據(jù)地址不占據(jù)內(nèi)存空間;2、現(xiàn)代

27、的芯片組和內(nèi)存控制器完全具備回收(轉(zhuǎn)移)與MMIO交疊的內(nèi)存的能力;3、32bit操作系統(tǒng)通過(guò)PAE可以擁有訪問(wèn)位于4GB地址以上的內(nèi)存的能力。然而多數(shù)人都會(huì)發(fā)現(xiàn),我們雖然已經(jīng)找到了開(kāi)啟4GB大門的鑰匙,但卻始終找不到鑰匙孔。操作系統(tǒng)在多核心狀況下PAE強(qiáng)制開(kāi)啟,處理器早在N年前就支持了PAE 36bit尋址,而PAE也處于活動(dòng)狀態(tài),但我們始終就發(fā)現(xiàn)不了那完整的4GB內(nèi)存。所有人都卡在了這里。事實(shí)上,Windows內(nèi)部的一些設(shè)定(不排除是bug)限制了我們的內(nèi)存使用,桌面版Windows(包括Vista旗艦版)的36bit尋址功能無(wú)論P(yáng)AE是否處于啟用狀態(tài)都無(wú)法訪問(wèn)32bit以上地址,甚至可以

28、說(shuō)PAE根本是無(wú)效的。這樣就無(wú)法去訪問(wèn)被芯片組轉(zhuǎn)移到高地址位的內(nèi)存,哪怕該系統(tǒng)本身完全具備了這樣的能力。而同樣最大只支持4GB物理內(nèi)存的Windows Sever2008標(biāo)準(zhǔn)版卻可以通過(guò)PAE訪問(wèn)高位地址,去享受被芯片組回收和轉(zhuǎn)移那部分內(nèi)存。筆者現(xiàn)在并不知道究竟是那些內(nèi)部設(shè)置或bug限制了桌面系統(tǒng)的PAE功能,但我們有辦法去改變現(xiàn)狀。(XP和2003之間也有類似的關(guān)系)首先我們需要準(zhǔn)備Windows Sever2008標(biāo)準(zhǔn)版的tokens.dat文件和序列號(hào)。在C:WindowsServiceProfilesNetworkServiceAppDataRoamingMicrosoftSoftwa

29、reLicensing中我們可以看到一個(gè)名為tokens.dat的文件,這一個(gè)軟件許可文件,我們需要在他身上做點(diǎn)文章。該文件正常狀態(tài)始終為SoftwareLicensing服務(wù)調(diào)用,是不可修改或替換的,我們可以安全模式或者在禁用SoftwareLicensing服務(wù)之后進(jìn)行替換。我們要做的事情,就是用Windows Sever 2008標(biāo)準(zhǔn)版的許可文件替換Vista的許可文件。當(dāng)文件替換完成之后,注銷或者重啟之后系統(tǒng)會(huì)提示當(dāng)前序列號(hào)(Vista的序列號(hào))不可用,要求輸入新序列號(hào),同時(shí)強(qiáng)制不可進(jìn)入系統(tǒng)(安全模式正常)。此時(shí)我們輸入Windows Sever2008標(biāo)準(zhǔn)版的序列號(hào),無(wú)論激活是否成功,序列號(hào)都會(huì)正確替換,同時(shí)重啟后我們可以正常進(jìn)入系統(tǒng)(若未激活會(huì)提示3天內(nèi)激活)。許可文件對(duì)Vista的一些設(shè)置進(jìn)行了調(diào)整,比如關(guān)閉Aero功能,開(kāi)啟事件跟蹤程序之類Windows Sever2008的特性。當(dāng)然操作系統(tǒng)本身依然是Vista,我們可以打開(kāi)Aero以及關(guān)閉不需要的服務(wù)器功能。歡呼吧,各位!盡管操作系統(tǒng)仍然是Vista,但由于內(nèi)部某些設(shè)定的自動(dòng)調(diào)整使得我們的操作系統(tǒng)完完整整、千真萬(wàn)確的利用到了所有的4GB內(nèi)存。我們的內(nèi)存不僅誰(shuí)也沒(méi)動(dòng),而且安然無(wú)恙的全部回來(lái)了。(若出現(xiàn)只顯示2GB內(nèi)存的狀況,再次重啟即可)看看設(shè)備管理器中的地址分配,MMIO還是牢牢霸占著4GB以下的物理地址,但芯

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論