把UNIX应用程序移植到Linux[5]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:

  zSeries 上的 Linux 是纯粹的 Linux:它不是现有的 zSeries 操作系统上特别的 Linux,也不是为 zSeries 体系结构而修改的 Linux 的特别版本。zSeries 上的 Linux 的特征与其它平台上的 Linux 的特征相同,例如它是纯粹的 ASCII 环境。对于所有的体系结构,绝大部分的 Linux 结构是相同的。和 zSeries 相关的修改使 Linux 能和 zSeries 内存、zSeries 磁盘及通信硬件进行通信。Linux 和应用程序的接口及 Linux 和用户的界面并不受到影响。
  
  应用程序的优点 — 您在 zSeries 上的 Linux 中的 Linux/UNIX 应用程序使您能访问存储在 zSeries 环境中的企业数据(后端集成)。这样提高了响应速度,减少了不必要的数据复制。zSeries 出众的容量、可伸缩性、可靠性、可用性和安全性使之成为企业服务器应用程序的完美部署平台。另外,在商务环境中,zSeries 上的 Linux 减少了服务器的数量,从而简化操作并降低成本。
  
  zSeries 上的 Linux 移植提示和技巧
  
  这些提示和技巧是由一个 IBM 技术小组总结的,该小组负责把应用程序移植到 zSeries 上的 Linux。该文档的全文可从 ibm.com/servers/esdd/articles/linux_s390/index.html 获得。
  
  小尾数法到大尾数法
  
  S/390 是大尾数法系统。如果代码要处理由小尾数法系统上产生的面向字节的数据,那么这些代码可能需要某种字节对换。这些数据可能需要被重新生成,如果这不可能(例如,共享的文件),那么,应用程序需被修改,以适合处理小尾数法数据。如果原来的平台是大尾数法平台(例如 UltraSPARC、IBM ~ pSeries™……),那么就不存在这个问题。
  
  汇编代码
  
  汇编代码需用 S/390 汇编器重写。所有的操作码需改成 S/390 操作码。如果应用程序代码使用汇编头文件,那么就需要该头文件的 S/390 版本。S/390 汇编代码的 Linux 版本使用 S/390 操作码但遵守 GNU 汇编器的语法约定。您可以从 www.gnu.org/manual/gas-2.9.1/as.html 下载 GNU 汇编器手册。
  
  绝对地址和高阶位
  
  出于各种目的,一些应用程序使用硬编码地址。一个可能的目的是在内存中定义固定的页,用于分配或用 mmap() 来内存映射。mmap() 调用的一种形式允许页固定。在这种模式中,mmap() 试图使用在所请求的地址的存储器来内存映射。在 Intel 平台上,这个地址可能被指定在 zSeries 上的 Linux 无法使用的地方。
  
  每个平台很可能选择不同的程序堆栈位置、系统库、堆等等,所以在移植到其它系统的时候,硬编码地址往往是糟糕的选择。zSeries 寻址方式还忽略高阶位,所以硬编码地址 0x80000000(高阶位是 1)将被转换成 0x00000000,而这是 zSeries 上的保留地址。在生成地址时,对地址的算术运算也能使高阶位变为 1。
  
  如果应用程序因使用绝对地址而产生段违例或其它错误,那么必须修改它。/proc//map 显示一个活动的进程是怎样使用它的寻址空间内的存储范围的。如果代码必须使用绝对地址,那么这个 map 可被用来查找还未被保留的地址范围。
  
  某些地址字段的高阶位可能要用“AND”来变为 0(31 位模式位)。如果该地址被用于算术运算,那么您必须这样做。
  
  应用程序开发工具
  
  部署应用程序要求在目标服务器上有一套健壮的工具。在 ibm.com/servers/eserver/zseries/os/linux/ldt/ 的 Web 站点描述了将部署到 zSeries 上的 Linux 的 C/C++ 应用程序的开发或移植的几个阶段并给出在每个阶段中有用的工具列表。
  
  杂项
  
  ptrace 和返回结构 — ptrace 和返回结构的使用与体系结构相关。
  
  Configuration/build/Makefile 脚本或文件 — 很可能需要增加对 S/390 平台的支持。
  
  proc 文件系统 — 有些区别,例如:
  
  /proc/cpuinfo 格式不同

本文关键:把UNIX应用程序移植到Linux
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top