欢迎来到天天文库
浏览记录
ID:41062212
大小:35.00 KB
页数:5页
时间:2019-08-15
《64位系统不必苦寻64位软件》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、64位系统不必苦寻64位软件——原理解析和使用建议最近,品牌机预装的OEM系统的首选已经是64位的了,很多朋友一个劲地抱怨64位兼容性太差不能装32位的软件或64位软件太少什么的。64位用32位软件其实没有问题,理论兼容x86全平台,兼容性应该是最全的才对,省略一万字以后,不知是哪里听说的,误解太深,最后已经无力解释了。于是干脆写了一篇长篇大论,以后就直接copy-paste了,虽然是常识,还是分享一下吧。一、历史问题首先开头,我们平常桌面电脑使用的所谓64位平台其实是x86-64,也就是说在原有
2、的x86平台上实现64位。什么是x86平台呢,也就是Intel在8086之后一系列处理器中使用的架构,8086是16位的,后来扩展到32位的80386,之后一直沿用就形成最流行的的32位处理器系列,这种架构也叫做IA32(Intel实现32位),注意AMD也是使用Intel的技术。32位x86处理器经过大力发展,性能已经比较强大,完全适合于桌面计算机和通用服务器,用户和开发者数量庞大。但是32位CPU的内存寻址能力(可访问4G内存)有限,于是AMD公司率先开发出了x86-64(也称为AMD64)架
3、构处理器,它完全可以实现64位计算。后来Intel自然不会示弱,也开发了EM64T(扩展内存64位技术),也就实现了和AMD64几乎一样的IA32e(Intel实现32位扩展)架构处理器。但是要注意的是在AMD64诞生之前,Intel和HP等公司合作开发了IA64(Intel实现64位)架构,这个是一个全新的64位架构,不兼容原有的32位程序,只能通过模拟器模拟执行,而且效果完全不尽人意。不过这和我们现在讨论的64位没有关系,这大概就是误解的来源之一。二、硬件问题那么,64位计算是如何实现的呢?首
4、先要说明x86-64是站在x86的肩膀上的,并没有另起炉灶,CPU指令长度(即指令占有的二进制位数)不变,原有的指令集也一律保留,所以x86和x86-64总体的架构是一致的,指令完全兼容。改变的部分,原有通用寄存器容量均增长为64位,顺便还加了8个,同时增加了8个128位的XMM寄存器,内部总线(即CPU部件间的数据通道)宽带也增至64位或更多。当然还有增加用于支持这些寄存器的相关指令。由此可以看出,CPU处理的数据均支持64位,内存编址理论上也可达到2的64次方个地址空间,但由于是在x86的架构
5、上构建的64位计算,64位线性寻址能力还不成熟,实际上的可编址并没有这么多,但可改进。之前也一再强调,x86-64只不过是x86的扩展,因此现有的64位处理器可以同时运行32和64位程序。下面以Intel的技术(AMD的原来其实一样)为例说明。具体情况要分为下面几类:--1.没有激活64位(传统模式/IA32模式)。也就是没有为机器安装64操作系统,只使用32位操作系统。这时CPU只会工作在纯32位模式,第二节中提到的硬件和指令都被屏蔽掉了。(下面这些是涉及32位模式和兼容16位程序指令的,这里就
6、不再详细说明了。)----1.1.实模式----1.2.虚拟8086模式----1.3.保护模式--2.已经激活64位。这时已经安装64位操作系统,操作系统在启动时就将CPU置为64位工作状态。所有新寄存器、扩展寄存器和指令都被激活并可用。----2.1.IA32e模式/EM64T模式。这时正在运行64位程序,CPU完全以64位特性工作。----2.2.兼容模式。这就是在64位系统下运行32位程序的模式了。具体的情况下面会详细说明。三、如何实现在兼容模式下,支持x86-64的64位操作系统就要起到
7、协调作用了,它首先要是识别程序的平台性质,如16位(Windowsx64并不支持16位子系统,因此无法执行MS-DOS16位程序)、32位,还是64位。如果是32位,就在相应的程序指令前加上32位标志,CPU遇到这个标志时,就不会把程序应用的64位新特性中,为程序指定32位寄存器(虽然部分32位寄存器是64位寄存器的前一部分,但它们名字是不相同),内存空间也重新映射或进行必要转换(这还不太确定)。也就是说,32位程序所看到的寄存器仍然是32位的,内存仍然只能访问4G或以下,它们不会发现CPU有任何
8、异常。对于操作系统的软件部分,就拿Windowsx64来说,我们可以发现,它比对应的32位系统要臃肿一些,部分原因是64位指令数据要长一些,单个程序会大一些。但更明显的是操作系统中的很多东西都是“双份”的,也就是分别准备了64位的和32位的,这些主要是平台资源(如.NET框架)、库资源(如VisualC++库)和一些底层的系统工具(如CMD、DXDiag)。更明显的表现是,打开系统分区,我们就能发现程序文件夹“ProgramFiles”有两个,一个用于x86-64软件,另一个则用于
此文档下载收益归作者所有