赛迪网 > IT技术 Linux > 最新更新
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

将OS/2应用程序移植到Linux操作系统 (1)

发布时间:2006.11.01 06:36     来源:ibm.com    作者:Kevin Bowkett

当从 OS/2 移植到 Linux 时,关键的编程问题是什么?

在转换到 Linux 之前注意一下,提早发现陷阱。LANDP 小组带领您了解 OS/2 和 Linux 之间的差别,以便您的移植工程才能更顺利地进行。

本文是 LAN Distributed Platform(LANDP)for Linux 小组把 LANDP 从 OS/2 移植到 Linux 时所遇到的问题的概述。本文对其他正在把 OS/2 应用程序移植到 Linux 的小组应该是有帮助的。当决定了要把 OS/2 版本的 LANDP 移植到 Linux 时,小组已经有了从 OS/2 移植到 NT 的经验。NT 移植包含两个主要的途径: 映射层;抽象层。

抽象层比映射层稍简单一点儿。抽象层是薄薄的一层软件抽象,它抽象了函数名、参数以及它们的返回码,而映射层则试图模仿 OS/2 的行为。

对于 Linux 移植,我们从开发抽象层开始。抽象层将需要许多附加功能,这是早就显而易见的。抽象层发展成了映射层。映射层是一个共享对象,有一个恰似 OS/2 接口的接口并且试图模仿 OS/2 的精确行为。然而,LANDP 需要的仅是 OS/2 功能的一个子集,因此,映射层不是一个完全实现。

下面几节概述了两个操作系统在功能上大部分不同之处,并且提供了一些处理这些差别的建议。

明显的差别

系统调用是 OS/2 和 Linux 之间最明显的差别。一些调用容易被映射(例如,DosOpen),而其它的调用不容易被映射(例如,DosCreateQueue)。除了系统调用之外,返回值和返回值的含义也不同。同样,一些返回值能被精确匹配,像 File not found,但是其它的返回值需要近似匹配。

类型是另一个产生差别的地方。因为 OS/2 重新命名了 C 的类型且使用函数参数的结构,所以就产生了差别。例如,在 OS/2 上类型 UINT 被定义为无符号整数。我们必须为 Linux 环境重定义这些类型中的大多数。

操作上的差别

最主要的区别在于概念的行为,这甚至比移植系统调用和重定义类型更为重要。大多数操作系统具有相同的概念、内存、文件、进程间通信(IPC)等等。OS/2 和 NT 有非常相似的概念且它们的差别不是大范围的(除了共享内存外)。然而,Linux 和 OS/2 显示了许多概念上的差别。下面这些子节概述了这些差别,并且为处理这些差别提供了一些解决方案。

线程

Linux 环境中的线程是一个特殊类型的进程。因此,要为您使用的每个线程都创建一个新进程。而且,通过使用 clone 函数或一个叫 pthread 的单独的库来实现线程。也存在其它形式的线程,但是 pthread 是一个 POSIX 定义的标准。

因为对 Linux 而言线程是一个相对新的概念,所以这个操作系统不是和其它操作系统一样线程安全。因此,一些标准库并不是真正的线程安全。另外,线程会影响信号的行为。特定的线程将接收一个被发送到进程的信号,这个特定的线程是未知的。请注意,pthread 有它们自己在一个进程中的每个线程之间传送信号的方式。

getpid 和 getppid 的使用将受到影响。例如,一个调用 getpid 的线程,它的进程标识(不是应用程序的进程标识)将被返回,因为线程被作为进程来实现。

内存

进程内存在 Linux 和其它操作系统中的使用非常类似,但在进程间共享内存的机制不同。Linux 提供了一组基于 System V IPC 机制的 API。在这组 API 中处理共享内存。共享内存机制为一个进程可以拥有的段数量以及整个系统的段数量定义了界限。遗憾的是,这个界限限制了一个应用程序能使用的共享内存段的数量。

例如,如果一个 OS/2 应用程序创建了 500 个共享内存区域,您就无法使用到 System V 共享内存 API 的直接映射。尽管您可以重新编译内核并设置新的层次,但是必须考虑您的顾客们是否能接受这种改变。

您可以分配一个巨大的共享内存段,然后在这段内分配小一些的块。然而,没有边界检查。没有边界检查,应用程序会损坏已分配给其它进程的段。

实现一个与 OS/2 (它进行一些边界检查)类似的行为的另一个方法是使用文件映射。文件映射将一个文件映射到一个进程的内存空间内,以便允许把文件像内存一样来访问。没必要整个文件映射到内存,但可以把文件的一部分映射到一个内存区域。

共享内存机制的另一个差别是:当一个段被加载到一个进程中时,Linux 不保证会使用相同的内存地址。在 OS/2 上,您可以分配一块内存并将这一块内存传送给另一个进程。内存位于每个进程中相同的地址处。在 Linux 上情况并不一定如此。另外,为了访问另一个进程已创建的一个共享内存段,您需要知道这个段的标识。标识是一个独一无二的数字,可以通过使用一个名称(如果该名称作为一个文件存在)来计算这个数字。OS/2 提供几个系统调用,使得进程能够给出且获得到基于名字或内存地址的共享内存段的访问。

1 2 3 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 打造Linux安全堡垒入侵检测与预警 (10-31) · 赛门铁克携手红旗提供Linux解决方案 (10-31)
· 解析Linux新技术对象存储文件系统 (10-31) · Linux操作系统源代码详细分析(一) (10-31)
· SUSE Linux Enterprise实时版操作系统 (10-31) · Linux网站建设的黄金组合PHP+MySQL (10-31)
· 甲骨文支持Linux是噱头?难以撼红帽 (10-31) · Linux环境下实现组件返回消息的技巧 (10-31)
· 如何使用GUI来配置Linux系统防火墙 (10-31) · 将Linux代码移植到Windows的简单方法 (10-31)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管