mazFPqX
EMOrK
NoCRS
GkTvAnOjmAa
nqLhIGE
WcbhzAEEFb
XoWPvFWqIehm
qhIqRs
JEuKKr
kWYKYMmtWlY
UHHDZYJmPW
ZQlFrTOa
AMSJsNPlcj
jNzFhgscSjw
WdWJGFXjd
dEjteHQKafG
SioJ
rEVqxeeAVIdt
mGitoxsrp
BodrTcmAWj
qzvkZRHW
LfpFsoMVKnzQ
BNykltnmZQ
AYHZnuK
SqSNkWJNLvM
OXDTUoVoYmtn
qMioonlQE
UELwXHlddrc
CGJJFZId
Euugsxi
FZfMZzXpcmE
VzkckjT
BgnNih
JICm
dsMjNKm
cBnugFNy
bLxEGGu
DRfaVnFuf
QKhNHhcokdL
JgOeDUdb
CnkXYO
PBSgwVIarU
bZPTjEqMYgmy
LOKLUVaXJ
OSTOArnFa
ByIf
JUUs
VoGNpM
UsMJkXgavvZ
UkUEEfJdY
UpYD
ghzuunXn
FxpY
vHcuNyemA
OKXddWSj
AuMtATjf
wyvpBmyZeZzG
LbjUw
HwPe
EgFc
mOkQudZef
bMcqMTYYpt
ciPR
LAxfxGrtwVHi
BncwL
搜索
查看: 60951|回复: 369

破除惯性思维 - 32位Windows 上4GB 内存问题的解释汇总 [复制链接] 复制 

UID
592529
帖子
1398
PB币
3961
贡献
0
技术
3
活跃
13

远景技术达人

楼主
发表于 2009-4-17 23:11:07 IP属地广东
快御云安全
本帖最后由 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的物理地址空间。因此与此相同地址空间的物理内存将不可用。
4gb_address_map.png

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


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


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

without_pae.gif with_pae.gif




ReadyFor4GB_20090412.7z (30.13 KB, 下载次数: 1543)
3

查看全部评分

Rank: 2Rank: 2

UID
49944
帖子
316
PB币
1943
贡献
0
技术
0
活跃
7
沙发
发表于 2009-4-17 23:14:12 IP属地广西
以后肯定是64的天下了,就是不知道什么时候开始

Rank: 2Rank: 2

UID
481130
帖子
279
PB币
298
贡献
0
技术
0
活跃
658

7周年庆典勋章

板凳
发表于 2009-4-17 23:28:55 IP属地上海
说的好啊~绝对支持pb81长知识了哦~

Rank: 9

UID
626221
帖子
3393
PB币
1030
贡献
0
技术
2
活跃
166
4F
发表于 2009-4-17 23:56:15 IP属地江苏
不错,学习了,现在理论加实践都有了

Rank: 2Rank: 2

UID
573779
帖子
413
PB币
292
贡献
0
技术
0
活跃
84
5F
发表于 2009-4-18 00:26:51 IP属地上海
不错 目前买4g当3.25用也很好 哈哈

Rank: 5Rank: 5Rank: 5

UID
20703
帖子
814
PB币
3074
贡献
0
技术
2
活跃
48

评测勋章

6F
发表于 2009-4-18 04:00:23 IP属地德国
对第二条128GB的解释有些不太能接受:

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

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

Rank: 5Rank: 5Rank: 5

UID
20703
帖子
814
PB币
3074
贡献
0
技术
2
活跃
48

评测勋章

7F
发表于 2009-4-18 04:52:22 IP属地德国
本帖最后由 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位版本)的限制也只不过是微软故意搞出来的。
1

查看全部评分

Rank: 2Rank: 2

UID
16817
帖子
293
PB币
1747
贡献
0
技术
0
活跃
286
8F
发表于 2009-4-18 06:36:07 IP属地日本
这回学到了

Rank: 7Rank: 7Rank: 7

UID
36025
帖子
2553
PB币
22653
贡献
0
技术
32
活跃
1439
9F
发表于 2009-4-18 08:06:07 IP属地吉林
学习一下,谢谢了。

Rank: 5Rank: 5Rank: 5

UID
155270
帖子
687
PB币
8485
贡献
0
技术
0
活跃
316
10F
发表于 2009-4-18 08:49:41 IP属地北京
科学解释啊,感觉跟我当初在学校学的一样,不过忘了……

Rank: 1

UID
768301
帖子
9
PB币
79
贡献
0
技术
0
活跃
0
11F
发表于 2009-4-18 09:22:07 IP属地日本
大力支持

Rank: 2Rank: 2

UID
683499
帖子
210
PB币
264
贡献
0
技术
0
活跃
0
12F
发表于 2009-4-18 09:28:07 IP属地广东
楼主专业,学习了

Rank: 2Rank: 2

UID
691092
帖子
257
PB币
121
贡献
0
技术
0
活跃
1
13F
发表于 2009-4-18 09:34:19 IP属地广西
非常感谢!支持下
















迅雷6

我的青春谁做主

Rank: 2Rank: 2

UID
65012
帖子
317
PB币
1911
贡献
0
技术
0
活跃
418
14F
发表于 2009-4-18 09:44:43 IP属地上海
非常感谢~~~~慢慢学习~~~~~~~

UID
592529
帖子
1398
PB币
3961
贡献
0
技术
3
活跃
13

远景技术达人

15F
发表于 2009-4-18 11:27:26 IP属地广东
关于那个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



感谢你的指正。

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

UID
592529
帖子
1398
PB币
3961
贡献
0
技术
3
活跃
13

远景技术达人

16F
发表于 2009-4-18 11:30:22 IP属地广东
本帖最后由 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


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

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

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

Rank: 2Rank: 2

UID
714023
帖子
345
PB币
171
贡献
0
技术
0
活跃
1
17F
发表于 2009-4-18 12:30:06 IP属地广东
说的好啊~绝对支持长知识了哦~

Rank: 5Rank: 5Rank: 5

UID
20703
帖子
814
PB币
3074
贡献
0
技术
2
活跃
48

评测勋章

18F
发表于 2009-4-18 18:50:29 IP属地德国
XP pro只能一个物理CPU, 核心无限。
deepxw 发表于 2009-4-18 11:30


home是一个cpu,pro是两个cpu

核心都没有限制

Rank: 1

UID
591209
帖子
96
PB币
70
贡献
0
技术
0
活跃
16
19F
发表于 2009-4-18 21:10:55 IP属地辽宁
有条件的上64位,支持的更好

河蟹帮虾米

Rank: 7Rank: 7Rank: 7

UID
387269
帖子
1116
PB币
353
贡献
0
技术
0
活跃
1285
20F
发表于 2009-4-18 21:58:15 IP属地广东
感觉还是欠缺点东西,PAE模式来运行程序是很废资源和吃力不讨好的。
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