APP下载

大容量内存系统的管理

2014-07-28孙梅王超

电脑知识与技术 2014年16期
关键词:大容量磁盘内核

孙梅 王超

摘要:实验室准备批量更新硬件设备,升级到8GB内存。但我们在样机上安装了32位的windows7操作系统,发现可以识别到8G内存,但是只能使用3.5G内存。如此就不能享受大容量内存的优势,更换64位系统肯定能解决这个问题,但是实验室的某些软件在64位环境中却是异常。为了解决这个矛盾,我们做出下列实践。

关键词:PAE;32位;64位

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)16-3821-03

Abstract:The PC in ourLaboratory needs to update to 8GB RAM.But The OS of win7 which is 32bit can only use the 3.5GB RAM,although other RAM can be detected. So we can not enjoy the advantage of Mass RAM.It is well-known that 64Bit OS support more than 8GB RAM. But some of our APP can notrun well in 64Bit system . We make research agendason solving the problem.

Key words: PAE;32bit;64bit

半导体器件价格的下降目前还是遵守摩尔定律,大容量、高速内存的普及势不可挡。但是目前却出现了类似上世纪的软件危机的状况,软件的应用对大容量内存的使用出现适应困难的局面,虽然出现了64位的操作系统,但是32位的应用程序还是占相当大的比重,完全过渡到64位时代还需要一个过程。如何更快的融合进64位系统就成为了研究的热点。

1 分析原因

上世纪80年代从386开始,就已经有了32位的CPU,内存地址线是32位,这样理论上最多可寻址4GB的RAM空间,但是主流的应用程序很长一段时间用不上这么大的内存,新千年后进一步普及到了36条地址线,使得理论寻址空间扩展到了128GB,同时也出现了PAE技术,即Physical Address Extension——物理地址扩展。

这样在32位的操作系统中,一些应用程序,主要是驱动程序就对“多余”的地址线进行编程,用来寻址厂商自己设备的存储空间。所以对于一般的用户,微软的windows系统,如XP或win7等,在内核级的代码中对用户能使用的最大内存数作出了限制,这也是出于安全的考虑,因为如果用户的应用程序使用的内存空间和特定程序如驱动程序使用的空间冲突,就很容易频繁发生一致性错误,造成令所有人厌烦的蓝屏现象。

2 解决方案

出于安全的考虑,我们最好选择原生支持大内存的操作系统,例如64位的win7或XP,当然也可以选择32位的windows服务器产品,该类产品对于PAE的支持良好,而且对用户使用的最大内存地址没有限制。对于不玩游戏的用户,真的很适合采用这类服务器产品,本人就是,但它不符合教学大纲,而且在安装windowsLive时出现错误。

我们也尝试安装64位的win7,相对于64位的XP,它的WoW64改进还是蛮大的,WoW64(Windows-on-windows 64-bit)是windows操作系统的一个子系统,理论上它允许我们在所有的64位的windows上执行32位的程序。Intel65(AMD64/X64)上的WoW64不需要模拟指令。WoW64子系统只用通过在32位应用程序和64位windows API之间增加一层,来实现32位环境。 它并不是软件模拟,所以这层的效率消耗在1%以内。但是经过测试,在运行我们的考试软件或者本单位的拨号软件时还是发生了兼容性的问题,而且暂时找不到这些软件的64位的版本。其他的主流软件一般都能找到相应的64位版本,这样就不能保证以后不出现类似的问题。所以我们又需要寻找其他的解决方式。

32位的操作系统也是支持PAE的,只是被限制了[3],如果能破解这个限制就可同时解决兼容性和应用大容量内存的问题了。通过与windows Server 2008内核类比,我们寻找破解win7系统内核的方法。这种方法难度较大,但带来的不兼容性则小的多,并且可以完美支持多至 128G 的内存!他的具体做法如下:为避免原始内核被破坏,首先复制系统内核文件 ntkrnlpa.exe,并命名为 ntkr128g.exe,之后的修改都在 ntkr128g.exe 上进行。用 hex 编辑器打开 ntkr128g.exe,查找下列两个字符串:

特征串1:7C 11 8B 45 FC 85 C0 74 0a

特征串2:7C 10 8B 45 FC 85 C0 74 09

两个特征串在内核中都出现且只出现一次,虽然特征串内容不同,但修改方式相同:把 0x8B 开始的 7 个字节修改成:

后7个字节修改成:B8 00 00 02 00 90 90

