资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
首先需要明确一下,32 位也好,64 位也好,这个概念是同时存在于软件、系统、主板芯片组和 CPU 四个方面的。对于操作系统到底最多能支持多少内存这个问题,其实不是操作系统一方面说了算的。目前不少人可能对于 CPU 的寻址概念有些模糊,认为 CPU 的寻址范围与其平常概念上的位宽直接联系,即所谓的 32 位 CPU 寻址范围为 232,64 位的则是 264。其实这是一个错误的概念,对于 CPU 来说,这个的位宽一般是指是其数据总线位宽,和寻址能力并无直接联系。至于一个 CPU 的寻址位宽是多少则要看其具体的设计。而对于主板芯片组这方面来说,目前的 Intel x86 平台采取的是内存映射技术(Memory-Mapped I/O, MMIO),也是 PCI 规范的一部分,也就是将 I/O 设备放置在内存空间而非 I/O 空间,从处理器和操作系统看来,访问一个硬件也就是访问内存空间,因此主板的芯片组也存在一个寻址位宽的问题,当然也有可能成为内存总量的一个瓶颈。当然了,现在的新主机一般都不会有这个问题了。说完了硬件层面的概念,我们继续看操作系统是如何与 CPU 进行“交流”的:Windows 对于内存的管理,采取的是分页机制,每个进程都占有一定的虚拟地址空间,在这个机制下,这个空间一部分被映射到物理内存,一部分映射到虚拟内存(存在于硬盘上的一个或多个空间),还有一部分则可能什么也没有映射。同时,在 CPU 中,会设置一个“分页标志位”,如果 CPU 在运行指令时发现这个分页标志被设置,则会根据页目录和页表中的对应关系,将指令中的虚拟地址转换为实际的物理地址。目前的 32 位系统分页大小为 4K,寻址位宽为 32 位,因此,第 0 个分页的地址是0x00000000,第 1 个分页地址从 0x00001000 开始,以此类推。所以,在目前的 32位系统中,用到了 32 位中的高 20 位来标记物理页,剩余的 12 位用于添加一些标记信息等。这样,就可以支持到最大(220)*4096=4GB 内存,除掉我们上面所说的为 I/O 保留的内存映射空间和操作系统本身保留的内存,剩下的就是我们在任务管理器里能看到的可用空间。上图显示的是我的电脑目前的内存分配情况32 位系统下的悲剧,这个图是从网上搜罗来的如何突破 32 位系统的 4G 限制其实 PAE 并不是一个新鲜东西,也不是操作系统弄出来的特性为了对 PC 服务器提供大内存的支持,Intel 采取了物理地址扩展(Physical Address Extension, PAE)的技术,将现有的 IA32 架构的处理器的地址总线从 32 位扩展到了 36位,这样从硬件层面来看,可以支持最多 64G 的内存。至于操作系统要如何实现对多出来的这几位进行内存地址映射,简要的说就是将原有的分页表结构改成了三层结构。根据微软官方的说法,下述系统支持开启 PAE 功能:Windows 7 (32 bit only)Windows Server 2008 (32-bit only)Windows Vista (32-bit only)Windows Server 2003 (32-bit only)Windows XP (32-bit only)Windows 2000 Datacenter ServerWindows 2000 Advanced Server具体实现步骤可以见微软官方文章:http:/msdn.microsoft.com/en-us/library/aa366796%28v=vs.85%29.aspx在这里,推荐大家用一个叫 Ready4GB 的小程序,可以自动完成改造工作。开启 PAE 的兼容性问题和收益关于开启 PAE 以后的兼容性问题和是否有效可能是大家最为关心的问题了,根据微软官方的说法,PAE 开启后,可能会造成部分驱动程序的兼容性出现问题。事实上根据我自己的体验,本人的 NV 540M 双显卡就无法正确工作在 PAE 模式下,查证后发现所有的Nvidia 的双显卡都是不支持 PAE 的,网络上也有少数人反应开启 PAE 后会造成蓝屏等现象,是否有相关性尚无明确验证。所以具体情况要尝试后才能确定了。说到收益,网络上是众说纷纭,很多人认为即便开启了 PAE,单个 32 位程序也无法分配到超过 4G 的空间,因此无效。先简要了解一下应用程序运行时的内存使用情况是什么样的:因为不同用户使用环境不会完全一样,很显然应用程序的开发人员不可能在设计阶段去确定这个程序有多少内存空间可以使用。所以,正如前文所述,现在的应用程序运行时,都会分配到一个“虚拟”的内存空间,所有的内存请求都是在这个虚拟地址内完成的,然后再根据具体的内存映射关系,将这些虚拟地址转换为具体的内存地址,或者是上的硬盘空间,在这些地方读写具体的数据。因此关于上述说法,前半句是对的,对于普通的 32 位程序来说,无论工作在何种环境下,其始终都只能分配到最多 4G 虚拟内存地址(0x00000000-0xFFFFFFFF ),而这4G 内存,其中有 2G 是操作系统保留的核心内存,另外 2G 才是程序的自由空间。这是32 位程序的机制所决定的,即便我们将这些程序拿到现有的 64 位系统下运行,它们也只能分配到 4G 内存,2G 可用内存。应用程序内存分配示例但是上述机制的存在绝不代表这 PAE 对于整个操作系统的性能没有帮助,更多的内存有利于操作系统对多任务进行内存分页,可以提高系统在多任务下的表现。总之,单个程序不能利用超过 4G 内存,不代表整个系统不能完全利用。另外,对于支持 PAE 的几个系统来说,它们同时还支持另外一项技术:地址窗口扩展(Address Windowing Extensions, AWE)。这是一个程序设计时的接口,它可以使得32 位程序访问到超过 4GB 的内存,目前 SQL Server 是内置支持这项技术的。这几个系统还有另外一个开关:/3GB,这个开关可以使得在给应用程序分配内存的时候,仅保留 1G 的核心内存,而将 3G 的内存保留为应用程序可用空间。但是由于这个开关缩减了核心内存空间,可能会造成系统的稳定性下降,因此建议还是用 AWE 功能进行替换。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号