Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
COMPATIBILITY METHOD AND APPARATUS
Document Type and Number:
WIPO Patent Application WO/2014/146508
Kind Code:
A1
Abstract:
Embodiments of the present invention provide a compatibility method and apparatus, and relate to the field of computers, which can support ABI compatibility of multiple operating systems and the existing ABI compatibility technology, and further facilitate subsequent extension of the compatibility technology of multiple ABIs. The compatibility method comprises: if a first target program is a target program that has registered locally, establishing a first process for the first target program; remapping the first target program; generating a remapping table, wherein the remapping table indicates a correspondence between the first target program and the remapped first target program; loading, according to the remapping table, the remapped first target program to a local memory corresponding to the first process, so as to generate an image of the remapped first target program; reconstructing the image; and determining a redirected interface of the reconstructed image, so as to execute the first process.

Inventors:
TAN CHONGKANG (CN)
Application Number:
PCT/CN2014/070961
Publication Date:
September 25, 2014
Filing Date:
January 21, 2014
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HUAWEI TECH CO LTD (CN)
International Classes:
G06F9/48
Foreign References:
CN1731347A2006-02-08
CN101650668A2010-02-17
CN1405684A2003-03-26
Other References:
See also references of EP 2977897A4
None
Download PDF:
Claims:
权 利 要 求

1、 一种兼容方法, 其特征在于, 包括:

若第一目标程序为本地已注册的目标程序, 则为所述第一目标程 序创建第一进程;

对所述第一目标程序进行重映射;

生成重映射表, 所述重映射表指示所述第一目标程序与重映射后 的所述第一目标程序之间的对应关系;

根据所述重映射表, 将重映射后的所述第一目标程序加载至所述 第一进程对应的本地内存中, 以生成重映射后的所述第一目标程序的 映像;

对所述映像进行重构;

确定重构后的所述映像的重定向接口, 以执行所述第一进程。

2、 根据权利要求 1所述的兼容方法, 其特征在于, 所述对所述第 一目标程序进行重映射的方法具体包括:

对所述第一目标程序进行段重组和 /或偏移计算。

3、 根据权利要求 1或 2所述的兼容方法, 其特征在于, 所述根据 所述重映射表, 将重映射后的所述第一目标程序加载至所述第一进程 对应的本地内存中, 以生成重映射后的所述第一目标程序的映像具体 包括:

获取所述第一目标程序中包含的符号表及重定位表;

根据所述重映射表, 将重映射后的所述第一目标程序加载至所述 本地内存中, 并根据所述符号表及重定位表, 对所述重映射后的所述 第一目标程序进行重定位, 以生成所述映像。

4、 根据权利要求 1 - 3任一项所述的兼容方法, 其特征在于, 所述 对所述映像进行重构包括:

对所述映像进行映像共享重构和 /或二进制翻译重构。

5、 根据权利要求 1 -4任一项所述的兼容方法, 其特征在于, 所述 确定重构后的所述映像的重定向接口的方法具体包括:

确定重构后的所述映像的重定向目标, 所述重定向目标为本地中 与重构后的所述映像对应的接口;

执行所述重定向目标, 以确定重构后的所述映像的重定向接口。 6、 根据权利要求 1 -5任一项所述的兼容方法, 其特征在于, 在执 行所述第一进程的过程中, 若所述映像缺失, 则根据所述重映射表, 重新将重映射后的所述第一目标程序加载至所述本地内存中, 以生成 所述映像。

7、 一种兼容设备, 其特征在于, 包括:

创建单元, 用于若第一目标程序为本地已注册的目标程序, 则为 所述第一目标程序创建第一进程;

映射单元, 用于对所述第一目标程序进行重映射;

生成单元, 用于生成重映射表, 所述重映射表指示所述第一目标 与重映射后的所述第一目标程序之间的对应关系;

加载单元, 用于根据所述重映射表, 将重映射后的所述第一目标 程序加载至所述第一进程对应的本地内存中, 以生成重映射后的所述 第一目标程序的映像;

处理单元, 用于对所述映像进行重构;

所述处理单元, 还用于确定重构后的所述映像的重定向接口, 以 执行所述第一进程。

8、 根据权利要求 7所述的兼容设备, 其特征在于,

所述映射单元, 具体用于对所述第一目标程序进行段重组和 /或偏 移计算。

9、 根据权利要求 7或 8所述的兼容设备, 其特征在于,

所述处理单元, 具体用于获取所述第一目标程序中包含的符号表 及重定位表;

以及所述加载单元, 具体用于根据所述重映射表, 将重映射后的 所述第一目标程序加载至所述本地内存中, 并根据所述符号表及重定 位表, 对所述重映射后的所述第一目标程序进行重定位, 以生成所述 映像。

1 0、 根据权利要求 7-9任一项所述的兼容设备, 其特征在于, 所述处理单元, 用于对所述映像进行映像共享重构和 /或二进制翻 译重构。

1 1、 根据权利要求 7-1 0任一项所述的兼容设备, 其特征在于, 所述处理单元, 具体用于确定重构后的所述映像的重定向目标, 以及执行所述重定向目标, 以确定重构后的所述映像的重定向接口, 所述重定向目标为本地中与重构后的所述映像对应的接口。

12、 根据权利要求 7-11任一项所述的兼容设备, 其特征在于, 所述加载单元, 还用于在所述处理单元执行所述第一进程的过程中, 若 所述映像缺失, 则根据所述重映射表, 重新将重映射后的所述第一目标 程序加载至所述本地内存中, 以生成所述映像。

Description:
一种兼容方法 ^^置 本申请要求于 2013 年 03 月 19 日提交中国专利局、 申请号为 201310088109.0、 发明名称为"一种兼容方法及装置 "的中国专利申请的优先 权, 其全部内容通过引用结合在本申请中。

技术领域

本发明涉及计算机领域, 尤其涉及一种兼容方法及装置。

背景技术

在数据中心操作系统中 , 使用 ABI ( App l i ca t i on B inary Int erf ace , 应用程序二进制接口 ) 兼容技术是解决大量遗留应用程序 问题的最直接的方法。 ABI兼容技术指的是在宿主操作系统中模拟一个 可供目标程序执行的二进制环境。 采用 AB I 兼容技术时, 目标程序不 用更改就可在相应的宿主操作系统上执行。

目前使用的 ABI兼容技术主要有系统级 ABI兼容技术和进程级 ABI 兼容技术。 系统级 ABI 兼容技术指的是在宿主操作系统中采用虚拟机 的方式模拟一个可供目标程序执行的虚拟环境 ; 进程级 ABI 兼容技术 指的是在宿主操作系统中采用动态链接的方式 模拟一个可供目标程序 执行的虚拟环境。

现有技术中的 ABI 兼容技术为根据目标程序的操作系统在宿主操 作系统中增加对应的可供目标程序执行的二进 制环境, 以使得该目标 程序可在宿主操作系统模拟的二进制环境中执 行, 从而实现该目标程 序在宿主操作系统中的兼容。

