CN114385306A - 指令序列原子性修改方法、装置及可读存储介质 - Google Patents

指令序列原子性修改方法、装置及可读存储介质 Download PDF

Info

Publication number
CN114385306A
CN114385306A CN202011111955.6A CN202011111955A CN114385306A CN 114385306 A CN114385306 A CN 114385306A CN 202011111955 A CN202011111955 A CN 202011111955A CN 114385306 A CN114385306 A CN 114385306A
Authority
CN
China
Prior art keywords
instruction
instructions
thread
sequence
target
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
Application number
CN202011111955.6A
Other languages
English (en)
Inventor
傅杰
敖琪
高翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Loongson Technology Corp Ltd
Original Assignee
Loongson Technology Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Loongson Technology Corp Ltd filed Critical Loongson Technology Corp Ltd
Priority to CN202011111955.6A priority Critical patent/CN114385306A/zh
Publication of CN114385306A publication Critical patent/CN114385306A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Abstract

本申请实施例提供一种指令序列原子性修改方法、装置及可读存储介质,其中,该方法包括:第一线程确定修改第一指令序列时,获取第一指令序列包括的目标第一指令对应的首地址;第一线程修改目标第一指令,获取目标第一指令对应的第二指令,第二线程执行目标第一指令对应的第二指令后跳转至第1条第一指令对应的首地址;第一线程根据目标第一指令对应的第二指令以及第一指令序列包括的其他N‑1条第一指令,获取第二指令序列。在多线程环境中,第二线程执行修改中的指令序列,当其执行至目标第一指令时,第二线程均会跳转至第1条第一指令对应的首地址,直至第一指令序列全部修改完成,保证了指令序列的原子性修改。

Description

