有疑问?32位操作系统不能超过4GB内存?

32位系统最大只能使用4GB内存,再加上各种设备还要占用一些内存地址,实际上连4GB都没有。有4GB以上内存的朋友们都清楚,32位2000、XP、Vista和7显示的可用内存往往在3GB到3.5GB之间。为此,内存大的兄弟们纷纷上64位操作系统以利用大内存。4GB及以上内存要装64Bit Vista或者7,这貌似已经成为共识了。可是抛开兼容性不说,现在32位程序(Windows应用程序)占到90%以上,能找到的原生64位程序少之又少,64位系统中,大多数程序也不得不32位模拟运行,实际上速度没有32位系统快(效率问题)。这么一说,当前形势下,除了能多用内存以外,64位系统并不如32位系统。

说了那么多,总之来说就一句,32位系统如果内存利用不是障碍,在现在这个32位程序当道的形势下,必然全面超越64位系统。当然64位是趋势,仅仅是趋势,现在还不合适。读到这里,64位系统支持者肯定要喷我:你这不废话吗,32位就支持这么多的内存地址,怎么可能支持超过4GB内存?再换个思路,Windows Server系列系统,2003也好,2008也好,他们的32位的Enterprise和Datacentre版本都支持128GB内存,这怎么解释呢?

好了,现在就说说怎么解决这个问题,先下载这个软件:ReadyFor4GB (百度一下)

下载来解压缩,看到一个Win7去水印,这个先不用管它,进入那个ReadyFor4GB文件夹,管理员身份运行ReadyFor4GB

不用多说了,一看就明白。先点检查,看看实际允许多少,这个131072就是128GB,我这个是破解之后重启了无数次以后的界面。
这样破解了之后还没完,还要以管理员身份运行AddBootMenu那个脚本命令。这个是加入启动菜单的,重启以后会有两个选项,一个是原来系统,一个是破解了支持128GB内存的系统。进入破解后的,看看内存是不是全部支持了。

看看,这下对了吧,我用了3GB内存?嘿嘿,只有我自己知道用到哪去了,这个不多说。这时候还有点小问题,桌面右下角多了几行字:Windows测试模式。真不爽,还记得解压缩出来的Win7去水印吗?运行一下就OK啦。

原理:

32位Vista的4GB限制确实不是核心代码上的限制,而是一些其他的限制:在系统启动的时候,将会读取一个值,这个值最终确定了用户可以使用的内存。这个值叫做Kernel-WindowsMaxMemAllowedx86,通过一个未公开的函数ZwQueryLicenseValue来读取,这个值代表着可用的最大内存,如32位Windows上总是0x1000,单位是MB,也就是代表着4GB。
附概念澄清:32位操作系统并不意味着只能使用4GB内存
从硬件上讲,所谓的计算机位数是指处理器指令的长度,对硬件来说就是通用寄存器(GPR,General Purpose Registers)的宽度,它并不意味着地址总线的宽度,虽然有些情况下它们碰巧也会相等。对于当前的从80386开始算起的大多数x86处理器来说,通用寄存器的长度就是32位,支持x86-64(或者按照更常见的说法:x64)的处理器则可以支持64位的通用寄存器。32位的PowerPC(G5之前)使用32位的通用寄存器,指令长度固定为32位,DEC Alpha64则基于64位通用寄存器,指令为64位。
32位操作系统指的它的指令们只使用32位宽度的GPR,并不意味着它只能的内存寻址就是32位。实际上,早在Pentium Pro(Pentium Pro是一个纯正的32位处理器)上就采用了36位的地址总线(基于这个原因,PAE有时也被称为PAE-36bit),寻址能力就达到了64GB,这个简单有效的扩展就被称为PAE(Phsical Address Extension,物理地址扩展),可见10多年前,x86处理器就能支持这么多的内存了。一再认为32位系统只能支持4GB内存在硬件上就错了。
执行中,eax寄存器中保存了ZwQueryLicenseValue的状态值,在通常情况下,系统跳转到default代码段,不允许使用超过4GB容量内存,通过简单的修改就可以让系统认为ZwQueryLicenseValue返回128GB的可用容量
Opcode Bytes Instruction B8 00 00 02 00 mov eax,00020000h 90 nop 90 nop 为了安全,一般建议,修改后的内核文件名为NTKR128G.EXE.(修改核心文件具有风险,此文仅用于研究用途)

以上说的仅仅适用于Vista和7,至于XP就不清楚了。

提醒一下:如果WIndows Update后,虽然核心文件更新了,但是启动的时候依然是NTKR128G.EXE在起作用,这样没有达到更新的目的。这时用ReadyFor4GB重新制作一个NTKR128G.EXE就可以啦,不过一定把之前的备份好。
虽然知道原理之后还有很多操作,如,数字签名等操作,不过这些都是为人熟知,因此已经有不少的补丁实现了该大内存支持修改理论。文中的ReadyFor4GB这个程序就是把以上叙述自动化了。
(转载请注明出处)

标签: Windows, 32Bit over 4GB

添加新评论