一种兼容方法及装置
技术领域
本发明涉及计算机领域,尤其涉及一种兼容方法及装置。
背景技术
在数据中心操作系统中,使用ABI(Application BinaryInterface,应用程序二进制接口)兼容技术是解决大量遗留应用程序问题的最直接的方法。ABI兼容技术指的是在宿主操作系统中模拟一个可供目标程序执行的二进制环境。采用ABI兼容技术时,目标程序不用更改就可在相应的宿主操作系统上执行。
目前使用的ABI兼容技术主要有系统级ABI兼容技术和进程级ABI兼容技术。系统级ABI兼容技术指的是在宿主操作系统中采用虚拟机的方式模拟一个可供目标程序执行的虚拟环境;进程级ABI兼容技术指的是在宿主操作系统中采用动态链接的方式模拟一个可供目标程序执行的虚拟环境。
现有技术中的ABI兼容技术为根据目标程序的操作系统在宿主操作系统中增加对应的可供目标程序执行的二进制环境,以使得该目标程序可在宿主操作系统模拟的二进制环境中执行,从而实现该目标程序在宿主操作系统中的兼容。
然而,由于目前各个操作系统的兼容技术相对独立,因此,上述ABI兼容技术只能实现某一种操作系统的ABI兼容,而不能实现不同的多种操作系统的ABI兼容。
发明内容
本发明的实施例提供一种兼容方法及装置,能够支持多种操作系统的ABI兼容及支持已有的ABI兼容技术,并且方便以后扩展多种ABI兼容技术。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明实施例提供一种兼容方法,包括:
若第一目标程序为本地已注册的目标程序,则为所述第一目标程序创建第一进程;
对所述第一目标程序进行重映射;
生成重映射表,所述重映射表指示所述第一目标程序与重映射后的所述第一目标程序之间的对应关系;
根据所述重映射表,将重映射后的所述第一目标程序加载至所述第一进程对应的本地内存中,以生成重映射后的所述第一目标程序的映像;
对所述映像进行重构;
确定重构后的所述映像的重定向接口,以执行所述第一进程。
在第一方面的第一种可能的实现方式中,所述对所述第一目标程序进行重映射的方法具体包括:
对所述第一目标程序进行段重组和/或偏移计算。
结合前述的第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述根据所述重映射表,将重映射后的所述第一目标程序加载至所述第一进程对应的本地内存中,以生成重映射后的所述第一目标程序的映像具体包括:
获取所述第一目标程序中包含的符号表及重定位表;
根据所述重映射表,将重映射后的所述第一目标程序加载至所述本地内存中,并根据所述符号表及重定位表,对所述重映射后的所述第一目标程序进行重定位,以生成所述映像。
结合前述的第一方面或第一方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第三种可能的实现方式中,所述对所述映像进行重构包括:
对所述映像进行映像共享重构和/或二进制翻译重构。
结合前述的第一方面或第一方面的第一种可能的实现方式至第三种可能的实现方式中的任一种实现方式,在第四种可能的实现方式中,所述确定重构后的所述映像的重定向接口的方法具体包括:
确定重构后的所述映像的重定向目标,所述重定向目标为本地中与重构后的所述映像对应的接口;
执行所述重定向目标,以确定重构后的所述映像的重定向接口。
结合前述的第一方面或第一方面的第一种可能的实现方式至第四种可能的实现方式中的任一种实现方式,在第五种可能的实现方式中,在执行所述第一进程的过程中,若所述映像缺失,则根据所述重映射表,重新将重映射后的所述第一目标程序加载至所述本地内存中,以生成所述映像。
第二方面,本发明实施例提供一种兼容设备,包括:
创建单元,用于若第一目标程序为本地已注册的目标程序,则为所述第一目标程序创建第一进程;
映射单元,用于对所述第一目标程序进行重映射;
生成单元,用于生成重映射表,所述重映射表指示所述第一目标与重映射后的所述第一目标程序之间的对应关系;
加载单元,用于根据所述重映射表,将重映射后的所述第一目标程序加载至所述第一进程对应的本地内存中,以生成重映射后的所述第一目标程序的映像;
处理单元,用于对所述映像进行重构;
所述处理单元,还用于确定重构后的所述映像的重定向接口,以执行所述第一进程。
在第二方面的第一种可能的实现方式中,
所述映射单元,具体用于对所述第一目标程序进行段重组和/或偏移计算。
结合前述的第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,
所述处理单元,具体用于获取所述第一目标程序中包含的符号表及重定位表;
以及所述加载单元,具体用于根据所述重映射表,将重映射后的所述第一目标程序加载至所述本地内存中,并根据所述符号表及重定位表,对所述重映射后的所述第一目标程序进行重定位,以生成所述映像。
结合前述的第二方面或第二方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第三种可能的实现方式中,
所述处理单元,用于对所述映像进行映像共享重构和/或二进制翻译重构。
结合前述的第二方面或第二方面的第一种可能的实现方式至第三种可能的实现方式中的任一种实现方式,在第四种可能的实现方式中,
所述处理单元,具体用于确定重构后的所述映像的重定向目标,以及执行所述重定向目标,以确定重构后的所述映像的重定向接口,所述重定向目标为本地中与重构后的所述映像对应的接口。
结合前述的第二方面或第二方面的第一种可能的实现方式至第四种可能的实现方式中的任一种实现方式,在第五种可能的实现方式中,
所述加载单元,还用于在所述处理单元执行所述第一进程的过程中,若所述映像缺失,则根据所述重映射表,重新将重映射后的所述第一目标程序加载至所述本地内存中,以生成所述映像。
本发明实施例提供一种兼容方法及装置,通过若第一目标程序为本地已注册的目标程序,则为第一目标程序创建第一进程,并对第一目标程序进行重映射,以生成重映射表,重映射表指示第一目标程序与重映射后的第一目标程序之间的对应关系,然后根据重映射表,将重映射后的第一目标程序加载至第一进程对应的本地内存中,以生成重映射后的第一目标程序的映像,以及对映像进行重构,并确定重构后的映像的重定向接口,进而以执行第一进程。通过该方案,若第三方操作系统的第一目标程序需在宿主计算机的操作系统中执行,且第一目标程序为宿主计算机的操作系统已注册的目标程序,则上述兼容方法可用于支持该第一目标程序在宿主计算机的操作系统中的兼容,同时能够支持多种操作系统的ABI兼容及已有的ABI兼容技术,并且方便以后扩展多种ABI兼容技术。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种兼容方法的方法流程图一;
图2为本发明实施例提供的一种兼容方法的方法流程图二;
图3为本发明实施例提供的兼容设备的结构示意图一;
图4为本发明实施例提供的兼容设备的结构示意图二;
图5为本发明实施例提供的ABI兼容接口的架构示意图;
图6为本发明实施例提供的兼容状态机的架构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
如图1所示,本发明实施例提供一种兼容方法,包括:
S101、若第一目标程序为本地已注册的目标程序,宿主计算机则为第一目标程序创建第一进程。
第一目标程序为与宿主计算机所安装的操作系统不同的第三方操作系统中的目标程序。由于宿主计算机的操作系统与第三方操作系统为不同的操作系统,因此,若要使得第一目标程序能在宿主计算机的操作系统中执行,则需实现宿主计算机的操作系统对第一目标程序的兼容。
示例性的,若要实现第一目标程序在宿主计算机的操作系统中的兼容,首先需宿主计算机需判断第一目标程序是否为本地(即宿主计算机的操作系统)已注册的目标程序,若第一目标程序为宿主计算机的操作系统已注册的目标程序,宿主计算机则为第一目标程序创建第一进程。
特别的,“进程”是操作系统结构的基础;是一个正在执行的程序;是计算机中正在运行的程序实例;是可以分配给处理器并由处理器执行的一个实体;或者是由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。
需要说明的是,本发明实施例提供的兼容方法可以为ABI兼容方法,在该方法中,只有经过宿主计算机的操作系统注册的目标程序才能在宿主计算机的操作系统中实现兼容,也就是说,只有在宿主计算机的操作系统中可成功注册第三方操作系统的ABI兼容组件的第三方操作系统才能够实现与宿主计算机操作系统的兼容。
S102、宿主计算机对第一目标程序进行重映射。
宿主计算机为第一目标程序创建了第一进程之后,宿主计算机对第一目标程序进行重映射。其中,宿主计算机如何对第一目标程序进行重映射,后续实施例会进行详细描述。
本领域普通技术人员可以理解,由于宿主计算机操作系统中的目标程序与第三方操作系统中的目标程序的组织结构可能会不相同,因此,宿主计算机会将第三方操作系统中的目标程序映射到宿主计算机的操作系统中的目标程序,从而使得第三方操作系统中的目标程序的组织结构与宿主计算机的操作系统中的目标程序的组织结构相同。
S103、宿主计算机生成重映射表,重映射表指示第一目标程序与重映射后的第一目标程序之间的对应关系。
宿主计算机对第一目标程序进行重映射的过程中,宿主计算机可以一边对第一目标程序进行重映射,一边生成相应的重映射表,也就是说,宿主计算机对第一目标程序进行重映射的结果为:第一目标程序的组织结构与宿主计算机的操作系统中的目标程序的组织结构相同,以及宿主计算机生成与重映射过程相对应的重映射表,该重映射表指示了进行重映射前的第一目标程序的组织结构与进行重映射后的第一目标程序的组织结构之间的对应关系。
S104、宿主计算机根据重映射表,将重映射后的第一目标程序加载至第一进程对应的本地内存中,以生成重映射后的第一目标程序的映像。
宿主计算机根据生成的重映射表,将进行重映射后的第一目标程序加载至第一进程对应的本地内存,即宿主计算机的内存中,从而生成与进行重映射后的第一目标程序相对应的映像。
需要说明的是,在计算机领域中,目标程序为保存在硬盘中的二进制文件;将硬盘中的目标程序加载至本地内存中则称为映像。
进一步地,对于本发明实施例提供的兼容方法,S101中创建的第一进程,则为进程的管理结构,也就是说,创建的第一进程为一个程序架构,而只有经过S104,将进行重映射后的第一目标程序加载至第一进程对应的宿主计算机的内存中,则第一进程才为运行在宿主计算机内存中的一个程序实例。
S105、宿主计算机对映像进行重构。
宿主计算机对第一目标程序进行了重映射(即预处理)之后,还需对加载至第一进程对应的本地内存中的第一目标程序,即第一目标程序的映像进行进一步处理,即宿主计算机需对第一目标程序的映像进行重构。
宿主计算机对第一目标程序的映像进行重构的过程即为在不改变第一目标程序实现功能的基础上,通过调整第一目标程序的程序代码,以对第一目标程序的质量、性能进行改善,从而使第一目标程序的设计模式和架构更为合理,进而提高第一目标程序的扩展性和可维护性。
S106、宿主计算机确定重构后的映像的重定向接口,以执行第一进程。
其中,宿主计算机对第一目标程序的映像进行重构后,开始执行第一进程,在第一进程执行过程中,若出现重定向操作,宿主计算机则确定重构后的映像的重定向接口,以继续执行第一进程。
本领域的普通技术人员可以理解,“重定向”为通过各种方法将网络或者系统的各种请求重新确定一个方向并转到该方向指示的位置。本发明实施例中,宿主计算机在执行第一进程的过程中,若出现重定向操作,宿主计算机则进入重定向接口未确定状态,然后宿主计算机将在本地(即宿主计算机的操作系统)中确定与第一目标程序的映像相对应的一个接口,并转去执行该接口,进而,宿主计算机将进入重定向接口已确定状态,即宿主计算机已确定重构后的映像的重定向接口,以继续执行第一进程。
当然,若宿主计算机执行完该接口,宿主计算机则返回第一进程中重定向操作的地方继续执行第一进程。
示例性的,宿主计算机在执行第一进程的过程中,若执行到第一目标程序的映像中有函数调用的地方,宿主计算机则在宿主计算机系统中确定与第一目标程序的映像中被调用函数功能相同的函数,并转去执行该函数,从而使得宿主计算机可以继续执行第一进程,当宿主计算机执行完该函数之后,宿主计算机将返回至函数调用之后的地址,以继续执行第一进程。
本发明实施例提供一种兼容方法,通过若第一目标程序为本地已注册的目标程序,则为第一目标程序创建第一进程,并对第一目标程序进行重映射,以生成重映射表,重映射表指示第一目标程序与重映射后的第一目标程序之间的对应关系,然后根据重映射表,将重映射后的第一目标程序加载至第一进程对应的本地内存中,以生成重映射后的第一目标程序的映像,以及对映像进行重构,并确定重构后的映像的重定向接口,进而以执行第一进程。通过该方案,若第三方操作系统的第一目标程序需在宿主计算机的操作系统中执行,且第一目标程序为宿主计算机的操作系统已注册的目标程序,则上述兼容方法可用于支持该第一目标程序在宿主计算机的操作系统中的兼容,同时能够支持多种操作系统的ABI兼容及已有的ABI兼容技术,并且方便以后扩展多种ABI兼容技术。
实施例二
如图2所示,本发明实施例还提供一种兼容方法,包括:
S201、若第一目标程序为本地已注册的目标程序,宿主计算机则为第一目标程序创建第一进程。
第一目标程序为与宿主计算机所安装的操作系统不同的第三方操作系统中的目标程序。由于宿主计算机的操作系统与第三方操作系统为不同的操作系统,因此,若要使得第一目标程序能在宿主计算机的操作系统中执行,则需实现宿主计算机的操作系统对第一目标程序的兼容。
示例性的,若要实现第一目标程序在宿主计算机的操作系统中的兼容,首先需宿主计算机判断第一目标程序是否为本地(即宿主计算机的操作系统)已注册的目标程序,若第一目标程序为宿主计算机的操作系统已注册的目标程序,宿主计算机则为第一目标程序创建第一进程。
需要说明的是,本发明实施例提供的兼容方法可以为ABI兼容方法,在该方法中,只有经过宿主计算机的操作系统注册的目标程序才能在宿主计算机的操作系统中实现兼容,也就是说,只有在宿主计算机的操作系统中可成功注册第三方操作系统的ABI兼容组件的第三方操作系统才能够实现与宿主计算机操作系统的兼容。
S202、宿主计算机对第一目标程序进行重映射。
本领域普通技术人员可以理解,由于宿主计算机操作系统中的目标程序与第三方操作系统中的目标程序的组织结构可能会不相同,因此,宿主计算机会将第三方操作系统中的目标程序映射到宿主计算机的操作系统中的目标程序,从而使得第三方操作系统中的目标程序的组织结构与宿主计算机的操作系统中的目标程序的组织结构相同。
本发明实施例中,宿主计算机对第一目标程序进行重映射的方法具体可以包括:
宿主计算机对第一目标程序进行段重组和/或偏移计算。具体的,由于宿主计算机操作系统中的目标程序与第三方操作系统中的目标程序的组织结构可能会不相同,因此,宿主计算机在对第一目标程序进行重映射的过程中,可能需要对第一目标程序中的各个程序代码段重新分配存放地址,即对第一目标程序中的各个程序代码段进行段重组,由于段重组后的各个程序代码段的存放地址发生了改变,因此,宿主计算机还需要对段重组后的各个程序代码段的偏移地址进行计算,以使得宿主计算机能够以调整后的存放地址准确地执行各个程序代码段。
需要说明的是,由于各个操作系统的差异,宿主计算机在对第一目标程序进行重映射时,可能只需对第一目标程序中的各个程序代码段进行段重组;也可能只需对第一目标程序中的各个程序代码段进行偏移计算;还可能既要对第一目标程序中的各个程序代码段进行段重组,又要对第一目标程序中的各个程序代码段进行偏移计算,实际重映射过程可根据不同操作系统的需求进行适应性调整,本发明不做限制。
S203、宿主计算机生成重映射表,重映射表指示第一目标程序与重映射后的第一目标程序之间的对应关系。
宿主计算机对第一目标程序进行重映射的过程中,宿主计算机可以一边对第一目标程序进行重映射,一边生成相应的重映射表,也就是说,宿主计算机对第一目标程序进行重映射的结果为:第一目标程序的组织结构与宿主计算机的操作系统中的目标程序的组织结构相同,以及宿主计算机生成与重映射过程相对应的重映射表,也就是说,重映射表指示了进行重映射前的第一目标程序的组织结构与进行重映射后的第一目标程序的组织结构之间的对应关系。
S204、宿主计算机获取第一目标程序中包含的符号表及重定位表。
宿主计算机从第一目标程序中获取相应的符号表以及重定位表。
计算机领域中,“符号表”为在源程序编译过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息的表格。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。另外,对于符号表组织、构造和管理方法的好坏还会直接影响编译系统的运行效率。
相应的,“重定位表”为在目标程序链接过程中,计算机对目标程序进行重定位时生成的用于指示目标程序的逻辑地址与目标程序在计算机内存中的物理地址之间的对应关系的表格。“重定位”则为把目标程序的逻辑地址空间变换为目标程序在计算机内存中的物理地址空间的过程。
需要说明的是,本发明实施例中提供的符号表和重定位表分别为在源程序编译过程中和在目标程序链接过程中生成的,并包含在第一目标程序中的。
S205、宿主计算机根据重映射表,将重映射后的第一目标程序加载至第一进程对应的本地内存中,并根据符号表及重定位表,对重映射后的第一目标程序进行重定位,以生成映像。
其中,宿主计算机根据生成的重映射表,将进行重映射后的第一目标程序加载至第一进程对应的本地内存,即宿主计算机的内存中,并根据从第一目标程序中获取的符号表和重定位表,对重映射后的第一目标程序进行重定位,以生成与第一目标程序相对应的映像。
本发明实施例中,宿主计算机根据符号表和重定位表对第一目标程序中的变量进行重定位,以生成与第一目标程序相对应的可以执行的映像。
本领域普通技术人员可以理解,未进行重定位之前的第一目标程序中变量的存放地址均为逻辑地址,而经过重定位后的第一目标程序中变量的存放地址均为计算机内存中的物理地址。
需要说明的是,在计算机领域中,目标程序为保存在硬盘中的二进制文件;将硬盘中的目标程序加载至本地内存中则称为映像。
进一步地,“进程”是操作系统结构的基础;是一个正在执行的程序;是计算机中正在运行的程序实例;是可以分配给处理器并由处理器执行的一个实体;或者是由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。对于本发明实施例提供的兼容方法,S201中创建的第一进程,则为进程的管理结构,也就是说,创建的第一进程为进程的一个程序架构,而只有经过S205,将进行重映射后的第一目标程序加载至第一进程对应的宿主计算机的内存中,则第一进程才为运行在宿主计算机内存中的一个程序实例。
S206、宿主计算机对映像进行重构。
其中,宿主计算机对第一目标程序进行了重映射(即预处理)之后,还需对加载至第一进程对应的本地内存中的第一目标程序进行进一步处理,即宿主计算机对第一目标程序的映像进行重构。
宿主计算机对第一目标程序的映像进行重构的过程即为在不改变第一目标程序实现功能的基础上,通过调整第一目标程序的程序代码,以对第一目标程序的质量、性能进行改善,从而使第一目标程序的设计模式和架构更为合理,进而提高第一目标程序的扩展性和可维护性。
本发明实施例中,宿主计算机对第一目标程序的映像进行重构时需考虑映像共享和二进制翻译两个方面的需求,即宿主计算机可能需对第一目标程序的映像进行映像共享重构和/或二进制翻译重构。
示例性的,由于映像共享过程中需要将计算机内存中的,两个或多个目标程序共享的一段程序代码或一段数据定向到某个固定的位置,因此,在第一目标程序的映像与其他目标程序的映像进行映像共享时,则宿主计算机需对第一目标程序的映像进行重构,即映像共享重构。
“二进制翻译”是一种直接翻译可执行二进制程序的技术,它能够把一种处理器上的二进制程序翻译到另外一种处理器上执行,从而使得不同处理器之间的二进制程序可以很容易地相互移植,扩大了硬件/软件的适用范围。
若第三方操作系统与宿主计算机的操作系统为不同的指令系统,则宿主计算机需对第一目标程序的映像进行二进制翻译,在进行二进制翻译过程中,宿主计算机需对第一目标程序的映像进行重构,以重新布局该映像,即二进制翻译重构。
需要说明的是,在不同的需求下,宿主计算机对第一目标程序的映像进行重构的方式也不相同,宿主计算机可以对第一目标程序的映像进行映像共享重构,也可以对第一目标程序的映像进行二进制翻译重构,还可以对第一目标程序的映像既进行映像共享重构,又进行二进制翻译重构,具体的重构方式,可根据不同操作系统的实际需求进行适应性调整,本发明不做限制。
S207、宿主计算机确定重构后的映像的重定向目标,重定向目标为本地中与重构后的映像对应的接口。
宿主计算机对第一目标程序的映像进行重构后,开始执行第一进程,在第一进程执行过程中,若出现重定向操作,宿主计算机则确定重构后的映像的重定向目标,以继续执行第一进程。
本领域的普通技术人员可以理解,“重定向”为通过各种方法将网络或者系统的各种请求重新确定一个方向并转到该方向指示的位置。本发明实施例中,宿主计算机在执行第一进程的过程中,若出现重定向操作,宿主计算机则进入重定向接口未确定状态,然后宿主计算机将在本地(即宿主计算机的操作系统)中确定与第一目标程序的映像相对应的一个接口,即确定重定向目标。
S208、宿主计算机执行重定向目标,以确定重构后的映像的重定向接口,进而以执行第一进程。
宿主计算机确定了重定向目标后,将转去执行该重定向目标,进而,宿主计算机将进入重定向接口已确定状态,即宿主计算机已确定重构后的映像的重定向接口,以继续执行第一进程。
当然,若宿主计算机执行完该重定向目标,宿主计算机则返回第一进程中重定向操作的地方继续执行第一进程。
示例性的,宿主计算机在执行第一进程的过程中,若执行到第一目标程序的映像中有函数调用的地方,宿主计算机则在宿主计算机系统中确定与第一目标程序的映像中被调用函数功能相同的函数,并转去执行该函数,从而使得宿主计算机可以继续执行第一进程,当宿主计算机执行完该函数之后,宿主计算机将返回至函数调用之后的地址,以继续执行第一进程。
进一步地,在执行第一进程的过程中,若第一目标程序的映像缺失,则宿主计算机根据重映射表,重新将重映射后的第一目标程序加载至第一进程中,以生成映像,进而重新执行第一进程。
S209、宿主计算机终止第一进程。
宿主计算机终止第一进程的情况可以为下述的任意一种:
(1)宿主计算机执行完第一进程之后,终止第一进程。
(2)宿主计算机未成功加载第一目标程序时,终止第一进程。
(3)宿主计算机未成功确定第一目标程序的映像的重定向接口时,终止第一进程。
上述(1)为执行完第一进程后的正常结束,而(2)和(3)均为执行第一进程过程中发生异常时的异常结束。
特别地,若S201中第一目标程序不是宿主计算机的操作系统已注册的目标程序,也就是说,该第一目标程序不能在该宿主计算机的操作系统中实现兼容,因此,宿主计算机则直接终止对该第一目标程序的兼容过程。
需要说明的是,上述S201至S209为实现第三方操作系统中的第一目标程序在宿主计算机的操作系统中兼容的完整过程,然而对于已经兼容的指令和第一目标程序的文件格式等来说,在实现第一目标程序兼容的过程中,这些步骤不一定都需要执行,本发明实施例提供的兼容方法中,第三方操作系统在宿主计算机的操作系统中注册的ABI兼容组件可根据实际需求执行必须的步骤,对于不需要执行的步骤,则可将对应步骤的指令设置为空。
本发明实施例提供一种兼容方法,通过若第一目标程序为本地已注册的目标程序,则为第一目标程序创建第一进程,并对第一目标程序进行重映射,以生成重映射表,重映射表指示第一目标程序与重映射后的第一目标程序之间的对应关系,然后根据重映射表,将重映射后的第一目标程序加载至第一进程对应的本地内存中,以生成重映射后的第一目标程序的映像,以及对映像进行重构,并确定重构后的映像的重定向接口,进而以执行第一进程。通过该方案,若第三方操作系统的第一目标程序需在宿主计算机的操作系统中执行,且第一目标程序为宿主计算机的操作系统已注册的目标程序,则上述兼容方法可用于支持该第一目标程序在宿主计算机的操作系统中的兼容,同时能够支持多种操作系统的ABI兼容及已有的ABI兼容技术,并且方便以后扩展多种ABI兼容技术。
实施例三
如图3所示,本发明实施例提供一种兼容设备1,包括:
创建单元10,用于若第一目标程序为本地已注册的目标程序,则为所述第一目标程序创建第一进程。
映射单元11,用于对所述第一目标程序进行重映射。
生成单元12,用于生成重映射表,所述重映射表指示所述第一目标与重映射后的所述第一目标程序之间的对应关系。
加载单元13,用于根据所述重映射表,将重映射后的所述第一目标程序加载至所述第一进程对应的本地内存中,以生成重映射后的所述第一目标程序的映像。
处理单元14,用于对所述映像进行重构。
所述处理单元14,还用于确定重构后的所述映像的重定向接口,以执行所述第一进程。
进一步地,所述映射单元11,具体用于对所述第一目标程序进行段重组和/或偏移计算。
进一步地,所述处理单元14,具体用于获取所述第一目标程序中包含的符号表及重定位表。
以及所述加载单元13,具体用于根据所述重映射表,将重映射后的所述第一目标程序加载至所述本地内存中,并根据所述符号表及重定位表,对所述重映射后的所述第一目标程序进行重定位,以生成所述映像。
进一步地,所述处理单元14,用于对所述映像进行映像共享重构和/或二进制翻译重构。
进一步地,所述处理单元14,具体用于确定重构后的所述映像的重定向目标,以及执行所述重定向目标,以确定重构后的所述映像的重定向接口,所述重定向目标为本地中与重构后的所述映像对应的接口。
进一步地,所述加载单元13,还用于在所述处理单元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决定。
初始化程序22负责启动兼容状态机20,即初始化程序22首先检查第一目标程序是否为宿主计算机的操作系统已注册的目标程序,若是,则说明第一目标程序可以在宿主计算机的操作系统中实现兼容,初始化程序22则启动兼容状态机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:第一进程终止。
宿主计算机执行完第一进程之后,终止第一进程。
A11:正常结束。
状态12:终止。
宿主计算机终止运行第一目标程序。
A12:异常结束一。
若宿主计算机未成功加载映像,宿主计算机则终止第一进程。
A13:异常结束二。
若宿主计算机未成功确定重定向接口,宿主计算机则终止第一进程。
A14:异常结束三。
若第一目标程序不是在宿主计算机的操作系统中已注册的目标程序,即宿主计算机未成功识别第一目标程序,宿主计算机则终止第一进程。
A15:终止。
宿主计算机终止运行第一目标程序。
如表1所示,ABI兼容接口2对应的是兼容状态机20完整的兼容过程,也就是说,ABI兼容接口2对应的是本发明实施例提供的兼容方法。
表1
A1 |
第一目标程序识别 |
A9 |
恢复执行 |
A2 |
第一进程创建 |
A10 |
映像内容缺失 |
A3 |
映像预处理 |
A11 |
正常结束 |
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 andLinking Format,可执行链接格式),因此,低版本的Linux操作系统在高版本的Linux操作系统中进行兼容的ABI兼容接口能够大量简化,即ABI兼容接口中的很多操作都可以为空,包括可执行文件识别以及可执行文件加载等等。对于Linux操作系统跨版本之间的兼容,对应的ABI兼容接口中需要更改的只有A9,也就是重定向接口的操作。又由于低版本的Linux操作系统与高版本的Linux操作系统不兼容的原因是改变了Linux操作系统的API,因此,只需在高版本的Linux操作系统中提供之前低版本的Linux操作系统所对应的API,并在动态链接过程中,将在高版本的Linux操作系统中运行的第一目标程序的调用重定向为之前低版本的Linux操作系统的API即可完成低版本的Linux操作系统中的第一目标程序在高版本的Linux操作系统中直接运行,即可实现高版本的Linux操作系统对低版本的Linux操作系统的兼容。
表2
A1 |
空 |
A9 |
空 |
A2 |
Fork函数 |
A10 |
映像内容缺失 |
A3 |
exec函数族 |
A11 |
正常结束 |
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兼容组件就可以在宿主计算机的操作系统中兼容该第三方操作系统中的目标程序了。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。