然而, 由于目前各个操作系统的兼容技术相对独立, 因此, 上述 ABI兼容技术只能实现某一种操作系统的 ABI兼容, 而不能实现不同的 多种操作系统的 ABI兼容。

发明内容

本发明的实施例提供一种兼容方法及装置, 能够支持多种操作系 统的 ABI兼容及支持已有的 ABI兼容技术, 并且方便以后扩展多种 ABI 兼容技术。 为达到上述目的, 本发明的实施例采用如下技术方案: 第一方面, 本发明实施例提供一种兼容方法, 包括:

若第一目标程序为本地已注册的目标程序, 则为所述第一目标程 序创建第一进程;

对所述第一目标程序进行重映射;

生成重映射表, 所述重映射表指示所述第一目标程序与重映射 后 的所述第一目标程序之间的对应关系;

根据所述重映射表, 将重映射后的所述第一目标程序加载至所述 第一进程对应的本地内存中, 以生成重映射后的所述第一目标程序的 映像;

对所述映像进行重构;

确定重构后的所述映像的重定向接口, 以执行所述第一进程。

在第一方面的第一种可能的实现方式中, 所述对所述第一目标程 序进行重映射的方法具体包括:

对所述第一目标程序进行段重组和 /或偏移计算。

结合前述的第一方面或第一方面的第一种可能 的实现方式, 在第 二种可能的实现方式中, 所述根据所述重映射表, 将重映射后的所述 第一目标程序加载至所述第一进程对应的本地 内存中, 以生成重映射 后的所述第一目标程序的映像具体包括:

获取所述第一目标程序中包含的符号表及重定 位表;

根据所述重映射表, 将重映射后的所述第一目标程序加载至所述 本地内存中, 并根据所述符号表及重定位表, 对所述重映射后的所述 第一目标程序进行重定位, 以生成所述映像。

结合前述的第一方面或第一方面的第一种可能 的实现方式至第二 种可能的实现方式中的任一种实现方式, 在第三种可能的实现方式中, 所述对所述映像进行重构包括:

对所述映像进行映像共享重构和 /或二进制翻译重构。

结合前述的第一方面或第一方面的第一种可能 的实现方式至第三 种可能的实现方式中的任一种实现方式, 在第四种可能的实现方式中, 所述确定重构后的所述映像的重定向接口的方 法具体包括: 确定重构后的所述映像的重定向目标, 所述重定向目标为本地中 与重构后的所述映像对应的接口;

执行所述重定向目标, 以确定重构后的所述映像的重定向接口。 结合前述的第一方面或第一方面的第一种可能 的实现方式至第四 种可能的实现方式中的任一种实现方式, 在第五种可能的实现方式中, 在执行所述第一进程的过程中, 若所述映像缺失, 则根据所述重映射 表, 重新将重映射后的所述第一目标程序加载至所 述本地内存中, 以 生成所述映像。

第二方面, 本发明实施例提供一种兼容设备, 包括:

创建单元, 用于若第一目标程序为本地已注册的目标程序 , 则为 所述第一目标程序创建第一进程;

映射单元, 用于对所述第一目标程序进行重映射;

生成单元, 用于生成重映射表, 所述重映射表指示所述第一目标 与重映射后的所述第一目标程序之间的对应关 系;

加载单元, 用于根据所述重映射表, 将重映射后的所述第一目标 程序加载至所述第一进程对应的本地内存中, 以生成重映射后的所述 第一目标程序的映像;

处理单元, 用于对所述映像进行重构;

所述处理单元, 还用于确定重构后的所述映像的重定向接口, 以 执行所述第一进程。

在第二方面的第一种可能的实现方式中,

所述映射单元, 具体用于对所述第一目标程序进行段重组和 /或偏 移计算。

结合前述的第二方面或第二方面的第一种可能 的实现方式, 在第 二种可能的实现方式中,

所述处理单元, 具体用于获取所述第一目标程序中包含的符号 表 及重定位表;

以及所述加载单元, 具体用于根据所述重映射表, 将重映射后的 所述第一目标程序加载至所述本地内存中, 并根据所述符号表及重定 位表, 对所述重映射后的所述第一目标程序进行重定 位, 以生成所述 映像。

结合前述的第二方面或第二方面的第一种可能 的实现方式至第二 种可能的实现方式中的任一种实现方式, 在第三种可能的实现方式中, 所述处理单元, 用于对所述映像进行映像共享重构和 /或二进制翻 译重构。

结合前述的第二方面或第二方面的第一种可能 的实现方式至第三 种可能的实现方式中的任一种实现方式, 在第四种可能的实现方式中, 所述处理单元, 具体用于确定重构后的所述映像的重定向目标 , 以及执行所述重定向目标, 以确定重构后的所述映像的重定向接口, 所述重定向目标为本地中与重构后的所述映像 对应的接口。

结合前述的第二方面或第二方面的第一种可能 的实现方式至第四 种可能的实现方式中的任一种实现方式, 在第五种可能的实现方式中, 所述加载单元, 还用于在所述处理单元执行所述第一进程的过 程 中, 若所述映像缺失, 则根据所述重映射表, 重新将重映射后的所述 第一目标程序加载至所述本地内存中, 以生成所述映像。

本发明实施例提供一种兼容方法及装置, 通过若第一目标程序为 本地已注册的目标程序, 则为第一目标程序创建第一进程, 并对第一 目标程序进行重映射, 以生成重映射表, 重映射表指示第一目标程序 与重映射后的第一目标程序之间的对应关系, 然后根据重映射表, 将 重映射后的第一目标程序加载至第一进程对应 的本地内存中, 以生成 重映射后的第一目标程序的映像, 以及对映像进行重构, 并确定重构 后的映像的重定向接口, 进而以执行第一进程。 通过该方案, 若第三 方操作系统的第一目标程序需在宿主计算机的 操作系统中执行, 且第 一目标程序为宿主计算机的操作系统已注册的 目标程序, 则上述兼容 方法可用于支持该第一目标程序在宿主计算机 的操作系统中的兼容, 同时能够支持多种操作系统的 AB I 兼容及已有的 AB I 兼容技术, 并且 方便以后扩展多种 ABI兼容技术。

附图说明 为了更清楚地说明本发明实施例或现有技术中 的技术方案, 下面 将对实施例或现有技术描述中所需要使用的附 图作筒单地介绍, 显而 易见地, 下面描述中的附图仅仅是本发明的一些实施例 , 对于本领域 普通技术人员来讲, 在不付出创造性劳动的前提下, 还可以根据这些 附图获得其他的附图。

图 1为本发明实施例提供的一种兼容方法的方法 程图一; 图 2为本发明实施例提供的一种兼容方法的方法 程图二; 图 3为本发明实施例提供的兼容设备的结构示意 一;

图 4为本发明实施例提供的兼容设备的结构示意 二;

图 5为本发明实施例提供的 AB I兼容接口的架构示意图; 图 6为本发明实施例提供的兼容状态机的架构示 图。

具体实施方式 下面将结合本发明实施例中的附图, 对本发明实施例中的技术方 案进行清楚、 完整地描述, 显然, 所描述的实施例仅仅是本发明一部 分实施例, 而不是全部的实施例。 基于本发明中的实施例, 本领域普 通技术人员在没有做出创造性劳动前提下所获 得的所有其他实施例, 都属于本发明保护的范围。

