能力值:
( LV2,RANK:10 )
|
-
-
2 楼
物理地址空间并不意味着物理内存!!!
按照正常的情况,你安装了多少内存,就应该有多少物理空间,比如你安装了4G内存,那你的物理地址空间就范围就应该是0x00000000--0xFFFFFFFF。但问题是,系统的BIOS,PCI等等硬件会占用一部分物理空间,貌似PCI就会占用好几百M。他们占用这些内存是为了让CPU能按照内存的方式访问硬件,比如计算机启动的时候,BIOS的引导代码不是在内存中的,但由于被映射出来,占用了内存空间,所以对应的物理内存的空间就是空闲,没法使用的。当然这里的映射不是什么MapIoSpace,而是由主板上的ICH,MCH来完成的。
因此你的1.25G如果是被硬件占用了,那就是没法使用的,用MmMapIoSpace也是不行的。
|
能力值:
( LV9,RANK:190 )
|
-
-
3 楼
我安装3GB的物理内存,系统只是使用了2.75GB,我装4GB物理内存系统也只是使用了2.75GB。说明什么?不是说明1.25Gb被空闲了吗?而硬件会占用的一部分物理空间应该是在2.75GB里面,不是吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我前面说的有点欠妥,物理地址空间跟CPU有关,跟多少物理内存无关,在32位非PAE系统下,物理地址空间就是4G。比如PCI占用了高1.25G空间,那你3G或4G内存,都只能用2.75G。
3G的地址空间是0x00000000 -- 0xC0000000。4G的地址空间是0x00000000--0xFFFFFFFF,假设PCI的地址空间是0xB0000000--0xFFFFFFFF。
那你不管3G或4G,都只能用0x00000000--0xB0000000,共2.75G空间
|
能力值:
( LV9,RANK:190 )
|
-
-
5 楼
所以我还是可以把 2.75GB外的物理内存 MapIoSpace 来用!因为MapIoSpace是 建立物理地址到线性地址的映射。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
不可以,你的物理地址空间被PCI占用了,不是说你不能MapIoSpace,而是说你MAP的,不是你的物理内存,而是PCI的空间,你读写的,不是那个被占用的1.25G物理内存,而是硬件的地址空间。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
既然你知道MapIoSpace是建立物理地址到线性地址的映射,那你就应该明白,不是建立物理内存的映射,而是物理地址映射,你MAP成功后,返回了虚拟地址,当你读写这个虚拟地址,CPU会翻译成物理地址,这个物理地址和读写请求会发送到MCH(北桥)中,MCH如果发现这个物理地址被PCI或其他的占用等等,就会直接送往ICH(南桥),否则送往内存条。这个过程不是你控制的,也不是MAP就能解决的。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
老机器也许不能使用被PCI等设备占用的内存地址空间。但是新机器都可以使用的。只要开了PAE,所有的被占用的1.25G左右的内存会被映射到4G-5.25G这个地址范围内的物理内存。所以物理内存4G,实际就是可以使用4G的,分别是0-3.25G的空间和4G以上4G-4.75G左右的空间,当然如果集成显卡占用了部分内存做显存,那么要减掉那一部分显存,实际可用是-0-3.25G,4-4.5G,共3.75G,另外256M给了显卡了。
|
能力值:
( LV9,RANK:190 )
|
-
-
9 楼
那用哪个NT API可以建立物理内存到线性地址的映射?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
直接申请内核非分页内存就可以了。只是不知道你申请1.25G的非分页内存,能否成功。再说你要这么多非分页内存干什么。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
32位win7需要开pae,申请pae管理的内存吧。具体我不知道。64位的win7直接申请1.25G内核非分页内存应该可以成功,因为64位win7可以管理所有4G的物理内存,包括内存地址超过32位的4G-5G这一块的内存。而32位win7对4g-5G这一块的内存只能通过pae扩展来管理,和普通内存的api可能不同。
|
能力值:
( LV9,RANK:190 )
|
-
-
12 楼
我想把它虚拟成一个磁盘或光盘又或USB存储设备,也可以做为磁盘还原程序的位图信息或需要的数据保存。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
软件是搞不定的,这个需要硬件框架来处理,就跟aait说的一样,新机器在PAE的情况下,被占用了内存被映射到高于4G的空间,那是由硬件来保证的。但硬件有没有编程接口可以修改这种映射我就不知道了,这个估计你得去问问intel的南桥北桥了,windows更不用说了。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
windows可以使用,应该有pae扩展的api,你可以查查。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
32位应该申请不了那么大的,WINDOWS留给nonpaged的空间根本就没那么大,好像也就几百M吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
哪个API?
有PAE那就好说了,但PCI占用的问题和把被PCI占用的物理内存映射到其他地址空间那是硬件支持的,如果硬件不支持,有PAE也不好使啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
硬件的问题你不用管,如果硬件不支持,pae返回0,那你还申请什么?如果硬件支持,pae返回有1.25G,你就可以申请,可以使用了啊。具体的api我不清楚,需要查资料。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
MmAllocateContiguousMemorySpecifyCache?
|
能力值:
( LV9,RANK:190 )
|
-
-
19 楼
大家有谁看过 《Windows 内核情景分析》这本书? 那个内存管理一章 说得怎么样? Win7既然识别了是4GB物理内存,那它肯定有4GB的物理内存寻址表,只能用2.75GB,是因为物理内存寻址表只有2.75GB映射到虚拟内存线性地址表。没错吧?
|
能力值:
( LV12,RANK:760 )
|
-
-
20 楼
Win7 32位 你补丁了?
没补丁只是能看看而已~
|
能力值:
( LV9,RANK:190 )
|
-
-
21 楼
《Windows 内核情景分析》这本书讲的是 NT5.0 及以前的内核,Win7的内核已经有变化,只是对理解有帮助而已。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
http://blog.renren.com/share/295612111/6100949794
xp32位下4G内存使用详解,为什么xp配置4G无用
这篇文章讲解得很清楚了。
其中一段话:
微软在Windows上提供了一个简单明了的API组——也就是AWE地址窗口扩展API组,它仅仅由5个API调用组成,包括了核心级和用户级调用,
。。。。。。
通过使用AWE API,核心模式/用户模式可以轻易地突破2GB容量的限制,最高可以达到64GB,如SQL Server就使用了这个AWE API(可设定),从而提高对大容量内存的能力,大大提升了应用软件/系统的性能。
64bit系统中不存在这个问题,实际上,64bit系统不需要PAE的支持,也不支持AWE API,用户模式和核心模式的程序都可以直接访问非常大容量(8TB)的内存空间,
|
|
|