windows 64bit平台移植总结
windows 64bit平台移植总结
2010年08月10日
随着64位的CPU以及操作系统的出现, 同时不少的软件厂商也纷纷宣称自己的软件支持64位操作系统, 对软件移植到64bit下的要求,显得日益迫切。
通过把目前工作中一个流程移植到64bit下,研究应用程序移植到64bit的解决方法。 该文档主要描述Windows平台下对于32it代码快速移植到64bit下可能遇到的问题, 以及对应问题的解决方法。 其中包括64bit操作系统介绍, 软件工具,编译问题的解决,移植平台SDK功能组件的处理。并总结了编写与平台无关代码的建议。
随着硬件的发展,以及日常生活中对性能的要求越来越高,64bit操作系统也开始慢慢被应用起来,下面将描述64bit操作系统主要的应用, 版本的分类,并重点介绍我们移植的目标操作平台x64版的操作系统。(该内容参考附录[2]) CPU扩展到64bit, 意味这一个机器周期可以处理64bit的二进制, 如果仅以MOV指令传送数据来衡量性能的话,传送64bit的数据,在32bit下需要2个机器周期,在64bit下则只需要一个机器周期,当然软件不仅仅是传送数据,这里仅仅说明64bit在性能上还是有一定的提升。64bit将可以应用在下面一些方面:
l 需要大量的可寻址内存,即系统总体内存需求超过4GB的应用。
l 同时管理大量用户或者应用线程。
l 需要通过实时加密解密提高安全性的应用。
l 需要数学精度和浮点性能的应用。
l 需要大规模的,强大的数据库性能的应用。
l 需要64bit计算的大内存寻址功能的应用。
l 需要提高数字内容创建功能。
l 需要通过最大限度的性能实现逼真的影院级消费者体验。
l 需要将以前只限于64bit工作站的功能移植到企业,消费者和计算机爱好者的台式机中,包括3D建模,渲染,动画,模拟和软件开发。 微软在2003年就发布了64bit的操作系统,根据不同的微处理器架构,分为两个不同版本:IA-64版, x64版。
针对英特尔(Intel)的IA-64架构的安腾2(Itanium2)纯64位微处理器的Windows XP 64-Bit Edition Version 2003 for Itanium-based Systems。它是拥有64位寻址能力的强大的操作系统,主要面向顶级的高端IA-64架构的工作站,用在高端的科学运算,石油探测工艺,立体绘图,复杂的动画制作等等,是一种用在高效能运算(High Performance Computing)的强大的操作系统。支持双处理器;最低支持1GB的内存,最高支持16GB的内存。
针对超微(AMD)的x64架构的皓龙(Opteron)与速龙64(Athlon64)所属的64位扩展微处理器的Windows XP 64-Bit Edition for 64-Bit Extended Systems。由于英特尔也发布了x64架构的Intel EM64T技术的至强(Xeon)与奔腾4(Pentium 4)的64位扩展微处理器,故微软将该版本的的Windows XP 64-Bit Edition改为Windows XP Professional x64 Edition,它支持AMD与Intel的x64架构。可以使用在一般x64架构的工作站,桌面电脑以及笔记本电脑,用途与32位Windows XP Professional一样,但具有64位寻址能力。支持双处理器;最低支持256MB的内存,最高支持16GB的内存。
微软后面的操作系统版本均有相应的64bit的版本。 X64版本的使用比较广泛,它下面一些特征:
l 同时轻松支持32位Win32程序及64位程序;
l 在64位运行的程序代码和32位运行的程序应该是同一份代码;
l 使现有程序具有企业级应用性能;(Enable existing applications to scale to enterprise capacities)
l 支持新的设计使之可以利用巨大地址空间及内存空间;
l 支持32位既有程序。
x64 位平台使用的API仍然是熟悉的 Win32 API,但它出现了一些新的兼容 64 位的数据类型,所以可能需要对代码进行少量的更改。这就意味着开发者可以从单个代码库构建代码的 32 位和 64 位版本,减少了由于维护两个代码库所带来的维护开销。但是,在x64中出现了新的子系统称为 WOW64。
WOW64 是 Windows-32-on-Windows-64 的缩写。它为现有的 32 位应用程序提供了 32 位的模拟环境,可以使大多数 32 位应用程序在无需修改而直接运行在 Windows 64 位版本上。它类似于旧的 WOW32 子系统,负责在 Windows 32 位版本下运行 16 位的代码。其结构如图2-1.
图2-1 WOW64子系统 尽管x64 CPU本身具有 32 位兼容性模式,可以处理 IA-32 指令的实际执行,但WOW 层仍然必不可少。WOW子系统负责诸如在32位和64位模式之间进程切换以及模拟32位系统的服务。
WOW子系统特点有以下一些:
l 当不关注性能和可伸缩性的问题时,WOW64使开发者可以利用大多数现有的32位代码。这样的好处是对于某些模块不能很快的迁移到64it时, 可以暂时保留,把另外一些使用该模块的程序迁移到64位,采用远程过程调用(RPC)的协议在他们之前对32位模块功能的使用。
l 当性能无法满足要求时,仍然需要将应用程序迁移到64bit。WOW需要将32位的参数扩展到64位,调用完成时要把参数转换为32位, 增加了额外的开销,甚至牵涉到系统调用,当对性能要求高时,只有将程序迁移到64位。
有关 WOW64 的详细信息,请参阅 Microsoft_ Platform SDK 中的"64-bit Windows Programming - Running 32-bit Applications"。
前面已经描述了我们的目标平台,这章将对迁移过程中从需要准备的软件环境,x64平台配置,编译error、wanring, 内嵌汇编移植的处理,平台SDK相关组件的移植等方面进行说明。 Microsoft Visual Studio 2008. 由于需要编译出x64的代码,在windows平台下,选择该编译器。 安装时注意选择x64编译器与工具,见图3-1,注意选择红色框部分。
图3-1 x64编译器工具安装 VMware Workstation。
虚拟机,主要用于装64bit操作系统,用于测试。安装64bit操作系统可参考附录[3]。最好能够在64bit操作系统中安装