CN107077337B - 用于执行根据两个指令集架构编译的应用编码的系统和方法 - Google Patents
用于执行根据两个指令集架构编译的应用编码的系统和方法 Download PDFInfo
- Publication number
- CN107077337B CN107077337B CN201480083286.2A CN201480083286A CN107077337B CN 107077337 B CN107077337 B CN 107077337B CN 201480083286 A CN201480083286 A CN 201480083286A CN 107077337 B CN107077337 B CN 107077337B
- Authority
- CN
- China
- Prior art keywords
- code
- instruction set
- set architecture
- interaction
- application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
公开了与具有多个ISA的应用(118)代码的执行相关联的方法、装置和存储介质。在各种实施例中,运行时间环境(104)可执行具有多个指令集架构的应用(118)代码。运行时间环境(104)可被配置为根据第一指令集架构来执行应用(118)代码的第一代码(120),同时还被配置为根据将第一指令集架构扩展的第二指令集架构来执行应用(118)代码的第二代码(122)。使用门(124),运行时间环境(104)可适于适配从第一代码(120)到第二指令集架构的交互和/或适配从第二代码(122)到第一指令集架构的交互,并且随后,返回根据第一指令集架构或第二指令集架构分别地执行应用(118)代码。还可公开其他实施例。
Description
背景技术
本文所提供的背景描述是为了在总体上呈现本公开的环境。除非本文中另有指示,否则本章节中所描述的材料对于本申请的权利要求书而言并非现有技术,且亦非承认包括在本章节中就为现有技术。
计算设备可以由其指令集架构(ISA)来表征。通常,计算设备可包括操作系统(OS)服务,并且该OS服务可包括针对计算设备的ISA开发的运行时间库服务(LIB),便于应用开发者开发操作于计算设备上的应用。例如,各种智能手机可以通过ARM处理器及其ISA的使用来表征。这些智能手机可包括OS,例如,苹果电脑的iOS,或谷歌的安卓,用以支持针对各自的智能手机开发的各种应用。
随着中央处理单元(CPU)架构的发展,计算设备可包括CPU,该CPU适于提供某些新特征—例如,英特尔处理器系列的IA-64可提供额外的资源和能力(例如,附加的寄存器、基于寄存器的自变量,以及指令指针相对寻址)。然而,可能已经在其中存储了传统应用的计算设备可能不适于利用新CPU架构的新特征。传统上,为利用新特征,不得不基于新的ISA将传统应用重新编译,例如32位的应用可被重新编译后运行于64位模式。然而,对整个应用的重新编译可能是不切实际的。例如,即使被重新编译到64位的ISA,应用也可能依赖于还未移植到64位的ISA的系统库。
附图说明
本发明的实施例通过示范性实施例的方式来描述,但并不受限于此,其中本发明的实施例通过附图中相同的附图标记指示相同的元件进行说明,其中:
图1是根据各种实施例示出具有运行时间环境的用于执行具有多个指令集架构的应用代码的计算系统的框图,所述运行时间环境具有沙箱。
图2是根据各种实施例示出具有运行时间环境、加载器以及编译工具的用于执行具有多个指令集架构的应用代码的计算系统的框图。
图3是根据各种实施例示出具有运行时间环境的计算系统的框图,其中运行时间环境具有快速查找函数以及库调用函数,以执行具有多个指令集架构的应用代码。
图4是根据各种实施例示出执行具有多个指令集架构的应用代码的方法的流程图。
图5是根据各种实施例示出执行具有多个指令集架构的应用代码的另一种方法的流程图。
图6示出了具有指令的示例性非暂态计算机可读存储介质,所述指令被配置为实施本公开的实施例的所有方面或选定方面。
具体实施方式
示例性实施例的各个方面将使用通常由本领域技术人员采用来向本领域其他技术人员传达其工作实质的术语来描述。然而,本领域技术人员将会了解,仅用所描述的方面中的一些就可以实施备选实施例。为了解释的目的,阐述了特定数字、材料和配置,以便提供对示例性实施例的透彻理解。然而,本领域技术人员将会了解,即使没有这些具体细节也可以实施备选实施例。在其他实例中,为了不混淆示例性实施例,可省略或简化公知特征。
各种操作将被轮流地描述为多个分离的操作,以最有助于理解该示例性实施例的方式;然而,描述的顺序不应解释为暗示了这些操作必须是依赖于顺序的。特别地,这些操作不必按照演示顺序执行。进一步,作为独立操作的操作描述不应被解释为要求这些操作必须独立地执行和/或由分离的实体执行。对作为独立模块的实体和/或模块的描述同样不应被解释为要求这些模块是分离的和/或执行分离的操作。在各种实施例中,示出的和/或描述的操作、实体、数据和/或模块可被融合、分裂成更进一步的子部件、和/或被省略。
短语“在一个实施例中”或“在实施例中”被重复使用。该短语通常不指代相同的实施例;然而也可能会指代相同实施例。术语“包括”、“具有”以及“包含”是同义的,除非上下文另有指出。短语“A/B”意思是“A或B”。短语“A和/或B”意思是“(A)、(B)或(A和B)”。短语“A、B和C中至少一个”意思是“(A)、(B)、(C)、(A和B)、(A和C)、(B和C)或(A、B和C)”。
图1示出了根据本发明公开的各种实施例与具有用于执行具有多个ISA的应用代码的沙箱120的运行时间环境104相结合的示例性计算系统100。如图所示,对于示例性实施例,计算系统100可包含处理器及存储器布置102,该处理器及存储器布置102被配置为具有如图所示相互耦合的至少一个处理器112、操作系统(OS)内核114、多个系统库116、运行时间环境104、图形处理单元(GPU)106、显示器108以及网络接口110。
计算系统100可为服务器、台式计算机、笔记本计算机、平板电脑、智能手机、个人数字助理、游戏控制台、因特网设备或其他类似的计算系统。计算系统100的实例可包括,但不限于,可从美国加利福尼亚州帕洛阿尔托的惠普公司获得的服务器,可从美国德克萨斯州奥斯丁的戴尔电脑公司获得的台式或笔记本计算机,可从美国加利福尼亚州库比蒂诺的苹果公司获得的智能手机及平板电脑,可从日本东京的任天堂公司获得的游戏控制台等。
处理器及存储器布置102旨在表示处理器及存储器布置的宽泛范围,包括,但不限于,具有各种执行速度及功耗的单核或多核处理器的布置,以及具有一级或多级缓存的各种架构的存储器,以及各种类型的存储器,例如,动态随机存取、闪存等。在各种实施例中,GPU 106可被配置为向OS内核114提供视频解码和/或图像处理功能,而显示器108可被配置成使得能够在其上渲染内容。类似地,GPU 106以及显示器108旨在表示为本领域公知的宽泛范围的图形处理器和显示元件。同样地,一个或多个网络134旨在表示为本领域公知的宽泛范围的网络。网络134的实例可包括有线或无线、局域或广域、个人或公共网络,包括因特网。
处理器及存储器布置102可包括至少一个处理器112。处理器112可包括,例如,CPU、单核或多核微处理器等。处理器112可被配置为用于一种架构同时也支持另一种架构。例如,处理器112可为支持32位操作的64位处理器(例如,IA-64)。对应地,OS内核114可被配置用于一种架构同时也支持另一种架构,例如,OS内核114可为支持32位操作的64位内核。OS内核114可另外管理存储器资源、调度任务执行等。
为了支持与底层系统的交互,处理器及存储器布置102可包括多个系统库116。系统库116可被配置为提供应用118与操作系统内核114之间的调用。系统库116也可提供各种平台操作功能,例如,文件存储以及输入/输出操作。系统库116中的至少一个系统库可根据一个并非被配置成使用OS内核114和/或处理器112架构的所有特征的ISA来进行编译——也即,OS内核114和/或处理器112可被配置为用于在系统库116中的至少一个系统库的架构上进行扩展的架构。例如,系统库116中的至少一个系统库可为32位库。
在实施例中,处理器及存储器布置102可在其中加载有应用118。应用118旨在表示本技术领域公知的广泛范围的应用。该应用118的实例可包括,但不限于,个人助理应用、生产力应用或社交网络应用,例如,日历、文字处理、电子表格、推特(Twitter)、脸书(Facebook)等,或通用应用代理,例如浏览器。
在实施例中,应用118可包括根据第一ISA编译的第一代码120以及根据扩展了第一ISA的第二ISA编译的第二代码122。在一个实施例中,第一代码120可根据32位的ISA编译,而第二代码122可根据64位ISA编译。在执行期间,作为根据第一ISA编译的结果,第一代码120可遵循第一应用二进制接口(ABI)(例如,32位ABI);在此情况下,作为根据第二ISA编译的结果,第二代码122可遵循不同的ABI(例如,64位ABI)。因此,应用118的第一代码120和第二代码122当在一个进程中执行时可能不能彼此交互,并且因此当在该进程中执行时不能共享数据。例如,由于32位模式的指针大小为四个字节而64位模式的指针大小为八个字节,所以在32位模式中与第一代码120相关联的数据布局和/或对齐可能不同于在64位模式中的与第二代码122相关联的数据布局和/或对齐。
处理器及存储器布置102可以在其中加载有用于执行具有多个ISA的应用118的运行时间环境104。在一个实施例中,运行时间环境104可包括进程虚拟机(PVM)。该运行时间环境104可将第一代码120与第二代码122分离,并可以管理第一代码120与第二代码122之间的交互。关于这种分离,运行时间环境104可具有用于执行第二代码的沙箱126。沙箱126可以用作虚拟容器以便第二代码122的操作不直接与其他组件(例如,第一代码120和/或系统库116)交互。因此,应用118在其中执行的进程可被配置用于执行根据第一ISA编译的第一代码120,而根据第二ISA编译的第二代码122可该进程中在沙箱126内执行。关于沙箱126,运行时间环境104可确保使得应用118的执行控制(execution control)与沙箱126交叉(例如,在32位模式与64位模式之间)的交互可以被很好地处理。
在各种实施例中,运行时间环境104可被配置成在第一代码120的执行或第二代码122的执行期间拦截交互,也即使得应用118的执行控制被转移到另一模式(例如,另一个ISA和/或另一个ISA ABI)。例如,在执行第一代码120(其可与32位ISA相关联)期间,交互可以使应用118的执行控制被转移到64位模式,例如可与64位ISA相关联的第二代码122。类似地,在执行第二代码122(其可与64位ISA相关联)期间,交互可以使应用118的执行控制被转移到32位模式,例如可与32位ISA相关联的第一代码120,或系统库116的32位系统库。
在各种实施例中,被运行时间环境104拦截的交互可以是从第一代码120到第二代码122的调用、从第二代码122到第一代码120的调用、从第一代码120到根据第二ISA编译的系统库116的库的调用、从第二代码122到根据第一ISA编译的库的调用,或是可在执行控制被转移时被拦截的与OS内核114相关联的信号。
在一个实施例中,来自OS内核114的信号可中断第二代码122。因为应用118在其中运行的进程可被配置为用于第一ISA(例如,32位模式),所以与第一代码120相关联的寄存器响应于这种中断可被默认存储和/或恢复。然而,运行时间环境104可被配置为存储和/或恢复与第二代码122相关联的寄存器,例如,当在沙箱126内用第二代码122进行应用118的执行控制时。
运行时间环境104可被配置成适配从第一ISA到第二ISA的或将从第二ISA到第一ISA的被拦截的交互,其中可包括从与第一ISA相关联的第一ABI格式到与第二ISA相关联的第二ABI格式的适配、或从第二ABI格式到第一ABI格式的适配。为了适配交互,运行时间环境104可适于插入开关门124。使用开关门124,应用118的执行控制可被从第一代码120或第二代码122(例如,在32位模式与64位模式之间)转移。另外,运行时间环境104可适于插入返回门124。当执行控制要被返回至第一代码120或第二代码122时,运行时间环境可被配置成使用返回门124再次转移执行控制(例如,在64位模式与32位模式之间)。
运行时间环境可将开关/返回门124内联(inline)至可使执行控制从第一代码120或第二代码122转移的任意代码,以便第一代码120和第二代码122可在同一个进程中执行。在一个实施例中,运行时间环境104可静态地插入一个或多个门124,例如,在应用118执行之前。在另一实施例中,运行时间环境104可动态地插入一个或多个门124,例如,在应用118执行期间。在门124被动态插入的实施例中,运行时间环境104可包括PVM。
为了从第一代码120或第二代码122的执行控制转移,运行时间环境104的开关门124可被配置成,例如,存储一个或多个寄存器、调整数据大小、调整数据对齐、调整数据布局、转换调用(例如,与第一代码120或第二代码122的应用程序接口(API)相关联的调用、从第二代码122到根据第一ISA编译的系统库116中的一个系统库的调用等),存储与OS内核114相关联的信号,和/或存储寄存器。在一个实施例中,开关门124可被配置成转换与第一ISA相关联的第一ABI格式和与第二ISA相关联的第二ABI格式之间的调用,并且对应地,返回门124可被配置成从第一或第二ABI返回至第一或第二ABI中的另一个。
在从第一代码120或第二代码122执行控制转移后,对应地,可执行由交互引起的与第二ISA或第一ISA相关联的一个或多个操作。例如,交互可包括从第一代码120到第二代码122的函数的调用以及执行控制的转移可包括回调函数的执行。
随后,执行控制可返回到第一代码120或第二代码122。运行时间环境104可利用返回门124将执行控制返回至第一代码120或第二代码122。在各种实施例中,返回门124可适于恢复一个或多个寄存器、恢复对数据对齐的调整、恢复对数据大小的调整、恢复对数据布局的调整、对与第一代码120或第二代码122相关联的相应的ISA等的响应(例如,回调函数的结果)进行适配。
在应用118执行期间,处理器112可提供可跳转至与第一代码120相关联的段(segment)或与第二代码122相关联的段的指令。OS内核114可为第一代码120和第二代码122创建不同的段。基于与一个或多个跳转相关联的来自处理器112的指令和由OS内核114提供的代码段描述符,运行时间环境104可插入开关门124及对应的返回门124以将执行“去向”和“来自”第一代码120或第二代码122(例如,在32位模式和64位模式之间)的控制转移。表1和表2示出了用于32位ISA(例如,x86 ISA)和64位ISA(例如,x64 ISA)的与第一代码120相关联的段或与第二代码122相关联的段之间的跳转实例。
表1
表1所示出的伪汇编属于美国电话电报公司(AT&T)样式(也即,操作-代码源,目的地)。在该实例中,“ljmp”是由处理器112提供的远跳(FAR JUMP)指令。“USER_64_CS”是由OS内核114提供的与第二代码122(例如,64位代码)相关联的16位长代码段,而“USER_32_CS”也是由OS内核114提供的与第一代码120(例如,32位代码)相关联的8位长代码段。“code_64_addr”是与第二代码122入口点(例如,执行控制转移到沙箱126内的第二代码122)相关联的64位地址,而“code_32_addr”是与第一代码120入口点(例如,执行控制转移到第一代码120)相关联的32位地址。“.code32”及“.code64”是分别用于第一代码120及第二代码122的编译器伪指令。
表2
表2示出了另一实例,其中可用“远调用(far call)”和一个匹配的“远返回(farret)”进行跳转。这种实现方式可在与一个或多个跳转的执行相关联的簿记上提供改进的自动化。“lcall”及“lret”可以是由处理器112提供的在64位模式与32位模式之间切换的指令。“PREPARE-ARGS”用于处理32位模式与64位模式之间的调用约定。例如,“PREPARE-ARGS”可将堆栈的自变量拷贝至64位寄存器(或者相反),由于与64位ISA相关联的ABI格式通过寄存器传递自变量,而与32位ISA相关联的ABI格式通过堆栈传递自变量。类似地,如果必要,“PREPARE-RES”可转换返回值。
在与表2实施例一致的一个实施例中,开关/返回门124可以是自动化的。可为作为函数调用的开关/返回门124提供与目标函数相关联的地址的输入参数至第一代码120或第二代码122。开关门124可存储与被调用代码(例如,第一代码120或第二代码122)相关联的寄存器以及调用至目标函数,并且随后返回门124可恢复寄存器并返回至调用代码(例如,第一代码120或第二代码122中的另一个)。
在用于32位到64位模式开关的示例性开关/返回门124的实施例中,“esi”及“edi”为第一代码120的32位寄存器。在第一代码120的转移执行控制期间,这些寄存器可以不保存。因此,开关门124可需要存储32位寄存器,并且返回门124可在远调用之后恢复32位寄存器。类似地,在用于64位到32位模式开关的示例性开关/返回门124的实施例中,“rbx”及“rbp”为第一代码120的64位寄存器。当执行控制转移/返回从/至第二代码120时,这些寄存器部分保存/恢复。然而,开关门124可以存储64位寄存器,并且返回门124可在远调用之后可恢复64位寄存器。
现在参考图2,该框图根据本发明的各种实施例示出了与运行时间环境204、加载器230以及编译工具232结合的用于执行具有多个ISA的应用代码的示例性计算系统200。在与图1所描述的实施例相关联,计算系统200可以为计算系统100的实施例,处理器及存储器布置202可以为处理器及存储器布置102的实施例,运行时间环境204可以为运行时间环境104的实施例,处理器212可以为处理器112的实施例,OS内核214可以为OS内核114的实施例,系统库216可以为系统库116的实施例,和/或开关/返回门224可以为开关/返回门124的实施例。运行时间环境204可在其中执行具有第一代码220和第二代码222的应用218,具有第一代码220和第二代码222的应用218可以为具有第一代码120和第二代码122的应用118的实施例。第二代码222可在运行时间环境204中的沙箱226内执行,沙箱226可以为沙箱126的实施例。
OS内核214可以与系统加载器(未示出)相关联,该系统加载器可以为任意传统加载器。系统加载器可负责将系统库216加载至处理器及存储器配置204的物理存储器内。系统加载器可将应用218的第一代码220加载至处理器及存储器配置204的物理存储器内。除了应用218的第一代码220,应用218可由根据对将第一代码220进行编译的ISA进行扩展的ISA进行编译的第二代码222组成——例如,第一代码可根据32位ISA进行编译,而第二代码222可根据64位ISA进行编译。因此,系统加载器可能不足以加载第二代码222。
除了系统加载器,计算系统200可包括加载器230加载根据扩展第一代码220的第一ISA的第二ISA编译的代码至处理器及存储器布置202的物理存储器内。在一个实施例中,加载器230被配置成加载与第二ISA相关联的库(例如,系统库216的库)至与第一ISA相关联的地址空间内。进一步,加载器230可适于将第一代码220或第二代码222与开关/返回门224中的至少一个链接。加载器230可被配置为解决任意未解决的与调用系统库216相关联的应用118的符号名称和/或与系统库216相关联的对应的门224的地址。
加载器230可使用大量已知方法的任意一种方法获取对与OS内核214相关联的系统加载器的负载的控制。这些已知方法的实施例可包括基于二进制格式的控制转移的使用或当由OS内核214支持的加载/预加载的变量。在其他实施例中,与OS内核214有关的系统加载器可被修改为促进控制转移到加载器230。
在实施例中,计算系统200可包括编译工具232。编译工具可被配置成根据扩展第一ISA的第二ISA编译应用218的第二代码222。在编译期间,编译工具232可被配置成遵循以下ABI:承担对第二ISA进行编码但遵循第一ISA的数据大小和对齐。在一个实施例中,编译工具232可被配置成根据第二ISA编译系统库216中的一个或多个系统库,但是以当第一代码220与经过编译工具232编译的系统库216交互时避免不兼容的数据布局和/或排列的方式。
编译器的实施例可能是相似的和/或包括在编译工具232内的,该实施例包括从美国加利福尼亚州的圣克拉拉的英特尔公司获得的支持x32ABI的编译器,该编译器承担64位编码但遵循32位数据大小和对齐,和/或动态代码发生器在x86处理内产生x32代码。在实施例中,用多种已知方法中的任意一种可调用编译工具232。在一个实施例中,应用218的调用(例如,通过用户输入)可对应地调用编译工具232。在一个实施例中,编译工具232可包括用于编译的动态准时(JIT)引擎。
在实施例中,运行时间环境204可包括PVM。PVM 204可被配置成根据第一代码220的第一ISA(例如,32位ISA以及相关联的ABI格式)操作。在这些实施例中,编译工具232可被配置成根据第二ISA(例如,64位ISA以及相关联的ABI格式)产生准时代码(例如第二代码222和/或系统库216)。PVM 204可被配置成托管(host)沙箱226,该沙箱在遵循第一ISA的进程内根据第二ISA操作。PVM 204可适于使用各种API映射技术处理基于动态连接(例如调用到/从第一代码220和/或第二代码222)的函数调用及回调。在一些实施例中,PVM 204可提供对超过那些可用于第一ISA和/或返回指令指针(RIP)相对定址的额外的寄存器。在一个实施例中,PVM 204可被配置为固定地将与第二ISA相关联的寄存器映射到第一ISA,从而可以减少与寄存器分配和/或寄存器加载相关联的转换开销。
PVM 204可被配置成插入开关/返回门224。在实施例中,PVM 204可与加载器230交互以定位已暴露的符号信息并将第一代码220和/或第二代码222与开关/返回门224的一个或多个连接用于与不同ISA相关联的执行控制转移。在实施例中,PVM 204和/或加载器230可能不能在链接和/或加载期间拦截一个或多个交互;然而,由于可在PVM 204内执行第一代码220、第二代码222和/或系统库216,所以PVM 204可具有对交互的控制并可被配置成在执行期间动态插入一个或多个开关/返回门224。对于OS内核214的信号而言,PVM 204可被配置成拦截一个或多个信号以及在第一ISA与第二ISA之间转换,以便使一个或多个寄存器状态存储在信号处理机内。在信号处理后,PVM 204可被配置成根据第一ISA或第二ISA产生一个“假”信号帧并且根据第一ISA或第二ISA使用一个“信号-返回(sig-return)”返回一个或多个寄存器状态。
转向图3,框图根据本发明公开的各种实施例示出了与运行时间环境304相结合的示例性计算系统300,该运行时间环境304与一个或多个库调用334以及快速查找函数336相耦合,以执行具有多个ISA的应用代码。关于图1所描述的实施例,计算系统300可以为计算系统100的实施例,处理器及存储器布置302可以是处理器及存储器布置102的实施例,运行时间环境304可以是运行时间环境104的实施例,处理器312可以是处理器112的实施例,OS内核314可以是OS内核114的实施例,系统库316可以是系统库116的实施例,和/或开关/返回门324可以是开关/返回门124的实施例。运行时间环境304可在其中执行具有第一代码320及第二代码322的应用318,其中应用318可为具有第一代码120和第二代码122的应用118的实施例。第二代码322可在沙箱326内的运行时间环境304中执行,该沙箱326可以是沙箱126的实施例。
当运行时间环境304为执行具有多个ISA的应用代码提供方法时,使用开关/返回门324在第一ISA(根据其可编译第一代码320)与第二ISA(根据其可编译第二代码322)之间转换可能导致一些开销。因此,一个或多个库调用334和/或快速查找函数336可与本发明公开的教导相结合以减少开销。
在实施例中,运行时间环境304可使得应用318的执行控制从第一代码320或第二代码322中转移,用于转换查找(translation lookup)。为了解决这个问题,运行时间环境304可适于维护快速查找函数336内的一个或多个代码块。一个或多个代码块可与第一代码320相关联但是在第二ISA下进行编译,或可与第二代码322相关联但是在第一ISA下编译。因此,一旦第一代码320或第二代码322的块完成执行后,传递线程(forwarding thread)可进入快速查找函数336以识别下一个待执行的代码块并且,如果下一个代码块在快速查找函数336内成功识别,则代替于在第一ISA与第二ISA之间的转换,使用已识别的代码块继续执行应用318的执行。
在一个实施例中,运行时间环境304可适于识别第一代码320或第二代码322的要被多次执行的块,并与编译工具332交互以使得已识别的代码块被转换到其他ISA,例如,如果与第二ISA相关联,则通过在第一ISA下重新编译,或如果与第一ISA相关联,则通过在第二ISA下重新编译。
在实施例中,通过运行时间环境304频繁进行API调用可能使得应用318的执行控制从第一代码320或第二代码322转移,并且因此,API调用可增加与应用318执行相关联的开销。特别地,来自第二代码322的一些函数调用可以去向根据第一ISA编译的系统库316。为了减少开销,运行时间环境304可被配置为重新编译起初根据第一ISA编译过的一个或多个系统库316,以根据第二ISA来编译,例如,通过编译工具332来重新编译所述一个或多个系统库316。这些重新编译的系统库可以被保持在库调用函数334中,库调用函数334在执行沙箱326内的第二代码322期间是可访问的。因此,当第二代码322正在执行时,运行时间环境304可访问库调用函数334而非使用开关/返回门324以退出沙箱326并与系统库316交互。
现在参见图4,流程图根据本公开的各种实施例示出了用于执行具有多个ISA的应用的方法400。方法400可在本公开描述的一个或多个计算系统中实施,例如图1的计算系统100。方法400示出了多个顺序操作,而本领域普通技术人员可认识到方法400中的一个或多个操作可忽略和/或转置。
从操作405开始,方法400可包括例如,利用操作系统的加载器,将运行时间环境加载至物理(或虚拟)存储器内。在实施例中,运行时间环境可被配置成根据第一ISA执行应用代码,但可包括用于根据扩展了第一ISA的第二ISA执行应用代码的沙箱。操作410可包括例如,利用操作系统的加载器,将应用代码加载至物理(或虚拟)存储器内,所述应用代码包括根据第一ISA编译的第一代码和根据第二ISA编译的第二代码。在实施例中,可加载第二代码以使其在运行时间环境的沙箱内执行。方法400可包括,在操作415中,通过运行时间环境,插入与第一ISA和第二ISA之间的切换相关联的开关门。对应地,操作420可包括,通过运行时间环境,插入与从在第一ISA和第二ISA之间的切换返回相关联的返回门。在各种实施例中,可静态地或动态地执行操作415和420。
在应用代码执行期间,操作425可包括,通过运行时间环境,拦截与第一代码或第二代码相关联的交互,例如去向和/或从来自第一代码和/或第二代码的调用,或中断第一代码和/或第二代码的信号。仍然在执行应用代码期间,操作430可包括,通过运行时间环境,适配从第一ISA到第二ISA的或从第二ISA到第一ISA被拦截的交互。操作430的适配可取决于,应用代码是在执行第一代码的还是在执行第二代码的时刻(point),例如,如果交互是从第一代码到第二代码,作为从第一代码到第二代码的函数调用,可将交互适配为从第一ISA到第二ISA。可执行与交互(例如,回调函数的执行)相关联的操作。在应用代码的进一步执行中,操作435可包括,利用运行时间环境,以及使用插入的返回门,如果切换是从第二ISA到第一ISA,则从第一ISA返回至根据第二ISA执行应用代码,或如果切换是从第一ISA到第二ISA,则从第二ISA返回至根据第一ISA执行应用代码。
现在参见图5,流程图根据本发明公开的各种实施例示出了用于执行具有多个ISA的应用的另一个方法500。方法500可以在本发明公开描述的一个或多个计算系统中实施,例如,图1的计算系统100。方法500示出了多个顺序操作,而本领域普通技术人员可认识到方法500中的一个或多个操作可忽略和/或转置。
方法500可从为应用代码的执行提供(例如,利用运行时间环境)沙箱的操作505开始。在实施例中,应用代码可包括根据第一ISA编译的第一代码和根据将第一ISA扩展的第二ISA编译的第二代码。由于第一代码和第二代码在执行期间可能不能满意地交互,所以可提供沙箱将第二代码从第一代码隔离执行。在根据第一ISA执行应用代码期间,操作510可包括拦截(例如,利用沙箱)引起从第一代码到第二代码的进入(例如,执行控制的转移)的至少一个交互。操作515可包括,在执行应用代码期间,使用第一入口门,适配(例如,利用沙箱)从第一ISA到第二ISA的至少一个入口交互,以便在沙箱内执行。此后可在沙箱内执行与至少一个交互相关联的操作。随后,操作520可包括,使用第一出口门,从在沙箱内执行应用代码返回(例如,利用沙箱)至根据第一ISA执行应用代码。
在实施例中,方法500可还包括操作525-535。在根据第二ISA执行应用代码期间,操作525可包括,在沙箱内执行,拦截(例如,利用沙箱)引起从第二代码到第一代码的退出(例如,对执行控制的转移)的至少一个交互。操作530可包括,在执行应用代码期间,使用第二出口门,适配(例如,利用沙箱)从第二ISA到第一ISA的至少一个出口交互,以便根据第一ISA在沙箱外执行。此后根据第一ISA执行与至少一个交互相关联的操作。随后,操作535可包括,使用第一入口门,从根据第一ISA执行应用代码返回(例如,利用沙箱)至在沙箱内根据第二ISA执行应用代码。
图6根据本发明公开的各种实施例示出了示例性具有指令的非暂态计算机可读存储介质,该指令配置成实施图4和/或图5的方法的所有或选定的方面。如图所示,非暂态计算机可读存储介质600可包括多个编程指令602。编程指令602可被配置成使计算系统,例如,计算设备100,响应于编程指令的执行,能够执行先前参照图4描述的方法400和/或先前参照图5描述的方法500的运行时间环境操作的所有或选定的方面。再次参照图1,编程指令602可被配置成使计算系统能够执行针对运行时间环境104描述的所有选定特征。再次参照图2,编程指令602可被配置成使计算系统能够执行针对加载器230和/或编译工具232描述的所有选定特征。在替换实施例中,编程指令602可置于多个非暂态计算机可读存储介质600上。
在各种实施例中,实施例1可为用于执行具有多个指令集架构的应用代码的装置,该装置包括:一个或多个处理器;物理存储器,与一个或多个处理器耦合,并被配置为存储待加载至所述物理存储器内以便由一个或多个处理器执行的应用代码,所述应用代码包括根据第一指令集架构编译的第一代码以及根据第一指令集架构的第二扩展指令集架构编译的第二代码;以及运行时间环境,其具有用于第二代码的执行的沙箱,该运行时间环境被加载至物理存储器内并被一个或多个处理器操作以执行以下步骤:插入与第一和第二指令集架构之间的切换相关联的开关门;在应用代码执行期间,拦截与第一代码或第二代码相关联的交互;以及在应用代码执行期间,并且使用开关门,适配从第一指令集架构到第二指令集架构的或从第二指令集架构到第一指令集架构的被拦截的交互。实施例2可包括实施例1的装置,其中运行时间环境还用于:插入与从在第一指令集架构与第二指令集架构之间的切换返回相关联的返回门;并且,在应用代码执行期间并且使用返回门,从第一指令集架构返回至根据第二指令集架构的第二代码的执行、或从第二指令集架构返回至根据第一指令集架构的第一代码的执行。实施例3可包括实施例2的装置,其中,运行时间环境通过以下中的至少一个来适配被拦截的交互:对与交互相关联的数据的大小的调整、对与交互相关联的数据的对齐的调整、或对与交互相关联的至少一个寄存器的至少一个状态的存储;并且其中,运行时间环境通过以下中的至少一个来返回:对所述大小的调整的恢复、对所述对齐的调整的恢复、或从所述存储对至少一个寄存器的至少一个状态的恢复。实施例4可包括实施例2的装置,其中运行时间环境通过以下来适配被拦截的交互:从与第一指令集架构相关联的第一应用二进制接口到与第二指令集架构相关联的第二应用二进制接口的调用的转换,或从第二应用二进制接口到第一应用二进制接口的调用的转换;并且其中,运行时间环境通过以下来进行返回:从第一应用二进制接口返回至第二应用二进制接口或从第二应用二进制接口返回至第一应用二进制接口。实施例5可包括实施例2的装置,还包括加载器,其被加载至物理存储器内以与运行时间环境配合,将与第二指令集架构相关联的库加载至与第一指令集架构相关联的地址空间内,并将应用代码与开关门或返回门中的至少一个相链接。实施例6可包括实施例1的装置,其中交互包括以下中的至少一个:从第一代码到第二代码的调用、从第二代码到第一代码的调用、从第一代码到根据第二指令集架构编译的库的调用、从第二代码到根据第一指令集架构编译的库的调用、或与装置的操作系统内核相关联的信号。实施例7可包括实施例1-6中任一的装置,其中第一指令集架构包括32位指令集架构,并且第二指令集架构包括64位指令集架构。实施例8可包括实施例1-6中任一的装置,还包括:编译工具,被加载至物理存储器内并由一个或多个处理器操作,根据第二指令集架构编译第二代码,其中,编译工具在编译期间遵循应用二进制接口,所述应用二进制接口承担第二指令集架构的编码,但遵循第一指令集架构的数据大小和对齐。实施例9可包括实施例8的装置,其中运行时间环境包括与应用代码的执行相关联的进程虚拟机,以动态地插入开关门,并且其中,编译工具包括用于编译的动态准时引擎。实施例10可包括实施例8的装置,其中运行时间环境用于使得根据第二指令集架构编译的至少一个系统库根据第一指令集架构被重新编译,并且其中,运行时间环境还用于:识别应用代码的要被多次执行的块;如果所述块是在第一指令集架构下编译的,则将所述块转换到第二指令集架构;或如果所述块是在第二指令集架构下编译的,则将所述块转换到第一指令集架构,以促进通过所述运行时间环境的与交互的拦截相关联的快速查找。实施例11可包括实施例1-6中任一的装置,其中,应用代码被加载至物理存储器内并由一个或多个处理器操作。
在各种实施例中,实施例12可为一个或多个非暂态计算机可读介质,包括计算设备可执行指令,其中该指令响应于被计算系统执行而为计算系统提供沙箱环境以管理具有多个指令集架构的应用的执行,沙箱环境用于:在包括了与第一指令集架构相关联的第一代码和与第二指令集架构相关联的第二代码的应用代码的执行期间,为与第二指令集架构相关联的第二代码的执行提供沙箱;在根据第一指令集架构的应用代码的执行期间,拦截从第一代码到第二代码的至少一个入口交互;使用第一入口门,适配从第一指令集架构到第二指令集架构的至少一个入口交互,以便在应用代码执行期间在沙箱内执行;以及使用第一出口门,从沙箱内的执行返回至根据第一指令集架构的应用代码的执行。实施例13可包括实施例12的一个或多个非暂态计算机可读介质,其中指令还使得计算系统:在根据第二指令集架构的应用代码的执行期间,拦截从第二代码到第一代码的至少一个出口交互;使用第二出口门,适配从第二代码到第一代码的至少一个出口交互,以便在应用代码执行期间根据第一指令集架构在沙箱外执行;以及,在应用代码执行期间使用第二入口门返回到在沙箱内执行。实施例14可包括实施例12的一个或多个非暂态计算机可读介质,其中使用第一入口门的适配包括以下中的至少一个:对与入口交互相关联的数据的大小的调整、对与入口交互相关联的数据的对齐的调整、或对与入口交互相关联的至少一个寄存器的至少一个状态的存储。实施例15可包括实施例12的一个或多个非暂态计算机可读介质,其中指令还使得计算系统:将与第二指令集架构相关联的库加载至与第一指令集架构相关联的地址空间内,并将应用代码与第一入口门或第一出口门中的至少一个相链接。实施例16可包括实施例12的一个或多个非暂态计算机可读介质,其中第一指令集架构包括32位指令集架构、以及第二指令集架构包括64位指令集架构。实施例17可包括实施例12的一个或多个非暂态计算机可读介质,其中入口交互包括以下中的至少一个:对根据第二指令集架构编译的应用代码的第一部分的调用、对根据第二指令集架构编译的库的调用、或与计算系统的操作系统内核相关联的信号。实施例18可包括实施例12-17中的任意一个或多个非暂态计算机可读介质,其中指令还使得计算系统:基于应用二进制接口根据第二指令集架构编译第二代码,其中,应用二进制接口承担第二指令集架构的编码、但遵循第一指令集架构的数据大小和对齐。实施例19可包括实施例18的一个或多个非暂态计算机可读介质,其中应用代码的执行与进程虚拟机相关联,该进程虚拟机动态地插入第一入口门或第一出口门中的至少一个。实施例20可包括实施例18的一个或多个非暂态计算机可读介质,其中指令还使得计算系统:识别应用代码的要被多次执行的块;并且如果所述块是根据第一指令集架构编译的,则将所述块转换到第二指令集架构,或如果所述块是根据第二指令集架构编译的,则将所述块转换到第一指令集架构,以促进与对入口交互的拦截或与对从第二代码至第一代码的出口交互的拦截相关联的快速查找。
在各种实施例中,实施例21可为用于执行具有多个指令集架构的应用的计算机实现的方法,该方法包括:在进程中,执行与第一指令集架构相关联的第一代码以及沙箱;在沙箱内,执行与第二指令集架构相关联的第二代码;在第一代码执行期间,拦截从第一代码到第二代码的至少一个交互;使用第一门来适配从第一指令集架构到第二指令集架构的至少一个交互;在沙箱内,基于对至少一个交互的适配来执行第二代码的至少一部分;并且在执行第二代码的至少一部分后使用第二门退出沙箱。实施例22可包括实施例21的计算机实现的方法,其中使用第一门的适配包括以下中的至少一个:对与交互相关联的数据的大小的调整、对与交互相关联的数据的对齐的调整、或对与交互相关联的至少一个寄存器的至少一个状态的存储。实施例23可包括实施例21的计算机实现的方法,其中交互包括以下中的至少一个:对第二代码的调用、对根据第二指令集架构编译的库的调用、或与操作系统内核相关联的信号。实施例24可包括实施例21-23中任一的计算机实现的方法,还包括:基于应用二进制接口根据第二指令集架构编译第二代码,其中应用二进制接口承担第二指令集架构的编码、但遵循第一指令集架构的数据大小和对齐。实施例25可包括实施例21-23中任一的计算机实现的方法,还包括:根据第二指令集架构编译先前根据第一指令集架构编译过的至少一个系统库。实施例26可包括实施例21-23中任一的计算机实现的方法,还包括:在第二代码执行期间,拦截另一个交互,所述另一个交互是从第二代码到第一代码的;使用第三门来适配从第二指令集架构到第一指令集架构的另一个交互;在沙箱外,基于对另一个交互的适配来执行第一代码的至少一部分;并且在执行第一代码的至少一部分后使用第四门来返回至沙箱内的第二代码的执行。
在各种实施例中,实施例27可为包括计算设备可执行指令的一个或多个非暂态计算机可读介质,其中指令,响应于计算系统的执行,使计算系统执行实施例21-23的任意一种方法。
在各种实施例中,实施例28可为用于执行具有多个指令集架构的应用的装置,该装置包括:用于在进程中执行与第一指令集架构相关联的第一代码以及沙箱的模块;用于在沙箱内执行与第二指令集架构相关联的第二代码的模块;用于在第一代码的执行期间拦截从第一代码到第二代码的至少一个交互的模块;用于使用第一门来适配从第一指令集架构到第二指令集架构的至少一个交互的模块;用于在沙箱内基于对至少一个交互的适配来执行第二代码的至少一部分的模块;以及用于在执行第二代码的至少一部分之后,使用第二门退出沙箱的模块。实施例29可包括实施例28的装置,其中用于使用第一门的适配的模块包括用于以下中的至少一个的模块:对与交互相关联的数据的大小的调整、对与交互相关联的数据的对齐的调整、或对与交互相关联的至少一个寄存器的至少一个状态的存储。实施例30可包括实施例28的装置,其中交互包括以下中的至少一个:对第二代码的调用、对根据第二指令集架构编译的库的调用、或与操作系统内核相关联的信号。实施例31可包括实施例28-30中任一所述的装置,还包括:用于基于应用二进制接口根据第二指令集架构编译第二代码的模块,其中应用二进制接口承担第二指令集架构的编码但遵循第一指令集架构的数据大小和对齐。实施例32可包括实施例28-30中任一的装置,还包括:用于根据第二指令集架构编译先前根据第一指令集架构编译过的至少一个系统库的模块。实施例33可包括实施例28-30中任一的装置,还包括:用于识别第一代码或第二代码的要被多次执行的块的模块;以及用于如下进行的模块:如果所述块是在第一指令集架构下编译的则将所述块转换到第二指令集架构,或如果所述块是在第二指令集架构下编译的则将所述块转换到第一指令集架构,以促进与对交互的拦截相关联的快速查找。实施例34可包括实施例28-30中任一的装置,还包括:用于在第二代码的执行期间拦截另一个交互的模块,所述另一个交互是从第二代码到第一代码的;用于使用第三门来适配从第二指令集架构到第一指令集架构的另一个交互的模块;用于在沙箱外,基于对另一个交互的适配来执行第一代码的至少一部分的模块;并且用于在第一代码的至少一部分的执行之后,使用第四门来返回至沙箱内的第二代码的执行的模块。
在算法的术语以及对计算机存储器内的数据比特的操作的符号表示方面呈现了所公开的之前详细说明的一些部分。这些算法描述和表示是数据处理领域技术人员通常使用的,以最有效地将它们的创新实质传递给本领域的其它普通技术人员的手段。本文的算法通常是指得到期望结果的操作的自相容序列。这些操作是那些需要物理量的物理操纵。
然而,应当注意,所有这些及类似的术语是与适当的物理量相关联的,并且仅适用于这些物理量的方便标签。除非如从以上的讨论中可看到的那样,应理解的是,在整个说明书中,利用诸如的在权利要求书中的那些术语讨论参照计算机系统或类似的电子计算装置的动作和处理,计算机系统或类似电子计算装置操纵及变形表示为计算机系统的寄存器和存储器内的物理(电子)量的数据并把该数据转换到类似地表示为计算机系统存储器或寄存器或其它这种信息存储、传输或显示装置内的物理量的其它数据。
本发明的实施例还可与用于执行本文的操作的设备有关。这种存储在非暂态计算机可读介质的计算机程序。机器可读取介质包括用于以机器(例如,计算机)可读的格式存储信息的任何机制。例如,机器可读(例如,计算机-可读)介质包括机器(例如,计算机)可读存储介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存储器装置)。
在先附图中描述的过程或方法可以使用处理逻辑执行,该处理逻辑包括硬件(例如电路、专用逻辑等)、软件(例如,嵌入在非暂态计算机可读介质上)或二者的结合的。尽管上述描述的过程或方法为某些顺序操作,应该理解的是,本发明所描述的某些操作可按照不同顺序执行。而且,某些操作可以并行地而非循序地执行。
本发明的实施例不是参考任何具体编程语言描述的。应当理解的是,可使用各种编程语言来实现本文所描述的本发明实施例的教导。在上述说明书中,通过参考本发明的具体示例性实施例描述了发明的实施例。显然可以进行各种修正和改变而不偏离本发明的权利要求书的更广的精神和范围。因此,说明书和附图作为示例性的意义而非限制性的意义。
Claims (25)
1.一种用于执行具有多个指令集架构的应用代码的装置,所述装置包括:
一个或多个处理器;
物理存储器,与所述一个或多个处理器耦合,并被配置为存储要被加载至所述物理存储器内以便由所述一个或多个处理器执行的应用代码,所述应用代码包括根据第一指令集架构编译的第一代码以及根据扩展所述第一指令集架构的第二指令集架构编译的第二代码;以及
运行时间环境,其具有用于所述第二代码的执行的沙箱,所述运行时间环境被加载至所述物理存储器内并被所述一个或多个处理器操作以执行以下步骤:
插入与所述第一指令集架构和所述第二指令集架构之间的切换相关联的开关门;
在所述应用代码的执行期间,拦截与所述第一代码或所述第二代码相关联的交互;并且
在所述应用代码的执行期间,并且使用所述开关门,适配从所述第一指令集架构到所述第二指令集架构的或从所述第二指令集架构到所述第一指令集架构的被拦截的交互,
其中,所述第一代码和所述第二代码是在一个处理器的同一进程中执行的。
2.根据权利要求1所述的装置,其中,所述运行时间环境还用于:
插入与从在所述第一指令集架构和所述第二指令集架构之间的切换返回相关联的返回门;并且
在所述应用代码的执行期间,并且使用所述返回门,从所述第一指令集架构返回到根据所述第二指令集架构的所述第二代码的执行、或从所述第二指令集架构返回到根据所述第一指令集架构的所述第一代码的执行。
3.根据权利要求2所述的装置,其中,所述运行时间环境通过以下中的至少一个来适配所述被拦截的交互:对与所述交互相关联的数据的大小的调整、对与所述交互相关联的数据的对齐的调整、或对与所述交互相关联的至少一个寄存器的至少一个状态的存储,并且其中,所述运行时间环境通过以下中的至少一个来进行返回:对所述大小的调整的恢复、对所述对齐的调整的恢复、或从所述存储对至少一个寄存器的至少一个状态的恢复。
4.根据权利要求2所述的装置,其中,所述运行时间环境通过以下来适配所述被拦截的交互:从与所述第一指令集架构相关联的第一应用二进制接口到与所述第二指令集架构相关联的第二应用二进制接口的调用的转换,或从所述第二应用二进制接口到所述第一应用二进制接口的调用的转换,并且其中,所述运行时间环境通过以下来进行返回:从所述第一应用二进制接口返回至所述第二应用二进制接口,或从所述第二应用二进制接口返回至所述第一应用二进制接口。
5.根据权利要求2所述的装置,还包括:
加载器,其被加载至所述物理存储器内以与所述运行时间环境配合,将与所述第二指令集架构相关联的库加载至与所述第一指令集架构相关联的地址空间内,并且将所述应用代码与所述开关门或所述返回门中的至少一个相链接。
6.根据权利要求1所述的装置,其中,所述交互包括以下中的至少一个:从所述第一代码到所述第二代码的调用、从所述第二代码到所述第一代码的调用、从所述第一代码到根据所述第二指令集架构编译的库的调用、从所述第二代码到根据所述第一指令集架构编译的库的调用、或与所述装置的操作系统内核相关联的信号。
7.根据权利要求1-6中任意一项所述的装置,其中所述第一指令集架构包括32位指令集架构,并且所述第二指令集架构包括64位指令集架构。
8.根据权利要求1-6中任意一项所述的装置,还包括:
编译工具,其被加载到所述物理存储器内并由所述一个或多个处理器操作,根据所述第二指令集架构编译所述第二代码,其中所述编译工具在编译期间遵循应用二进制接口,所述应用二进制接口承担所述第二指令集架构的编码但遵循所述第一指令集架构的数据大小和对齐。
9.根据权利要求8所述的装置,其中,所述运行时间环境包括与所述应用代码的执行相关联的进程虚拟机,以动态地插入所述开关门,并且其中,所述编译工具包括用于编译的动态准时引擎。
10.根据权利要求8所述的装置,其中,所述运行时间环境用于使得根据所述第二指令集架构编译的至少一个系统库根据所述第一指令集架构被重新编译,并且其中,所述运行时间环境还用于:
识别所述应用代码的要被多次执行的块;
如果所述块是在所述第一指令集架构下编译的,则将所述块转换到所述第二指令集架构,或如果所述块是在所述第二指令集架构下编译的,则将所述块转换到所述第一指令集架构,以促进通过所述运行时间环境的与所述交互的拦截相关联的快速查找。
11.根据权利要求1-6中任意一项所述的装置,其中,所述应用代码被加载至所述物理存储器内并由所述一个或多个处理器操作。
12.一种用于执行具有多个指令集架构的代码的装置,包括:
用于执行与第一指令集架构相关联的第一代码以及沙箱的模块;
用于在所述沙箱内执行与第二指令集架构相关联的第二代码的模块;
用于在所述第一代码的执行期间拦截从所述第一代码到所述第二代码的至少一个交互的模块;
用于使用第一门来适配从所述第一指令集架构到所述第二指令集架构的至少一个交互的模块;
用于在所述沙箱内基于对所述至少一个交互的适配来执行所述第二代码的至少一部分的模块;以及
用于在执行所述第二代码的所述至少一部分之后使用第二门退出所述沙箱的模块,
其中,所述第一代码和所述第二代码是在一个处理器的同一进程中执行的。
13.根据权利要求12所述的装置,其中,所述用于使用所述第一门的适配的模块包括用于以下中的至少一个的模块:对与所述交互相关联的数据的大小的调整、对与所述交互相关联的数据的对齐的调整、或对与所述交互相关联的至少一个寄存器的至少一个状态的存储。
14.根据权利要求12所述的装置,其中,所述交互包括以下中的至少一个:对所述第二代码的调用、对根据所述第二指令集架构编译的库的调用、或与操作系统内核相关联的信号。
15.根据权利要求12-14中任意一项所述的装置,还包括:
用于在所述第二代码的执行期间拦截另一个交互的模块,所述另一个交互是从所述第二代码到所述第一代码的;
用于使用第三门来适配从所述第二指令集架构到所述第一指令集架构的所述另一个交互的模块;
用于在所述沙箱外,基于对所述另一个交互的适配来执行所述第一代码的至少一部分的模块;
用于在所述第一代码的所述至少一部分的执行之后使用第四门来返回至所述沙箱内的所述第二代码的执行的模块。
16.根据权利要求12-14中任意一项所述的装置,还包括:
用于基于应用二进制接口根据所述第二指令集架构编译所述第二代码的模块,所述应用二进制接口承担对所述第二指令集架构的编码但遵循所述第一指令集架构的数据大小和对齐。
17.根据权利要求12-14中任意一项所述的装置,还包括:
用于根据所述第二指令集架构编译先前根据所述第一指令集架构编译过的至少一个系统库的模块。
18.根据权利要求12-14中任意一项所述的装置,还包括:
用于识别所述第一代码或所述第二代码的要被多次执行的块的模块;以及
用于进行如下操作的模块:如果所述块是在所述第一指令集架构下编译的则将所述块转换到所述第二指令集架构,或如果所述块是在所述第二指令集架构下编译的则将所述块转换到所述第一指令集架构,以促进与所述交互的拦截相关联的快速查找。
19.一种用于执行具有多个指令集架构的应用的计算机实现的方法,所述方法包括:
执行与第一指令集架构相关联的第一代码以及沙箱;
在所述沙箱内执行与第二指令集架构相关联的第二代码;
在所述第一代码的执行期间拦截从所述第一代码到所述第二代码的至少一个交互;
使用第一门来适配从所述第一指令集架构到所述第二指令集架构的至少一个交互;
在所述沙箱内基于对所述至少一个交互的适配来执行所述第二代码的至少一部分;以及
在执行所述第二代码的至少一部分之后使用第二门退出所述沙箱,
其中,所述第一代码和所述第二代码是在一个处理器的同一进程中执行的。
20.根据权利要求19所述的计算机实现的方法,其中,所述使用所述第一门的适配包括以下中的至少一个:对与所述交互相关联的数据的大小的调整、对与所述交互相关联的数据的对齐的调整、或对与所述交互相关联的至少一个寄存器的至少一个状态的存储。
21.根据权利要求19所述的计算机实现的方法,其中,所述交互包括以下中的至少一个:对所述第二代码的调用、对根据所述第二指令集架构编译的库的调用、或与操作系统内核相关联的信号。
22.根据权利要求19-21中任意一项所述的计算机实现的方法,还包括:
基于应用二进制接口根据所述第二指令集架构编译所述第二代码,所述应用二进制接口承担对所述第二指令集架构的编码但遵循所述第一指令集架构的数据大小和对齐。
23.根据权利要求19-21中任意一项所述的计算机实现的方法,还包括:
根据所述第二指令集架构编译先前根据所述第一指令集架构编译过的至少一个系统库。
24.根据权利要求19-21中任意一项所述的计算机实现的方法,还包括:
在所述第二代码的执行期间,拦截另一个交互,所述另一个交互是从所述第二代码到所述第一代码的;
使用第三门来适配从所述第二指令集架构到所述第一指令集架构的所述另一个交互;
在所述沙箱外,基于对所述另一个交互的适配来执行所述第一代码的至少一部分;
在所述第一代码的至少一部分的执行之后,使用第四门来返回到所述沙箱内的所述第二代码的执行。
25.一个或多个非暂态计算机可读介质,包括计算设备可执行指令,其中,所述指令响应于由计算系统执行而使所述计算系统执行根据权利要求19-21中任意一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/093373 WO2016090554A1 (en) | 2014-12-09 | 2014-12-09 | System and method for execution of application code compiled according to two instruction set architectures |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107077337A CN107077337A (zh) | 2017-08-18 |
CN107077337B true CN107077337B (zh) | 2021-01-15 |
Family
ID=56106423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480083286.2A Active CN107077337B (zh) | 2014-12-09 | 2014-12-09 | 用于执行根据两个指令集架构编译的应用编码的系统和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9910721B2 (zh) |
EP (1) | EP3230853A4 (zh) |
KR (1) | KR102332209B1 (zh) |
CN (1) | CN107077337B (zh) |
WO (1) | WO2016090554A1 (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107430521B (zh) | 2015-03-27 | 2022-02-18 | 英特尔公司 | 高效地址转换 |
US10412114B1 (en) | 2015-12-17 | 2019-09-10 | Architecture Technology Corporation | Application randomization mechanism |
US10007498B2 (en) | 2015-12-17 | 2018-06-26 | Architecture Technology Corporation | Application randomization mechanism |
US10412116B1 (en) | 2015-12-17 | 2019-09-10 | Architecture Technology Corporation | Mechanism for concealing application and operation system identity |
US10200401B1 (en) | 2015-12-17 | 2019-02-05 | Architecture Technology Corporation | Evaluating results of multiple virtual machines that use application randomization mechanism |
US10284592B1 (en) | 2015-12-17 | 2019-05-07 | Architecture Technology Corporation | Application randomization mechanism |
US10200406B1 (en) | 2015-12-17 | 2019-02-05 | Architecture Technology Corporation | Configuration of application randomization mechanism |
US20180173530A1 (en) * | 2016-12-21 | 2018-06-21 | Intel Corporation | Systems and methods for multi-architecture computing |
US10713213B2 (en) * | 2016-12-21 | 2020-07-14 | Intel Corporation | Systems and methods for multi-architecture computing |
US10684984B2 (en) | 2016-12-21 | 2020-06-16 | Intel Corporation | Computing devices and server systems with processing cores having different instruction set architectures |
US10552207B2 (en) | 2016-12-21 | 2020-02-04 | Intel Corporation | Systems and methods for multi-architecture computing including program stack translation |
US10853040B2 (en) | 2017-03-31 | 2020-12-01 | Microsoft Technology Licensing, Llc | Address space splitting for legacy application compatibility |
US11275709B2 (en) | 2017-05-02 | 2022-03-15 | Intel Corporation | Systems and methods for multi-architecture computing |
US10554685B1 (en) * | 2017-05-25 | 2020-02-04 | Architecture Technology Corporation | Self-healing architecture for resilient computing services |
US10628175B2 (en) | 2017-10-04 | 2020-04-21 | Citrix Systems, Inc. | Loader application with secondary embedded application object |
CN109697114B (zh) * | 2017-10-20 | 2023-07-28 | 伊姆西Ip控股有限责任公司 | 用于应用迁移的方法和机器 |
US10666497B2 (en) * | 2018-06-22 | 2020-05-26 | Intel Corporation | Localized service resiliency |
EP3821340A4 (en) * | 2018-07-10 | 2021-11-24 | Magic Leap, Inc. | THREAD WEAVING FOR CROSS INSTRUCTION SET ARCHITECTURE PROCEDURE APPEALS |
CN109683873B (zh) * | 2018-11-16 | 2021-10-08 | 中国西安卫星测控中心 | 利用asn1规则的航天信息接口编码方法及系统架构 |
KR20210016773A (ko) | 2019-08-05 | 2021-02-17 | 삼성전자주식회사 | 프로세서의 주파수를 제어하는 전자 장치와 이의 동작 방법 |
CN111026452B (zh) * | 2019-11-20 | 2023-10-20 | 北京明朝万达科技股份有限公司 | 一种远程32位进程注入64位进程的方法及系统 |
CN113760338B (zh) * | 2020-06-05 | 2023-07-18 | 北京字跳网络技术有限公司 | 切换应用程序二进制接口abi的方法、装置及电子设备 |
US11403100B2 (en) * | 2020-08-31 | 2022-08-02 | Microsoft Technology Licensing, Llc | Dual architecture function pointers having consistent reference addresses |
US11231918B1 (en) * | 2020-08-31 | 2022-01-25 | Microsoft Technologly Licensing, LLC | Native emulation compatible application binary interface for supporting emulation of foreign code |
KR20220030081A (ko) * | 2020-09-02 | 2022-03-10 | 삼성전자주식회사 | 전자장치 및 그 제어방법 |
US11704562B1 (en) * | 2020-11-04 | 2023-07-18 | Meta Platforms, Inc. | Architecture for virtual instructions |
US11556403B1 (en) | 2021-10-19 | 2023-01-17 | Bank Of America Corporation | System and method for an application programming interface (API) service modification |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1997037300A1 (en) * | 1996-04-02 | 1997-10-09 | Advanced Micro Devices, Inc. | A microprocessor configured to detect an escape instruction indicating a switch between instruction sets |
US20140244983A1 (en) * | 2013-02-26 | 2014-08-28 | Qualcomm Incorporated | Executing an operating system on processors having different instruction set architectures |
CN104104679A (zh) * | 2014-07-18 | 2014-10-15 | 四川中亚联邦科技有限公司 | 一种基于私有云的数据处理方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020083421A1 (en) | 2000-12-22 | 2002-06-27 | Hitachi America, Ltd. | Assembly language code compilation for an instruction-set architecture containing new instructions using the prior assembler |
US7233998B2 (en) * | 2001-03-22 | 2007-06-19 | Sony Computer Entertainment Inc. | Computer architecture and software cells for broadband networks |
US8028290B2 (en) * | 2006-08-30 | 2011-09-27 | International Business Machines Corporation | Multiple-core processor supporting multiple instruction set architectures |
JP5405799B2 (ja) * | 2008-10-30 | 2014-02-05 | 株式会社日立製作所 | 仮想計算機の制御方法、仮想化プログラム及び仮想計算機システム |
US8621619B2 (en) * | 2009-12-03 | 2013-12-31 | Google Inc. | Dynamic code insertion for static analysis based sandboxes |
US20120159127A1 (en) * | 2010-12-16 | 2012-06-21 | Microsoft Corporation | Security sandbox |
US20130326489A1 (en) * | 2012-05-30 | 2013-12-05 | Vector Fabrics B.V. | Method and system for translating non-native instructions |
US9298375B2 (en) | 2013-02-27 | 2016-03-29 | Vmware, Inc. | Method and apparatus for returning reads in the presence of partial data unavailability |
-
2014
- 2014-12-09 WO PCT/CN2014/093373 patent/WO2016090554A1/en active Application Filing
- 2014-12-09 KR KR1020177012763A patent/KR102332209B1/ko active IP Right Grant
- 2014-12-09 US US14/777,065 patent/US9910721B2/en not_active Expired - Fee Related
- 2014-12-09 EP EP14907858.6A patent/EP3230853A4/en not_active Withdrawn
- 2014-12-09 CN CN201480083286.2A patent/CN107077337B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1997037300A1 (en) * | 1996-04-02 | 1997-10-09 | Advanced Micro Devices, Inc. | A microprocessor configured to detect an escape instruction indicating a switch between instruction sets |
US20140244983A1 (en) * | 2013-02-26 | 2014-08-28 | Qualcomm Incorporated | Executing an operating system on processors having different instruction set architectures |
CN104104679A (zh) * | 2014-07-18 | 2014-10-15 | 四川中亚联邦科技有限公司 | 一种基于私有云的数据处理方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3230853A4 (en) | 2019-05-29 |
US20160364276A1 (en) | 2016-12-15 |
US9910721B2 (en) | 2018-03-06 |
KR20170094136A (ko) | 2017-08-17 |
WO2016090554A1 (en) | 2016-06-16 |
CN107077337A (zh) | 2017-08-18 |
KR102332209B1 (ko) | 2021-11-29 |
EP3230853A1 (en) | 2017-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077337B (zh) | 用于执行根据两个指令集架构编译的应用编码的系统和方法 | |
US10761867B2 (en) | Nested emulation and dynamic linking environment | |
US8768682B2 (en) | ISA bridging including support for call to overidding virtual functions | |
US10303491B2 (en) | Method and device of running application program across systems | |
JP6458959B2 (ja) | 協調設計されたプロセッサ用動的言語アクセラレータ | |
EP2802983B1 (en) | Isa bridging with callback | |
US20150379169A1 (en) | Efficient emulation for pseudo-wrapped callback handling in binary translation software | |
JP2018508083A (ja) | 共有オブジェクト・レベルにおけるバイナリ変換 | |
CN107273311B (zh) | 计算设备、用于计算的方法和用于计算的装置 | |
US20190138438A1 (en) | Conditional stack frame allocation | |
US20140222410A1 (en) | Hybrid emulation and kernel function processing systems and methods | |
US9760282B2 (en) | Assigning home memory addresses to function call parameters | |
CN115421875B (zh) | 二进制翻译方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |