远景寻求正规IDC服务器及带宽赞助赞助远景,在远景上刊登广告@展望 Windows7 远景无限 远景论坛积分规则、等级制度说明
富站长论坛 - 广告街2010 PCBETA版主招聘启事3A网络 1000M双线空间 99元/年远景论坛制度章程(200902)
汕头电信百独1899元保证99.9M赞助远景,在远景上刊登广告@远景苹果主题论坛 Macidea.Com海波 - 远景带宽合作伙伴
返回列表 发帖

真的能突破4g限制吗?ramdisk 4g使用成功的同学能看下吗?

本帖最后由 timchenyx 于 2009-2-16 19:51 编辑

打开资源监视器-内存,看下使用ramdisk 4g后的内存分布情况,见图.


主要我怀疑这个东西的真实有效性,网上查了半天,也没找到ramdisk 4g的详细资料,只是说是一个家伙用MS的ramdisk的sample code改写的.我下了那个sample code,申请内存的代码是直接申请的nonpaged pool(未分页内存),这个内存还是由OS管理的,而且容量是很小的.

我很感兴趣这家伙具体怎么实现跳过OS直接处理4G地址线以上的内存的, 因为据我所知在client版本中,4GB以上地址访问是完全被禁用的,就是说你即使在启动项里面指定用PAE也是无效的.

从下面的资料可以看出,对于超过4GB的部分,kernel根本连PFN(page frame number,cpu用来定位内存位置的结构)都没有建立,而且从bios拿到的多余内存描述符都是直接扔掉的. 如果,假设,这个驱动能够自己调用bios中断,重新拿到内存描述符,并且创建自己的pfn表,然后还要在需要使用的时候调用另一个中断把cpu当前使用的pfn表地址换成自己的,用完了再换回来,但是这样还个严重的问题:如果这个途中来了一个高级别的硬件中断,中断处理程序还是需要老的pfn表,这时候就完了,除非这个驱动能够再截获其他所有的中断处理...这个不敢想象了.

当然,更简单的办法是直接patch kernel,直接就可以用到最高128G,对于vista kernel的patch方法下面的链接里面已经有了.但是,问题是基于binary的patch,是对kernel的具体build敏感的,不同build完全不能混用,即使知道win7的binrary,也不可能同时patch到7000和7022两个build上去.所以也不可能采用这个方法.

so, 我真的不知道他怎么声称做到的.加上网上根本搜索不到相关这个工具的具体技术信息(因为如果这个真的真么神奇,必然有很多高手评论的),而对比下面的这么多严谨的blog,我倾向与怀疑这个东西的真实性.

详细说明可以在很多blog上面看到,大部分是微软内部人事写的.

比如很有名的blog: old new things
http://blogs.msdn.com/oldnewthing/archive/2006/08/14/699521.aspx

还有larry,微软著名的blogger:
http://blogs.msdn.com/larryosterman/archive/2009/01/08/why-do-people-think-that-a-server-sku-works-well-as-a-general-purpose-operating-system.aspx#9302522

还有这篇更是详细地说了为什么会有这个限制,以及提供了一个自己patch kernel甚至可以使用8GB内存的方法.
http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm

另外还有微软网站上的官方文档:

http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2mempr.mspx
"To constrain compatibility issues, Windows XP Service Pack 2 includes hardware abstraction layer (HAL) changes that mimic the 32-bit HAL DMA behavior. The altered HAL grants unlimited map registers when the system is running in PAE mode. In addition, the kernel memory manager ignores any physical address above 4 GB. Any system RAM beyond the 4 GB barrier would be made unaddressable by Windows and be unusable in the system. By limiting the address space to 4 GB, devices with 32-bit DMA bus master capability will not see a transaction with an address above the 4 GB barrier. Because these changes remove the need to double-buffer the transactions, they avoid a class of bugs in some drivers related to proper implementation of double buffering support."

简单翻译下就是从XPSP2开始,kernel的内存管理模块直接忽略任何超过4GB地址线的内存访问,主要原因是很多驱动程序在处理超过4GB地址线内存访问的时候会有bug.
附件: 您需要登录才可以下载或查看附件。没有帐号?入住远景

另外需要补充一点, 论坛上的ramdisk使用方法里面提到, 要启用pae, 一定需要在启动项里面禁用nx和强制启用pae. 这个其实是一个很愚蠢的常识性错误,因为在绝大部分系统上,nx(no-execute)是自动启用的,而当nx启用的时候,pae的kernel本来就是被强制载入的,原因是需要pae kernel提供的额外pte(page table entry)长度来设置nx的bit. 而这个说面里面说为了启用pae反而要禁用nx,完全是根本不理解pae, 而要相信一个连基础都不懂的作者是相当困难的.

TOP