实施例一

如图 1所示, 本发明实施例提供一种兼容方法, 包括:

S 1 01、 若第一目标程序为本地已注册的目标程序, 宿主计算机则 为第一目标程序创建第一进程。

第一目标程序为与宿主计算机所安装的操作系 统不同的第三方操 作系统中的目标程序。 由于宿主计算机的操作系统与第三方操作系统 为不同的操作系统, 因此, 若要使得第一目标程序能在宿主计算机的 操作系统中执行, 则需实现宿主计算机的操作系统对第一目标程 序的 兼容。

示例性的, 若要实现第一目标程序在宿主计算机的操作系 统中的 兼容, 首先需宿主计算机需判断第一目标程序是否为 本地 (即宿主计 算机的操作系统) 已注册的目标程序, 若第一目标程序为宿主计算机 的操作系统已注册的目标程序, 宿主计算机则为第一目标程序创建第 一进程。

特别的, "进程" 是操作系统结构的基础; 是一个正在执行的程 序; 是计算机中正在运行的程序实例; 是可以分配给处理器并由处理 器执行的一个实体; 或者是由单一顺序的执行显示, 一个当前状态和 一组相关的系统资源所描述的活动单元。

需要说明的是, 本发明实施例提供的兼容方法可以为 ABI 兼容方 法, 在该方法中, 只有经过宿主计算机的操作系统注册的目标程 序才 能在宿主计算机的操作系统中实现兼容, 也就是说, 只有在宿主计算 机的操作系统中可成功注册第三方操作系统的 ABI 兼容组件的第三方 操作系统才能够实现与宿主计算机操作系统的 兼容。

5102、 宿主计算机对第一目标程序进行重映射。

宿主计算机为第一目标程序创建了第一进程之 后, 宿主计算机对 第一目标程序进行重映射。 其中, 宿主计算机如何对第一目标程序进 行重映射, 后续实施例会进行详细描述。

本领域普通技术人员可以理解, 由于宿主计算机操作系统中的目 标程序与第三方操作系统中的目标程序的组织 结构可能会不相同, 因 此, 宿主计算机会将第三方操作系统中的目标程序 映射到宿主计算机 的操作系统中的目标程序, 从而使得第三方操作系统中的目标程序的 组织结构与宿主计算机的操作系统中的目标程 序的组织结构相同。

5103、 宿主计算机生成重映射表, 重映射表指示第一目标程序与 重映射后的第一目标程序之间的对应关系。

宿主计算机对第一目标程序进行重映射的过程 中, 宿主计算机可 以一边对第一目标程序进行重映射, 一边生成相应的重映射表, 也就 是说, 宿主计算机对第一目标程序进行重映射的结果 为: 第一目标程 序的组织结构与宿主计算机的操作系统中的目 标程序的组织结构相 同, 以及宿主计算机生成与重映射过程相对应的重 映射表, 该重映射 表指示了进行重映射前的第一目标程序的组织 结构与进行重映射后的 第一目标程序的组织结构之间的对应关系。

S 104、 宿主计算机根据重映射表, 将重映射后的第一目标程序加 载至第一进程对应的本地内存中, 以生成重映射后的第一目标程序的 映像。

宿主计算机根据生成的重映射表, 将进行重映射后的第一目标程 序加载至第一进程对应的本地内存, 即宿主计算机的内存中, 从而生 成与进行重映射后的第一目标程序相对应的映 像。

需要说明的是, 在计算机领域中, 目标程序为保存在硬盘中的二 进制文件; 将硬盘中的目标程序加载至本地内存中则称为 映像。

进一步地, 对于本发明实施例提供的兼容方法, S 1 01 中创建的第 一进程, 则为进程的管理结构, 也就是说, 创建的第一进程为一个程 序架构, 而只有经过 S 1 04 , 将进行重映射后的第一目标程序加载至第 一进程对应的宿主计算机的内存中, 则第一进程才为运行在宿主计算 机内存中的一个程序实例。

51 05、 宿主计算机对映像进行重构。

宿主计算机对第一目标程序进行了重映射 (即预处理) 之后, 还 需对加载至第一进程对应的本地内存中的第一 目标程序, 即第一目标 程序的映像进行进一步处理, 即宿主计算机需对第一目标程序的映像 进行重构。

宿主计算机对第一目标程序的映像进行重构的 过程即为在不改变 第一目标程序实现功能的基础上, 通过调整第一目标程序的程序代码, 以对第一目标程序的质量、 性能进行改善, 从而使第一目标程序的设 计模式和架构更为合理, 进而提高第一目标程序的扩展性和可维护性。

51 06、 宿主计算机确定重构后的映像的重定向接口, 以执行第一 进程。

其中, 宿主计算机对第一目标程序的映像进行重构后 , 开始执行 第一进程, 在第一进程执行过程中, 若出现重定向操作, 宿主计算机 则确定重构后的映像的重定向接口, 以继续执行第一进程。

本领域的普通技术人员可以理解, "重定向" 为通过各种方法将 网络或者系统的各种请求重新确定一个方向并 转到该方向指示的位 置。 本发明实施例中, 宿主计算机在执行第一进程的过程中, 若出现 重定向操作, 宿主计算机则进入重定向接口未确定状态, 然后宿主计 算机将在本地 (即宿主计算机的操作系统) 中确定与第一目标程序的 映像相对应的一个接口, 并转去执行该接口, 进而, 宿主计算机将进 入重定向接口已确定状态, 即宿主计算机已确定重构后的映像的重定 向接口, 以继续执行第一进程。

当然, 若宿主计算机执行完该接口, 宿主计算机则返回第一进程 中重定向操作的地方继续执行第一进程。

示例性的, 宿主计算机在执行第一进程的过程中, 若执行到第一 目标程序的映像中有函数调用的地方, 宿主计算机则在宿主计算机系 统中确定与第一目标程序的映像中被调用函数 功能相同的函数, 并转 去执行该函数, 从而使得宿主计算机可以继续执行第一进程, 当宿主 计算机执行完该函数之后, 宿主计算机将返回至函数调用之后的地址, 以继续执行第一进程。

本发明实施例提供一种兼容方法, 通过若第一目标程序为本地已 注册的目标程序, 则为第一目标程序创建第一进程, 并对第一目标程 序进行重映射, 以生成重映射表, 重映射表指示第一目标程序与重映 射后的第一目标程序之间的对应关系, 然后根据重映射表, 将重映射 后的第一目标程序加载至第一进程对应的本地 内存中, 以生成重映射 后的第一目标程序的映像, 以及对映像进行重构, 并确定重构后的映 像的重定向接口, 进而以执行第一进程。 通过该方案, 若第三方操作 系统的第一目标程序需在宿主计算机的操作系 统中执行, 且第一目标 程序为宿主计算机的操作系统已注册的目标程 序, 则上述兼容方法可 用于支持该第一目标程序在宿主计算机的操作 系统中的兼容, 同时能 够支持多种操作系统的 ABI 兼容及已有的 ABI 兼容技术, 并且方便以 后扩展多种 ABI兼容技术。

