Windows家族的作業系統核心最主要是根據一個License Value(就是微軟授權你能用多少記憶體)、來決定使用者手中的版本可以管理多少實體記憶體/實體位址,例如32位元Windows 7 Starter Edition的2GB、32位元Windows 2000 Advanced Server的8GB32位元Windows Server 2003 R2 Enterprise的64GB、Windows 7 x64 Home Basic的8GB、x64 Home Premium的16GB....等。

[註]:用2^32=4GB的計概數學來解釋32位元作業系統的實體記憶體管理上限,是把問題太過簡化了,詳情請參考這裡的說明

關於License Value以及ReadyFor4GB實作所基於的原理,可以參考這個國外強者的網站GeoffChappell.com,這是最原始的一切資訊出處,因為這位仁兄耐心下去trace Windows的核心程式碼,才找出解除32位元Vista/Windows 7封印的方式,也才有大陸端的ReadyFor4GB程式及台灣的4GBPatch等自動化工具的誕生。

Licensed Memory in 32-bit Windows Vista

對近五、六年推出的Intel/AMD處理器來說,只要主機板廠/系統廠不要沒事找事BIOS預設把XD/NX(處理器硬體防止緩衝溢位惡意攻擊)功能關掉,從XP SP2之後到Vista/Win7(32位元版)的設計,預設都是會自動啟動PAE核心(參考資料),但是上面卻又安了一道4GB的封印。要移除封印,不管是手動用十六進位編輯器去改,或是運用ReadyFor4GB/4GBPatch這類的自動修改工具,針對PAE核心檔案 C:\Windows\System32\ntkrnlpa.exe的修改如下(有兩處,改法一樣)

找到 7C (xx) 8B 45 FC 85 C0 74 (yy)
改成 7C (xx) B8 00 00 02 00 90 90

紅色那段寫成x86組合語言意義是:
mov eax,dword ptr [ebp-4]
test eax,eax
je default


原本未修改前執行到此,eax暫存器會被放入ZwQueryLicenseValue所得到的值,也就是每一版Windows作業系統所被微軟授權使用的可管理記憶體大小,如果得到該值為0,也就是一般消費性x86版Windows作業系統的情況,就會啟動封印程序,將所能管理的實體位址限定在4GB,如果是Starter版,則是2GB.....

藍色那段寫成x86組語意義是:
mov eax,00020000h
nop
nop


修改後則變成直接把一個立即值指定給eax暫存器,因此就不去管實際ZwQueryLicenseValue讀到的被授權值是多少了。00020000h就是十進位的131072,單位應該是MB,除以1024,就會算出128,單位則變成GB,也就是讓核心可以管理到上限128GB的實體記憶體。

128GB的緣由:
================================================================
The maximum physical address is calculated as the least of three values: a license limit; a run-time limit; and a hard-coded limit.

For the ordinary kernel, the license value for the maximum physical address is the same as for the total amount of memory, but the PAE kernel has a separate license value, namely Kernel-MaxPhysicalPage. Again, the data for this value is a number of MB. Again, all 32-bit editions of Windows Vista are installed with this value set to 0x1000, representing 4GB.

The run-time limit arises from needing to be sure that an array of MMPFN structures can be set up to represent all the pages of physical memory, one structure per 4KB page, from zero up to the maximum physical address. The kernel’s capacity for such an array depends on how much of the linear address space is already in use. If the size of the largest block of free linear address space divided by the size of an MMPFN structure (0x18 or 0x1C bytes for the ordinary and PAE kernels, respectively) is greater than the maximum physical page determined from the license value, then the licensed maximum certainly cannot be supported and the maximum has to be reduced accordingly.

The preceding calculation also produces an architectural limit on the use of physical memory by 32-bit Windows with a PAE kernel. The largest block of linear address space that is available even this early cannot be as large as 1GB and could be much smaller. Even if it is very nearly 1GB, that’s only enough to fit an MMPFN array for a maximum physical address of 128GB (given that the maximum should be a power of two). This limit is hard-coded in the PAE kernel, as is 4GB for the non-PAE kernel.
================================================================

Windows採用4KB分頁,而作業系統會為每個4KB分頁維護一個MMPFN的資料結構,每個MMPFN結構大小為28bytes,理論上作業系統若分配最多1GB的記憶體來放所需的MMPFN資料結構時,可以有1GB/28bytes = 38347922個MMPFN項目,那理論上作業系統所能夠管理的實體記憶體上限將為:

38347922*4KB ~= 146GB

實務上作業系統所能管理的最大實體記憶體上限值,大都設定在2的冪次方,以便於運算,而最接近146GB的2冪次方為128GB,此時MMPFN資料結構需耗用0.875GB的記憶體。如果是像一般使用者較可能安裝的8GB記憶體,則作業系統需耗用56MB來管理MMPFN的資料結構。

因此128GB是從作業系統本身管理實體記憶體頁面所需的資料結構數量的系統軟體角度算出來的,但是實務上還是要受限於硬體PAE本身設計所支援的上限,也就是64GB。

修改過後的核心,與原先核心並存,再運用Vista/Win 7內建的BCDEDIT新增一個開機選單項目,開機時可以自由選擇用解除封印後的核心運作、或原先被微軟封印的原廠核心運作,不用擔心會破壞原有的環境。如果想刪除,用MSCONFIG或BCDEDIT刪除那個開機選單項目即可,解除封印後的核心檔案刪不刪都沒差,因為一旦沒了開機選單項目,這個核心也無從被載入執行。
回的真詳細~
不知道有沒有人在用這個軟體的??
t90016200 wrote:
回的真詳細~不知道有...(恕刪)

M01站內搜尋或是Google就有蠻多討論是分享使用經驗的嘍!
感謝大大的指導..
之前曾經有用過..
也可成功抓到6G記憶體..
可是似乎無法使用過超越4g以上的記憶體..
若超過系統就會當掉..
我是用WIN7系統.
不知是哪裡設定上的問題..
感覺有點可惜.畢竟已可抓到全部記憶體了..
但似乎無法全部有效使用.殘念...
這裡挺無聊,退駕~~
我之前用READYFOR4G,電腦閒置一段時間後會當機,有時有,有時沒有,後來就不用了。

試試看虛擬磁碟吧!
對於針對消費性市場的x86 Windows XP/Vista/7來說,4GB位址以上是刻意被封印忽略的化外之地,因此有些驅動程式或BIOS就會打到這塊的主意,而且因為作業系統刻意不管,因此也沒有統一機制來跟作業系統報備並由作業系統仲裁使用,更不用說來自微軟、ODM製造商跟電腦品牌商的事前測試跟驗證了,這是部分相衝問題的來源之所在。

通常最大的問題,可能來自UMA內建顯示,在進入作業系統前就先要走了一部分記憶體,Intel/AMD各有各的作法,加上主機板廠的客製,例如某些主機板內顯的顯示記憶體,還可以設定從被定址/remap在4GB位址以上的記憶體中優先撥用。進入作業系統後,驅動程式還可能自行去"玩弄"分頁表,存取4GB位址以上的記憶體,沒有一定規範。

如果想查出問題在何處,方向上可以試試在32-bit Windows Server下有沒有相同問題,或是安裝Gavotte Ramdisk 1.0.4096.5,在確認Ramdisk的磁碟label是RamDisk-PAE的情況下,複製檔案到Ramdisk且把它塞滿,過程中看看顯示器有沒有閃爍或亂碼的情況,然後正常操作電腦或放一陣子後再跑個binary檔案比較,看看Ramdisk中的所有檔案跟原始檔案是否相同,有沒有被改動過的情況。

如果有上述的情況,就不建議去用ReadyFor4GB或4GBPatch了,或是要設定Dump檔在藍畫面BSOD後找出有存取到4GB以上位址的問題程式或衝突/不相容的硬體並排除之。

BlueScreenView 找出Windows「藍白當機畫面」的真正原因,實用的dmp錯誤檢視器
WinDbg 查看Log
透過 WinDbg 程式分析 dump 檔


用了半年有了


每次讀取大約6.5G的東西 在工作


工作時間一整天 早上10點到晚上8點


無當機 無任何狀況

中午吃飯有閒置 2小時

這再次證明 32bit的先天限制說法 根本就是狗屁



唯一點需要注意 卡巴斯機好像不支援 這種改核心的做法

開著卡巴斯機 過沒多久就會當 關掉以後就完全OK

畢竟延伸只是當時為了讓32位元使用高容量記憶體

我是覺得現在這樣搞多少有些問題,某些軟體會出現相衝狀況

若有特別需求,裝64位元作業系統比較實在

不然一般使用者很難把記憶體負載操到4GB以上,4GB真的很夠用了
這裡挺無聊,退駕~~
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 8)

今日熱門文章 網友點擊推薦!