Windows8测试版系统下载|预览版

Windows8测试版系统下载预览版

共同期待微软最新操作系统,体验全新概念

Windows8系统下载|主题|测试版|beta|界面

Mac OS X苹果系统下载 安装 帮助

Mac OS X苹果系统下载 安装 帮助

华语界最权威性的"黑苹果"电脑论坛

OS X Lion下载|安装|驱动|软件|帮助

查看: 43488|回复: 25

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

UID
672946
帖子
514
PB币
1357
威望
9
贡献
0
发表于 2009-2-16 19:40:20 |显示全部楼层
本帖最后由 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.
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

UID
672946
帖子
514
PB币
1357
威望
9
贡献
0
发表于 2009-2-16 19:47:01 |显示全部楼层
另外需要补充一点, 论坛上的ramdisk使用方法里面提到, 要启用pae, 一定需要在启动项里面禁用nx和强制启用pae. 这个其实是一个很愚蠢的常识性错误,因为在绝大部分系统上,nx(no-execute)是自动启用的,而当nx启用的时候,pae的kernel本来就是被强制载入的,原因是需要pae kernel提供的额外pte(page table entry)长度来设置nx的bit. 而这个说面里面说为了启用pae反而要禁用nx,完全是根本不理解pae, 而要相信一个连基础都不懂的作者是相当困难的.

Rank: 11Rank: 11Rank: 11

UID
615559
帖子
5477
PB币
1205
威望
149
贡献
0

热心会员

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

UID
672946
帖子
514
PB币
1357
威望
9
贡献
0
发表于 2009-2-16 19:53:18 |显示全部楼层
一直也很怀疑,只知道按照32位寻址,只能达到4G,要超过就必须经叫什么映射之类的技术,但这需要特殊编程设计,除了服务器版本,我们一般的桌面版本,微软是不大肯花那个财力去设计的。
hugarninwow 发表于 2009-2-16 19:48

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

Rank: 11Rank: 11Rank: 11

UID
615559
帖子
5477
PB币
1205
威望
149
贡献
0

热心会员

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

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

Rank: 2Rank: 2

UID
676637
帖子
208
PB币
136
威望
0
贡献
0
发表于 2009-2-16 20:04:02 |显示全部楼层
我只知道要完全利用4G或者更大的内存,必需满足以下条件:
1、Intel主板要965P或者之后
2、操作系统要支持4G或者更大的内存
3、BIOS里面要打开 “内存地址映射”

Rank: 5Rank: 5Rank: 5

UID
77605
帖子
1181
PB币
1308
威望
0
贡献
0
发表于 2009-2-16 20:08:25 |显示全部楼层
不用怀疑其真实性,使用中
"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"

UID
672946
帖子
514
PB币
1357
威望
9
贡献
0
发表于 2009-2-16 20:51:11 |显示全部楼层
不用怀疑其真实性,使用中
cappuccino 发表于 2009-2-16 20:08

如何科学地验证呢?

Rank: 2Rank: 2

UID
366903
帖子
216
PB币
208
威望
10
贡献
0
发表于 2009-2-16 21:06:25 |显示全部楼层
32位的寻址能力.怀疑

党代表

Rank: 2Rank: 2

UID
22662
帖子
320
PB币
618
威望
0
贡献
0
发表于 2009-2-16 21:07:48 |显示全部楼层
我都试用过了  用的还是我识别出来的内存
开始安装好了没在虚拟分区装东西,还以为成功了........ 后来装了200M的东西进去发现内存使用涨了200M........
在装400M 内存占用又涨400M  卸载了虚拟内存分区吐出了600M内存..........

Rank: 1

UID
651869
帖子
123
PB币
-10
威望
0
贡献
0
发表于 2009-2-16 21:39:54 |显示全部楼层
本帖最后由 gejingui 于 2009-2-16 21:46 编辑

正在使用中..

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

Rank: 1

UID
630630
帖子
37
PB币
0
威望
0
贡献
0
发表于 2009-2-16 21:42:36 |显示全部楼层
我装了64位win7 可以支持64位,以前2g开机内存占33%左右,现在4g占27%左右,不过经常蓝屏

Rank: 2Rank: 2

UID
224058
帖子
311
PB币
182
威望
0
贡献
0
发表于 2009-2-16 22:01:54 |显示全部楼层
2G刚刚好 ~呵呵 电子产品 没有必要追求太多 够用就好
Learn to enjoy life

Rank: 7Rank: 7Rank: 7

UID
613472
帖子
1162
PB币
1837
威望
10
贡献
0
发表于 2009-2-16 22:17:24 |显示全部楼层
学习了,不是很明白

UID
672946
帖子
514
PB币
1357
威望
9
贡献
0
发表于 2009-2-17 01:11:41 |显示全部楼层
11# gejingui
你的系统评分这里的截图挺奇怪的啊,我的内存大小后面还有个可用内存大小.
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

远鲨帮

Rank: 5Rank: 5Rank: 5

UID
580824
帖子
666
PB币
236
威望
9
贡献
0
发表于 2009-2-17 01:54:22 |显示全部楼层
ramdisk的确能用剩余的内存 但突破的那部分内存不是当做内存用的,而是作为一个硬盘
你可以把页面文件设置在里面 按照理论这样内存与页面文件数据的交换速度等于内存速度

Rank: 7Rank: 7Rank: 7

UID
259607
帖子
1468
PB币
1213
威望
0
贡献
0
发表于 2009-2-18 14:09:17 |显示全部楼层
很可能楼主是对的~我也看了看 国外的文章~也许所谓的虚拟的磁盘就是自己的已经识别的内存!

Rank: 1

UID
20111
帖子
85
PB币
248
威望
0
贡献
0
发表于 2009-2-28 19:21:25 |显示全部楼层
不错,楼主的文章很有启发性,终于明白自己的机子打开pae后极不能通过ramdisk使用4g内存的原因了。

Rank: 2Rank: 2

UID
173761
帖子
124
PB币
8160
威望
0
贡献
0

元旦节活动勋章

发表于 2009-3-1 01:36:24 |显示全部楼层
6# yuankedi1986

同意!

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

Rank: 1

UID
246380
帖子
26
PB币
208
威望
0
贡献
0
发表于 2009-3-1 03:31:44 |显示全部楼层
主要我怀疑这个东西的真实有效性,网上查了半天,也没找到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程序交互几乎是不可能的事情,看来还得研究保护模式与实模式互相切换的问题啊。

=。=
您需要登录后才可以回帖 登录 | 注册

关闭

临时公告

PCBETA畅游论坛之新手指南
漫游论坛、新手必备之良品。请新注册会员仔细阅读本指南以尽快融入论坛。

查看 »

回顶部
Copyright (C) 2005-2011 pcbeta.com, All rights reserved
Powered by Discuz!  沪ICP备10012085号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
我们的平台:远景在线 | 远景论坛 | 苹果论坛 | Windows8 | Windows7 | Windows Phone论坛 | 电脑硬件