话说4GB普及已经不是什么新鲜事,更大12GB以及16GB内存在网吧服务器上应用也不是什么新闻。而出于兼容性的考虑,目前大多数网吧客户机以及服务器都是采用的32位操作系统。而同样是32位操作系统,为什么服务器版本的W ...
话说4GB普及已经不是什么新鲜事,更大12GB以及16GB内存在网吧服务器上应用也不是什么新闻。而出于兼容性的考虑,目前大多数网吧客户机以及服务器都是采用的32位操作系统。而同样是32位操作系统,为什么服务器版本的Windows Server 2003就能支持大内存,而Windows XP最多只能支持4GB内存,但Windows往往会保留一部分内存地址,所以32位的Windows XP往往最多只能使用3.25GB或者3.5GB内存。但是Windows Server 2003却能完美支持大内存,这是为什么呢?在具体说明原因之前,我们来看看微软官方给出的各版本Windows最大内存支持情况:
从这个列表看出,Windows Server 2003最高端的版本Datacenter Edition最高可以支持到128GB内存。而家用版的Windows XP只能支持到4GB。同出于NT 5.0内核的操作系统,既然Datacenter能支持到128GB说明32位系统最大的4GB寻址能力显然不是制约系统使用物理内存的瓶颈,而Windows是如何实现这一点的呢? 首先我们来看Windows是如何使用物理内存的。我们知道,Windows使用内存不是直接根据程序请求去直接为程序分配物理内存,而是采用虚拟地址映射的方式为应用程序分配内存。应用程序提出使用内存的请求,是通过访问一个32位虚拟地址实现的。每一个“页面”是Windows管理内存的基本单位,每个页面的大小为4KB,这意味着每个页面需要12位二进制码去表示页面内每个字节的地址。32位地址空间中,还剩下20位地址,它们又被分为了10位页面索引以及10位页目录索引(“索引”就是指的序号)。所有索引对应的页面物理地址以及其他标示信息的集合称为“页表”,独立存放在内存中。而每个目录索引对应一个页表所在的物理地址。所有页表的物理地址及其相应信息构成了“页目录”。Windows使用内存,就是先通过目录号查找页表,再在页表中找到页号对应的物理内存页面地址,最后通过业内地址读取内存中一个字节的数据。 当然从中我们不难看出,此时Windows还是只能寻址4GB空间的。 以上的情形是Windows没有开启PAE(物理地址扩展)的情况。如果Windows开启了物理地址扩展,情况就有变化了。虽然还是使用了32位虚拟地址,而除了将虚拟地址分为上述的三个部分外,又多出了一个页目录指针占两位,页目录号变为9位,这就变成了四级结构,当然了,有了这些还不足以让Windows支持超大内存。真正的原因是,在没有开启PAE的情况下,页面中Windows标示每个内存页面的物理地址是用20位二进制地址,而在PAE模式下,每个页面会用25位二进制码标示页面的物理地址,于是最多可以支持32M个页面,而每个页面的大小是4KB,于是,Windows就获得了128GB的内存地址寻址能力。这也就是为什么即使是32位的Windows,也可以支持超过4GB内存的原因。 |