实施例二

如图 2所示, 本发明实施例还提供一种兼容方法, 包括:

S201、 若第一目标程序为本地已注册的目标程序, 宿主计算机则 为第一目标程序创建第一进程。

第一目标程序为与宿主计算机所安装的操作系 统不同的第三方操 作系统中的目标程序。 由于宿主计算机的操作系统与第三方操作系统 为不同的操作系统, 因此, 若要使得第一目标程序能在宿主计算机的 操作系统中执行, 则需实现宿主计算机的操作系统对第一目标程 序的 兼容。

示例性的, 若要实现第一目标程序在宿主计算机的操作系 统中的 兼容, 首先需宿主计算机判断第一目标程序是否为本 地 (即宿主计算 机的操作系统) 已注册的目标程序, 若第一目标程序为宿主计算机的 操作系统已注册的目标程序, 宿主计算机则为第一目标程序创建第一 进程。

需要说明的是, 本发明实施例提供的兼容方法可以为 ABI 兼容方 法, 在该方法中, 只有经过宿主计算机的操作系统注册的目标程 序才 能在宿主计算机的操作系统中实现兼容, 也就是说, 只有在宿主计算 机的操作系统中可成功注册第三方操作系统的 ABI 兼容组件的第三方 操作系统才能够实现与宿主计算机操作系统的 兼容。

S202、 宿主计算机对第一目标程序进行重映射。

本领域普通技术人员可以理解, 由于宿主计算机操作系统中的目 标程序与第三方操作系统中的目标程序的组织 结构可能会不相同, 因 此, 宿主计算机会将第三方操作系统中的目标程序 映射到宿主计算机 的操作系统中的目标程序, 从而使得第三方操作系统中的目标程序的 组织结构与宿主计算机的操作系统中的目标程 序的组织结构相同。

本发明实施例中, 宿主计算机对第一目标程序进行重映射的方法 具体可以包括:

宿主计算机对第一目标程序进行段重组和 /或偏移计算。 具体的, 由于宿主计算机操作系统中的目标程序与第三 方操作系统中的目标程 序的组织结构可能会不相同, 因此, 宿主计算机在对第一目标程序进 行重映射的过程中, 可能需要对第一目标程序中的各个程序代码段 重 新分配存放地址, 即对第一目标程序中的各个程序代码段进行段 重组, 由于段重组后的各个程序代码段的存放地址发 生了改变, 因此, 宿主 计算机还需要对段重组后的各个程序代码段的 偏移地址进行计算, 以 使得宿主计算机能够以调整后的存放地址准确 地执行各个程序代码 段。 需要说明的是, 由于各个操作系统的差异, 宿主计算机在对第一 目标程序进行重映射时, 可能只需对第一目标程序中的各个程序代码 段进行段重组; 也可能只需对第一目标程序中的各个程序代码 段进行 偏移计算; 还可能既要对第一目标程序中的各个程序代码 段进行段重 组, 又要对第一目标程序中的各个程序代码段进行 偏移计算, 实际重 映射过程可根据不同操作系统的需求进行适应 性调整, 本发明不做限 制。

5203、 宿主计算机生成重映射表, 重映射表指示第一目标程序与 重映射后的第一目标程序之间的对应关系。

宿主计算机对第一目标程序进行重映射的过程 中, 宿主计算机可 以一边对第一目标程序进行重映射, 一边生成相应的重映射表, 也就 是说, 宿主计算机对第一目标程序进行重映射的结果 为: 第一目标程 序的组织结构与宿主计算机的操作系统中的目 标程序的组织结构相 同, 以及宿主计算机生成与重映射过程相对应的重 映射表, 也就是说, 重映射表指示了进行重映射前的第一目标程序 的组织结构与进行重映 射后的第一目标程序的组织结构之间的对应关 系。

5204、 宿主计算机获取第一目标程序中包含的符号表 及重定位表。 宿主计算机从第一目标程序中获取相应的符号 表以及重定位表。 计算机领域中, "符号表" 为在源程序编译过程中需要不断收集、 记录和使用源程序中一些语法符号的类型和特 征等相关信息的表格。 如常数表、 变量名表、 数组名表、 过程名表、 标号表等等, 统称为符 号表。 另外, 对于符号表组织、 构造和管理方法的好坏还会直接影响 编译系统的运行效率。

相应的, "重定位表" 为在目标程序链接过程中, 计算机对目标 程序进行重定位时生成的用于指示目标程序的 逻辑地址与目标程序在 计算机内存中的物理地址之间的对应关系的表 格。 "重定位" 则为 |巴 目标程序的逻辑地址空间变换为目标程序在计 算机内存中的物理地址 空间的过程。

需要说明的是, 本发明实施例中提供的符号表和重定位表分别 为 在源程序编译过程中和在目标程序链接过程中 生成的, 并包含在第一 目标程序中的。

S205、 宿主计算机根据重映射表, 将重映射后的第一目标程序加 载至第一进程对应的本地内存中, 并根据符号表及重定位表, 对重映 射后的第一目标程序进行重定位, 以生成映像。

其中, 宿主计算机根据生成的重映射表, 将进行重映射后的第一 目标程序加载至第一进程对应的本地内存, 即宿主计算机的内存中, 并根据从第一目标程序中获取的符号表和重定 位表, 对重映射后的第 一目标程序进行重定位, 以生成与第一目标程序相对应的映像。

本发明实施例中, 宿主计算机根据符号表和重定位表对第一目标 程序中的变量进行重定位, 以生成与第一目标程序相对应的可以执行 的映像。

本领域普通技术人员可以理解, 未进行重定位之前的第一目标程 序中变量的存放地址均为逻辑地址, 而经过重定位后的第一目标程序 中变量的存放地址均为计算机内存中的物理地 址。

需要说明的是, 在计算机领域中, 目标程序为保存在硬盘中的二 进制文件; 将硬盘中的目标程序加载至本地内存中则称为 映像。

进一步地, "进程,, 是操作系统结构的基础; 是一个正在执行的程 序; 是计算机中正在运行的程序实例; 是可以分配给处理器并由处理 器执行的一个实体; 或者是由单一顺序的执行显示, 一个当前状态和 一组相关的系统资源所描述的活动单元。对于 本发明实施例提供的兼容 方法, S201 中创建的第一进程, 则为进程的管理结构, 也就是说, 创 建的第一进程为进程的一个程序架构, 而只有经过 S205 , 将进行重映 射后的第一目标程序加载至第一进程对应的宿 主计算机的内存中, 则 第一进程才为运行在宿主计算机内存中的一个 程序实例。

S 2 06 , 宿主计算机对映像进行重构。

其中, 宿主计算机对第一目标程序进行了重映射 (即预处理) 之 后, 还需对加载至第一进程对应的本地内存中的第 一目标程序进行进 一步处理, 即宿主计算机对第一目标程序的映像进行重构 。