对于目前市场上的两个版本的 Vista 和 Windows 7,修改处的文件偏移地址(即 0x8B 字节的位置)分别如下:

接下来测试加载修改后的内核。首先需要为修改后的内核重新计算 checksum 和生成数字签名。在命令行中输入下面3个命令:

editbin /release ntkr128g.exe

makecert -r -ss my -n "CN=My Own Testing Authority"

signtool sign -s my -n "My Own Testing Authority" ntkr128g.exeendprint

上述签名过程需要用到三个命令行工具,其中 editbin 在 Visual Studio 中自带,而 makecert 和 signtool 在 Windows SDK 6.0 中自带,我们安装了 Visual Studio 2008,第一个工具可以在 %VS2008_Dir%\ VC\ Bin\ 中找到,后两个工具可以在 %ProgramFiles%\ Microsoft SDKs\ Windows\ v6.0A\ bin\ 中找到。Visual Studio 2008 Express 和 Windows SDK 6.0 都可以从微软网站免费下载。

最后在系统启动菜单中加入一条新的启动菜单项(需以管理员方式运行命令提示符)

bcdedit /copy {current} /d "Windows 7 With More Than 4GB"

运行成功后,该命令会返回一个 GUID 值,记录下该 GUID 值,并运行下面三条,用之前返回的 GUID 值替换命令中的 guid,而且命令中包含 guid 的大括号也要输入:

bcdedit /set {guid} paeForceEnable

bcdedit /set {guid} kernel ntkr128g.exe

bcdedit /set {guid} testsigning on

最后,重启系统并在启动菜单中选择 "Windows 7 With More Than 4GB" 一项即可。由于修改了内核,系统启动后桌面上会显示“Test Mode”的提示。

3 衍生问题

不过,这个方法也有限制,一些不规范的驱动程序不能支持大于4G的内存,会导致系统崩溃。不过这些主要是一些使用大容量缓存的设备驱动,例如集成显卡或者视频采集卡,他们的缓存都常常超过1GB了,经过测试,在开启cpu的集成核心显卡与独立显卡交火时,就很容易蓝屏,当把核心显卡屏蔽时稳定性就大为提高,基本杜绝了蓝屏,甚至不同品牌内存条的混用也经常成功。而目前需要同时双显卡交火应用的程序很少,在实验室用于教学的软件就更不需要,况且独立显卡的性能就已经很强大了,万一损坏了也很容易更换。

4 总结

对于单个任务,大容量内存的应用意义不大,因为用户程序的任务是向操作系统申请内存的,操作系统总要设定一个可以分配的最大值[4],但是还是能支持64位编程定义的数据类型,保证其在分配内存时地址是连续不被截断的[1]。对于内存读写速度的提升也是没有帮助的,因为速度受限于内存颗粒设计时锁定的频率,且受到主板芯片的影响。但是大容量内存对于操作系统多任务性能的提升却是很明显的,在上程序设计课、操作系统或者数据库等课程时,最多的应用就是IDE如Visual Studio和Eclipse、虚拟机、sqlServer等数据库,这些都是内存消耗的大户[2]。从实际测试情况看,这些应用开启多个实例任务时,四核CPU加上4GB内存还是够用的,不会发生死机的现象,但是任务间的切换就不那么流畅了,因为切换的过程中还是会涉及到读写硬盘的缓存,主流硬盘又是机械硬盘,随着使用次数的最多,性能必然会有损耗。

安装8GB内存条完毕后,打开任务管理器,可以看到8GB物理内存:

8G内存使用后,应该会减少磁盘缓存的读写次数。先来看看内存资源使用情况:

此时我们开启了2个IDE,1个浏览器,2个通讯软件,Windows Live Writer,还有若干小应用程序。已经使用的内存4012M,看来4G内存确实是不够用的。为什么以前不觉得4G不够呢?因为以前开启了这么多程序,页面文件的使用会明显增加,而现在页面文件的使用量查得为147M:

所以物理内存占用更多了。这样带来的直接好处就是程序响应更快。即使开启了多个大内存任务,其使用依然流程,跟仅开启一个这样的任务时没有什么区别。现在使用多个IDE,瞬间切换,立即使用,不会有任何延迟。

我们再查看一下内存资源分配图,其中Standby的内存为3869M。Standby的内存其实就是原来的磁盘缓存数据。接近4G的磁盘缓存,保证了我常用的磁盘文件能以最快的速度读写。这个感受最直观的应该是在游戏中,切换场景的速度明显加快,磁盘读取明显减少,不用长时间等待了。

