从32位平台移植到64位平台的解决方案文档格式.docx
- 文档编号:18562508
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:20
- 大小:34.35KB
从32位平台移植到64位平台的解决方案文档格式.docx
《从32位平台移植到64位平台的解决方案文档格式.docx》由会员分享,可在线阅读,更多相关《从32位平台移植到64位平台的解决方案文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
只要觉得有需要,就可将32位程序重编译为64位程序;
ii.在64位平台上,不管是作为32位程序还是作为64位程序运行,其性能至少不应比32位程序在32位平台上运行的性能差;
iii.32位进程与64位进程可同时在64位平台上运行.
3.移植步骤
将现有32位程序移植到64位时,由于AIXV4.3本身对32位程序与64位程序的支持,所以绝大部分的系统调用与C语言程序结构都不用改变,只要在源程序中遵守系统调用接口与相应的数据类型;
但是,还是有一些由于数据类型长度的改变而引起的兼容性问题.因此从32位程序移植为64位程序一般必须经过下列步骤:
(1).源程序的兼容性检查;
这一步主要检查由于数据类型长度改变而引起的兼容性问题;
(2).将从第
(1)步检查出的兼容性源程序进行修改;
(3).修改makefile文件;
二、32位平台与64位平台
1.平台的定义
计算机系统是由硬件与软件两部分组成的。
所谓平台也就是指硬件与相应的系统软件(包括操作系统、编译器和与开发环境有关的应用程序(如数据库))。
64位硬件体系结构是指:
(1).能处理64位数据.---即CPU可以将64位数据作为基本单元进行处理(只需一次操作就可处理),”字长”是64位的,即存储单元是64位的.(说明:
32位平台的存储单元是32位的)这导致结构成员的一种以8字节为边界的填充,即第一个成员即使不足一个8字节的基本存储单元,那么仍占用一个基本存储单元,而整个结构占用的存储空间也是8字节的倍数.
(2).能产生64位地址.----包括有效地址和物理地址.注意:
虚地址概念并不是由处理器体系结构说明的,它是由AIX的VMM(虚地址存储管理器)说明的.它规定了应用程序可访问的存空间的大小.一般来说,虚地址可以与有效地址或物理地址不同.
相应地,32位硬件体系结构是指
(1).能将32位数据作为基本数据单元进行处理;
(2).最多只能产生32位地址(包括有效地址和物理地址).
下列操作可从64位寄存器中得到好处:
(1).64位长的串;
(2).64位寄存器上的移位操作;
(3).64位的整数和指针运算;
(4).串或大数据的拷贝.
硬件部分主要是指其字长-----CPU能作为基本数据单元处理的二进制数据的位数。
如32位机器其CPU能在一条指令处理32位数据,它不能在一条指令处理64位数据,它必须将64位数据分为两个32位数据进行处理;
而64位机器其CPU则能在一条指令处理64位数据,它不需象32位机器一样,将64位数据拆分为两个32位数据进行处理。
32位平台是指其硬件体系结构是32位的,而且其操作系统、编译器等系统软件也只能支持32位程序.
64位平台是指其硬件体系结构是64位的,而且其操作系统、编译器等也能支持64位程序.因而,64位平台能充分利用其64位硬件的性能,使得一些应用程序能从中得到性能的改善.
2.现有AIX64位平台的特点
i.RS/600064位机器
AIXV4.3和RS/6000S70模型)RS/6000(RS64A)是64位体系结构,CPU的通用寄存器是64位的,一些控制寄存器也是64位的,它可以一次移动或操作64位数据,而不需要象在32位处理器那样,必须由程序员或编译器分两次完成.
PowerPC是64位体系结构
.64位环境是32位环境的超集;
---即64位指令集是32位指令集的超集,换句话说,32位指令集是64位指令集的子集;
.32位环境与64位环境是局部的;
---即一个32位进程其环境只对这个进程有效,一个64位进程的环境只对这个64位进程有效;
同时运行的32位进程与64位进程可有不同的运行环境;
.不管哪种方式,都无任何模拟或仿真.----即32位进程执行32位指令集,64位进程执行64位指令集;
而不是说,64位指令集是通过32位指令集来模拟或仿真;
AIXV4.364位体系结构的好处
(1)64位数据类型某些应用程序可从64位整型硬件的性能和更高的精度获益;
不过主要的可能还是由非64位应用程序用64位整型运算操纵64位指针.
(2)存取大文件---数据仓库、科学和多媒体应用经常需要非常大的文件和文件系统,它们很容易由64位数据类型处理;
巨大的地址空间---有些应用程序既需要用大存(234=16GB),也需要访问海量虚拟存储(280),许多科学应用就可以简单地编程,并能比较高效地执行.数据段和堆栈都是巨大的,存储映射也会得到显著改善.
ii.AIXV4.3支持64位程序的操作系统
①提升了4GB的系统存限制
.4GB(232)是对32位PowerPC`平台的限制;
.AIXV4.3支持>
4GB的存;
.AIXV4.3在RS/6000S70服务器上支持16GB存;
.当存足够时,AIX会自动扩展至大存;
.32位程序仍受限于<
.在S70上,可有多个32位程序每个都有至多4GB的存;
.换句话说,一个大的32位的应用程序可充分利用任何>
.64位程序可存取260B的存.
.应用程序地址空间可大于4GB
.在S70且安装AIXV4.3的系统上被编译为64位的程序;
.对超出32位寻址围的应用程序.
②不必为担心性能而重新编译
.在64位平台上,将32位程序重新编译为32位时,其性能会无任何差别,因为这会任何编译器的改进;
.32位重新编译为64位时,会看到些微的性能差别;
.默认编译模式是产生32位可执行程序.
③AIXV4.3核心是32位,在64位平台上有附加的64位扩展;
.为支持完全64位功能,核心不一定要64位的;
.32位核心维持对32位的兼容性和健壮性;
.核心扩展提供了64位程序所要求的功能;
.新的应用程序二进制接口(ABI);
.提供了对设备驱动程序的二进制兼容性;
.VMM支持64位进程地址空间;
.只要有必要,某些系统调用可修改为64位参数(如文件和存操作);
.对某些设备驱动程序有一些前提或限制.
④32位与64位进程的完全互操作性
1.进程---进程
.可共享文件.存,IPC资源(但要注意某些共享存的分配方式---字节边界问题),也可相互发信号;
.可相互exec()调用;
.32位与64位进程可设置非本类进程的限制;
2.32位与64位系统结构
.编译器仍是32位的;
.编译器既可在32位平台,也可在64位平台上运行;
.既可产生32位,也可产生64位可执行文件.
.头文件已被修改过,以支持两种环境;
.增强了功能的共享库的体系结构.
.两种环境下都用同样的路径;
.只维护单一的源程序,makefile文件,
.管理共享库的工具默认为32位的.
⑤32位与64位核心支持
.AIXV4.3既支持32位的虚地址空间又支持64位的虚地址空间;
.包含VMM与进程调度和其他功能;
.32位进程与64位进程对系统设备都有同等访问权利;
.默认行为都是32位兼容的;
.进程调用设备驱动程序一般被核心分隔.
⑥能在32位机器上运行64位程序吗?
.显然不能;
.不过,在32位机器上编译与64位程序是可能的(假如相关的库等等已安装).
⑦AIX命令与工具
.绝大多数AIX命令与工具仍是32位的;
.需支持64位的绝大多数工具也仍是32位的;
.所有命令与工具将继续支持32位;
.编译器与连接程序支持64位的(注意:
这并不意味着二者是64位的).
ii.原有32程序与新的64位程序的二进制兼容性
原有32位程序可不用重编译,即可在AIXV4.3中继续作为32位程序运行.
(1).在AIXV4.3中,32位程序完全的二进制兼容性;
.现存32位程序毋须修改或重新编译,就可在64位平台上运行;
.32位模式下,百分之百的兼容性;
即在64平台上编译的32位程序与32位平台上编译的32位程序都可在64位平台上共存运行;
.32位程序无任何性能下降,即32位程序不管是在32位平台上运行,还是在64位平台上运行,其性能无可分辨的差别.
.
(2).64位与32位的共存
.AIXV4.3在64位平台中提供两种应用环境;
这两种应用环境是互补而非竟争的环境;
64位环境是向上兼容的AIX的附加,比AIXV4.3低的版本不支持64位程序;
并不强迫所有应用都是64位的.
.仅仅只有一种AIX产品既适应于32位平台,又适应于64位平台;
32位与64位进程的完全共存,在64位平台上既可运行32位进程,又可运行64位进程,两种进程各有自己的运行环境;
3.64位编程
i.标准
有关64位编程有两个标准,UNIX98标准与LP64协议.前者说明UNIX系统调用与C标准库函数的标准接口,各库函数接口并不隐含数据类型是32位的,而是依协议IPL32确定其类型;
后者说明64位编程C语言类型.
1.数据类型标准
LP64类型
从上表可看出:
LP64模式中,char,short,int这三种数据类型与32位程序相应的数据类型完全一样;
而long型与指针则变成64位,相应地在32位程序中,long与指针是32位的.LP64是一个一般的64位程序数据类型标准;
不过,AIX用的是IPL32+longlongint;
见下表:
Table6.ILP32,LP64andCforAIXCompilerModelTypeSize
Datatype
ILP32(sizeinbit)
LP64(sizeinbit)
CforAIX(32-bit/64-bit)
char
8
8
Implemented
short
16
Implemented
int
32
long
64
longlong
NotDefined
64/64
pointer
64
float
32
double
longdouble
NotDefined
64or128/64or128
(1)
int8_t
uint8_t
Fixed-widthtype
(2)
8bits(1byte)
int16_t
uint16_t
16bits(2bytes)
int32_t
uint32_t
NotDefined
Fixed-widthtype
(2)
32bits(4bytes)
int64_t
uint64_t
64bits(8bytes)
__int8
__uint8
Fixed-widthtype(3)
1byte
__int16
__uint16
2bytes
__int32
__uint32
4bytes
__int64
__unit64
Fixed-widthtype(3)
8bytes
(1)Dependonthesettingofthelongdoubleoption.Bydefault,thesizeis8.
(2)ANSIfixed-sizetypes.
(3)Shouldnotbeused;
useANSItypesinstead.
说明:
其中粗体部分表明在32位与64位程序中长度有异,AIX为使其C++与Microsoft兼容,使用了__int8/16/32/64数据类型,在UNIX环境下一般应使用ANXIC数据类型,这包括在头文件<
inttypes.h>
中.
很明显,64位程序与32位程序最大的不同就是:
long与指针两种数据类型的长度不同,当然那些由long间接定义的数据类型其长度也跟着不同.在32位程序中,int,long,pointer三种数据类型的长度是一样的;
三者相互赋值不会有影响;
但在64位程序中,int长度只有4B,而long,pointer长度却有8B,而且有些由longtypedef的数据类型也是8B,从而在int与long或pointer之间赋值就会导致错误,特别是有些由longtypedef的数据类型常常用作函数参数,如果相应参数在程序中被定义为int,无疑会导致兼容性问题.
2..结构分配问题
我们知道,在32位程序中,结构数据有一种字边界填充的定位问题:
即一个结构的第一个成员一定位于字边界上,即使该成员实际占用空间并不需要一个字长的存储空间,也会分配一个字长的存储空间,剩余空间由编译器填充;
并且整个结构所占空间也应位于字长边界上;
如structstruc32{
intI;
longj;
charc;
};
这个结构长度是12B,即sizeof(struc32)=12;
其最后一个成员虽只有一个字节,但也分配4个字节;
同样地,在64位程序中,也存在结构填充问题;
只不过不是以字为边界,而是以双字为边界;
如structstruc64{
char*p;
};
在32位程序中,这个结构的长度是12B,在64位程序中,其长度是24B;
第一个成员只占4B,但编译器也给它分配8B空间.
值得注意的是:
在64位程序下,某些结构只成员一样,但成员位置不同时,其长度也会不同;
如structli{
longla;
intia;
}li;
structlii{
intib;
}lii;
structili{
}ili;
注意ili与lii两个结构变量:
在64位程序中,sizeof(structlii)=16;
sizeof(structili)=24;
在64位程序中,对结构成员的恰当排列,有可能减少程序所占空间.
ii.OBJ文件格式
1.定义在32位程序中,经过编译器编译生成的.o文件,一般是COFF格式(CommonObjectFormatFile),但AIXV4.3为支持64位程序,其.o文件格式为XCOFF(extendedCommonObjectFormatFile);
它组合了COFF格式与模块格式容表(TOC)两部分;
后者提供了.o文件的动态连接与单元代替.XCOFF文件格式的主要优点就是它能提供对共享库和其他外部.o文件的动态解析引用.而一般地,COFF格式文件只能静态引用.
XCOFF格式文件定义了.o文件与可执行文件的机器存映象的排列方式,它是由语言处理器(ASM与编译器)生成的,绑定器将单个的.o文件组装形成可执行文件,装载程序将XCOFF格式的可执行文件读进存,形成程序的存映象,符号调试器读这个XCOFF的可执行文件,以提供程序存映象中的变量与函数的符号引用.
这种文件格式只能由AIXV4.3及以上版本才能生成及装载;
当在64位模式下编译时,编译器生成64位指令并产生64位XCOFF格式.o文件,此时绑定器只绑定64位.o文件以生成64位可执行文件.注意,在绑定到一起的.o文件中,不管是静态绑定还是动态绑定,都只能是同一格式的.o文件,即32位的.o文件与64位的.o文件的混合绑定是不允许的.(所谓64位模式,是指生成64位指令,产生64位XCOFF格式文件)
AIX将XCOFF作为32位与64位程序的.o文件格式,从而有XCOFF32与XCOFF64之分,在RS/600032位平台或64位平台上,AIX的编译器默认为32位模式,即经编译所得的目标文件是32位的;
不过,AIX的cc编译器在调用连接程序ld生成可执行程序时,ld将只是把同类的.o文件(包括库文件)连接成可执行程序,即要么是XCOFF32格式的.o文件,要么是XCOFF64格式的.o文件.
AIX的cc的这个特性要求:
如果库是XCOFF32格式的文件,那么所有用到这个库的可执行程序就只能编译为32位的;
如果共享库的某个可执行程序要编译为64位的,那么与这个共享库有关的所有可执行程序都要编译为64位的;
不允许共享库某个32位库的可执行程序编译为32位的,而另一个共享该库的可执行程序却编译为64位的.
不过,在AIXV4.3中,有少数几个命令既支持32位XCOFF格式同时又支持64位XCOFF格式(即混合模式),这些命令有ar,dump,.nm,lorder,ranlib,size,strip.它们都用-X标志(-X32,-X64,-X32_64)来说明.o文件格式.ar支持两种x(X)标志.-x表示从档案库中抽出所指定的文件并放到当前目录;
而-X标志则指定
iii.编译
1.cc编译一般来说,AIXAIX编译器cc有许多编译选项,这里只简单介绍一些与64位有关的编译选项.
(1).-q64选项:
有这个编译开关时,所编译生成的.o或可执行程序将是64位的;
否则,默认为32位的;
(2).-qwarn64选项:
这个编译选项既可在32位模式下使用,也可在64位模式下使用;
使用这个可用来检查源程序中64位的兼容性,它对与64位不兼容的代码给出警告;
在从32位移植到64位时,这个编译选项是非常有用的;
(3).-除了编译选项外,在32位模式与64位模式间转换,还有以下方法:
环境变量OBJECT_MODE(=326432_64)---分别表示32位模式、64位模式编译;
32_64表示既可接受32位模式,也可接受64位模式,不过在这种模式下,AIX连接程序与装载程序不会将这种目标程序连接成可执行程序.
配置文件/etc/vac.cfg----在AIXV4.3下是/etc/vac.cfg43,它定义了编译器的许多编译选项;
命令行参数
这三种方式中,以环境变量最优先,其次是配置文件,最后是命令行参数.
2.arar命令用于生成库,即将.o文件放到一个库中,由于.o文件有两种模式,即32位与64位,默认情况下,ar处理32位.o文件,用-X(32,64,32_64)选项可使其处理64位.o文件,即生成64位库;
3.make如果对同一个makefile文件,先在32位模式下运行产生一个32位库,然后又想运行make产生一个64位库时,这个64位库将不会被更新.因为make只认时间戳,而不区分.o文件格式是32位还是64位.而且如果将同名的一个32位和64位.o文件加到同一个库时,会出现问题.
4.32位程序与64位程序在RS/6000AIXV4.3中的二进制兼容性
这实际上是指32位程序与64位程序在64位平台上的二进制兼容性,因为64位程序只能在64位平台上运行,不能在32位平台上运行.一般来说,用在任何32位处理器或64位处理器上的AIXV4.3编译的64位程序在64位处理器模式上不用重新编译就可运行;
用在任何32位处理器或64位处理器上的AIXV4.3编译的32位程序在两种模式下都不用重新编译就可运行.
下表列出了对32位程序与64位程序的兼容性问题.
32位/64位兼容性
32位应用程序
64位应用程序
32位平台
二进制兼容*
不能执行
64位平台
64位唯一可运行的平台
*注:
二进制兼容是指:
运行于AIXV4.1与V4.2的基于RS/6000POWER-,POWER2-,和PowerPC-的应用程序不须重新编译,就可在AIXV4.3的基于同样的或更新的同一系统的处理器上.不过,不包括下列情况:
(1).AIX共享库的非共享编译;
(2).AIXV4参考手册公开说明的不可迁移的部分;
(3).文档未说明的AIX的部特性;
(4).X11R5服务器扩展(仅适用于AIXV4.3);
(5).用POWER2或PowerPC编译特性编译的程序又不是运行在POWER2或PowerPC平台上;
(6).用AIX高版本编译的程序在低版本的AIX上可能会运行不正常.
从而,须运行在所有平台上的程序必须用编译器的公共选项.用POWER2技术编译
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 32 平台 移植 64 解决方案
![提示](https://static.bdocx.com/images/bang_tan.gif)