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. ================================================================
對於針對消費性市場的x86 Windows XP/Vista/7來說,4GB位址以上是刻意被封印忽略的化外之地,因此有些驅動程式或BIOS就會打到這塊的主意,而且因為作業系統刻意不管,因此也沒有統一機制來跟作業系統報備並由作業系統仲裁使用,更不用說來自微軟、ODM製造商跟電腦品牌商的事前測試跟驗證了,這是部分相衝問題的來源之所在。
如果想查出問題在何處,方向上可以試試在32-bit Windows Server下有沒有相同問題,或是安裝Gavotte Ramdisk 1.0.4096.5,在確認Ramdisk的磁碟label是RamDisk-PAE的情況下,複製檔案到Ramdisk且把它塞滿,過程中看看顯示器有沒有閃爍或亂碼的情況,然後正常操作電腦或放一陣子後再跑個binary檔案比較,看看Ramdisk中的所有檔案跟原始檔案是否相同,有沒有被改動過的情況。