一直也很怀疑,只知道按照32位寻址,只能达到4G,要超过就必须经叫什么映射之类的技术,但这需要特殊编程设计,除了服务器版本,我们一般的桌面版本,微软是不大肯花那个财力去设计的。

TOP

一直也很怀疑,只知道按照32位寻址,只能达到4G,要超过就必须经叫什么映射之类的技术,但这需要特殊编程设计,除了服务器版本,我们一般的桌面版本,微软是不大肯花那个财力去设计的。
hugarninwow 发表于 2009-2-16 19:48

桌面版本里面这个映射功能还是有的,至少在二进制代码里面存在,只不过被禁用了.

TOP

桌面版本里面这个映射功能还是有的,至少在二进制代码里面存在,只不过被禁用了.
timchenyx 发表于 2009-2-16 19:53

受教。跟不上时代了,呵呵。
记得大学时还是8086/80286时代,那时候为了利用1MB内存,老师要我们编程,费老大劲。

TOP

我只知道要完全利用4G或者更大的内存,必需满足以下条件:
1、Intel主板要965P或者之后
2、操作系统要支持4G或者更大的内存
3、BIOS里面要打开 “内存地址映射”

TOP

不用怀疑其真实性,使用中
"I had not known you a month before I felt that you were the last man in the world whom I could ever be prevailed on to marry"

TOP

不用怀疑其真实性,使用中
cappuccino 发表于 2009-2-16 20:08

如何科学地验证呢?

TOP

32位的寻址能力.怀疑

TOP

我都试用过了  用的还是我识别出来的内存
开始安装好了没在虚拟分区装东西,还以为成功了........ 后来装了200M的东西进去发现内存使用涨了200M........
在装400M 内存占用又涨400M  卸载了虚拟内存分区吐出了600M内存..........

TOP

本帖最后由 gejingui 于 2009-2-16 21:46 编辑

正在使用中..

等下传个图..
发送完毕,看图.R是我虚拟的1G内存盘.
WIN7实际识别3G内存
系统识别4G
附件: 您需要登录才可以下载或查看附件。没有帐号?入住远景

TOP

我装了64位win7 可以支持64位,以前2g开机内存占33%左右,现在4g占27%左右,不过经常蓝屏

TOP

2G刚刚好 ~呵呵 电子产品 没有必要追求太多 够用就好
Learn to enjoy life

TOP

学习了,不是很明白

TOP

11# gejingui
你的系统评分这里的截图挺奇怪的啊,我的内存大小后面还有个可用内存大小.
附件: 您需要登录才可以下载或查看附件。没有帐号?入住远景

TOP

ramdisk的确能用剩余的内存 但突破的那部分内存不是当做内存用的,而是作为一个硬盘
你可以把页面文件设置在里面 按照理论这样内存与页面文件数据的交换速度等于内存速度

TOP

很可能楼主是对的~我也看了看 国外的文章~也许所谓的虚拟的磁盘就是自己的已经识别的内存!

TOP

不错,楼主的文章很有启发性,终于明白自己的机子打开pae后极不能通过ramdisk使用4g内存的原因了。

TOP

6# yuankedi1986

同意!

我现在用 p965-ds3 + 4g + win2008 ,完全能识别且能正常使用全部4g。

TOP

主要我怀疑这个东西的真实有效性,网上查了半天,也没找到ramdisk 4g的详细资料,只是说是一个家伙用MS的ramdisk的sample code改写的.我下了那个sample code,申请内存的代码是直接申请的nonpaged pool(未分页内存),这个内存还是由OS管理的,而且容量是很小的.

我很感兴趣这家伙具体怎么实现跳过OS直接处理4G地址线以上的内存的, 因为据我所知在client版本中,4GB以上地址访问是完全被禁用的,就是说你即使在启动项里面指定用PAE也是无效的.


这句话只说对了一半,它给出的sample Code的确是从Nonpagedpool中划分出来的。
但是如果你逆向这类包括这个人所出的商业版,会发现方法是很有意思的,并非你想的这么简单。否则也不至于哪来卖美刀和欧元了。当然就如作者说的一样,的确可能造成设备紊乱,因为获取到的地址的确不敢保证一定是在mainMemory里面。

当然了,我也花了两天研究了一下,在保护模式下面取得内存原始的映射地址的确很困难,本来我想通过Longhorn新增的内核操作函数来把丢失的内存弄回来,发现还是不太可行,难度比起修改License来说,可能更大,进入保护模式以后再去获取APCI,和调用Bios  Interrupt都比较困难,尤其是后者,除了用Vdm的V86方法以外,真的不知道有没有其他替代办法。话说现在找一个16Bits的编译器也算是困难的事情,而且还要和32Bits程序交互几乎是不可能的事情,看来还得研究保护模式与实模式互相切换的问题啊。

=。=

TOP

返回列表