|
发表于 2022-9-29 19:37:04
|
显示全部楼层
虽然MS-DOS是一个16位操作系统,但是它的物理地址空间是20位,其最大寻址空间为
2^20B=1MB,其中640KB为用户可用内存。当时微软因为解决了16位的MS-DOS使用超过64KB的内存这一问题,在1981年曾表示在当时“640KB内存对任何用户都足够了”。
在现在的操作系统上,类似的技术被称作PAE(物理地址扩展)。早在很多年前,Pentium Pro的物理地址空间就是36位,从而最大内存容量变为64GB。作为Wintel联盟之一的微软没有理由不支持这一技术。这一点可以从Windows XP上得到验证:在Windows XP RTM与SP1版本中,只要在boot.ini中加上/pae这个参数,就完全可以使用超过4GB的内存。但是,由于当时一些第三方驱动并不兼容PAE(导致系统蓝屏),而硬件厂商也根本没考虑到大内存的发展趋势从而不愿意更新驱动,于是硬件厂商就把这个问题踢给微软。在这种情况下,微软做的不是老实承认这些驱动有问题,对这些驱动拒绝签名,将其驳回硬件厂商并要求重写;而是采取了一种最笨的方法:在之后版本的Windows内核中把物理地址空间限制为4GB,又强行关闭MMIO重映射,导致只有3GB多内存可用(因为设备需要占用一部分4GB以内的物理地址空间用于MMIO,当实际的物理内存大于或等于4GB时,就需要通过主板将设备MMIO保留的物理地址空间映射到4GB以上,这样原本被保留的内存就会被释放出来。微软官方的说法是服务器版Windows支持重映射功能,桌面版Windows不支持。但是实际上桌面版Windows不是不支持MMIO重映射,而是微软强行禁止桌面版Windows使用这一特性)。这种做法在当时内存并没有普遍超过4GB的情况下尚且可以理解(因为多数用户会认为蓝屏是微软的问题,不是驱动的问题。但即便如此,微软的这种掩盖问题而不是真正解决问题的做法也是一种只顾眼前、不顾长远的短视行为)。
然而,随着技术的发展,大内存越来越普及。Windows的安装要求也明确说明CPU必须支持PAE、NX;从而所有的驱动也必须支持在PAE模式下工作。在这种情况下,微软仍然这样人为限制内存大小,并以所谓“寻址空间”的理由欺骗用户。微软的这种做法就是一种纯粹的商业伎俩,其目的只有一个:通过控制PAE来限制内存大小,从而迫使大内存用户购买价格高昂且根本不适合普通用户的Windows Server这种服务器操作系统。(例如,如果没有经过设置,Windows Server就没有声音,也很难关机) |
|