根据实验室计算机的使用情况,常常会开机八、九个小时供多个批次的学生参加考试,安装了大容量内存后,就可以保持内存中的缓存数据,新批次的学生来运行考试相关的程序不用重新加载,操作快速如旧。

能够保证持续流畅的使用体验,是大容量内存的优势。4GB内存对于运行程序和游戏,确实是足够的。但更多的内存能够提供更流畅的用户体验,可以使PC更像家电,速度体验始终如一。8GB内存是个新的起点,毕竟只够提供4G缓存,16G或更多内存也会有明显效果。配合写缓存和休眠模式,PC的性能可以不再受限于硬盘。

同时,我们将大容量内存模式配置成可选择的,若对程序或设备的稳定性有特殊的要求,开机时任课教师或学生可以在bootLoader选择进入普通模式,这样就和一般的32位win7安装版无异,只能使用4GB以内的RAM。

参考文献:

[1] 陈乐,张延园,樊龙.开发和部署基于windows平台的64位应用程序微处理机[J].微处理机,2008,29(6):136-142.

[2] 张成,高杨.32位Windows下Oracle使用大内存的方法 科技视界[J].科技视界,2012,(25):188-189.

[3] MICROSOFT.inc TechNet技术资源库[EB/OL]http://technet.microsoft.com/zh-cn/library/dn482072.aspx.

[4] 韩敬伟,李树彪.浅析WINDOWS环境下的内存分页机制国外电子测量技术[J]. 国外电子测量技术,2008,27(6):35-38.endprint

上述签名过程需要用到三个命令行工具,其中 editbin 在 Visual Studio 中自带,而 makecert 和 signtool 在 Windows SDK 6.0 中自带,我们安装了 Visual Studio 2008,第一个工具可以在 %VS2008_Dir%\ VC\ Bin\ 中找到,后两个工具可以在 %ProgramFiles%\ Microsoft SDKs\ Windows\ v6.0A\ bin\ 中找到。Visual Studio 2008 Express 和 Windows SDK 6.0 都可以从微软网站免费下载。

最后在系统启动菜单中加入一条新的启动菜单项(需以管理员方式运行命令提示符)

bcdedit /copy {current} /d "Windows 7 With More Than 4GB"

运行成功后,该命令会返回一个 GUID 值,记录下该 GUID 值,并运行下面三条,用之前返回的 GUID 值替换命令中的 guid,而且命令中包含 guid 的大括号也要输入:

bcdedit /set {guid} paeForceEnable

bcdedit /set {guid} kernel ntkr128g.exe

bcdedit /set {guid} testsigning on

最后,重启系统并在启动菜单中选择 "Windows 7 With More Than 4GB" 一项即可。由于修改了内核,系统启动后桌面上会显示“Test Mode”的提示。

3 衍生问题

不过,这个方法也有限制,一些不规范的驱动程序不能支持大于4G的内存,会导致系统崩溃。不过这些主要是一些使用大容量缓存的设备驱动,例如集成显卡或者视频采集卡,他们的缓存都常常超过1GB了,经过测试,在开启cpu的集成核心显卡与独立显卡交火时,就很容易蓝屏,当把核心显卡屏蔽时稳定性就大为提高,基本杜绝了蓝屏,甚至不同品牌内存条的混用也经常成功。而目前需要同时双显卡交火应用的程序很少,在实验室用于教学的软件就更不需要,况且独立显卡的性能就已经很强大了,万一损坏了也很容易更换。

4 总结

对于单个任务,大容量内存的应用意义不大,因为用户程序的任务是向操作系统申请内存的,操作系统总要设定一个可以分配的最大值[4],但是还是能支持64位编程定义的数据类型,保证其在分配内存时地址是连续不被截断的[1]。对于内存读写速度的提升也是没有帮助的,因为速度受限于内存颗粒设计时锁定的频率,且受到主板芯片的影响。但是大容量内存对于操作系统多任务性能的提升却是很明显的,在上程序设计课、操作系统或者数据库等课程时,最多的应用就是IDE如Visual Studio和Eclipse、虚拟机、sqlServer等数据库,这些都是内存消耗的大户[2]。从实际测试情况看,这些应用开启多个实例任务时,四核CPU加上4GB内存还是够用的,不会发生死机的现象,但是任务间的切换就不那么流畅了,因为切换的过程中还是会涉及到读写硬盘的缓存,主流硬盘又是机械硬盘,随着使用次数的最多,性能必然会有损耗。