宿主计算机对第一目标程序的映像进行重构的 过程即为在不改变 第一目标程序实现功能的基础上, 通过调整第一目标程序的程序代码, 以对第一目标程序的质量、 性能进行改善, 从而使第一目标程序的设 计模式和架构更为合理, 进而提高第一目标程序的扩展性和可维护性。

本发明实施例中, 宿主计算机对第一目标程序的映像进行重构时 需考虑映像共享和二进制翻译两个方面的需求 , 即宿主计算机可能需 对第一目标程序的映像进行映像共享重构和 /或二进制翻译重构。

示例性的, 由于映像共享过程中需要将计算机内存中的, 两个或 多个目标程序共享的一段程序代码或一段数据 定向到某个固定的位 置, 因此, 在第一目标程序的映像与其他目标程序的映像 进行映像共 享时, 则宿主计算机需对第一目标程序的映像进行重 构, 即映像共享 重构。

"二进制翻译" 是一种直接翻译可执行二进制程序的技术, 它能 够把一种处理器上的二进制程序翻译到另外一 种处理器上执行, 从而 使得不同处理器之间的二进制程序可以很容易 地相互移植, 扩大了硬 件 /软件的适用范围。

若第三方操作系统与宿主计算机的操作系统为 不同的指令系统, 则宿主计算机需对第一目标程序的映像进行二 进制翻译, 在进行二进 制翻译过程中, 宿主计算机需对第一目标程序的映像进行重构 , 以重 新布局该映像, 即二进制翻译重构。

需要说明的是, 在不同的需求下, 宿主计算机对第一目标程序的 映像进行重构的方式也不相同, 宿主计算机可以对第一目标程序的映 像进行映像共享重构, 也可以对第一目标程序的映像进行二进制翻译 重构, 还可以对第一目标程序的映像既进行映像共享 重构, 又进行二 进制翻译重构, 具体的重构方式, 可根据不同操作系统的实际需求进 行适应性调整, 本发明不做限制。

S 2 07、 宿主计算机确定重构后的映像的重定向目标, 重定向目标 为本地中与重构后的映像对应的接口。

宿主计算机对第一目标程序的映像进行重构后 , 开始执行第一进 程, 在第一进程执行过程中, 若出现重定向操作, 宿主计算机则确定 重构后的映像的重定向目标, 以继续执行第一进程。

本领域的普通技术人员可以理解, "重定向" 为通过各种方法将 网络或者系统的各种请求重新确定一个方向并 转到该方向指示的位 置。 本发明实施例中, 宿主计算机在执行第一进程的过程中, 若出现 重定向操作, 宿主计算机则进入重定向接口未确定状态, 然后宿主计 算机将在本地 (即宿主计算机的操作系统) 中确定与第一目标程序的 映像相对应的一个接口, 即确定重定向目标。

S208、 宿主计算机执行重定向目标, 以确定重构后的映像的重定 向接口, 进而以执行第一进程。

宿主计算机确定了重定向目标后, 将转去执行该重定向目标, 进 而, 宿主计算机将进入重定向接口已确定状态, 即宿主计算机已确定 重构后的映像的重定向接口, 以继续执行第一进程。

当然, 若宿主计算机执行完该重定向目标, 宿主计算机则返回第 一进程中重定向操作的地方继续执行第一进程 。

示例性的, 宿主计算机在执行第一进程的过程中, 若执行到第一 目标程序的映像中有函数调用的地方, 宿主计算机则在宿主计算机系 统中确定与第一目标程序的映像中被调用函数 功能相同的函数, 并转 去执行该函数, 从而使得宿主计算机可以继续执行第一进程, 当宿主 计算机执行完该函数之后, 宿主计算机将返回至函数调用之后的地址, 以继续执行第一进程。

进一步地, 在执行第一进程的过程中, 若第一目标程序的映像缺 失, 则宿主计算机根据重映射表, 重新将重映射后的第一目标程序加 载至第一进程中, 以生成映像, 进而重新执行第一进程。

S209、 宿主计算机终止第一进程。

宿主计算机终止第一进程的情况可以为下述的 任意一种:

( 1 ) 宿主计算机执行完第一进程之后, 终止第一进程。

( 2 ) 宿主计算机未成功加载第一目标程序时, 终止第一进程。

( 3 ) 宿主计算机未成功确定第一目标程序的映像的 重定向接口 时, 终止第一进程。

上述 ( 1 ) 为执行完第一进程后的正常结束, 而 ( 2 ) 和 ( 3 ) 均为 执行第一进程过程中发生异常时的异常结束。 特别地, 若 S201中第一目标程序不是宿主计算机的操作系 已注 册的目标程序, 也就是说, 该第一目标程序不能在该宿主计算机的操 作系统中实现兼容, 因此, 宿主计算机则直接终止对该第一目标程序 的兼容过程。

需要说明的是, 上述 S 201 至 S209 为实现第三方操作系统中的第 一目标程序在宿主计算机的操作系统中兼容的 完整过程, 然而对于已 经兼容的指令和第一目标程序的文件格式等来 说, 在实现第一目标程 序兼容的过程中, 这些步骤不一定都需要执行, 本发明实施例提供的 兼容方法中, 第三方操作系统在宿主计算机的操作系统中注 册的 ABI 兼容组件可根据实际需求执行必须的步骤, 对于不需要执行的步骤, 则可将对应步骤的指令设置为空。

本发明实施例提供一种兼容方法, 通过若第一目标程序为本地已 注册的目标程序, 则为第一目标程序创建第一进程, 并对第一目标程 序进行重映射, 以生成重映射表, 重映射表指示第一目标程序与重映 射后的第一目标程序之间的对应关系, 然后根据重映射表, 将重映射 后的第一目标程序加载至第一进程对应的本地 内存中, 以生成重映射 后的第一目标程序的映像, 以及对映像进行重构, 并确定重构后的映 像的重定向接口, 进而以执行第一进程。 通过该方案, 若第三方操作 系统的第一目标程序需在宿主计算机的操作系 统中执行, 且第一目标 程序为宿主计算机的操作系统已注册的目标程 序, 则上述兼容方法可 用于支持该第一目标程序在宿主计算机的操作 系统中的兼容, 同时能 够支持多种操作系统的 ABI 兼容及已有的 ABI 兼容技术, 并且方便以 后扩展多种 ABI兼容技术。

实施例三

如图 3所示, 本发明实施例提供一种兼容设备 1 , 包括:

创建单元 10 , 用于若第一目标程序为本地已注册的目标程序 , 则 为所述第一目标程序创建第一进程。

映射单元 11 , 用于对所述第一目标程序进行重映射。

生成单元 12 , 用于生成重映射表, 所述重映射表指示所述第一目 标与重映射后的所述第一目标程序之间的对应 关系。 加载单元 1 3 , 用于根据所述重映射表, 将重映射后的所述第一目 标程序加载至所述第一进程对应的本地内存中 , 以生成重映射后的所 述第一目标程序的映像。

处理单元 14 , 用于对所述映像进行重构。

所述处理单元 14 , 还用于确定重构后的所述映像的重定向接口, 以执行所述第一进程。

进一步地, 所述映射单元 1 1 , 具体用于对所述第一目标程序进行 段重组和 /或偏移计算。

