铁密度大于水,但铁做的船怎么能浮在水上呢?
首先和大家一起明确一个客观事实:
原装正版32位Windows XP和Windows 7无法正常使用3.25GB以上的物理内存。
现在的问题是很多朋友由此得出结论:
原版的32位Windows系统是不能识别和使用超过4GB物理内存的
——貌似这也是MS的“官方”说法。(3.25GB到4GB之间这段内存去哪了不在讨论范围)。
支持这种说法的朋友当然有充分的理论依据:
内存使用是通过内存地址来确定的,32位系统的内存物理地址范围是0到2^32-1,用Excel算一算,2^32是4294967296,一个整数可以寻址一字节,1024字节=1KB,1024KB=1MB,1024MB=1GB,除一下,哈,结果正好得4,这难道还会错?
那么根据这个理论我们来看看经典的纯16位操作系统MS-DOS:
DOS下有640K基本内存一说,算一下2^16,正好是640K,请注意,640K叫做基本内存。DOS5.0以后可以通过LH命令把用户程序甚至DOS的一部分装到超过640K以上的xx内存区,不使用任何640K以内的内存,实现0内存占用,注意这个LH命令是DOS原生命令。
再看看DOS下的应用软件:
可能有朋友记得很多DOS下的游戏要求2M甚至4M内存才能运行,我记得{zh1}一个DOS版的AUTO CAD内存建议已经达到12M了。
即然系统只能寻址640K的内存,那运行在系统下的软件怎么会要求超过系统寻址范围以外的内存才能运行呢,有点想不通了吧。
有朋友说,你说的那是古代的事了,DOS,我们见都没见过,不是由你说么。那我们就说Windows吧,当年很普及的纯16位的Windows——Windows 3.1。
下面是MS官方Windows3.1的安装内存需求:
Windows 3.1 requires the following minimum configuration:
640 kB plus 256 kB extended memory (1024 kB extended memory preferred; 2048 kB for 80386)
中文意思是:最小640K+256K扩展内存,建议1024KB,386微机建议2048KB
MS不是说的32位系统只能寻址2^32=4GB内存,那16位系统应该只能寻址2^16=640KB内存才对呀?怎么这个16位的Windows系统会要求640K+256K最小内存,建议1024KB甚至2048KB呢?是不是有些冤大头的感觉了。
再看看以下事实:
Windows 2000 Advanced Server 支持{zd0}8GB物理内存 —32位Windows
Windows 2000 Datacenter Server 支持{zd0}64GB物理内存 —32位Windows
Windows Server 2003 企业版 支持{zd0}32GB物理内存 —32位Windows
Windows Server 2003 数据中心版X86 支持{zd0}512GB物理内存 —32位Windows
基于Windows NT 5的Windows2000系列和Windows2003系列在核心和架构上与桌面版的Windows XPxx一样,如果你懂一些系统知识,用服务器系统做桌面也是很不错的。
在DOS和Windows3.1时代,使用大于寻址范围之外的内存是通过himem.sys实现的,这个文件是DOS的一部分。
基本WindowsNT5的Windows2000和Windows2003是通过一种叫PAE的技术实现的。
其实这两种实现两方式原理是一样的,都是通过页面方式把超过寻址范围的内存映射到可寻址范围内使用,这种转换是由系统内核自动完成的,与用户xx不相干。
MS真正的内幕:
MS不让32位XP和Win7支持4GB以上内存不是技术上做不到,而xx是出于商业目的,服务器系统比桌面系统利润大的多。
另一个战略性考虑就是尽快把操作系统平台全面升级到64位,现在64位硬件平台已经差不多成熟了,纯64位的平台和应用开发比32位要容易而且能得到更强的性能和扩展性(特别的,MS的.NET架构在在32位环境和64位环境下性能差别明显,MS.NET不是简单的平台增强系统程序,它其实是MS下一代系统架构的实质性应用,是微软未来发展的核心,它的目的是统一PC以至整个IT业的软件标准和硬件标准(软件决定硬件)),从DOS到Windows,从Windows3.1到Win95,从Win98到XP,每一次的系统升级都让MS越来越壮大,这种升级游戏MS是最得心应手的。
关于32位XP和Win7不支持4GB以上物理内存,MS官方的说法其实是很微妙的,它没错,但用户听了以后往往会得到错误的结论。