安装8GB内存条完毕后,打开任务管理器,可以看到8GB物理内存:

8G内存使用后,应该会减少磁盘缓存的读写次数。先来看看内存资源使用情况:

此时我们开启了2个IDE,1个浏览器,2个通讯软件,Windows Live Writer,还有若干小应用程序。已经使用的内存4012M,看来4G内存确实是不够用的。为什么以前不觉得4G不够呢?因为以前开启了这么多程序,页面文件的使用会明显增加,而现在页面文件的使用量查得为147M:

所以物理内存占用更多了。这样带来的直接好处就是程序响应更快。即使开启了多个大内存任务,其使用依然流程,跟仅开启一个这样的任务时没有什么区别。现在使用多个IDE,瞬间切换,立即使用,不会有任何延迟。

我们再查看一下内存资源分配图,其中Standby的内存为3869M。Standby的内存其实就是原来的磁盘缓存数据。接近4G的磁盘缓存,保证了我常用的磁盘文件能以最快的速度读写。这个感受最直观的应该是在游戏中,切换场景的速度明显加快,磁盘读取明显减少,不用长时间等待了。

根据实验室计算机的使用情况,常常会开机八、九个小时供多个批次的学生参加考试,安装了大容量内存后,就可以保持内存中的缓存数据,新批次的学生来运行考试相关的程序不用重新加载,操作快速如旧。

能够保证持续流畅的使用体验,是大容量内存的优势。4GB内存对于运行程序和游戏,确实是足够的。但更多的内存能够提供更流畅的用户体验,可以使PC更像家电,速度体验始终如一。8GB内存是个新的起点,毕竟只够提供4G缓存,16G或更多内存也会有明显效果。配合写缓存和休眠模式,PC的性能可以不再受限于硬盘。

同时,我们将大容量内存模式配置成可选择的,若对程序或设备的稳定性有特殊的要求,开机时任课教师或学生可以在bootLoader选择进入普通模式,这样就和一般的32位win7安装版无异,只能使用4GB以内的RAM。

参考文献:

[1] 陈乐,张延园,樊龙.开发和部署基于windows平台的64位应用程序微处理机[J].微处理机,2008,29(6):136-142.

[2] 张成,高杨.32位Windows下Oracle使用大内存的方法 科技视界[J].科技视界,2012,(25):188-189.

[3] MICROSOFT.inc TechNet技术资源库[EB/OL]http://technet.microsoft.com/zh-cn/library/dn482072.aspx.

[4] 韩敬伟,李树彪.浅析WINDOWS环境下的内存分页机制国外电子测量技术[J]. 国外电子测量技术,2008,27(6):35-38.endprint

上述签名过程需要用到三个命令行工具,其中 editbin 在 Visual Studio 中自带,而 makecert 和 signtool 在 Windows SDK 6.0 中自带,我们安装了 Visual Studio 2008,第一个工具可以在 %VS2008_Dir%\ VC\ Bin\ 中找到,后两个工具可以在 %ProgramFiles%\ Microsoft SDKs\ Windows\ v6.0A\ bin\ 中找到。Visual Studio 2008 Express 和 Windows SDK 6.0 都可以从微软网站免费下载。

最后在系统启动菜单中加入一条新的启动菜单项(需以管理员方式运行命令提示符)

bcdedit /copy {current} /d "Windows 7 With More Than 4GB"

运行成功后,该命令会返回一个 GUID 值,记录下该 GUID 值,并运行下面三条,用之前返回的 GUID 值替换命令中的 guid,而且命令中包含 guid 的大括号也要输入:

bcdedit /set {guid} paeForceEnable

bcdedit /set {guid} kernel ntkr128g.exe

bcdedit /set {guid} testsigning on

最后,重启系统并在启动菜单中选择 "Windows 7 With More Than 4GB" 一项即可。由于修改了内核,系统启动后桌面上会显示“Test Mode”的提示。

3 衍生问题