进一步地, 所述处理单元 14 , 具体用于获取所述第一目标程序中 包含的符号表及重定位表。

以及所述加载单元 1 3 , 具体用于根据所述重映射表, 将重映射后 的所述第一目标程序加载至所述本地内存中, 并根据所述符号表及重 定位表, 对所述重映射后的所述第一目标程序进行重定 位, 以生成所 述映像。

进一步地, 所述处理单元 14 , 用于对所述映像进行映像共享重构 和 /或二进制翻译重构。

进一步地, 所述处理单元 14 , 具体用于确定重构后的所述映像的 重定向目标, 以及执行所述重定向目标, 以确定重构后的所述映像的 重定向接口, 所述重定向目标为本地中与重构后的所述映像 对应的接 口。

进一步地, 所述加载单元 1 3 , 还用于在所述处理单元 14执行所述 第一进程的过程中, 若所述映像缺失, 则根据所述重映射表, 重新将 重映射后的所述第一目标程序加载至所述本地 内存中, 以生成所述映 像。

本发明实施例提供一种兼容设备, 若第一目标程序为本地已注册 的目标程序, 则兼容设备为第一目标程序创建第一进程, 并对第一目 标程序进行重映射, 以生成重映射表, 重映射表指示第一目标程序与 重映射后的第一目标程序之间的对应关系, 然后兼容设备根据重映射 表, 将重映射后的第一目标程序加载至第一进程对 应的本地内存中, 以生成重映射后的第一目标程序的映像, 以及对映像进行重构, 并确 定重构后的映像的重定向接口, 进而以执行第一进程。 通过该方案, 若第三方操作系统的第一目标程序需在宿主计 算机的操作系统中执 行, 且第一目标程序为宿主计算机的操作系统已注 册的目标程序, 则 可通过上述兼容设备执行本发明实施例提供的 兼容方法, 以支持该第 一目标程序在宿主计算机的操作系统中的兼容 , 同时能够支持多种操 作系统的 ABI兼容及已有的 ABI兼容技术, 并且方便以后扩展多种 ABI 兼容技术。

实施例四

如图 4所示, 本发明实施例提供一种兼容设备 1 , 包括处理器 15 以及存储器 16 , 其中,

处理器 15为兼容设备 1的控制以及处理中心, 通过运行存储在存 储器 16 中的软件程序, 并调用及处理存储在存储器 16 中的数据, 从 而控制兼容设备进行相应的操作, 以及实现兼容设备的其他功能。

存储器 16 可用于存储软件程序及数据, 以使得处理器 15 可通过 运行存储在存储器 16中的软件程序, 从而实现兼容设备相应的操作以 及其他功能。

对应于本发明实施例提供的兼容方法:

处理器 15 , 用于若第一目标程序为本地已注册的目标程序 , 则为 所述第一目标程序创建第一进程, 并将所述第一进程存储于存储器 16 中, 对所述第一目标程序进行重映射, 且生成重映射表, 并将所述重 映射表存储与存储器 16中, 所述重映射表指示所述第一目标与重映射 后的所述第一目标程序之间的对应关系, 根据所述重映射表, 将重映 射后的所述第一目标程序加载至所述第一进程 对应的本地内存中, 以 生成重映射后的所述第一目标程序的映像, 以及对所述映像进行重构, 进而确定重构后的所述映像的重定向接口, 以执行所述第一进程。

进一步地, 所述处理器 15 , 具体用于对所述第一目标程序进行段 重组和 /或偏移计算。

进一步地, 所述处理器 15 , 具体用于获取所述第一目标程序中包 含的符号表及重定位表, 以及根据所述重映射表, 将重映射后的所述 第一目标程序加载至所述存储器 16中的所述第一进程对应的本地内存 中, 并根据所述符号表及重定位表, 对所述重映射后的所述第一目标 程序进行重定位, 以生成所述映像。

进一步地, 所述处理器 15 , 用于对所述映像进行映像共享重构和 / 或二进制翻译重构。

进一步地, 所述处理器 15 , 具体用于确定重构后的所述存储器 16 中的所述映像的重定向目标, 以及执行所述重定向目标, 以确定重构 后的所述映像的重定向接口, 所述重定向目标为本地中与重构后的所 述映像对应的接口。

进一步地, 所述处理器 15 , 还用于在执行所述第一进程的过程中, 若所述存储器 15中的所述映像缺失, 则根据所述重映射表, 重新将重 映射后的所述第一目标程序加载至所述存储器 16中的所述第一进程对 应的本地内存中, 以生成所述映像。

本发明实施例提供一种兼容设备, 若第一目标程序为本地已注册 的目标程序, 则兼容设备为第一目标程序创建第一进程, 并对第一目 标程序进行重映射, 以生成重映射表, 重映射表指示第一目标程序与 重映射后的第一目标程序之间的对应关系, 然后兼容设备根据重映射 表, 将重映射后的第一目标程序加载至第一进程对 应的本地内存中, 以生成重映射后的第一目标程序的映像, 以及对映像进行重构, 并确 定重构后的映像的重定向接口, 进而以执行第一进程。 通过该方案, 若第三方操作系统的第一目标程序需在宿主计 算机的操作系统中执 行, 且第一目标程序为宿主计算机的操作系统已注 册的目标程序, 则 可通过上述兼容设备执行本发明实施例提供的 兼容方法, 以支持该第 一目标程序在宿主计算机的操作系统中的兼容 , 同时能够支持多种操 作系统的 ABI兼容及已有的 ABI兼容技术, 并且方便以后扩展多种 ABI 兼容技术。

下面从软件角度进一步说明本发明实施例提供 的兼容设备 1 在兼 容过程中所执行的对应软件程序的组织架构及 实现方式。

如图 5 所示, 为本发明实施例提供的兼容设备 1 在兼容过程中所 执行的 ABI 兼容接口 2 的组织架构图, 包括兼容状态机 20、 ABI 兼容 组件注册队列 21以及初始化程序 22。 其中, 兼容状态机 20定义了一套第一目标程序在宿主计算机的操 作系统中的变换流程 (也就是兼容过程) , 通过该变换流程, 宿主计 算机的操作系统将该第一目标程序转换为可以 在宿主计算机的操作系 统中执行的第一目标程序的映像, 并在宿主计算机的操作系统中执行。

ABI兼容组件注册队列 21是一个用于注册第三方操作系统的兼容 组件的结构, 在 ABI兼容组件注册队列 21中保存的是各个可兼容第三 方操作系统所对应的 ABI兼容组件, 且该兼容组件由兼容状态机 20决 定。

初始化程序 11 负责启动兼容状态机 20, 即初始化程序 22首先检 查第一目标程序是否为宿主计算机的操作系统 已注册的目标程序, 若 是, 则说明第一目标程序可以在宿主计算机的操作 系统中实现兼容, 初始化程序 11则启动兼容状态机 20。

