操作系统 内存 CPU之间不得不说的故事[科普水文]
好吧,大D我不得不承认这标题极具欺骗性。【我就不说我好久木有写水文了,水一水。】
本文围绕“32位操作系统不能识别并使用4G内存”这个问题来展开。
一、CPU、地址总线、内存
大D实在是想不出如何去总结这个小标题。就这样吧。
CPU要对数据进行读写,就必须对外部设备进行3类数据交互:
- 存储单元的地址(地址信息)
- 设备的选择,读或写的命令(控制信息)
- 读或写的数据(数据信息)
这三类信息通过CPU与外部设备间的总线进行传递。总线在逻辑上可以大致分为三类,既地址总线、控制总线以及数据总线。
CPU与外部设备的3类数据交互就通过这三个总线来完成。
现在我们知道,CPU是通过地址总线来指定存储器单元的,也就是说,地址总线确定CPU能寻址多少内存。
32位内存的地址总线宽度为32,所以CPU可以寻找2^32的内存单元。
2^32=4096,所以,32位CPU最大能够识别(寻址)4G内存。同理:
2^64=18446744073709551616,哇,很庞大啊~
当然了,上面计算出的64位CPU的寻址能力可以寻找的内存。这是理论上的数据撒~
二、为什么64位CPU不能使用超大的内存
上面我们说了,64位CPU地址总线宽度决定了它可以寻址超大的内存空间。但是在具体实现上,却不能全部使用整体高达16EB的内存。
要将64位CPU的地址线全部使用,则需要CPU厂商及操作系统开发厂商投入巨大的成本来研发地址转换相关的技术。例如早期CPU的段地址:偏移地址方式来定位内存地址。
在目前的64位CPU和操作系统技术上,Windows已经实现在AMD64技术CPU上最大搭载16TB内存,即44位地址线宽度可以寻址的内存大小。
从根本上来讲,Windows操作系统使用了虚拟地址空间来操作内存,也就是说,Windows操作系统上运行的程序进程读取的内存地址是Windows的虚拟地址空间影射出来的地址,而非纯物理地址。
三、32位操作系统只能使用3.25G?
说到这个问题。又要扯到32位CPU最大识别(寻址)4G内存上。
4G内存会不会全部都给CPU使用呢?答案是否定的。
为了保证计算机的正常运行,内存还要分配给其他的一些组件来使用,例如集成显卡,Bios Roms等,这就是为什么很多电脑看到的内存不是整数,比如2047MB这样的内存地址,其中的1M分配给了其他的设备。
32位操作系统只能使用3.25G的原因也出自内存分配给其它组件来使用这一情况。
但是并不是所有的电脑都会分配很多内存给其它组件。于是就有了以下两个技术来帮助访问剩余的空闲内存。
四、PAE和AWE
从上面的内容可以得出,32位操作系统是可以使用并访问4G内存的。
这得益于PAE技术
PAE技术全称为物理地址扩展技术,早在Pentium Pro的时代就有这个技术了。
操作系统在不用PAE的情况下,使用的是页表结构方式实现两级地址转换来解决虚拟地址和物理地址的映射的。
开启PAE之后,页表结构方式会做出一些更改。
(大D温馨提示:这部分可以跳过不读。)
在大D模糊的记忆里,两级地址转换时,控制寄存器会指向一个4k大小的页目录,而这个目录里面又有1024个4k大小的页表,最后每个页表里又有1024个4k的页。(页表和页目录中的表项都是32位的。)
启用PAE后,由于页表和页目录表项从32位扩展到64位以用来附加地址,于是页目录和页表就变成了512项了,并新增一个地址指针表(貌似叫这个,或者叫目录指针表),通过这一方式,把地址寻址从32位扩展到52位,32位操作系统使用其中32位,64位操作系统使用40位或者48位,且64位CPU+64位操作系统默认必须开启PAE。
同时,在操作系统层面,还需要AWE技术来辅助。(AWE技术:Address Windowing Extensions 扩展地址内存管理的一个技术。)
在Unix和类Unix系统上,与AWE相似的技术的到了广泛应用。
五、操作系统究竟可以使用多少内存?
详见下表:
Windows版本 | 32位操作系统 (N/A表示不支持或没有对应版本操作系统) | 64位操作系统 (N/A表示不支持或没有对应版本操作系统) |
Windows 2000 专业版、服务器版 | 4 GB | N/A |
Windows 2000 高级服务版 | 8 GB | N/A |
Windows 2000 数据中心版 | 32 GB | N/A |
Windows XP 家庭及媒体中心版 | 4 GB | N/A |
Windows XP 专业版 | 4 GB | 128 GB |
Windows Server 2003 Web版 | 2 GB | N/A |
Windows Server 2003 小企业版、家庭服务器版、Storage | 4 GB | N/A |
Windows Server 2003 Storage Server(专为存储服务器设计的版本) | 4 GB | N/A |
Windows Server 2003 R2 标准版 | 4 GB | 32 GB |
Windows Server 2003 标准版 (SP1) | 4 GB | 32 GB |
Windows Server 2003 标准版 (SP2) | 4 GB | 32 GB |
Windows Server 2003 企业版 (SP1) | 16 GB with 4GT | N/A |
Windows Server 2003 R2 企业版 | 64 GB | 1 TB |
Windows Server 2003 数据中心版 (SP1) | 128 GB | N/A |
Windows Server 2003 R2 数据中心版 (SP1) | 128 GB | 1 TB |
Windows Server 2003 R2 数据中心版 (SP2) | 128 GB | 2 TB |
Windows Vista 入门版 | 1 GB | N/A |
Windows Vista 家庭基础版 | 4 GB | 8 GB |
Windows Vista 家庭高级版 | 4 GB | 16 GB |
Windows Vista 商用版、企业版、企业版 | 4 GB | 128 GB |
Windows Server 2008 标准版、Web版 | 4 GB | 32 GB |
Windows Server 2008 企业版、数据中心版 | 64 GB | 2 TB |
Windows 7 入门版 | 2 GB | N/A |
Windows 7 家庭基础版 | 4 GB | 8 GB |
Windows 7 家庭高级版 | 4 GB | 16 GB |
Windows 7 专业版、企业版、旗舰版 | 4 GB | 192 GB |
Windows Server 2008 R2 基础班 | N/A | 8 GB |
Windows Server 2008 R2 标准版 | N/A | 32 GB |
Windows Server 2008 R2 企业版、数据中心版、安腾版 | N/A | 2 TB |
七、怎样使32位操作系统使用4G内存
网上开启PAE的教程很多,自己搜索下就OK咯~
关键字:“32位WINXP/WIN7开启PAE”
32位WinXP、Win7开启PAE后可能会变的不稳定,并且有的显卡驱动跟PAE扩展不兼容,酌情开启哟~
八、总结
总的来说,32位操作系统是可以识别并使用4G内存的。
内存识别与使用,跟CPU/操作系统都用很大的关系,在计算机这个大体系中,主板芯片组也是一个很关键的因素,比如P45芯片组是支持36bit寻址的。
再一个,大D觉得呢,如果你不想折腾着重装64位系统,又有4G内存,尝试一下开启PAE也未尝不可,如果你装备了大于4G的内存,还是用64位操作系统比较好哟。
P.S.其实吧,64位的兼容性还是不错的~
已有 11 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
碉堡。。。很详细啊
想问下不稳定的几率是多大呢?频繁不???
@nero 根据电脑配置不同会有不同反应。有的人非常稳定,有的人就非常不稳定。挺郁闷的。大内存,64位才是王道啊~~
膜拜万能的大D,
我之前一直以为是硬件跟软件的容量换算进制不同造成的差异,
后来觉得差距太大了。才知道原来分配成了显存。。。
如果这样的话,能不能自己从内存中分配更多的内存给显存呢?求大D解答一下
@lower 台式机集成显卡可以在Bios里面调节。
哈哈~~我是来学习的 ~~
@MurphyL 欢迎常来
2G已经很小了,win7最大才支持4G,凉心了
@那不是我 32位的情况,大内存都用64位就行了。
那个不是XP不能识别4G内存嘛
WinXP是可以支持4G的