找回我的4G内存一.docx
- 文档编号:30034001
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:14
- 大小:552.45KB
找回我的4G内存一.docx
《找回我的4G内存一.docx》由会员分享,可在线阅读,更多相关《找回我的4G内存一.docx(14页珍藏版)》请在冰豆网上搜索。
找回我的4G内存一
找回我的4G内存——是谁吞噬了内存
(一)
本人并非电脑专业,以下论述是个人学习研究的总结,纯属兴趣爱好,可作参考。
若有错误欢迎指出。
由于前段内存的白菜价,很多人都选择了这种既简单又有效的升级方式。
但是不少人兴冲冲地插上4G的内存后却发现系统其实只能用到3g多一点。
开始很多有电脑知识的人纷纷指出在32位的系统上是不可能用到4g的内存。
理由是,32位的系统只具有2^32=4294967296也就是4g的寻址能力。
但系统有4g的寻址能力并不意味着就可以使用4g的内存。
因为这4g的地址是cpu直接读取的地址,所以除了有通常意义上内存的地址外,还有各种硬件地址,其中最大的是I/O设备的地址,也就是PCIMemoryRange(PCI存储空间,其中包括了显卡、磁盘控制器等等)。
这些硬件的地址占据了本该属于内存的地址。
如图:
图一
PCI:
计算机与其外围部件互联标准
MMIO:
MMIO全称是Memory-mappedI/O,它是PCI规范的一部分,是一种在CPU和外围设备之间执行输入输出功能的途径。
MMIO简单说就是将各种外围设备的控制寄存器映射到物理内存地址上,CPU可以像访问内存一样方便的访问I/O设备,而无需重复再三的去调用IO控制函数。
CPU会将自己的寻址空间预留一块用于I/O设备,这也意味着内存地址被占用了一块,但并不会真的占用物理内存存储空间。
在图一的左图中可看出,4gb的地址中的末端有很大一部分是被用作硬件地址。
只有大概3gb左右空间才真正属于内存。
而不能用于内存使用的那块地址则称为MMIOhole。
这也就是为什么当内存小于3gb时就没有很明显的问题(其实依然有些影响,后面详细叙述)。
我的笔记本是使用intelPM965的芯片组,我就来看看PM965的主内存地址映像(0to4GB)
图二
以下是官方的说明:
Thisaddressrangeextendsfrom1MBtothetopofphysicalmemorythatispermittedtobeaccessiblebythe(G)MCH(asprogrammedintheTOLUDregister).Allaccessestoaddresseswithinthisrangeareforwardedbythe(G)MCHtotheDRAMunlesstheyfallintotheoptionalTSEG,optionalISAHole,oroptionalIGDstolenVGAmemory.
翻译:
该地址区域从1MB扩展到允许MCH/GMCH访问(程序已在TOLUD寄存器中设置好)的物理存储器的顶部。
所有对该区域中地址的访问,均由MCH/GMCH正向引导到主存储区,除非这些地址落到了可选的TSEG、可选的ISA孔、或者可选的IGD窃用VGA存储区。
从官方的说明可以看出不管使用多少内存,总有部分地址是要被占据的。
而当使用了4g的内存时,问题就更加的明显了,除了落在“可选的TSEG、可选的ISA孔、或者可选的IGD窃用VGA存储区”的那部分地址不可用,真正的地址大户“PCI存储空间”(也称为MMIO)也与主内存的地址发生了重叠。
所以这部分的内存地址好像就被占据了,从而无法读取。
我们再来看看PCI存储空间占据的地址到底有多少
图三
粗略的一算,在4GB的空间里大约有900MB的地址都被占据了,所以系统可用的实际空间只有3.1GB左右,这和我现在在系统中看到的3070MB十分的接近了。
综上所述,因为决定32位系统下面4G内存地址空间并不是仅仅是系统内存独占的。
4G内存地址空间是系统中所有存储器的编码范围,这里面既包括有内存编码,也包括了主板BIOS、显卡BIOS、显存以及其他PCI设备的存储器编码。
这是因为Intelx86平台中使用了名为内存映射I/O(MMIO)的技术。
这么看来,32位的系统不能用满4gb的内存似乎是天经地义了。
似乎要使用4g的内存就只能投靠64位的系统了。
但似乎又有两个很明显的反例
1、众所周知,64位的操作系统可以使用4GB甚至更大的内存,可是按照上述芯片组的说明,在4G地址的末端仍然有大约1g的空间被占据(不会因为换了64位系统而改变),如果上诉推理正确的这1GB的空间本因仍然无法使用。
2、更奇怪的是同样是32位的系统,但是windowsserve却可以支持4GB及以上的内存(前提:
硬件支持)。
这又是为何呢?
?
权威参考资料:
1、MobileIntel®965ExpressChipsetFamilyDatasheet
2、Intel主板的内存映射官方pdf
找回我的4G内存——是谁吞噬了内存
(二)
2个月前写过“找回我的4G内存——是谁吞噬了内存
(一)”后来有事一直没空写完。
现在终于有空了,虽然托了久了点,还是有始有终吧。
上一篇说道因为Intelx86平台中使用了名为内存映射I/O(MMIO)的技术,所以4G内存地址空间是系统中所有存储器的编码范围,这里面既包括有内存编码,也包括了主板BIOS、显卡BIOS、显存以及其他PCI设备的存储器编码。
这么看来,32位的系统不能用满4gb的内存似乎是天经地义了。
似乎要使用4g的内存就只能投靠64位的系统了。
但其实“32位”的系统并非真的就是32位。
首先,我们来看看硬件方面。
从主板来看,pm965的芯片组其实是36位地址总线,也就是说支持64g的最大地址空间。
(以下图截至于官方说明文件MobileIntel®965ExpressChipsetFamilyDatasheet)
而cpu方面,从奔腾4开始就以具有40位的寻址能力。
以上两个数据均来自官方。
可见我的本本在pm965的主板加载t7250的情况下,实际的物理地址不是32位(4G)而是36位(64G)。
另一方面,由于内存映射I/O(MMIO)的技术使得在开始4G内存地址空间中必有一部份内存地址与其它存储器编码重叠(重叠的部分称之为MemoryHole)。
这是由主板设计所决定的,与装64位系统和装32位系统无关。
但是我们可以清楚地看到在64位系统下只要硬件支持,就可以完全利用4g甚至超过4g的内存。
这除了64位系统的地址搜寻能力超过4g,还有一个重要原因就是,现在的芯片组和内存控制其有一种叫做MainMemoryReclaimAddressRange。
通过这个技术可将重叠得部分的内存地址印射到4g以上的地址上去,这个功能同样是由硬件决定的与系统无关。
可见64位系统可以真正能用满4g以上的内存很大一部应归功于MemoryReclaim这种能将落在MemoryHole内存回收的技术。
那么是不是32位系统就只具有32位的寻址的能力呢,其实也不然。
在现在的系统中有种叫做物理地址扩展(PAE)的系统。
通过这种技术32位的系统同样可以识别到4G以上的地址空间。
这也是为什么32位的服务器系统可以完整识别4G以上的内存的原因了。
这么看来似乎只要开启PAE似乎vista也可以应用4G的内存。
于是很多人就企图通过开启PAE来实现,可最终都失败了。
其实在vista下PAE是默认开始的有图为证:
可见,vista和服务器版系统同样都是默认开启PAE的。
综上所诉,可见在现在的通常配置下硬件都是支持4G以上的内存。
而系统方面本应也都可以支持的,但是恐怕微软可能出于对系统稳定方面的考虑,限制了最高的内存容量。
原因已明了,其实无论是硬件还是软件,现在32位的系统都是可以支持4G以上的内存的,不行的原因是由于微软的限制。
那么有什么方法可以打破这种限制呢?
找回我的4G内存——物归原主
在上两篇(1、2)文章中介绍了在32位系统中不能使用4G内存的原因。
了解到其实无论是硬件还是软件,现在32位的系统都是可以支持4G以上的内存的,不行的原因是由于微软的限制。
既然原因已明了,那么剩下要做的就是让这4G内存物归原主了。
现在我知道的大概有三种方法可以在32位vista下用到完完整整的4G内存。
Ⅰ、更换windows的许可文件
既然vista与Sever2008的差别完全是由微软造成的,基于vista与sever2008的内核相同,所以有人想到是否可以更换某些文件来实现在vista下像sever2008一样使用到完整的4G内存。
很快这种设想就成为了现实,这个文件就是tokens.dat,也就是系统的许可文件。
似乎将vista的这个文件替换为sever2008的版本后,的确可以识别到完整4G的内存。
但是这个方法有一些致命的落点。
首先,在经过一系列步骤将其替换后,必须重新输入sever2008的序列号激活。
其次,也是我最无法接受的就是在获得完整4G内存的同时,系统很多设定也都被修改了。
例如,在系统更新时就将自动下载sever2008的更新,而系统却是vista,使得有些更新无法使用。
个人认为此法没有什么使用价值,还不如直接装上sever2008来的直接、来的稳定。
它的唯一的意义在于证明了无法使用完整4G内存是由微软的限制造成的。
Ⅱ、使用ReadyFor4GB(此软件的作者是deepxw)
此法与方法一向比就直接的多,通过直接修改WindowsPAE内核文件ntkrnlpa.exe。
从根本上取消了系统对内存上限的限制,使得vista及windows7可以使用到完整的4G以上的内存(上限据说是128G,不过这肯定与硬件有关)。
大约两个月前,此法一出我便迫不急待的去尝试了一下。
确实可以使用到4G的内存,有图为证:
用了大约2天,我又换回了原来的系统,因为出现了多次蓝屏(之前没有,换回后2个月也都没蓝屏过)。
看上网讨论,出现这种情况并不少见。
我觉得是由于硬件驱动不稳定造成的,或许某些硬件驱动不支持4G以上的内存寻址。
最简单的例子就是使用之后daemontool在修改模式下无法启用,而在正常模式下可以。
但是只要在修改后的模式下重装daemontool则无论是在何种模式下都能正常的使用。
这个例子似乎提示某些驱动必须要在修改模式下重新安装才能够正常运行,只是不知这是否只是特例。
所以我建议此法最好是在重装系统后安装驱动之前使用,并在修改模式下安装各种驱动,可能可以更加的稳定。
当然这都只是我的推测,是否如此只有你自己试试才知道。
如果你想尝试可以去deepxw的blog上下载最新的版本,blog上也有使用方法。
如果不明白可以借鉴下面的(此法来自远景):
1、运行ReadyFor4GB.exe,点击应用,提示‘你确认要修改文件ntkrnlpa.exe?
',点击‘是’。
提示‘破解的文件已经另存为***’,点击确定。
------------------------这一步作用是把VISTA的系统文件破解,使之支持4G以上内存。
2、右击‘命令提示符’,选择‘以管理员身份运行’。
------------------------这一步作用是取得修改系统的权限
3、在命令提示符里粘贴命令bcdedit-copy{current}/d"VISTA4GSupported",其中"VISTA4GSupported"引号的内容可以修改为任何你想要的名字。
回车,提示‘已成功复制到********’,其中****是系统返回的一个值,把此值贴入记事本中备用。
------------------------这一步作用是创建一个启动项并为此启动项命名。
这样系统启动的时候就可以选择进入支持4G内存的系统,还是原来的系统。
和装了XP,VISTA双系统一个原理。
4、在命令提示符里输入bcdedit/set{**********}testsigningon,自己把****改为上一步中系统返回的值(贴入记事本中的),然后回车,提示‘操作成功完成’。
------------------------这一步不知道什么作用,猜测是去除微软的数字签名。
5、在命令提示符中输入bcdedit/set{*********}paeforceenable,自己把****改为上一步中系统返回的值(贴入记事本中的),然后回车,提示‘操作成功完成’。
------------------------这一步的作用是强制开启PAE模式,以使系统支持4G以内存。
6、在命令提示符中输入bcdedit/set{********}kernelntkr128g.exe,自己把****改为上一步中系统返回的值(贴入记事本中的),然后回车,提示‘操作成功完成’。
-------------------------这一步的作用是把第一步破解的文件加入启动项。
以上6步基本上就算大功告成了,下面步骤可以选做。
7、在命令提示符中输入bcdedit-timeout2,然后回车,提示‘操作成功完成’。
-------------------------这一步的作用就是设置留给你选项启动项的时间,2是2秒的意思,可以自己修改。
8、在命令提示符中输入bcdedit-displayorder{*****************}-addfirst,自己把****改为上一步中系统返回的值(贴入记事本中的),然后回车,提示‘操作成功完成’。
-------------------------这一步的作用是把自己修改的支持4G的系统放在选项的第一位。
(不一定是默认的启动项)
9、在命令提示符中输入bcdedit-default{*************},自己把****改为上一步中系统返回的值(贴入记事本中的),然后回车,提示‘操作成功完成’。
-------------------------这一步的作用是把支持4G的系统作为默认的启动项。
其实从第七步开始几可以在“高级系统设置”中进行设置。
最后打消一下一些人的顾虑,此法其实是再创建一个新的ntkrnlpa.exe,所以系统原文件都没有被替换。
如果不满意仍可以选择使用正常的方式启动。
Ⅲ、使用SuperSpeed.RamDisk.Plus
这个方法是最早的出现的,也是一个争论很久的话题。
争论主要围绕在是否能够真正的使用到系统无法使用的那部分内存。
这个问题在很多论坛上都有过激烈的争论。
有的人说32位系统是不可能使用4G以上内存的、有的人说自己成功使用了、有的人说自己使用了但是只能使用系统识别的那部分。
第一种说法现在已证明是错误的了,后面两种争论就比较奇怪了,都是亲身使用过为什么会有截然不同的结论呢?
排出使用方法错误,最可能的就是二者使用的软件版本不同,或是在破解是使用了不同版本的序列号。
为了证明此法可行,还是眼见为实吧
可见当ramdisk使用容量发生变化时,系统使用的内存毫无变化。
这个应该可以证明ramdisk使用的内存确实是系统无法使用的那个部分。
有几个是要注意的地方
1、软件的版本很重要。
首先必须是superspeed.randisk.plus9.0.3/9.0.4这两个版本才行(点此下载9.0.3及注册机)。
2、软件安装时的注册序列号也很重要,使用注册机时必须使用randisk.plus的。
如图:
3、安装好好需要设置后才能使用到系统无法使用的那部分内存。
具体方法如图
①打开程序选择file
②开启unmanaged
如图设置,其中reserved(MB)的选项是设置预留一部份RAM给BIOS、显卡等使用,大概是为了加强稳定性,默认是1MB,我使用20MB,应该都没什么问题。
③按此设置之后返回,可看到一个窗口。
其中显示出系统未使用的内存大小(unmanaged),之后在设置RAMDISK时只要不超过这个大小就可以完全使用系统不能识别的内存了。
④之后要做的就是添加ramdisk了,过程很简单,如果不明白就一路使用默认设置就可以了。
其实无论是用后面两种方法中的哪一种,最好都要使用ramdisk。
因为就算对于vista而言,3G内存是完全够用。
1、在32位系统中一个程序最多只能使用2G的内存;2、而留1G给系统因该是够了。
所以还不如创建一个1G左右的ramdisk,把系统页面文件(虚拟内存)和一些临时文件夹(比如ie的临时文件夹)设置在其中,应该能提高浏览网页的速度,也可以完美解决大内存的情况下是否开启虚拟内存的矛盾。
而且我用ramdisk近4个月了,也没有因此发生什么问题。
所以我推荐使用SuperSpeed.RamDisk.Plus来解决32位系统下无法使用4G内存的问题。
最后一起提供本文中提到的附件:
1.ReadyFor4GB_20090422.rar(241)
2.SuperSpeed.RamDisk.Plus.v9.0.3.0.Desktop-Keygen.rar(190)
3.SuperSpeed.RamDisk.Plus.v9.0.3.0.Desktop.rar(235)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 找回 内存