如图 6所示,为本发明实施例提供的兼容状态机 20的架构示意图。 图 6中所示的兼容状态机 20由 12个状态组成, 如状态 1-状态 12 所示, 这 12个状态分别代表了 ABI兼容过程中的各个独立步骤。 这 12 个状态之间的切换对应着 15 个执行动作, 如 A1-A15 所示。 下面来详 细说明整个兼容状态机 20 的工作流程, 即兼容状态机 20 完成兼容的 完整过程。

状态 1: 未识别。

若用户端启动一个第三方操作系统的第一目标 程序, 则宿主计算 机的操作系统将进入第一目标程序未识别状态 。

A1: 第一目标程序识别。

运行初始化程序的宿主计算机遍历各个已注册 ABI 组件的目标程 序识别动作, 以识别该第一目标程序。

状态 2: 第一进程未创建。

若第一目标程序识别成功, 宿主计算机的操作系统将进入第一进 程未创建状态。

A2: 第一进程创建。

若第一目标程序识别成功, 宿主计算机则为该第一目标程序创建 第一进程。

状态 3: 宿主计算机的操作系统进入第一进程已创建状 态。

A3: 映像预处理。

宿主计算机对第一目标程序进行重映射。

状态 4: 映像未加载。

A4: 映像加载。

宿主计算机根据第三方操作系统的第一目标程 序与宿主计算机的 操作系统的目标程序之间的重映射关系, 将重映射后的第一目标程序 加载至第一进程对应的宿主计算机内存中, 在这个过程中, 宿主计算 机需要对第一目标程序进行重定向操作, 其中, 将加载至内存中的第 一目标程序称为映像。

状态 5: 映像已加载。

A5: 映像重构。

宿主计算机对重映射后的映像进行相应的重构 操作, 如映像共享 重构和 /或二进制翻译重构等。

状态 6: 映像已重构。

A6: 执行。

宿主计算机执行第一进程。

状态 7: 执行。

宿主计算机的操作系统进入执行第一进程状态 。

A7: 检测重定向接口。

执行第一进程过程中, 若出现重定向操作, 则宿主计算机的操作 系统进入重定向接口未确定状态。

状态 8: 重定向接口未确定。

A8: 确定重定向接口。

宿主计算机确定重定向目标, 并转去执行与第三方操作系统的第 一目标程序相对应的宿主计算机的操作系统中 的目标程序。

状态 9: 重定向接口已确定。 A9: 恢复执行。

状态 10: 执行。

宿主计算机继续执行上述第一进程。

A10: 映像内容缺失。

若执行第一进程过程中, 映像出现了内容缺失, 则宿主计算机的 操作系统将重新进入映像未加载状态。

状态 11: 第一进程终止。

宿主计算机执行完第一进程之后, 终止第一进程。

All: 正常结束。

状态 12: 终止。

宿主计算机终止运行第一目标程序。

A12: 异常结束一。

若宿主计算机未成功加载映像, 宿主计算机则终止第一进程。 A13: 异常结束二。

若宿主计算机未成功确定重定向接口, 宿主计算机则终止第一进 程。

A14: 异常结束三。

若第一目标程序不是在宿主计算机的操作系统 中已注册的目标程 序, 即宿主计算机未成功识别第一目标程序, 宿主计算机则终止第一 进程。

A15: 终止。

宿主计算机终止运行第一目标程序。

如表 1所示, ABI兼容接口 2对应的是兼容状态机 20完整的兼容 过程, 也就是说, ABI兼容接口 2对应的是本发明实施例提供的兼容方 法。

表 1

A1 一目标程序识别 A9 恢复执行 A2 第一进程创建 A10 映像内容缺失

A3 映像预处理 All 正常结束

A4 映像加载 A12 异常结束一

A5 映像重构 A13 异常结束二

A6 执行 A14 异常结束三

A7 检测重定向接口 A15 终止

A8 确定重定向接口

表 1所示的 ABI 兼容接口 2相当于提供了一个结构体, 结构体的 各个成员就是相对应的函数, 每个需要与宿主计算机的操作系统兼容 的第三方操作系统, 需要实现一个相对应的结构体并将其注册到 ABI 兼容组件注册队列 21 中。 在兼容过程中, 兼容状态机 20通过执行第 三方操作系统提供的 ABI 兼容组件提供的函数而实现各个兼容过程, 进而支撑第一目标程序在宿主计算机的操作系 统中运行, 即可支持及 实现第一目标程序在宿主计算机的操作系统中 的兼容。

进一步地, 要使得第三方操作系统中的第一目标程序能在 宿主计 算机的操作系统中实现兼容, 首先需要完成第三方操作系统的 ABI 兼 容组件的注册。

ABI兼容组件的注册过程为:

( 1 ) 宿主计算机的操作系统为 ABI兼容接口提供一段空间, 以用 来保存各个 ABI兼容组件。

( 2 ) 宿主计算机的操作系统提供一个注册功能模块 , 以用来支持 第三方操作系统注册其对应的 ABI兼容组件。

( 3 )该指令将第三方操作系统的 ABI兼容组件的信息加入 ABI兼 容组件注册队列中, 以完成第三方操作系统的 ABI 兼容组件在宿主计 算机的操作系统中的注册工作。

需要说明的是, 为了保证第一目标程序能够在宿主计算机的操 作 系统中正常运行, 宿主计算机的操作系统需要为第一目标程序提 供兼 容的 API ( Application Programming Interface ,应用程序编程接口 )、 兼容的动态链接库以及兼容的第一目标程序处 理流程。 因此, 宿主计 算机的操作系统在执行 ABI 兼容接口对第一目标程序完成兼容的过程 中, 宿主计算机的操作系统首先需要将与第三方操 作系统相对应的动 态链接库等必备文件导入系统中, 同时, 宿主计算机的操作系统进行 第三方操作系统的 ABI兼容组件的注册。

示例性的, 以下分别以 Linux 操作系统的跨版本兼容和第三方操 作系统兼容 Linux操作系统的 ABI 为例来说明本发明实施例提供的兼 容方法的实现过程。

Linux操作系统的跨版本兼容:

Linux 操作系统不同版本之间二进制不兼容的主要原 因是高版本 的 Linux操作系统由于某些原因更改了 Linux操作系统系统的 API 和 数据结构, 从而导致原来低版本的 Linux 操作系统中的第一目标程序 不能在高版本的 Linux操作系统中直接运行。 如表 2 所示, 为 Linux 操作系统跨版本兼容时, 使用本发明实施例提供的兼容方法所需要的 ABI兼容接口。

由于 Linux 操作系统中的可执行文件均为 ELF ( Executable and

Linking Format, 可执行链接格式) , 因此, 低版本的 Linux 操作系 统在高版本的 Linux操作系统中进行兼容的 ABI 兼容接口能够大量筒 化, 即 ABI 兼容接口中的很多操作都可以为空, 包括可执行文件识别 以及可执行文件加载等等。 对于 Linux 操作系统跨版本之间的兼容, 对应的 ABI兼容接口中需要更改的只有 A9,也就是重定向接口的操作。 又由于低版本的 Linux操作系统与高版本的 Linux操作系统不兼容的 原因是改变了 Linux操作系统的 API, 因此, 只需在高版本的 Linux操 作系统中提供之前低版本的 Linux操作系统所对应的 API, 并在动态链 接过程中, 将在高版本的 Linux 操作系统中运行的第一目标程序的调 用重定向为之前低版本的 Linux 操作系统的 API 即可完成低版本的 Linux操作系统中的第一目标程序在高版本的 L i nux操作系统中直接运 行, 即可实现高版本的 L i nux操作系统对低版本的 L i nux操作系统的 兼容。