不过,这个方法也有限制,一些不规范的驱动程序不能支持大于4G的内存,会导致系统崩溃。不过这些主要是一些使用大容量缓存的设备驱动,例如集成显卡或者视频采集卡,他们的缓存都常常超过1GB了,经过测试,在开启cpu的集成核心显卡与独立显卡交火时,就很容易蓝屏,当把核心显卡屏蔽时稳定性就大为提高,基本杜绝了蓝屏,甚至不同品牌内存条的混用也经常成功。而目前需要同时双显卡交火应用的程序很少,在实验室用于教学的软件就更不需要,况且独立显卡的性能就已经很强大了,万一损坏了也很容易更换。

4 总结

对于单个任务,大容量内存的应用意义不大,因为用户程序的任务是向操作系统申请内存的,操作系统总要设定一个可以分配的最大值[4],但是还是能支持64位编程定义的数据类型,保证其在分配内存时地址是连续不被截断的[1]。对于内存读写速度的提升也是没有帮助的,因为速度受限于内存颗粒设计时锁定的频率,且受到主板芯片的影响。但是大容量内存对于操作系统多任务性能的提升却是很明显的,在上程序设计课、操作系统或者数据库等课程时,最多的应用就是IDE如Visual Studio和Eclipse、虚拟机、sqlServer等数据库,这些都是内存消耗的大户[2]。从实际测试情况看,这些应用开启多个实例任务时,四核CPU加上4GB内存还是够用的,不会发生死机的现象,但是任务间的切换就不那么流畅了,因为切换的过程中还是会涉及到读写硬盘的缓存,主流硬盘又是机械硬盘,随着使用次数的最多,性能必然会有损耗。

安装8GB内存条完毕后,打开任务管理器,可以看到8GB物理内存:

8G内存使用后,应该会减少磁盘缓存的读写次数。先来看看内存资源使用情况:

此时我们开启了2个IDE,1个浏览器,2个通讯软件,Windows Live Writer,还有若干小应用程序。已经使用的内存4012M,看来4G内存确实是不够用的。为什么以前不觉得4G不够呢?因为以前开启了这么多程序,页面文件的使用会明显增加,而现在页面文件的使用量查得为147M:

所以物理内存占用更多了。这样带来的直接好处就是程序响应更快。即使开启了多个大内存任务,其使用依然流程,跟仅开启一个这样的任务时没有什么区别。现在使用多个IDE,瞬间切换,立即使用,不会有任何延迟。

我们再查看一下内存资源分配图,其中Standby的内存为3869M。Standby的内存其实就是原来的磁盘缓存数据。接近4G的磁盘缓存,保证了我常用的磁盘文件能以最快的速度读写。这个感受最直观的应该是在游戏中,切换场景的速度明显加快,磁盘读取明显减少,不用长时间等待了。

根据实验室计算机的使用情况,常常会开机八、九个小时供多个批次的学生参加考试,安装了大容量内存后,就可以保持内存中的缓存数据,新批次的学生来运行考试相关的程序不用重新加载,操作快速如旧。

能够保证持续流畅的使用体验,是大容量内存的优势。4GB内存对于运行程序和游戏,确实是足够的。但更多的内存能够提供更流畅的用户体验,可以使PC更像家电,速度体验始终如一。8GB内存是个新的起点,毕竟只够提供4G缓存,16G或更多内存也会有明显效果。配合写缓存和休眠模式,PC的性能可以不再受限于硬盘。

同时,我们将大容量内存模式配置成可选择的,若对程序或设备的稳定性有特殊的要求,开机时任课教师或学生可以在bootLoader选择进入普通模式,这样就和一般的32位win7安装版无异,只能使用4GB以内的RAM。

参考文献:

[1] 陈乐,张延园,樊龙.开发和部署基于windows平台的64位应用程序微处理机[J].微处理机,2008,29(6):136-142.

[2] 张成,高杨.32位Windows下Oracle使用大内存的方法 科技视界[J].科技视界,2012,(25):188-189.

[3] MICROSOFT.inc TechNet技术资源库[EB/OL]http://technet.microsoft.com/zh-cn/library/dn482072.aspx.

[4] 韩敬伟,李树彪.浅析WINDOWS环境下的内存分页机制国外电子测量技术[J]. 国外电子测量技术,2008,27(6):35-38.endprint

猜你喜欢

大容量磁盘内核
强化『高新』内核 打造农业『硅谷』
解决Windows磁盘签名冲突
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
修改磁盘属性
12-20升大容量PET瓶装式吹瓶机
磁盘组群组及iSCSI Target设置
创建VSAN群集
微生物内核 生态型农资
能变出雨衣的18升大容量背包