指令序列原子性修改方法、装置及可读存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种指令序列原子性修改方法、 装置及可读存储介质。
背景技术
虚拟机(virtual machine)是通过软件模拟的具有完整硬件系统功能的、 运行在一个完全隔离环境中的完整计算机系统。通常虚拟机支持一套独立 的指令集,称为虚拟机指令集。虚拟机依托于本地的物理机,通过其执行 引擎对给定的虚拟机指令序列在本地的物理机上模拟执行。虚拟机的执行 引擎包括解释器和编译器两种类型,其中,解释器是以一条虚拟机指令为 单位进行取指令、译码和执行,编译器是以一组连续的虚拟机指令序列为 单位整体编译成本地机器指令序列。编译器在编译连续的虚拟机指令序列 时,为了能够尽可能地提升编译后生成的本地机器指令序列的质量,通常 会基于某些假设进行深度优化。对于这种基于若干假设条件的优化,虚拟 机同时会生成相应的假设条件监测语句。当某项假设不再成立时,虚拟机 需要禁止先前基于该假设编译生成的本地机器指令序列的执行。现有技术 中,通常虚拟机修改已编译的指令序列时,会将已编译的序列首部的若干 条指令修改为跳转到一个固定处理例程来实现。在多线程环境下,为了确 保多线程安全,因此,修改已编译的指令序列时,必须实现原子性修改, 以保证程序执行的正确性,其中,指令的原子性修改,即执行线程执行的 指令序列完全是修改之前的指令序列,或者完全是修改之后的指令序列。
现有技术中,实现指令序列的原子性修改时,通常要利用硬件的访存 指令,若硬件提供的最大原子访存指令小于所需修改的指令序列的总长度, 则无法实现指令序列的原子性修改。
发明内容
本申请实施例提供一种指令序列原子性修改方法、装置及可读存储介质, 以实现原子性的指令序列修改。
第一方面,本申请实施例提供一种指令序列原子性修改方法,包括:
第一线程确定修改第一指令序列时,获取目标第一指令对应的首地址, 所述第一指令序列包括N条第一指令,N为大于1的正整数,所述目标第 一指令为所述第一指令序列包括的第1条第一指令或第N条第一指令;
所述第一线程修改所述目标第一指令,获取所述目标第一指令对应的 第二指令,其中,第二线程执行所述目标第一指令对应的第二指令后跳转 至第1条第一指令对应的首地址;
所述第一线程根据所述目标第一指令对应的第二指令以及所述第一 指令序列包括的其他N-1条第一指令,获取第二指令序列。
在一些可能的设计中,所述第一线程根据所述目标第一指令对应的第 二指令以及所述第一指令序列包括的其他N-1条第一指令,获取第二指令 序列,包括:
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条第 一指令分别对应的修改后的指令;
所述第一线程根据所述目标第一指令对应的第二指令以及所述其他 N-1条第一指令对应的修改后的指令,获取所述第二指令序列。
在一些可能的设计中,若所述目标第一指令为所述第一指令序列包括 的第1条第一指令;
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条第 一指令对应的修改后的指令,包括:
所述第一线程按照第一预设顺序修改所述其他N-1条第一指令,获取 所述其他N-1条第一指令分别对应的第二指令,其中,所述第二线程执行 每个所述第二指令后均跳转至第1条第一指令对应的地址;
所述第一线程根据所述目标第一指令对应的第二指令以及所述其他 N-1条第一指令分别对应的第二指令,获取所述第二指令序列,包括:
所述第一线程按照所述第一预设顺序修改所述目标第一指令对应的 第二指令以及所述其他N-1条第一指令对应的第二指令,获取N条第一指 令分别对应的N条第三指令,所述第二指令序列包括所述N条第三指令。
在一些可能的设计中,所述第一预设顺序为由第N条第一指令向第1 条第一指令的顺序。
在一些可能的设计中,若所述目标第一指令为所述第一指令序列中的 第N条第一指令;
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条第 一指令对应的修改后的指令,包括:
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条指 令分别对应的第三指令;
所述第一线程根据所述目标第一指令对应的第二指令以及所述其他 N-1条第一指令对应的修改后的指令,获取所述第二指令序列,包括:
所述第一线程修改所述第N条第一指令对应的第二指令,获取第N 条第一指令对应的第三指令;
所述第一线程根据所述其他N-1条第一指令分别对应的第三指令,以 及第N条第一指令对应的第三指令,获取所述第二指令序列,所述第二指 令序列包括N条第三指令。
在一些可能的设计中,所述第一线程修改所述其他N-1条第一指令, 获取所述其他N-1条指令分别对应的第三指令,包括:
所述第一线程按照第二预设顺序修改所述其他N-1条第一指令,获取所 述其他N-1条指令分别对应的第三指令,其中,所述第二预设顺序为由第N 条第一指令向第1条第一指令的顺序,或者,由第1条第一指令向第N条第 一指令的顺序。
在一些可能的设计中,第一线程确定修改第一指令序列时,获取第一指 令序列包括的目标第一指令的首地址之前,还包括:
确定所述第一指令序列对应的监测语句中包括的假设条件是否成立;
若确定所述假设条件不成立,所述第一线程确定修改第一指令序列。
第二方面,本申请实施例提供一种指令序列原子性修改装置,包括:
获取模块,用于确定修改第一指令序列时,获取目标第一指令对应的首 地址,所述第一指令序列包括N条第一指令,N为大于1的正整数,所述目 标第一指令为所述第一指令序列包括的第1条第一指令或第N条第一指令;
修改模块,用于修改所述目标第一指令,获取所述目标第一指令对应 的第二指令;以及根据所述目标第一指令对应的第二指令以及所述第一指 令序列包括的其他N-1条第一指令,获取第二指令序列;
其中,第二线程执行所述目标第一指令对应的第二指令后跳转至第1 条第一指令对应的首地址。
第三方面,本申请实施例提供一种指令序列原子性修改装置,包括:存 储器、处理器以及计算机程序指令;
所述存储器存储所述计算机程序指令;
所述处理器执行所述计算机程序指令,以执行第一方面任一项所述的 指令序列原子性修改方法。
第四方面,本申请实施例提供一种可读存储介质,包括:程序;
所述程序被处理器执行时,以执行第一方面任一项所述的指令序列原 子性修改方法。
本申请提供一种指令序列原子性修改方法、装置及可读存储介质,其中, 该方法包括:第一线程确定修改第一指令序列时,获取第一指令序列包括的 目标第一指令对应的首地址;第一线程修改目标第一指令,获取目标第一指 令对应的第二指令,第二线程执行目标第一指令对应的第二指令后跳转至第 1条第一指令对应的首地址;第一线程根据目标第一指令对应的第二指令以 及第一指令序列包括的其他N-1条第一指令,获取第二指令序列。在多线程 环境中,第二线程执行修改中的指令序列,当第二线程执行目标第一指令对应的第二指令后,第二线程均会跳转至第1条第一指令对应的首地址,直至 第一指令序列全部修改完成,保证了指令序列的原子性修改。且第一线程在 修改第一指令序列时,第二线程可不执行加锁,从而提高整体处理效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实 施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下 面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在 不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请提供的指令序列原子性修改方法实施例一的流程图;
图2为本申请提供的指令序列原子性修改方法实施例二的流程图;
图3为采用图2所示的方法修改第一指令序列时,指令序列变化过程示 意图;
图4为本申请提供的指令序列原子性修改方法实施例三的流程图;
图5为采用图4所示的方法修改第一指令序列的指令序列变化过程示意 图;
图6为本申请提供的指令序列原子性修改装置实施例一的结构示意图;
图7为本申请提供的指令序列原子性修改装置实施例二的结构示意图;
图8为本申请提供的指令序列原子性修改装置实施例三的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申 请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述, 显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于 本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获 得的所有其他实施例,都属于本申请保护的范围。
现有技术中,实现指令序列的原子性修改时,通常要利用硬件的访存指 令,若硬件提供的最大原子访存指令小于所需修改的指令序列的总长度,则 无法实现指令序列的原子性修改。例如,需要进行修改的指令序列包括8条 指令,每条指令长度为4字节,在标准的MIPS体系结构,在64位系统中能 够提供的最大原子访存长度为8字节,远小于需要修改的指令长度,因此, 在多线程环境中,采用上述方法无法实现指令序列的原子性修改。
现有技术中,还有通过“加锁”实现指令序列的原子性修改的方式,具 体地,即在执行访存动作之前对执行线程进行加锁,访存动作之后进行解锁。 这种方式使得资源开销较大,整体处理效率较低。
因此,本申请提供一种指令序列原子性修改方法,以实现指令序列的原 子性修改。由于多线程环境中,修改线程修改指令序列的过程中,执行线程 可能同时执行该指令序列;若修改线程修改了指令序列中的部分指令,修改 线程开始执行该指令序列,修改线程可能未将剩余的指令修改完成,执行线 程执行修改了一部分指令的指令序列,这样的情况会导致执行线程跳转至非 法地址,从而无法保证指令序列的原子性。这样的情况下,本方案通过在修 改线程未完全修改指令序列的情况下,即使执行线程执行尚未全部修改完成 的指令序列,也能够跳转至该指定地址,只有当修改线程将指令序列修改完 成时,执行线程执行修改后的指令序列则不会跳转至该指定地址,这样则能 够保证指令序列的原子性修改。其中,指定地址可以为序列首部的指令对应 的地址。
本申请提供的指令序列原子性修改方法:当确定修改第一指令序列时, 获取目标第一指令对应的首地址,并对目标第一指令进行修改,将其修改为 跳转至指定地址的第二指令;接着,修改第一指令序列中的其他第一指令, 并对目标第一指令对应的第二指令进行修改,从而获得修改后的指令序列。
本申请实施例提供的指令序列原子性修改方法,实现了指令序列的原子 性修改,保证了执行结果的准确性,且无需依赖于硬件提供的原子访存指令 长度。另外,本申请实施例提供的方法无需对执行线程进行加锁,能够提供 整体处理效率,减小资源浪费。
图1为本申请提供的指令序列原子性修改方法实施例一的流程图。本申 请提供的指令序列原子性修改方法的执行主体可以为本申请实施例提供的指 令序列原子性修改装置,该指令序列原子性修改装置可以通过任意的软件和/ 或硬件的方式实现,例如指令序列原子性修改装置包括但不限于为计算机、 智能手机、IPAD、服务器等各种电子设备。
如图1所示,本实施例的方法包括:
S101、第一线程确定修改第一指令序列时,获取第一指令序列包括的目 标第一指令对应的首地址。
在一些情况下,若虚拟机的编译器在对虚拟指令序列进行编译时,通常 会基于某些假设条件进行深度优化,若确定原先的假设条件不成立时,则确 定需要对第一指令序列进行原子性修改,并调用第一线程获取目标第一指令 的首地址。其中,第一线程为用于修改第一指令序列的线程,第一线程也可 称为修改线程、第一CPU线程等其他名称。第一指令序列为待修改的指令序 列,第一指令序列包括N条指令,其中,N为大于1的正整数。
具体地,第一线程确定对第一指令序列进行原子性修改时,第一线程获 取第一指令序列包括的目标第一指令的首地址。可选地,该目标第一指令可 以为第一指令序列包括的第1条第一指令或第N条第一指令。第一线程获取 的目标第一指令的首地址可以为存储目标第一指令的寄存器的相对地址,也 可以为绝对地址,本申请实施例对此不作限制。
可选地,目标第一指令的首地址可以是第一线程的调用者传递至第一线 程的。
S102、第一线程根据目标第一指令对应的首地址修改目标第一指令,获 取目标第一指令对应的第二指令。
具体地,第一线程根据目标第一指令的首地址,对该首地址对应的存储 单元(例如,内存)中存储的指令进行修改,从而获取目标第一指令对应的 第二指令。
示例性地,在本步骤中,第一线程可根据新的假设条件对目标第一指令 进行修改,从而获取目标第一指令对应的第二指令。
其中,目标第一指令对应的第二指令为跳转指令,即第二线程指令执行 该目标第一指令对应的第二指令后跳转至第1条第一指令对应的首地址。若 目标第一指令为第一指令序列包括的第1条指令,则该目标第一指令对应的 第二指令为跳转到其自身的指令,第二线程执行该第二指令后跳转至其自身 对应的首地址;若目标第一指令为第一指令序列包括的第N条第一指令,则 该目标第一指令对应的第二指令为跳转到第1条第一指令的指令,即第二线 程执行该第二指令后跳转至第1条第一指令对应的首地址。
需要说明的是,第二线程为执行线程,第二线程可以为多个线程。
S103、第一线程根据目标第一指令对应的第二指令以及第一指令序列包 括的其他N-1条第一指令,获取第二指令序列。
具体地,第一线程修改目标第一指令之后,可修改第一指令序列包括的 其他N-1条第一指令,获取其他N-1条第一指令分别对应的修改后的指令; 接着,第一线程可根据目标第一指令对应的第二指令以及其他N-1条第一指 令分别对应的修改后的指令,获取第二指令序列,其中,第二指令序列为修 改后的指令序列,若执行线程执行第二指令序列,则能够获取正确的执行结 果,保证了线程的安全性。
示例性地,以第一指令序列包括8条第一指令,分别为A1-A8,为例, 对本申请实施例提供的指令序列原子性修改方法进行详细介绍。
一、目标第一指令为第一指令A1
具体地,目标第一指令为第一指令序列包括的第1条第一指令A1,第一 线程对第一指令A1进行修改获取第一指令A1对应的第二指令B1;接着, 第一线程修改A2-A8这7条第一指令,获得A2-A8这7条第一指令分别对应 的修改后的指令C2-C8;第一线程将第二指令B1修改为C1,从而获得修改 后第二指令序列,第二指令序列包括C1-C8这8条指令。在多线程环境中, 第二线程可不执行加锁;且第二线程执行修改中的指令序列,当其执行第二 指令B1后跳转至其自身对应的首地址,也就是说,在修改第一指令序列的过 程中,第二线程在循环执行第一指令A1对应的地址空间中的指令。当第一 指令序列修改完成之后,第二线程可执行第二指令序列,从而保证了第一指 令序列的原子性修改,保证了第二线程执行结果的准确性。
二、目标第一指令为第一指令A8
具体地,目标第一指令为第一指令序列包括的第8条第一指令A8,则第 一线程对第一指令A8进行修改获取第一指令A8对应的第二指令B8;接着, 第一线程修改A1-A7这7条第一指令,获得A1-A7这7条第一指令分别对应 的修改后的指令C1-C7;第一线程将第二指令B8修改为C8,从而获得修改 后第二指令序列,第二指令序列包括C1-C8这8条指令。在多线程环境中, 第二线程可不执行加锁,第二线程可执行修改中的指令序列,当其执行第二指令B8后跳转至第一指令A1对应的首地址,也就是说,在修改第一指令序 列的过程中,第二线程可以循环执行第一指令A1-A8对应的地址空间中的指 令。当第一指令序列修改完成之后,第二线程可执行第二指令序列,从而保 证了第一指令序列的原子性修改,保证了第二线程执行结果的准确性。
本实施例中,第一线程确定修改第一指令序列时,获取第一指令序列包 括的目标第一指令对应的首地址;第一线程修改目标第一指令,获取目标第 一指令对应的第二指令,第二线程执行目标第一指令对应的第二指令后跳转 至第1条第一指令对应的首地址;第一线程根据目标第一指令对应的第二指 令以及第一指令序列包括的其他N-1条第一指令,获取第二指令序列。
在多线程环境中,现有技术中进行指令序列修改时,通常会通过加锁实 现,即在线程执行访存动作之前加锁,在访存动作之后解锁,这种手段使得 每次访存模拟资源开销较大,导致整体处理效率较低。然而,采用本方案, 在多线程环境中,第一线程在修改第一指令序列时,第二线程可不执行加锁, 从而提高整体处理效率;且第二线程执行修改中的指令序列,当其执行至目 标第一指令对应的首地址,第二线程总是会跳转至第1条第一指令对应的首 地址,保证了指令序列的原子性修改。
可选地,在图1所示实施例的基础上,S101、第一线程确定修改第一指 令序列时,获取第一指令序列包括的目标第一指令对应的首地址之前,还包 括:
S100、确定第一指令序列对应的监测语句中包括的假设条件是否成立。
具体地,虚拟机的编译器在对虚拟指令序列进行编译时,通常会基于某 些假设条件进行深度优化,对于这种基于若干假设条件的优化,虚拟机通常 会生成相应的假设条件监测语句,因此,第一线程可通过确定第一指令序列 对应的监测语句中包括的假设条件是否成立,以确定是否需要针对第一指令 序列进行原子性修改。
示例性地,若编译器对虚拟机指令序列(表达式:i=i+1)进行编译时, 编译器无法确定该表达式中对象“i”的类型,这时,编译器会对i的类型进 行假设,由于表达式中的“1”为整数,因此,编译器假设i的类型为整数, 且编译器在进行编译时还生成了该假设条件的监测语句,以处理假设条件失 效的情况。
在程序实际运行的过程中,若“i”的实际类型为整数,则上述编译生成 的指令序列成功执行,且执行结果是准确的;若在程序实际运行的过程中, 实际传入的“i”是浮点数,则虚拟机会监测到假设条件“i的类型为整数” 不成立,则需要对这段已翻译的指令序列进行修改,以保证执行结果的准确 性。
因此,在本方案中可通过监测第一指令序列对应的监测语句中包括的假 设条件是否成立,来确定是否需要对第一指令序列进行原子性修改。且在实 际应用中,监测语句包括的假设条件可以包括一个或多个假设条件,本申请 实施例对此不作限制。
在本方案中,目标第一指令可以为第一指令序列中首部的指令,即第1 条第一指令,也可以为第一指令序列尾部的第一指令,即第N条第一指令, 下面将对上述两种情况下,第一线程是如何修改第一指令序列进行详细介绍。
图2为本申请提供的指令序列原子性修改方法实施例二的流程图。本实 施例中,目标第一指令为第一指令序列包括的第1条第一指令。参照图2所 示,本实施例的方法包括:
S200、确定第一指令序列对应的监测语句中包括的假设条件是否成立。
S201、第一线程确定修改第一指令序列时,获取第一指令序列包括的目 标第一指令对应的首地址。
本实施例中,该目标第一指令为第一指令序列包括的第1条第一指令。
S202、第一线程根据目标第一指令对应的首地址修改目标第一指令,获 取目标第一指令对应的第二指令。
本方案中,步骤S200-S202与图1所示实施例中S100-S102类似,可参 照图1所示实施例中的详细描述,此处不再赘述。
S203、第一线程按照第一预设顺序修改其他N-1条第一指令,获取其他 N-1条第一指令分别对应的第二指令。
其中,第一预设顺序为由第N条第一指令向第1条第一指令的顺序。也 就是说,在本方案中第一线程将目标第一指令修改为第二指令之后,按照逆 序修改的方式修改其他N-1条第一指令,获得其他N-1条第一指令分别对应 的第二指令。
且其他N-1条第一指令分别对应的第二指令均为跳转至第1条第一指令 对应的首地址的指令。
通过本步骤中的方式逆序修改其他N-1条第一指令,在多线程环境中, 第二线程执行其他N-1条第一指令分别对应的第二指令中的任意一条指令后 均会跳转至第1条第一指令的首地址,在第一指令未修改完成之前,第二线 程根据N-1条第二指令,不断循环跳转,从而保证了执行结果的准确性。
S204、第一线程按照第一预设顺序修改目标第一指令对应的第二指令以 及其他N-1条第一指令分别对应的第二指令,获取N条第一指令分别对应的 N条第三指令,第二指令序列包括N条第三指令。
其中,第一预设顺序为由第N条第一指令向第1条第一指令的顺序。也 就是说,在本方案中第一线程将N条第一指令修改为N条第二指令之后,按 照逆序修改的方式修改N条第二指令,获得N条第二指令分别N条第三指令, 在该方案中包括N条第三指令的第二指令序列即为第一指令序列对应的进行 了原子性修改获得的指令序列。
通过本步骤中的方式逆序修改N条第二指令,在多线程环境中,若N条 第二指令序列未全部修改完成,第二线程执行指令序列的过程中,由于未修 改的第二指令均为跳转至第1条第一指令的首地址的指令,因此,在N条第 二指令未全部修改完成之前,保证了第二线程在未修改的第二指令以及第1 条第二指令之间循环跳转,从而保证了执行结果的准确性。
示例性地,参照图3所示,第一指令序列包括8条第一指令,分别为A1-A8。 步骤一、第一线程对第一指令A1进行修改,获取第一指令A1对应的第二指 令B1;步骤二、第一线程按照逆序修改的方式,依次修改A8-A2,获得A8-A2 分别对应的第二指令B8-B2;其中,上述第二指令B1-B8均为跳转至第一指 令A1的首地址的指令。步骤三、第一线程按照逆序修改的方式,获得第二 指令B8-B1分别对应的第三指令C8-C1,从而获得第二指令序列,第二指令 序列即包括上述第三指令C1-C8。
通过上述方式修改第一指令序列至少具有以下有益效果:
在多线程环境中,第一线程对第一指令序列进行原子性修改的过程中, 第二线程(即执行线程)可不进行加锁,从而减小了每次访存模拟所需的资 源,提高了整体处理效率。
在多线程环境中,由于N条第二指令均为跳转至第1条第一指令的首地 址的指令,第一指令序列未全部修改之前,第二线程在执行上述指令序列并 不会造成执行结果错误,从而保证了执行结果的准确性。
在多线程环境中,本实施例采用逆序修改的方式,进一步保证了指令序 列的原子性修改,从而保证了执行结果的准确性。
图4为本申请提供的指令序列原子性修改方法实施例三的流程图。本实 施例中,目标第一指令为第一指令序列包括的第N条第一指令。参照图4所 示,本实施例的方法包括:
S300、确定第一指令序列对应的监测语句中包括的假设条件是否成立。
S301、第一线程确定修改第一指令序列时,获取第一指令序列包括的目 标第一指令对应的首地址。
本实施例中,该目标第一指令为第一指令序列包括的第N条第一指令。
S302、第一线程根据目标第一指令对应的首地址修改目标第一指令,获 取目标第一指令对应的第二指令。
本方案中,步骤S300-S302与图1所示实施例中S100-S102类似,可参 照图1所示实施例中的详细描述,此处不再赘述。
S303、第一线程修改其他N-1条第一指令,获取其他N-1条第一指令分 别对应的第三指令。
其中,第一线程可按照第一预设顺序修改其他N-1条第一指令,或者, 还可按照第二预设顺序修改其他N-1条第一指令,或者,还可以按照随机的 顺序修改其他N-1条第一指令。其中,第二预设顺序为由第1条第一指令向 第N条第一指令的顺序,第一预设顺序如上所述为由第N条第一指令向第1 条第一指令的顺序。需要说明的是,本实施例中,对于第一线程修改其他N-1 条第一指令的顺序不作限制。
S304、第一线程修改目标第一指令对应的第二指令,获取目标第一指令 对应的第三指令。
S305、第一线程根据其他N-1条第一指令分别对应的第三指令,以及目 标第一指令对应的第三指令,获取第二指令序列,第二指令序列包括N条第 三指令。
示例性地,参照图5所示,第一指令序列包括8条第一指令,分别为A1-A8。 步骤一、第一线程对第一指令A8进行修改,获取第一指令A8对应的第二指 令B8;其中,上述第二指令B8均为跳转至第一指令A1的首地址的指令。 步骤二、第一线程修改第一指令A1-A7,获得第一指令A1-A7分别对应的第 三指令C1-C7;步骤三、第一线程将第二指令B8修改为第三指令C8,从而 获得第二指令序列,第二指令序列即包括上述第三指令C1-C8。
通过上述方式修改第一指令序列至少具有以下有益效果:
在多线程环境中,第一线程对第一指令序列进行原子性修改的过程中, 第二线程(即执行线程)可不进行加锁,从而减小了每次访存模拟所需的资 源,提高了整体处理效率。
在多线程环境中,由于第N条第一指令对应的第二指令为跳转至第1条 第一指令的首地址的指令,前N-1条第一指令未全部修改之前,第二线程只 要执行第N条第一指令对应的第二指令便会跳转至第1条第一指令对应的首 地址,因此,在第一线程修改前N-1条第一指令序列的过程中,无论按照上 述何种顺序进行修改,均不会影响第二线程的执行结果。且只有第N条第一 指令对应的第二指令修改为正确的第三指令的情况下,才完成了指令序列的 原子性修改,而修改第N条第一指令对应的第二指令时,前N-1条第一指令 均已成功修改为正确的第三指令,第二线程执行前N-1条第三指令,也不会 造成执行结果错误。
图6为本申请提供的指令序列原子性修改装置实施例一的结构示意图。 如图6所示,本实施例的装置100包括:获取模块101以及修改模块102。
其中,获取模块101,用于确定修改第一指令序列时,获取目标第一指 令对应的首地址,所述第一指令序列包括N条第一指令,N为大于1的正整 数,所述目标第一指令为所述第一指令序列包括的第1条第一指令或第N条 第一指令;
修改模块102,用于根据目标第一指令对应的首地址修改所述目标第 一指令,获取所述目标第一指令对应的第二指令;以及根据所述目标第一 指令对应的第二指令以及所述第一指令序列包括的其他N-1条第一指令, 获取第二指令序列。
其中,第二线程执行所述目标第一指令对应的第二指令后跳转至第1 条第一指令对应的首地址。
本实施例提供的装置可以用于执行图1所示方法实施例的技术方案, 其实现原理和技术效果类似,此处不再赘述。
在一些可能的设计中,修改模块102,具体用于修改所述其他N-1条 第一指令,获取所述其他N-1条第一指令分别对应的修改后的指令;以及 根据所述目标第一指令对应的第二指令以及所述其他N-1条第一指令对应 的修改后的指令,获取所述第二指令序列。
在一些可能的设计中,若目标第一指令为第一指令序列包括的第1条 第一指令;修改模块,具体用于按照第一预设顺序修改所述其他N-1条第 一指令,获取所述其他N-1条第一指令分别对应的第二指令,其中,所述 第二线程执行每个所述第二指令后均跳转至第1条第一指令对应的地址; 以及按照所述第一预设顺序修改所述目标第一指令对应的第二指令以及 所述其他N-1条第一指令对应的第二指令,获取N条第一指令分别对应的 N条第三指令,所述第二指令序列包括所述N条第三指令。
在一些可能的设计中,若第一预设顺序为由第N条第一指令向第1条 第一指令的顺序。
在一些可能的设计中,若目标第一指令为第一指令序列包括的第N条 第一指令;修改模块102,具体用于修改其他N-1条第一指令,获取所述 其他N-1条指令分别对应的第三指令;以及修改第N条第一指令对应的第 二指令,获取第N条第一指令对应的第三指令;并根据所述其他N-1条第 一指令分别对应的第三指令,以及第N条第一指令对应的第三指令,获取 所述第二指令序列,所述第二指令序列包括N条第三指令。
在一些可能的设计中,修改模块102,具体用于按照第二预设顺序修 改所述其他N-1条第一指令,获取所述其他N-1条指令分别对应的第三指 令,其中,所述第二预设顺序为由第N条第一指令向第1条第一指令的顺 序,或者,由第1条第一指令向第N条第一指令的顺序。
在一些可能的设计中,还包括:监测模块103,用于确定第一指令序 列对应的监测语句中包括的假设条件是否成立;若确定假设条件不成立, 则确定修改第一指令序列。
本实施例提供的装置还可以用于执行图2至图5所示任一方法实施例 的技术方案,其实现原理和技术效果类似,此处不再赘述。
图7为本申请提供的指令序列原子性修改装置实施例二的结构示意图。 参照图7所示,本实施例的装置200包括:存储器201和处理器202;
存储器201可以是独立的物理单元,与处理器202可以通过总线203连 接。存储器201、处理器202也可以集成在一起,通过硬件实现等。
存储器201用于存储计算机程序指令,处理器202调用该计算机程序指 令,执行以上图1至图5任一方法实施例的操作。
可选地,当上述实施例的方法中的部分或全部通过软件实现时,上述装 置200也可以只包括处理器202。用于存储程序的存储器201位于装置200 之外,处理器202通过电路/电线与存储器连接,用于读取并执行存储器中存 储的程序。
处理器202可以是中央处理器(Central Processing Unit,CPU),网络处 理器(Network Processor,NP)或者CPU和NP的组合。
处理器202还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成 电路(Application-Specific Integrated Circuit,ASIC),可编程逻辑器件(ProgrammableLogic Device,PLD)或其组合。上述PLD可以是复杂可编 程逻辑器件(ComplexProgrammable Logic Device,CPLD),现场可编程逻辑 门阵列(Field-Programmable GateArray,FPGA),通用阵列逻辑(Generic Array Logic,GAL)或其任意组合。
存储器201可以包括易失性存储器(Volatile Memory),例如随机存取存 储器(Random-Access Memory,RAM);存储器也可以包括非易失性存储器 (Non-volatileMemory),例如快闪存储器(Flash Memory),硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-state Drive,SSD);存储器还可以包括上述 种类的存储器的组合。
图8为本申请提供的指令序列原子性修改装置实施例三的结构示意图。 本实施例提供的指令序列原子性修改装置1200例如可以是计算机,平板设备, 个人数字助理等。
参照图8所示,指令序列原子性修改装置1200可以包括以下一个或多 个组件:处理组件102,存储器104,电源组件106,多媒体组件108,音频 组件1010,输入/输出(I/O)接口1012,传感器组件1014,以及通信组件 1016。
处理组件102通常控制指令序列原子性修改装置1200的整体操作,诸 如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理 组件102可以包括一个或多个处理器1020来执行指令,以完成上述的方法的 全部或部分步骤。此外,处理组件102可以包括一个或多个模块,便于处理 组件102和其他组件之间的交互。例如,处理组件102可以包括多媒体模块, 以方便多媒体组件108和处理组件102之间的交互。
存储器104被配置为存储各种类型的数据以支持在指令序列原子性修改 装置1200的操作。这些数据的示例包括用于在指令序列原子性修改装置 1200上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息, 图片,视频等。存储器104可以由任何类型的易失性或非易失性存储设备或 者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只 读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读 存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或 光盘。
电源组件106为指令序列原子性修改装置1200的各种组件提供电力。 电源组件106可以包括电源管理系统,一个或多个电源,及其他与为指令序 列原子性修改装置1200生成、管理和分配电力相关联的组件。
多媒体组件108包括在所述指令序列原子性修改装置1200和用户之间 的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器 (LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触 摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以 感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或 滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。 在一些实施例中,多媒体组件108包括一个前置摄像头和/或后置摄像头。当 目标物的三维模型构建装置1200处于操作模式,如拍摄模式或视频模式时, 前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和 后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件1010被配置为输出和/或输入音频信号。例如,音频组件1010 包括一个麦克风(MIC),当指令序列原子性修改装置1200处于操作模式, 如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信 号。所接收的音频信号可以被进一步存储在存储器104或经由通信组件1016 发送。在一些实施例中,音频组件1010还包括一个扬声器,用于输出音频信 号。
I/O接口1012为处理组件102和外围接口模块之间提供接口,上述外围 接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按 钮、音量按钮、启动按钮和锁定按钮。
传感器组件1014包括一个或多个传感器,用于为指令序列原子性修改 装置1200提供各个方面的状态评估。例如,传感器组件1014可以检测到指 令序列原子性修改装置1200的打开/关闭状态,组件的相对定位,例如所述 组件为指令序列原子性修改装置1200的显示器和小键盘,传感器组件1014 还可以检测指令序列原子性修改装置1200或指令序列原子性修改装置 1200一个组件的位置改变,用户与指令序列原子性修改装置1200接触的存 在或不存在,指令序列原子性修改装置1200方位或加速/减速和指令序列原 子性修改装置1200的温度变化。传感器组件1014可以包括接近传感器,被 配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件1014还 可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。 在一些实施例中,该传感器组件1014还可以包括加速度传感器,陀螺仪传感 器,磁传感器,压力传感器或温度传感器。
通信组件1016被配置为便于指令序列原子性修改装置1200和其他设备 之间有线或无线方式的通信。指令序列原子性修改装置1200可以接入基于 通信标准的无线网络,如WiFi,2G或3G或4G,或它们的组合。在一个示 例性实施例中,通信组件1016经由广播信道接收来自外部广播管理系统的广 播信号或广播相关信息。在一个示例性实施例中,所述通信组件1016还可以 包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射 频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术, 蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,指令序列原子性修改装置1200可以被一个或多个 应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备 (DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制 器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
本发明还提供一种计算机可读存储介质,其中,计算机可读存储介质中 包括程序,程序在被处理器执行时,以执行以上任一实施例的指令序列原子 性修改方法。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步 骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可 读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而 前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码 的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对 其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通 技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改, 或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并 不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种指令序列原子性修改方法,其特征在于,包括:
第一线程确定修改第一指令序列时,获取目标第一指令对应的首地址,所述第一指令序列包括N条第一指令,N为大于1的正整数,所述目标第一指令为所述第一指令序列包括的第1条第一指令或第N条第一指令;
所述第一线程根据所述目标第一指令对应的首地址修改所述目标第一指令,获取所述目标第一指令对应的第二指令,其中,第二线程执行所述目标第一指令对应的第二指令后跳转至第1条第一指令对应的首地址;
所述第一线程根据所述目标第一指令对应的第二指令以及所述第一指令序列包括的其他N-1条第一指令,获取第二指令序列。
2.根据权利要求1所述的方法,其特征在于,所述第一线程根据所述目标第一指令对应的第二指令以及所述第一指令序列包括的其他N-1条第一指令,获取第二指令序列,包括:
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条第一指令分别对应的修改后的指令;
所述第一线程根据所述目标第一指令对应的第二指令以及所述其他N-1条第一指令对应的修改后的指令,获取所述第二指令序列。
3.根据权利要求2所述的方法,其特征在于,若所述目标第一指令为所述第一指令序列包括的第1条第一指令;
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条第一指令对应的修改后的指令,包括:
所述第一线程按照第一预设顺序修改所述其他N-1条第一指令,获取所述其他N-1条第一指令分别对应的第二指令,其中,所述第二线程执行每个所述第二指令后均跳转至第1条第一指令对应的地址;
所述第一线程根据所述目标第一指令对应的第二指令以及所述其他N-1条第一指令分别对应的第二指令,获取所述第二指令序列,包括:
所述第一线程按照所述第一预设顺序修改所述目标第一指令对应的第二指令以及所述其他N-1条第一指令对应的第二指令,获取N条第一指令分别对应的N条第三指令,所述第二指令序列包括所述N条第三指令。
4.根据权利要求3所述的方法,其特征在于,所述第一预设顺序为由第N条第一指令向第1条第一指令的顺序。
5.根据权利要求2所述的方法,其特征在于,若所述目标第一指令为所述第一指令序列中的第N条第一指令;
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条第一指令对应的修改后的指令,包括:
所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条指令分别对应的第三指令;
所述第一线程根据所述目标第一指令对应的第二指令以及所述其他N-1条第一指令对应的修改后的指令,获取所述第二指令序列,包括:
所述第一线程修改所述目标第一指令对应的第二指令,获取所述目标第一指令对应的第三指令;
所述第一线程根据所述其他N-1条第一指令分别对应的第三指令,以及所述目标第一指令对应的第三指令,获取所述第二指令序列,所述第二指令序列包括N条第三指令。
6.根据权利要求5所述的方法,其特征在于,所述第一线程修改所述其他N-1条第一指令,获取所述其他N-1条指令分别对应的第三指令,包括:
所述第一线程按照第二预设顺序修改所述其他N-1条第一指令,获取所述其他N-1条指令分别对应的第三指令,其中,所述第二预设顺序为由第N条第一指令向第1条第一指令的顺序,或者,由第1条第一指令向第N条第一指令的顺序。
7.根据权利要求1至6任一项所述的方法,其特征在于,第一线程确定修改第一指令序列时,获取第一指令序列包括的目标第一指令的首地址之前,还包括:
确定所述第一指令序列对应的监测语句中包括的假设条件是否成立;
若确定所述假设条件不成立,所述第一线程确定修改第一指令序列。
8.一种指令序列原子性修改装置,其特征在于,包括:
获取模块,用于确定修改第一指令序列时,获取目标第一指令对应的首地址,所述第一指令序列包括N条第一指令,N为大于1的正整数,所述目标第一指令为所述第一指令序列包括的第1条第一指令或第N条第一指令;
修改模块,用于根据所述目标第一指令对应的首地址修改所述目标第一指令,获取所述目标第一指令对应的第二指令;以及根据所述目标第一指令对应的第二指令以及所述第一指令序列包括的其他N-1条第一指令,获取第二指令序列;
其中,第二线程执行所述目标第一指令对应的第二指令后跳转至第1条第一指令对应的首地址。
9.一种指令序列原子性修改装置,其特征在于,包括:存储器、处理器以及计算机程序指令;
所述存储器存储所述计算机程序指令;
所述处理器执行所述计算机程序指令,以执行如权利要求1至7任一项所述的指令序列原子性修改方法。
10.一种可读存储介质,其特征在于,包括:程序;
所述程序被处理器执行时,以执行如权利要求1至7任一项所述的指令序列原子性修改方法。
CN202011111955.6A 2020-10-16 2020-10-16 指令序列原子性修改方法、装置及可读存储介质 Pending CN114385306A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011111955.6A CN114385306A (zh) 2020-10-16 2020-10-16 指令序列原子性修改方法、装置及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011111955.6A CN114385306A (zh) 2020-10-16 2020-10-16 指令序列原子性修改方法、装置及可读存储介质

Publications (1)

Publication Number Publication Date
CN114385306A true CN114385306A (zh) 2022-04-22

Family

ID=81193934

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011111955.6A Pending CN114385306A (zh) 2020-10-16 2020-10-16 指令序列原子性修改方法、装置及可读存储介质

Country Status (1)

Country Link
CN (1) CN114385306A (zh)

Similar Documents

Publication Publication Date Title
CN105955765B (zh) 应用预加载方法及装置
CN108182131B (zh) 监控应用运行状态的方法、装置、存储介质及电子设备
CN105468410B (zh) 系统升级方法及装置
CN110515871B (zh) 一种中断方法、装置及fpga和存储介质
EP3309676B1 (en) Method and apparatus for providing screenshot service on terminal device and storage medium and device
CN112965794B (zh) 算法调用方法、电子设备及存储介质
CN110945475A (zh) 用于提供可打补丁的rom固件的系统和方法
CN115576645B (zh) 一种虚拟处理器调度方法、装置、存储介质及电子设备
CN109725943A (zh) 一种程序跳转方法、装置、电子设备及存储介质
CN112114814A (zh) 编译文件确定方法及装置、应用程序生成方法及装置
CN110045997B (zh) 基础功能模块的对象初始化方法、装置、设备和存储介质
CN114385306A (zh) 指令序列原子性修改方法、装置及可读存储介质
CN116048757A (zh) 任务处理方法、装置、电子设备和存储介质
CN112988194B (zh) 基于设备信息的程序优化方法、装置、电子设备及存储介质
CN111259675B (zh) 基于神经网络计算的方法和装置
CN110569037B (zh) 数据写入的方法和装置
CN112445484B (zh) 一种寄存器处理方法、装置、电子设备及存储介质
CN113268325A (zh) 一种调度任务的方法、装置及存储介质
CN110764771B (zh) 动态编译方法和装置、可读存储介质及电子设备
CN110851243B (zh) 流程访问控制方法、装置、存储介质及电子设备
CN113360254A (zh) 任务调度方法及系统
CN112083981A (zh) 一种页面视图组件的创建方法和装置
CN111290851B (zh) 一种信息处理方法、设备及存储介质
CN112445483B (zh) 一种指令生成方法、装置、电子设备及存储介质
CN117762717B (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