表 2 A2 Fork函数 A10 映像内容缺失

A3 exec函数族 All 正常结束

A4 力口载函数 A12 异常结束一

A5 空 A13 异常结束二

A6 空 A14 空

A7 dlsym函数开始 A15 空

A8 dlsym函数 其他操作系统兼容 Linux操作系统的 ABI:

在其他操作系统中兼容 Linux操作系统的 ABI 的一般做法是在其 他操作系统中实现与 Linux操作系统相兼容的 API,这种情况下对应的 ABI兼容接口如表 1所示。

在其他操作系统 (为了更好的描述, 下文将其他操作系统统称为 宿主计算机的操作系统) 中兼容 Linux操作系统的 ABI 的实现过程包 括:

( 1 )宿主计算机检查第一目标程序的文件格式 ELF是否为宿主计 算机的操作系统已注册的文件格式。

可以理解的是, 步骤 ( 1 ) 中的第一目标程序为 Linux操作系统中 的目标程序。

( 2 )若第一目标程序的文件格式 ELF为宿主计算机的操作系统已 注册的文件格式, 宿主计算机则在宿主计算机的操作系统中为第 一目 标程序创建第一进程。

( 3) 宿主计算机对第一目标程序进行重映射, 并生成用于指示第 一目标程序与宿主计算机的操作系统中的目标 程序之间的映射关系的 重映射表。

需要说明的是, 若宿主计算机操作系统中的目标程序的文件格 式 为类 ELF, 即宿主计算机的操作系统为类 ELF可执行环境, 则上述步骤 ( 3) 可以省略。

( 4 )根据上述生成的重映射表, 宿主计算机将第一目标程序加载 至第一进程对应的宿主计算机内存中, 同时对第一目标程序进行重定 位, 以生成重映射后的第一目标程序的映像。

( 5 ) 宿主计算机对上述映像进行重构。

需要说明的是, 若上述映像与其他映像之间进行共享一段程序 代 码的操作时, 需对上述映像进行映像共享重构操作; 若上述映像需进 行二进制翻译, 则在进行二进制翻译的过程中, 需对上述映像进行二 进制翻译重构操作, 以完成对上述映像的重构。

特别的, 若宿主计算机的操作系统中的目标程序格式与 Linux 操 作系统中的第一目标程序格式是兼容的, 以及宿主计算机的操作系统 与 Linux 操作系统的指令系统是相同的, 且上述映像与其他映像之间 无映像共享及无需对上述映像进行二进制翻译 时, 则上述步骤 ( 5 ) 是 可以省略的; 相反的, 若上述映像与其他映像之间存在映像共享或需 对上述映像进行二进制翻译时, 则上述步骤 ( 5 ) 是不能省略的。

( 6 ) 宿主计算机对上述重构后的映像进行重定向接 口操作, 以执 行第一进程。

在该步骤中, 宿主计算机需要将 Linux 操作系统中的第一目标程 序中的函数调用对应到宿主计算机的操作系统 中实现的与 Linux 操作 系统相对应的 API, 才可成功执行第一进程。

至此, 步骤 ( 1 ) 至步骤 ( 6 ) 完成了其他操作系统兼容 Linux 操 作系统的 ABI的过程。

本发明实施例提供的运行在兼容设备中的 ABI 兼容接口, 用于兼 容已有进程级 ABI 兼容技术, 并且方便以后对不同操作系统的 ABI 的 扩展。 使用该 ABI 兼容接口, 宿主计算机的操作系统能够方便的扩展 第三方操作系统的 ABI 的执行环境, 以及能够极大地兼容已有的目标 程序, 同时减少了对宿主计算机的操作系统的修改。

进一步地, 本发明实施例提供的 ABI 兼容组件注册队列, 用于使 得第三方操作系统在宿主计算机的操作系统中 注册其对应的 ABI 兼容 组件。 使用该 ABI 兼容组件注册队列, 第三方操作系统只需要实现与 其相对应的 ABI 兼容组件就可以在宿主计算机的操作系统中兼 容该第 三方操作系统中的目标程序了。 所属领域的技术人员可以清楚地了解到, 为描述的方便和筒洁, 仅以上述各功能模块的划分进行举例说明, 实际应用中, 可以根据需 要而将上述功能分配由不同的功能模块完成, 即将装置的内部结构划 分成不同的功能模块, 以完成以上描述的全部或者部分功能。 上述描 述的系统, 装置和单元的具体工作过程, 可以参考前述方法实施例中 的对应过程, 在此不再赘述。

在本申请所提供的几个实施例中, 应该理解到, 所揭露的系统, 装置和方法, 可以通过其它的方式实现。 例如, 以上所描述的装置实 施例仅仅是示意性的, 例如, 所述模块或单元的划分, 仅仅为一种逻 辑功能划分, 实际实现时可以有另外的划分方式, 例如多个单元或组 件可以结合或者可以集成到另一个系统, 或一些特征可以忽略, 或不 执行。 另一点, 所显示或讨论的相互之间的耦合或直接耦合或 通信连 接可以是通过一些接口, 装置或单元的间接耦合或通信连接, 可以是 电性, 机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可 以不是物理上分开 的, 作为单元显示的部件可以是或者也可以不是物 理单元, 即可以位 于一个地方, 或者也可以分布到多个网络单元上。 可以根据实际的需 要选择其中的部分或者全部单元来实现本实施 例方案的目的。

另外, 在本发明各个实施例中的各功能单元可以集成 在一个处理 单元中, 也可以是各个单元单独物理存在, 也可以两个或两个以上单 元集成在一个单元中。 上述集成的单元既可以采用硬件的形式实现, 也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实 现并作为独立的产 品销售或使用时, 可以存储在一个计算机可读取存储介质中。 基于这 样的理解, 本发明的技术方案本质上或者说对现有技术做 出贡献的部 分或者该技术方案的全部或部分可以以软件产 品的形式体现出来, 该 计算机软件产品存储在一个存储介质中, 包括若干指令用以使得一台 计算机设备 (可以是个人计算机, 服务器, 或者网络设备等) 或处理 器 (proce s sor ) 执行本发明各个实施例所述方法的全部或部分 步骤。 而前述的存储介质包括: U盘、移动硬盘、只读存储器(ROM , Read-On ly Memory ) 、 随机存取存储器 ( RAM , Random Acce s s Memory ) 、 磁碟或 者光盘等各种可以存储程序代码的介质。

以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不 局限于此, 任何熟悉本技术领域的技术人员在本发明揭露 的技术范围内, 可轻易想到变化或替换, 都应涵盖在本发明的保护范围之内。 因此, 本 发明的保护范围应以所述权利要求的保护范围 为准。