deepxw 发表于 2009-4-17 23:11

破除惯性思维 - 32位Windows 上4GB 内存问题的解释汇总

本帖最后由 deepxw 于 2009-5-10 12:21 编辑

1)为什么32位的系统可以使用超过4GB的内存?
只要CPU、主板、操作系统都支持并启用PAE(物理地址扩展),那么此时的物理内存地址总线就是36位。
2^36 = 68719476736 = 64 GB

另外,当前的x64并非真正使用64位的地址总线,而是48位,所以内存上限是 2^48。

所以,现在的32位系统并非纯正的“32位”;x64并非纯正的"64位"。


2)为什么Windows 2003 32位版本最高可以支持128GB内存?
20090417修正 by fujianabc:
自P4、K8以后的32位CPU,物理地址地址都是40位,所以可以支持128GB。
详细见此贴。


3)为什么主板支持4GB内存,并且已经安装上4GB内存,但32位Windows只能使用3.1GB?
原因有两个:
3.a, 受限于Windows 的许可证限制。
Windows内核会在系统启动时检查当前操作系统的许可,从中确定当前允许使用的物理内存最大值。
例如Windows XP/Vista许可的上限为4GB。

3.b, 主板,及其上面的各种PCI设备的资源的限制。
主板必须支持超过4GB以上内存,并且必须支持内存重影射功能。

主板在不支持内存重影射功能时,所有PCI设备的内存地址范围都落在4GB空间内,占用大约750MB的物理地址空间。因此与此相同地址空间的物理内存将不可用。


当主板打开内存重影射功能时,PCI设备的内存地址将被BIOS影射到4GB以上的空间,所以PCI设备此前所占用的地址空间可以空出来而为物理内存使用。此时系统可用的物理内存可以达到接近4GB。


4)为什么有些设备的驱动程序在4GB内存时无法正常工作?
如3所示,设备的内存地址超出4GB,这些旧的驱动无法接收正确的地址。


5)为什么32位的Windows 可以管理超过4GB的内存?
将32位的地址从两层转换改为三层转换。
PDPE/PDE/PTE都扩展到64位。






小虫低吟 发表于 2009-4-17 23:14

以后肯定是64的天下了,就是不知道什么时候开始

gtyy 发表于 2009-4-17 23:28

说的好啊~绝对支持pb81长知识了哦~

tangweichao 发表于 2009-4-17 23:56

不错,学习了,现在理论加实践都有了

lyfzb 发表于 2009-4-18 00:26

不错 目前买4g当3.25用也很好 哈哈

fujianabc 发表于 2009-4-18 04:00

对第二条128GB的解释有些不太能接受:

按你的这样说的话,在没破解过内核也没开pae的32位xp上如果装了两个独立的CPU(xp pro可以支持双CPU的),那么就能用3.25*2=6.5GB内存了?

两个8086并在一起就能用2MB内存了?

fujianabc 发表于 2009-4-18 04:52

本帖最后由 fujianabc 于 2009-4-18 05:00 编辑

关于那个128GB的由来,我google了一下,发现36位寻址都是老概念了,先见

http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/mem-mgmt.doc

里面提到
As hardware has evolved, the number of address bits has increased, leading to larger physical address spaces and potentially greater amounts of RAM. Current x86 CPUs use 32, 36, or 40 bits for physical addresses in the modes that Windows supports, although the chipsets that are attached to some 40-bit processors limit the sizes to fewer bits. Current releases of 32-bit Windows support a maximum of 37 bits of physical address for use as general-purpose RAM (more may be used for I/O space RAM), for a maximum physical address space of 128 GB. (These values may increase in the future.)

也就是x86 cpu其实除了32bit 36bit的寻址外,还有40位寻址的cpu,由于各种原因(系统和主板),x86 windows只能通过PAE用到37位(不是36位)

再查了一下amd的介绍,发觉其实从K8开始,cpu就是40位寻址的了。而之后所有支持64位的cpu寻址位数都>=40bit。

见http://en.wikipedia.org/wiki/X86中的表格

由此可见,在32位模式下,现在的cpu其实都能通过PAE到237=128GB,很多server 2003/2008版本上64GB内存(包括一些64位版本)的限制也只不过是微软故意搞出来的。

爱睡觉的龙 发表于 2009-4-18 06:36

这回学到了

pansf 发表于 2009-4-18 08:06

学习一下,谢谢了。

jhonwh 发表于 2009-4-18 08:49

科学解释啊,感觉跟我当初在学校学的一样,不过忘了……

oolongsmu 发表于 2009-4-18 09:22

大力支持

lumstar 发表于 2009-4-18 09:28

楼主专业,学习了

seocpu 发表于 2009-4-18 09:34

非常感谢!支持下
















迅雷6

我的青春谁做主

moyawang 发表于 2009-4-18 09:44

非常感谢~~~~慢慢学习~~~~~~~

deepxw 发表于 2009-4-18 11:27

关于那个128GB的由来,我google了一下,发现36位寻址都是老概念了,先见

http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/mem-mgmt.doc

里面提到


也就是x86 cpu其实 ...
fujianabc 发表于 2009-4-18 04:52 https://bbs.pcbeta.com/images/common/back.gif


感谢你的指正。

那个观点是几年前在一个老外的网站看到的。

deepxw 发表于 2009-4-18 11:30

本帖最后由 deepxw 于 2009-4-18 11:42 编辑

对第二条128GB的解释有些不太能接受:

按你的这样说的话,在没破解过内核也没开pae的32位xp上如果装了两个独立的CPU(xp pro可以支持双CPU的),那么就能用3.25*2=6.5GB内存了?

两个8086并在一起就能用2MB内存 ...
fujianabc 发表于 2009-4-18 04:00 https://bbs.pcbeta.com/images/common/back.gif

操作系统不使用PAE内核,虚拟地址的上限是4G。

XP pro只能一个物理CPU, 核心无限。

8086并不支持SMP,芯片组也没有提供相应的功能。

zhengyanglin 发表于 2009-4-18 12:30

说的好啊~绝对支持长知识了哦~

fujianabc 发表于 2009-4-18 18:50



XP pro只能一个物理CPU, 核心无限。
deepxw 发表于 2009-4-18 11:30 https://bbs.pcbeta.com/images/common/back.gif

home是一个cpu,pro是两个cpu

核心都没有限制

547426 发表于 2009-4-18 21:10

有条件的上64位,支持的更好

myyongji 发表于 2009-4-18 21:58

感觉还是欠缺点东西,PAE模式来运行程序是很废资源和吃力不讨好的。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 破除惯性思维 - 32位Windows 上4GB 内存问题的解释汇总