CN115543441A - 软件移植方法、装置、设备、存储介质和程序产品 - Google Patents
软件移植方法、装置、设备、存储介质和程序产品 Download PDFInfo
- Publication number
- CN115543441A CN115543441A CN202211232123.9A CN202211232123A CN115543441A CN 115543441 A CN115543441 A CN 115543441A CN 202211232123 A CN202211232123 A CN 202211232123A CN 115543441 A CN115543441 A CN 115543441A
- Authority
- CN
- China
- Prior art keywords
- instruction
- state
- application program
- state machine
- time sequence
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- 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
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Programmable Controllers (AREA)
Abstract
本申请涉及一种软件移植方法、装置、设备、存储介质和程序产品。所述方法包括:根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;将第三应用程序存储到目标移植空间中。采用本方法能够实现在软件移植过程中保持内存操作指令顺序的正确性。
Description
技术领域
本申请涉及软件移植技术领域,特别是涉及一种软件移植方法、装置、设备、存储介质和程序产品。
背景技术
随着高级精简指令集处理器(advanced risc machines,ARM)等基于弱内存模型的芯片的发展,出现了将服务器端软件从基于强内存模型的平台移植至基于弱内存模型的平台的技术,例如,将服务器端软件从基于X86-64架构的客户机移植到基于ARMv8架构的宿主机。
然而,由于强内存模型和弱内存模型差异较大,部分多线程程序虽然在基于强内存模型的平台上能够正确运行,但是移植到基于弱内存模型的平台上,就会出现内存操作指令乱序,导致程序运行出错。
因此,如何在软件移植过程中保持内存操作指令顺序的正确性成为目前亟待解决的技术问题。
发明内容
本申请提供一种软件移植方法、装置、设备、存储介质和程序产品,能够实现在软件移植过程中保持内存操作指令顺序的正确性。
第一方面,本申请提供了一种软件移植方法。该方法包括:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
将第三应用程序存储到目标移植空间中。
在其中一个实施例中,利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序,包括:在遍历第二应用程序的过程中,确定第二应用程序中各指令的类型;根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,得到第三应用程序;有限状态机的不同状态对应不同的时序处理方式。
在其中一个实施例中,有限状态机的状态包括第一状态、第二状态和第三状态;第一状态为不保持任一内存操作指令的时序,第二状态为保持读后读和读后写的时序,第三状态为保持写后写的时序。
在其中一个实施例中,根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,包括:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为读取,则在目标指令前添加内存屏障指令,以保持读后读的时序。
在其中一个实施例中,根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,包括:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为写入,则将有限状态机的状态设置为第三状态,并在目标指令前添加内存屏障指令,以保持读后写的时序;若有限状态机的状态为第三状态,且遍历到的目标指令的类型为写入,则在目标指令前添加内存屏障指令,以保持写后写的时序。
在其中一个实施例中,根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,包括:若有限状态机的状态为第二状态,且遍历到的目标指令为读取屏障指令,则将有限状态机的状态设置为第一状态,并将读取屏障指令转换为内存屏障指令,以保持读后读的时序。
在其中一个实施例中,根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,包括:若有限状态机的状态为第三状态,且遍历到的目标指令为写入屏障指令,则将有限状态机的状态设置为第一状态,并将写入屏障指令转换为内存屏障指令,以保持写后写的时序。
在其中一个实施例中,根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,包括:若有限状态机的状态为第二状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持读后读的时序;若有限状态机的状态为第三状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持写后写的时序。
在其中一个实施例中,软件移植方法还包括:对第二应用程序进行分块处理,得到多个应用程序块;对应的,利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序,包括:利用预先设置的有限状态机对各应用程序块进行操作指令的时序处理,得到第三应用程序。
第二方面,本申请还提供了一种软件移植装置。该装置包括:
指令转换模块,用于根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
时序处理模块,用于利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
存储模块,用于将第三应用程序存储到目标移植空间中。
第三方面,本申请还提供了一种计算机设备。该计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
将第三应用程序存储到目标移植空间中。
第四方面,本申请还提供了一种计算机可读存储介质。该计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
将第三应用程序存储到目标移植空间中。
第五方面,本申请还提供了一种计算机程序产品。该计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
将第三应用程序存储到目标移植空间中。
本申请提供了一种软件移植方法,可以先对被移植平台(客户机)中待移植的第一应用程序进行指令转换处理,将第一应用程序转换为移植平台(宿主机)对应的程序指令形式,得到第二应用程序。然后设置有限状态机的参数,通过预先设置的有限状态机在第二应用程序中添加内存屏障指令,以保持移植平台相对于被移植平台无法保持的内存操作序列,得到第三应用程序。最后将第三应用程序存储至目标移植空间中,完成对待移植软件的移植。本申请通过预先设置的有限状态机实现了软件移植过程中内存操作指令的有序性,避免了指令乱序。
附图说明
图1为一个实施例中软件移植方法的应用环境图;
图2为一个实施例中软件移植方法的流程示意图;
图3为一个实施例中软件移植方法的另一流程示意图;
图4为一个实施例中软件移植方法的另一流程示意图;
图5为一个实施例中有限状态机的状态定义图;
图6为一个实施例中有限状态机的状态实例图;
图7为一个实施例中有限状态机的结构示意图;
图8为一个实施例中软件移植装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
随着ARM等基于弱内存模型的芯片的发展,出现了将服务器端软件从客户机(安装在主机上的虚拟机)移植至宿主机(即为主机)的技术。如果客户机的内存模型弱于宿主机的内存模型,则只需要将软件应用程序中的内存屏障指令进行翻译,即可保证软件应用程序在宿主机中的执行有序性;
然而,如果客户机的内存模型强于宿主机的内存模型,由于强内存模型和弱内存模型差异较大,部分多线程程序虽然在基于强内存模型的平台上能够正确运行,但是移植到基于弱内存模型的平台上,就会出现内存操作指令乱序,导致程序运行出错,即内存序问题。
内存序问题的表现是在多核处理器的场景下,对于不同体系结构的处理器,相同的内存操作序列会产生不同的效果。例如对于基于x86_64架构的客户机,只有写后读操作序列可能会在执行时发生重排,而对于基于ARMv8架构的宿主机,所有内存操作序列(读后读、读后写、写后读、写后写)都可能会在执行时发生重排。
因此,如何在软件移植过程中保持内存操作指令顺序的正确性成为目前亟待解决的技术问题。
本申请实施例提供一种软件移植方法,可以应用于如图1所示的服务器中。该服务器包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该服务器的处理器用于提供计算和控制能力。该服务器的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该服务器的数据库用于存储与本申请实施例所述软件移植方法相关的一些数据。该服务器的输入/输出接口用于处理器与外部设备之间交换信息。该服务器的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种软件移植方法。
在一个实施例中,如图2所示,提供了一种软件移植方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
步骤101、根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
其中,第一应用程序为客户机上待移植软件的应用程序,第一应用程序包括待移植软件的应用程序中的内存操作指令和内存屏障指令;
其中,内存操作指令包括读取和写入。内存屏障指令包括读取屏障指令LFENCE(可保持第一应用程序中读后读的内存操作序列),写入屏障指令SFENCE(可保持第一应用程序中写后写的内存操作序列)以及混合屏障指令MFENCE(可保持第一应用程序中读后读、写后写的内存操作序列)。
本申请实施例中,由于软件的应用程序在不同架构下的表现形式不同,因此,对软件进行移植,首先要将软件的应用程序从客户机下程序指令的形式转换为宿主机下程序指令的形式。例如,将指令“读取x”转换为指令“load x”,将指令“写入y”转换为指令“storey”。
需要说明的是,本申请实施例中在对第一应用程序进行指令转换处理时,仅对第一应用程序中的内存操作指令进行指令转换处理,将内存操作指令转换为宿主机下程序指令的形式;对第一应用程序中的内存屏障指令不作转换处理,直接将内存屏障指令搬移至第二应用程序中的对应位置,从而得到第二应用程序。
步骤102、利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
在将软件从客户机移植到宿主机的过程中,如果客户机的内存模型强于宿主机的内存模型,则需要对第二应用程序进行操作指令的时序处理,以使得客户机可以通过硬件保持,而宿主机无法通过硬件保持的内存操作序列具备有序性。
例如,若客户机为x86_64架构,宿主机为ARMv8架构,由于硬件原因,软件的应用程序在客户机中可以保持读后读,读后写以及写后写的内存操作序列,而在宿主机中不能保持任一内存操作序列。
因此,在将软件从客户机移植到宿主机的过程中,对第一应用程序进行指令转换处理得到第二应用程序后,还需要对第二应用程序进行操作指令的时序处理得到第三应用程序,以使得第三应用程序可以保持宿主机相对于客户机无法保持的内存操作序列(即读后读、读后写、写后写)。
在本申请实施例中,可以预先设置有限状态机的内部参数(包括状态、事件以及动作),然后将第二应用程序输入至该预先设置的有限状态机中,以使得有限状态机可以对第二应用程序进行内存屏障指令添加操作,得到第三应用程序,使得第三应用程序可以保持宿主机相对于客户机无法保持的内存操作序列。
例如,当宿主机相对于客户机无法保持的内存操作序列为读后读、读后写和写后写时,有限状态机可以遍历第二应用程序,并在连续的两个程序指令为读取和读取时,在上述两个程序指令之间添加一个内存屏障指令,以保持读后读的内存操作序列;在连续的两个程序指令为读取和写入时,在上述两个程序指令之间添加一个内存屏障指令,以保持读后写的内存操作序列;在连续的两个程序指令为写入和写入时,在上述两个程序指令之间添加一个内存屏障指令,以保持写后写的内存操作序列。
步骤103、将第三应用程序存储到目标移植空间中。
本申请实施例中,待移植软件在宿主机中有对应的存储空间,当有限状态机完成内存操作指令的时序处理,输出第三应用程序后,服务器可以将第三应用程序存储至待移植软件在宿主机中的存储空间(即目标移植空间),从而完成对待移植软件的移植。
本申请实施例提供了一种软件移植方法,可以先对被移植平台中待移植的第一应用程序进行指令转换处理,将第一应用程序转换为移植平台对应的程序指令形式,得到第二应用程序。然后设置有限状态机的参数,通过预先设置的有限状态机在第二应用程序中添加内存屏障指令,以保持移植平台相对于被移植平台无法保持的内存操作序列,得到第三应用程序。最后将第三应用程序存储至目标移植空间中,完成对待移植软件的移植。本申请实施例通过预先设置的有限状态机实现了软件移植过程中内存操作指令的有序性,避免了指令乱序。
前文所述的实施例中介绍了通过预先设置的有限状态机对第二应用程序进行操作指令的时序处理的方案。在本申请的另一实施例中,可以通过有限状态机的状态参数以及第二应用程序中各程序指令的类型对第二应用程序进行操作指令的时序处理,具体包括如图3所示的步骤:
步骤201、在遍历第二应用程序的过程中,确定第二应用程序中各指令的类型;
其中,第二应用程序中各指令的类型包括读取、写入、LFENCE、SFENCE以及MFENCE。
在本申请实施例中,有限状态机在运行时,首先要对第二应用程序进行遍历,确定第二应用程序中各指令的类型,然后才能确定第二应用程序中,除屏障指令外,任意相邻两个内存操作指令组成的内存操作序列是否为需要保持的内存操作序列,进而对需要保持的内存操作序列进行操作指令的时序处理。
步骤202、根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,得到第三应用程序;有限状态机的不同状态对应不同的时序处理方式。
本申请实施例中,有限状态机的状态可以表征第二应用程序中,任意相邻两个指令组成的指令序列中,时序在前的指令的类型。
当有限状态机遍历到当前指令,并确定了当前指令的类型后,有限状态机可以根据当前状态确定上一指令的类型,进而确定上一指令和当前指令组成的指令序列。
当该指令序列中不包含内存屏障指令,即该指令序列为内存操作序列时,有限状态机可以在需要保持时序的内存操作序列中添加内存屏障指令,对不需要保持时序的内存操作序列不作处理。
当该指令序列中包含内存屏障指令时,有限状态机可以直接对该内存屏障指令进行翻译处理,即将该内存屏障指令在客户机中的形式转换为在宿主机中的形式。例如,将LFENCE翻译为DMB ld,将SFENCE翻译为DMB st,将MFENCE翻译为DMB ld或者DMB st。其中,DMB ld可以保持第二应用程序中读后读,读后写的内存操作序列;DMB st可以保持第二应用程序中写后写的内存操作序列。
需要说明的是,有限状态机状态的不同决定了不同的指令序列,而不同的指令序列存在是否保持时序以及如何保持时序的问题。因此,对于不同的指令序列,有限状态机的时序处理方式不同。因此,有限状态机的不同状态对应不同的时序处理方式。
本申请实施例提供的方法可以通过有限状态机的状态和第二应用程序中各指令的类型确定第二应用程序中任意相邻两个指令组成的指令序列,然后采用不同的方式对不同的指令序列进行处理,将包含内存屏障指令的指令序列直接进行内存屏障指令的翻译处理;将不包含内存屏障指令,且需要保持时序的指令序列进行内存屏障指令添加处理,从而得到第三应用程序,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。
前文所述的实施例中介绍了有限状态机的不同状态对应不同的时序处理方式,在本申请的另一实施例中,提供了一种有限状态机中状态、动作等参数的具体设置方式,包括以下内容:
有限状态机的状态包括第一状态、第二状态和第三状态;第一状态为不保持任一内存操作指令的时序,第二状态为保持读后读和读后写的时序,第三状态为保持写后写的时序。
本申请实施例以被移植平台为基于x86_64架构的客户机,移植平台为基于ARMv8架构的宿主机为例,进行有限状态机的设置。在上述情况下,由于软件在基于x86_64架构的客户机中,可以保持读后读,读后写以及写后写的内存操作序列,而在基于ARMv8架构的宿主机中,不能保持任何内存操作序列,因此,在将软件从基于x86_64架构的客户机移植到基于ARMv8架构的宿主机时,有限状态机需要额外保持的内存操作序列为读后读,读后写以及写后写。
本申请实施例可以将有限状态机设置第一状态、第二状态和第三状态共三个状态;将第一状态对应的时序处理方式设置为不保持任一内存操作指令的时序,将第二状态对应的时序处理方式设置为保持读后读和读后写的时序,将第三状态对应的时序处理方式设置为保持写后写的时序。
对应的,当有限状态机的状态为第一状态时,则表明上一指令为内存屏障指令;当有限状态机的状态为第二状态时,则表明上一指令为读取;当有限状态机的状态为第三状态时,则表明上一指令为写入。
本申请实施例针对宿主机相对于客户机无法保证读后读,读后写,写后写的内存操作序列的情况,提供了一种有限状态机的设置方式,设置有限状态机包括第一状态、第二状态和第三状态三个状态,第一状态的时序处理方式为不保持任一内存操作指令的时序,第二状态时序处理方式为保持读后读和读后写的时序,第三状态时序处理方式为保持写后写的时序。以使得有限状态机可以在第二应用程序中的指令序列为读后读,读后写,写后写时,在指令序列中添加内存屏障指令,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。
前文介绍了根据预先设置的有限状态机对第二应用程序进行操作指令的时序处理的方案。本申请实施例可以基于上述实施例中设置的有限状态机对第二应用程序进行操作指令的时序处理。
当有限状态机遍历到的目标指令的类型为读取时,由于有限状态机当前状态的不同,有限状态机对第二应用程序进行操作指令的时序处理具体包括:
若有限状态机的状态为第二状态,且遍历到的目标指令的类型为读取,则在目标指令前添加内存屏障指令,以保持读后读的时序。
在本申请实施例中,若有限状态机的状态为第二状态,则表明上一指令的类型为读取;遍历到的目标指令的类型为读取,则表明上一指令和当前指令组成的指令序列为读后读,为需要保持时序的内存操作序列。因此,有限状态机可以在指令序列中(即目标指令前)添加内存屏障指令DMB ld,以保持读后读的时序。
若有限状态机的状态为第一状态,则表明上一指令的类型为内存屏障指令,表明在上一指令之前的所有程序指令的时序已得到保持。因此,有限状态机仅需将当前遍历到的读取指令输出,同时将状态置为第二状态,以使得有限状态机在遍历到下一指令时,可以确定当前指令为读取指令。
若有限状态机的状态为第三状态,则表明上一指令的类型为写入;遍历到的目标指令的类型为读取,则表明上一指令和当前指令组成的指令序列为写后读,为不需要保持时序的内存操作序列。因此,有限状态机仅需将当前遍历到的读取指令输出,同时将状态置为第二状态,以使得有限状态机在遍历到下一指令时,可以确定当前指令为读取指令。
需要说明的是,有限状态机在遍历到目标指令时,可以先确定该目标指令是否为栈基址寄存器(Base Point,RBP)寄存器寻址的内存操作指令。由于RBP寄存器寻址的内存操作指令本身即可保证该内存操作指令的有序性,因此,若目标指令为RBP寄存器寻址的内存操作指令,则有限状态机只需根据当前状态执行状态转换和/或当前指令输出的动作,无需添加内存屏障指令。
本申请实施例提供的方法可以在有限状态机遍历到的目标指令为读取时,根据有限状态机的状态判断上一指令的类型,进而确定当前的指令序列,并在当前的指令序列为读后读时,在目标指令前添加内存屏障指令,以保持读后读的时序,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。另外,本申请实施例无需在目标指令为RBP寄存器寻址的内存操作指令时,进行内存屏障指令的添加操作,避免了内存屏障指令的冗余,降低了存储资源的消耗。
当有限状态机遍历到的目标指令的类型为写入时,由于有限状态机当前状态的不同,有限状态机对第二应用程序进行操作指令的时序处理,具体包括:
若有限状态机的状态为第二状态,且遍历到的目标指令的类型为写入,则将有限状态机的状态设置为第三状态,并在目标指令前添加内存屏障指令,以保持读后写的时序;若有限状态机的状态为第三状态,且遍历到的目标指令的类型为写入,则在目标指令前添加内存屏障指令,以保持写后写的时序。
在本申请实施例中,若有限状态机的状态为第二状态,则表明上一指令的类型为读取;遍历到的目标指令的类型为写入,则表明上一指令和当前指令组成的指令序列为读后写,为需要保持时序的内存操作序列。因此,有限状态机可以在指令序列中(即目标指令前)添加内存屏障指令DMB ld,以保持读后写的时序;同时,有限状态机需将状态置为第三状态,以使得有限状态机在遍历到下一指令时,可以确定当前指令为写入指令。
若有限状态机的状态为第三状态,则表明上一指令的类型为写入;遍历到的目标指令的类型为写入,则表明上一指令和当前指令组成的指令序列为写后写,为需要保持时序的内存操作序列。因此,有限状态机可以在指令序列中(即目标指令前)添加内存屏障指令DMB st,以保持读后写的时序。
若有限状态机的状态为第一状态,则表明上一指令的类型为内存屏障指令,表明在上一指令之前的所有程序指令的时序已得到保持。因此,有限状态机仅需将当前遍历到的写入指令输出,同时将状态置为第三状态,以使得有限状态机在遍历到下一指令时,可以确定当前指令为写入指令。
本申请实施例提供的方法可以在有限状态机遍历到的目标指令为写入时,根据有限状态机的状态判断上一指令的类型,进而确定当前的指令序列,并在当前的指令序列为读后写和写后写时,在目标指令前添加内存屏障指令,以保持读后写和写后写的时序,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。
当有限状态机遍历到的目标指令的类型为LFENCE时,由于有限状态机当前状态的不同,有限状态机对第二应用程序进行操作指令的时序处理,具体包括:
若有限状态机的状态为第二状态,且遍历到的目标指令为读取屏障指令,则将有限状态机的状态设置为第一状态,并将读取屏障指令转换为内存屏障指令,以保持读后读的时序。
在本申请实施例中,若有限状态机的状态为第二状态,则表明上一指令的类型为读取。此时,上一指令和下一指令组成的内存操作序列可能为读后读,为需要保持时序的内存操作序列。因此,当遍历到的目标指令的类型为LFENCE时,有限状态机可以直接将LFENCE翻译为宿主机中的形式DMB ld,以保持读后读的时序。同时,有限状态机需要将状态置为第一状态,以表明在当前指令之前的所有程序指令的时序已得到保持。
若有限状态机的状态为第一状态,则表明上一指令的类型为内存屏障指令,表明在上一指令之前的所有程序指令的时序已得到保持。因此,当遍历到的目标指令的类型为LFENCE时,该目标指令在第二应用程序中不起作用。因此,有限状态机无需做任何处理,当前遍历到的目标指令也无需进行输出。
若有限状态机的状态为第三状态,则表明上一指令的类型为写入;当遍历到的目标指令的类型为LFENCE时,由于LFENCE不保持写后写的时序,而写后读的时序无需保持,因此,该目标指令在第二应用程序中不起作用。因此,有限状态机无需做任何处理,当前遍历到的目标指令也无需进行输出。
本申请实施例提供的方法可以在有限状态机遍历到的目标指令为LFENCE时,根据有限状态机的状态判断该目标指令在第二应用程序中是否存在作用,在不存在作用的情况下,有限状态机不作任何处理;在存在作用的情况下,对该目标指令进行翻译处理,以保持读后读的时序,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。
当有限状态机遍历到的目标指令的类型为SFENCE时,由于有限状态机当前状态的不同,有限状态机对第二应用程序进行操作指令的时序处理,具体包括:
若有限状态机的状态为第三状态,且遍历到的目标指令为写入屏障指令,则将有限状态机的状态设置为第一状态,并将写入屏障指令转换为内存屏障指令,以保持写后写的时序。
在本申请实施例中,若有限状态机的状态为第三状态,则表明上一指令的类型为写入。此时,上一指令和下一指令组成的内存操作序列可能为写后写,为需要保持时序的内存操作序列。因此,当遍历到的目标指令的类型为SFENCE时,有限状态机可以直接将SFENCE翻译为宿主机中的形式DMB st,以保持写后写的时序。同时,有限状态机需要将状态置为第一状态,以表明在当前指令之前的所有程序指令的时序已得到保持。
若有限状态机的状态为第一状态,则表明上一指令的类型为内存屏障指令,表明在上一指令之前的所有程序指令的时序已得到保持。因此,当遍历到的目标指令的类型为SFENCE时,该目标指令在第二应用程序中不起作用。因此,有限状态机无需做任何处理,当前遍历到的目标指令也无需进行输出。
若有限状态机的状态为第二状态,则表明上一指令的类型为读取;当遍历到的目标指令的类型为SFENCE时,由于SFENCE不保持读后读以及读后写的时序,因此,该目标指令在第二应用程序中不起作用。因此,有限状态机无需做任何处理,当前遍历到的目标指令也无需进行输出。
本申请实施例提供的方法可以在有限状态机遍历到的目标指令为SFENCE时,根据有限状态机的状态判断该目标指令在第二应用程序中是否存在作用,在不存在作用的情况下,有限状态机不作任何处理;在存在作用的情况下,对该目标指令进行翻译处理,以保持写后写的时序,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。
当有限状态机遍历到的目标指令的类型为MFENCE时,由于有限状态机当前状态的不同,有限状态机对第二应用程序进行操作指令的时序处理,具体包括:
若有限状态机的状态为第二状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持读后读的时序;若有限状态机的状态为第三状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持写后写的时序。
在本申请实施例中,若有限状态机的状态为第二状态,则表明上一指令的类型为读取。此时,上一指令和下一指令组成的内存操作序列可能为读后读,为需要保持时序的内存操作序列。因此,当遍历到的目标指令的类型为MFENCE时,有限状态机可以直接将MFENCE翻译为宿主机中的形式DMB ld,以保持读后读的时序。同时,有限状态机需要将状态置为第一状态,以表明在当前指令之前的所有程序指令的时序已得到保持。
若有限状态机的状态为第三状态,则表明上一指令的类型为写入。此时,上一指令和下一指令组成的内存操作序列可能为写后写,为需要保持时序的内存操作序列。因此,当遍历到的目标指令的类型为MFENCE时,有限状态机可以直接将MFENCE翻译为宿主机中的形式DMB st,以保持写后写的时序。同时,有限状态机需要将状态置为第一状态,以表明在当前指令之前的所有程序指令的时序已得到保持。
若有限状态机的状态为第一状态,则表明上一指令的类型为内存屏障指令,表明在上一指令之前的所有程序指令的时序已得到保持。因此,当遍历到的目标指令的类型为MFENCE时,该目标指令在第二应用程序中不起作用。因此,有限状态机无需做任何处理,当前遍历到的目标指令也无需进行输出。
本申请实施例提供的方法可以在有限状态机遍历到的目标指令为MFENCE时,根据有限状态机的状态判断该目标指令在第二应用程序中是否存在作用,在不存在作用的情况下,有限状态机不作任何处理;在存在作用的情况下,对该目标指令进行翻译处理,以保持读后读或者写后写的时序,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。
前文所述的实施例中介绍了根据预先设置的有限状态机对第二应用程序进行操作指令的时序处理的方案。本申请实施例可以根据预先设置的有限状态机依次对组成第二应用程序的多个应用程序块进行操作指令的时序处理。具体包括如图4所示的步骤:
步骤301、对第二应用程序进行分块处理,得到多个应用程序块;
步骤302、利用预先设置的有限状态机对各应用程序块进行操作指令的时序处理,得到第三应用程序。
在本申请实施例中,为了降低有限状态机的处理复杂度,服务器在将第二应用程序输入至有限状态机之前,可以先对第二应用程序进行分块处理。例如,通过控制流指令(跳转指令,条件指令,循环指令等)对第二应用程序进行分块,从而得到多个应用程序块。然后,将各应用程序块依次输入至预先设置的有限状态机中,以使得有限状态机对各应用程序块进行内存屏障指令添加操作。服务器对内存屏障指令添加后的各应用程序块进行拼接后得到第三应用程序。
本申请实施例提供的方法可以在将第二应用程序输入至有限状态机之前,对第二应用程序进行分块处理,并依次将各应用程序块输入至预先设置的有限状态机中进行内存屏障指令的添加,降低了有限状态机的处理复杂度。
在一个实施例中,如图5所示,提供了一种有限状态机的状态定义图,说明了各个内存操作序列所在的位置。
如图6所示,提供了一种有限状态机的状态实例图,说明了在该状态下四种内存操作序列分别应该保持的时序,而图6提供的实例说明在该状态下需要保持读后读和写后写的时序。
如图7所示,提供了一种有限状态机。包括不保持任一内存操作指令的时序的第一状态,保持读后读和读后写的时序的第二状态,以及保持写后写的时序的第三状态。
其中,符号“/”前的指令表示输入至有限状态机的指令,符号“/”后的指令表示有限状态机输出的指令。
其中,“ld/ld”表示有限状态机遍历到的指令的类型为读取,当前状态为第一状态时,将读取指令输出,同时状态置为第二状态。
或者,“ld/ld”表示有限状态机遍历到的指令的类型为读取,当前状态为第三状态时,将读取指令输出,同时状态置为第二状态。
“LFENCE/DMB ld”表示有限状态机遍历到的指令的类型为LFENCE,当前状态为第二状态时,将LFENCE翻译为DMB ld,同时状态置为第一状态。
“MFENCE/DMB ld”表示有限状态机遍历到的指令的类型为MFENCE,当前状态为第二状态时,将MFENCE翻译为DMB ld,同时状态置为第一状态。
“MFENCE/DMB st”表示有限状态机遍历到的指令的类型为MFENCE,当前状态为第三状态时,将MFENCE翻译为DMB st,同时状态置为第一状态。
“SFENCE/DMB st”表示有限状态机遍历到的指令的类型为SFENCE,当前状态为第三状态时,将SFENCE翻译为DMB st,同时状态置为第一状态。
“st/st”表示有限状态机遍历到的指令的类型为写入,当前状态为第一状态时,将写入指令输出,同时状态置为第三状态。
“st/DMB ld;st”表示有限状态机遍历到的指令的类型为写入,当前状态为第二状态时,在写入指令前添加内存屏障指令DMB ld,同时状态置为第三状态。
“ld/DMB ld;ld”表示有限状态机遍历到的指令的类型为读取,当前状态为第二状态时,在读取指令前添加内存屏障指令DMB ld。
“st/DMB st;st”表示有限状态机遍历到的指令的类型为写入,当前状态为第三状态时,在写入指令前添加内存屏障指令DMB st。
本申请实施例设置有限状态机包括第一状态、第二状态和第三状态三个状态,第一状态的时序处理方式为不保持任一内存操作指令的时序,第二状态时序处理方式为保持读后读和读后写的时序,第三状态时序处理方式为保持写后写的时序。以使得有限状态机可以在第二应用程序中的指令序列为读后读,读后写,写后写时,在指令序列中添加内存屏障指令,实现第二应用程序中内存操作指令的有序性,避免了指令乱序。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的软件移植方法的软件移植装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个软件移植装置实施例中的具体限定可以参见上文中对于软件移植方法的限定,在此不再赘述。
在一个实施例中,如图8所示,提供了一种软件移植装置,包括:指令转换模块401、时序处理模块402和存储模块403,其中:
指令转换模块401,用于根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
时序处理模块402,用于利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
存储模块403,用于将第三应用程序存储到目标移植空间中。
在一个实施例中,时序处理模块402,具体用于在遍历第二应用程序的过程中,确定第二应用程序中各指令的类型;根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,得到第三应用程序;有限状态机的不同状态对应不同的时序处理方式。
在一个实施例中,有限状态机的状态包括第一状态、第二状态和第三状态;第一状态为不保持任一内存操作指令的时序,第二状态为保持读后读和读后写的时序,第三状态为保持写后写的时序。
在一个实施例中,时序处理模块402,具体用于若有限状态机的状态为第二状态,且遍历到的目标指令的类型为读取,则在目标指令前添加内存屏障指令,以保持读后读的时序。
在一个实施例中,时序处理模块402,具体用于若有限状态机的状态为第二状态,且遍历到的目标指令的类型为写入,则将有限状态机的状态设置为第三状态,并在目标指令前添加内存屏障指令,以保持读后写的时序;若有限状态机的状态为第三状态,且遍历到的目标指令的类型为写入,则在目标指令前添加内存屏障指令,以保持写后写的时序。
在一个实施例中,时序处理模块402,具体用于若有限状态机的状态为第二状态,且遍历到的目标指令为读取屏障指令,则将有限状态机的状态设置为第一状态,并将读取屏障指令转换为内存屏障指令,以保持读后读的时序。
在一个实施例中,时序处理模块402,具体用于若有限状态机的状态为第三状态,且遍历到的目标指令为写入屏障指令,则将有限状态机的状态设置为第一状态,并将写入屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,时序处理模块402,具体用于若有限状态机的状态为第二状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持读后读的时序;若有限状态机的状态为第三状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,软件移植装置还用于对第二应用程序进行分块处理,得到多个应用程序块;利用预先设置的有限状态机对各应用程序块进行操作指令的时序处理,得到第三应用程序。
上述软件移植装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
将第三应用程序存储到目标移植空间中。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:在遍历第二应用程序的过程中,确定第二应用程序中各指令的类型;根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,得到第三应用程序;有限状态机的不同状态对应不同的时序处理方式。
在一个实施例中,有限状态机的状态包括第一状态、第二状态和第三状态;第一状态为不保持任一内存操作指令的时序,第二状态为保持读后读和读后写的时序,第三状态为保持写后写的时序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为读取,则在目标指令前添加内存屏障指令,以保持读后读的时序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为写入,则将有限状态机的状态设置为第三状态,并在目标指令前添加内存屏障指令,以保持读后写的时序;若有限状态机的状态为第三状态,且遍历到的目标指令的类型为写入,则在目标指令前添加内存屏障指令,以保持写后写的时序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令为读取屏障指令,则将有限状态机的状态设置为第一状态,并将读取屏障指令转换为内存屏障指令,以保持读后读的时序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:若有限状态机的状态为第三状态,且遍历到的目标指令为写入屏障指令,则将有限状态机的状态设置为第一状态,并将写入屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持读后读的时序;若有限状态机的状态为第三状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:对第二应用程序进行分块处理,得到多个应用程序块;利用预先设置的有限状态机对各应用程序块进行操作指令的时序处理,得到第三应用程序。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
将第三应用程序存储到目标移植空间中。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:在遍历第二应用程序的过程中,确定第二应用程序中各指令的类型;根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,得到第三应用程序;有限状态机的不同状态对应不同的时序处理方式。
在一个实施例中,有限状态机的状态包括第一状态、第二状态和第三状态;第一状态为不保持任一内存操作指令的时序,第二状态为保持读后读和读后写的时序,第三状态为保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为读取,则在目标指令前添加内存屏障指令,以保持读后读的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为写入,则将有限状态机的状态设置为第三状态,并在目标指令前添加内存屏障指令,以保持读后写的时序;若有限状态机的状态为第三状态,且遍历到的目标指令的类型为写入,则在目标指令前添加内存屏障指令,以保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令为读取屏障指令,则将有限状态机的状态设置为第一状态,并将读取屏障指令转换为内存屏障指令,以保持读后读的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第三状态,且遍历到的目标指令为写入屏障指令,则将有限状态机的状态设置为第一状态,并将写入屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持读后读的时序;若有限状态机的状态为第三状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:对第二应用程序进行分块处理,得到多个应用程序块;利用预先设置的有限状态机对各应用程序块进行操作指令的时序处理,得到第三应用程序。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对第二应用程序进行操作指令的时序处理,得到第三应用程序;
将第三应用程序存储到目标移植空间中。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:在遍历第二应用程序的过程中,确定第二应用程序中各指令的类型;根据有限状态机的状态和各指令的类型,对第二应用程序进行操作指令的时序处理,得到第三应用程序;有限状态机的不同状态对应不同的时序处理方式。
在一个实施例中,有限状态机的状态包括第一状态、第二状态和第三状态;第一状态为不保持任一内存操作指令的时序,第二状态为保持读后读和读后写的时序,第三状态为保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为读取,则在目标指令前添加内存屏障指令,以保持读后读的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令的类型为写入,则将有限状态机的状态设置为第三状态,并在目标指令前添加内存屏障指令,以保持读后写的时序;若有限状态机的状态为第三状态,且遍历到的目标指令的类型为写入,则在目标指令前添加内存屏障指令,以保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令为读取屏障指令,则将有限状态机的状态设置为第一状态,并将读取屏障指令转换为内存屏障指令,以保持读后读的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第三状态,且遍历到的目标指令为写入屏障指令,则将有限状态机的状态设置为第一状态,并将写入屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若有限状态机的状态为第二状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持读后读的时序;若有限状态机的状态为第三状态,且遍历到的目标指令为混合屏障指令,则将有限状态机的状态设置为第一状态,并将混合屏障指令转换为内存屏障指令,以保持写后写的时序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:对第二应用程序进行分块处理,得到多个应用程序块;利用预先设置的有限状态机对各应用程序块进行操作指令的时序处理,得到第三应用程序。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (13)
1.一种软件移植方法,其特征在于,所述方法包括:
根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
利用预先设置的有限状态机对所述第二应用程序进行操作指令的时序处理,得到第三应用程序;
将所述第三应用程序存储到目标移植空间中。
2.根据权利要求1所述的方法,其特征在于,所述利用预先设置的有限状态机对所述第二应用程序进行操作指令的时序处理,得到第三应用程序,包括:
在遍历所述第二应用程序的过程中,确定所述第二应用程序中各指令的类型;
根据所述有限状态机的状态和各所述指令的类型,对所述第二应用程序进行操作指令的时序处理,得到所述第三应用程序;所述有限状态机的不同状态对应不同的时序处理方式。
3.根据权利要求2所述的方法,其特征在于,所述有限状态机的状态包括第一状态、第二状态和第三状态;所述第一状态为不保持任一内存操作指令的时序,所述第二状态为保持读后读和读后写的时序,所述第三状态为保持写后写的时序。
4.根据权利要求3所述的方法,其特征在于,所述根据所述有限状态机的状态和各所述指令的类型,对所述第二应用程序进行操作指令的时序处理,包括:
若所述有限状态机的状态为所述第二状态,且遍历到的目标指令的类型为读取,则在所述目标指令前添加内存屏障指令,以保持读后读的时序。
5.根据权利要求3所述的方法,其特征在于,所述根据所述有限状态机的状态和各所述指令的类型,对所述第二应用程序进行操作指令的时序处理,包括:
若所述有限状态机的状态为所述第二状态,且遍历到的目标指令的类型为写入,则将所述有限状态机的状态设置为所述第三状态,并在所述目标指令前添加所述内存屏障指令,以保持读后写的时序;
若所述有限状态机的状态为所述第三状态,且遍历到的所述目标指令的类型为写入,则在所述目标指令前添加所述内存屏障指令,以保持写后写的时序。
6.根据权利要求3所述的方法,其特征在于,所述根据所述有限状态机的状态和各所述指令的类型,对所述第二应用程序进行操作指令的时序处理,包括:
若所述有限状态机的状态为所述第二状态,且遍历到的目标指令为读取屏障指令,则将所述有限状态机的状态设置为所述第一状态,并将所述读取屏障指令转换为所述内存屏障指令,以保持读后读的时序。
7.根据权利要求3所述的方法,其特征在于,所述根据所述有限状态机的状态和各所述指令的类型,对所述第二应用程序进行操作指令的时序处理,包括:
若所述有限状态机的状态为所述第三状态,且遍历到的目标指令为写入屏障指令,则将所述有限状态机的状态设置为所述第一状态,并将所述写入屏障指令转换为所述内存屏障指令,以保持写后写的时序。
8.根据权利要求3所述的方法,其特征在于,所述根据所述有限状态机的状态和各所述指令的类型,对所述第二应用程序进行操作指令的时序处理,包括:
若所述有限状态机的状态为所述第二状态,且遍历到的目标指令为混合屏障指令,则将所述有限状态机的状态设置为所述第一状态,并将所述混合屏障指令转换为所述内存屏障指令,以保持读后读的时序;
若所述有限状态机的状态为所述第三状态,且遍历到的目标指令为混合屏障指令,则将所述有限状态机的状态设置为所述第一状态,并将所述混合屏障指令转换为所述内存屏障指令,以保持写后写的时序。
9.根据权利要求1-8任一项所述的方法,其特征在于,所述方法还包括:
对所述第二应用程序进行分块处理,得到多个应用程序块;
对应的,利用预先设置的有限状态机对所述第二应用程序进行操作指令的时序处理,得到第三应用程序,包括:
利用预先设置的有限状态机对各所述应用程序块进行操作指令的时序处理,得到第三应用程序。
10.一种软件移植装置,其特征在于,所述装置包括:
指令转换模块,用于根据移植前后的指令对应关系,对待移植的第一应用程序进行指令转换处理得到第二应用程序;
时序处理模块,用于利用预先设置的有限状态机对所述第二应用程序进行操作指令的时序处理,得到第三应用程序;
存储模块,用于将所述第三应用程序存储到目标移植空间中。
11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述的方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
13.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211232123.9A CN115543441A (zh) | 2022-10-10 | 2022-10-10 | 软件移植方法、装置、设备、存储介质和程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211232123.9A CN115543441A (zh) | 2022-10-10 | 2022-10-10 | 软件移植方法、装置、设备、存储介质和程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115543441A true CN115543441A (zh) | 2022-12-30 |
Family
ID=84732874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211232123.9A Pending CN115543441A (zh) | 2022-10-10 | 2022-10-10 | 软件移植方法、装置、设备、存储介质和程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115543441A (zh) |
-
2022
- 2022-10-10 CN CN202211232123.9A patent/CN115543441A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20180173521A1 (en) | Method, apparatus, and system for reading and writing files | |
CN107665219B (zh) | 一种日志管理方法及装置 | |
CN106445398A (zh) | 一种基于新型存储器的嵌入式文件系统及其实现方法 | |
CN110597663A (zh) | 一种事务处理方法及装置 | |
US11409798B2 (en) | Graph processing system including different kinds of memory devices, and operation method thereof | |
US9804903B2 (en) | Data processing apparatus for pipeline execution acceleration and method thereof | |
CN111291022B (zh) | 一种基于区块链的数据存储系统 | |
CN114356248A (zh) | 一种数据处理方法和装置 | |
CN115686881A (zh) | 数据处理方法、装置和计算机设备 | |
CN110597552B (zh) | 项目持续集成流水线的配置方法、装置、设备及存储介质 | |
CN114328315A (zh) | 基于dma的数据预处理方法、dma部件及芯片结构 | |
CN113342266A (zh) | 一种基于非易失内存的分布式计算方法、系统及存储介质 | |
CN107451070A (zh) | 一种数据的处理方法和服务器 | |
WO2015199734A1 (en) | Buffer-based update of state data | |
CN115543441A (zh) | 软件移植方法、装置、设备、存储介质和程序产品 | |
KR102594770B1 (ko) | 데이터 처리장치에서의 연속값들의 매칭 | |
CN113791594B (zh) | 一种分散控制系统的组态创建方法、系统、设备及介质 | |
US11803317B2 (en) | Interrupted replicated write recognition | |
CN112988064B (zh) | 一种面向并发多任务的磁盘图处理方法 | |
US20220318015A1 (en) | Enforcing data placement requirements via address bit swapping | |
KR20220158639A (ko) | 합성곱 연산 장치, 합성곱 연산 방법 및 합성곱 연산 방법을 실행시키도록 기록매체에 저장된 컴퓨터 프로그램 | |
CN117234436B (zh) | 一种磁盘阵列的扩容方法、装置、存储系统及产品 | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
CN115981875A (zh) | 内存存储系统的增量更新方法、装置、设备、介质和产品 | |
CN118193032A (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 |