CN105677297A - 套锁实现方法及装置 - Google Patents
套锁实现方法及装置 Download PDFInfo
- Publication number
- CN105677297A CN105677297A CN201410659761.8A CN201410659761A CN105677297A CN 105677297 A CN105677297 A CN 105677297A CN 201410659761 A CN201410659761 A CN 201410659761A CN 105677297 A CN105677297 A CN 105677297A
- Authority
- CN
- China
- Prior art keywords
- instruction
- parameter
- compiler program
- lock set
- program
- 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.)
- Granted
Links
Abstract
本发明提供一种套锁实现方法及装置。本发明提供的套锁实现方法,包括:在执行加入套锁指令集的编译器程序时,根据所述套锁指令集中的开关参数,对所述编译器程序进行分析;根据对所述编译器程序的分析结果对所述编译器程序进行优化处理。本发明提供一种适用于MIPS构架中的套锁实现方法,以解决现有技术中基于X86构架的套锁实现方式,对具有固定长度指令的MIPS构架并不适用的问题,使得MIPS构架中编译器程序的开发的更加便利和有效。
Description
技术领域
本发明涉及计算机技术,尤其涉及一种套锁实现方法及装置。
背景技术
在计算机硬件和软件的发展过程中,通常通过在浏览器的客户端脚本语言(JavaScript,简称为:JS)引擎中加入编译器,实现对浏览器的跳转功能的加速目的。
目前通常通过在JS引擎的编译器程序加入套锁(toggle),实现对该编译器程序的检测和优化。例如,在X86构架中,通过调用call指令和nop指令实现套锁功能,由于X86构架中的指令长度可变,以函数调用指令为5个字节为例予以说明,其中1个字节表示调用的指令,例如调用call指令,其它4个字节表示被调用指令的地址,然而,当调用nop指令时,由于该nop指令只有1个字节,如果把5个字节全部替换为nop指令,则之前被调用的call指令的地址会丢失,即,上述套锁在调用nop指令后会使得之前调用的call指令的地址丢失,导致程序出错;因此,在X86构架的套锁处理过程中,将nop指令替换为cmp_eax指令,通过调用call指令和cmp_eax指令实现套锁功能,这样就可以将通用寄存器ax的内容和后面4个字节构成的32位数比较,即可与nop指令等效。
在无内部互锁流水级的微处理器(Microprocessorwithout-interlockedpipedstages,简称为MIPS)构架中,由于指令是固定长度则不使用cmp_eax指令,因此现有技术中基于X86构架的套锁处理方式并不适用于该MIPS构架。
发明内容
本发明提供一种套锁实现方法及装置,以解决现有技术中基于X86构架的套锁实现方式,对具有固定长度指令的MIPS构架并不适用的问题。
第一方面,本发明提供一种套锁实现方法,包括:
在执行加入套锁指令集的编译器程序时,根据所述套锁指令集中的开关参数,对所述编译器程序进行分析;
根据对所述编译器程序的分析结果对所述编译器程序进行优化处理。
在第一方面的第一种可能的实现方式中,所述套锁指令集包括:所述开关参数对应的执行指令,则所述根据所述套锁指令集中的开关参数,对所述编译器程序进行分析,包括:
根据所述开关参数,向指令缓冲区发送对应的执行指令;并在所述开关参数为指示开启参数时,通过所述指令缓冲区中对应的执行指令,对所述编译器程序进行分析。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述执行指令中包括目标地址,则所述在所述开关参数为指示开启参数时,通过所述指令缓冲区中对应的执行指令,对所述编译器程序进行分析,包括:
在所述开关参数为指示开启参数时,对寄存器的值进行压栈操作,并将所述目标地址存储在所述寄存器中;
将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析。
根据第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述对寄存器的值进行压栈操作之前,所述方法还包括:
记录所述套锁指令集的返回地址,所述返回地址为执行所述套锁指令集前,所述编译器程序的当前地址;
则所述将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析之后,所述方法还包括:
绑定所述开关参数为指示开启参数时记录的所述套锁指令集的返回地址,使得在所述开关参数为指示关闭参数时,确定将所述编译器程序跳转到所述套锁指令集的返回地址。
根据第一方面的第一种到第三种可能的实现方式的任意一种,在第四种可能的实现方式中,还包括:通过执行所述开关参数为指示关闭参数时所述指令缓冲区中对应的执行指令,将所述编译器程序跳转出所述套锁指令集,保留所述开关参数为指示开启参数时所述指令缓冲区中对应的执行指令。
第二方面,本发明提供一种套锁实现装置,包括:
执行模块,用于在执行加入套锁指令集的编译器程序时,根据所述套锁指令集中的开关参数,对所述编译器程序进行分析;
优化模块,用于根据对所述编译器程序的分析结果对所述编译器程序进行优化处理。
在第二方面的第一种可能的实现方式中,所述套锁指令集包括:所述开关参数对应的执行指令,则所述执行模块包括:
发送单元,用于根据所述开关参数,向指令缓冲区发送对应的执行指令;
执行单元,用于在所述开关参数为指示开启参数时,通过所述指令缓冲区中对应的执行指令,对所述编译器程序进行分析。
根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述执行指令中包括目标地址;则所述执行单元,具体用于在所述开关参数为指示开启参数时,对寄存器的值进行压栈操作,并将所述目标地址存储在所述寄存器中;进而将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析。
根据第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述执行模块还包括:记录单元,用于在所述执行单元对寄存器的值进行压栈操作之前,记录所述套锁指令集的返回地址,所述返回地址为执行所述套锁指令集前,所述编译器程序的当前地址;
则所述执行模块还包括:绑定单元,用于在所述执行单元将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析之后,绑定所述开关参数为指示开启参数时记录的所述套锁指令集的返回地址,使得在所述开关参数为指示关闭参数时,确定将所述编译器程序跳转到所述套锁指令集的返回地址。
根据第二方面的第一种到第三种可能的实现方式的任意一种,在第四种可能的实现方式中,所述执行单元,还用于通过执行所述开关参数为指示关闭参数时所述指令缓冲区中对应的执行指令,将所述编译器程序跳转出所述套锁指令集,保留所述开关参数为指示开启参数时所述指令缓冲区中对应的执行指令。
本发明提供一种套锁实现方法及装置,通过在执行加入套锁指令集的编译器程序的过程中,根据该套锁指令集中开关参数的指示选择性对该编译器程序进行分析测试,进而根据该分析结果实现对该编译器程序的优化处理,本实施例提供一种适用于MIPS构架中的套锁实现方法,以解决现有技术中基于X86构架的套锁实现方式,对具有固定长度指令的MIPS构架并不适用的问题,使得MIPS构架中编译器程序的开发的更加便利和有效。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一所提供的一种套锁实现方法的流程图;
图2为本发明实施例二所提供的一种套锁实现方法的流程图;
图3为图2所示实施例提供的一种套锁指令集执行方法的流程图;
图4为图2所示实施例提供的一种套锁指令序列的示意图;
图5为本发明实施例三所提供的一种套锁实现装置的结构示意图;
图6为本发明实施例四所提供的一种套锁实现装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一所提供的一种套锁实现方法的流程图。本实施例提供的方法适用于在MIPS构架中实现套锁的方法,该方法可以由套锁实现装置执行,该套锁实现装置通常以硬件和/或软件的方法来实现,可以集成在终端设备的存储器中,例如集成在处理器芯片中,供处理器调用执行。如图1所示,本实施例的方法可以包括:
S110,在执行加入套锁指令集的编译器程序时,根据该套锁指令集中的开关参数,对该编译器程序进行分析。
在常用的浏览器中,例如微软公司推出的(InternetExplorer,简称为:IE)浏览器中,通过JS引擎实现对浏览器的跳转功能,并具体将JS语言解释为个人计算机(PersonalComputer,简称为:PC)可以识别语言;目前通常在该JS引擎中加入编译器,即可以实现对浏览器的跳转功能的加速,该编译器可以为JS引擎代码中的一部分,为了便于该编译器程序的开发和优化,可以在该编译器程序中加入套锁。本发明实施例提供的套锁实现方法,可以用于MIPS构架中,例如可以应用于精简指令集(ReducedInstructionSetComputer,简称为:RISC)微处理器芯片中,尤其是基于MIPS构架的火狐浏览器(Firefox)的JS引擎,针对JS引擎中编译器程序的测试开发,具体地,本实施例提供的方法将用于实现套锁机制的套锁指令集加入该编译器程序中,并且该套锁指令集可以包括开关参数和与其对应的执行指令。
需要说明的,该套锁指令集的开关参数通常可以包括开启参数和关闭参数,相应地,开关参数为指示开启参数或关闭参数时具有不同的执行指令。
在本实施例中,对编译器程序的测试开发,是通过执行该编译器程序实现的。在具体实现中,对于加入套锁指令集的编译器程序的执行,根据该套锁开关参数的指示,可以选择性的对编译器程序中的特定指令部分进行指令分析以实现程序的测试,也可以在本次程序的执行过程中不进行分析,即,根据套锁开关参数的指示直接跳出该套锁指令集。在X86构架中通过调用call指令或者cmp_eax指令实现的套锁功能,由于MIPS构架中指令长度是固定的而导致上述X86构架下的套锁实现方式并不适用于MIPS构架中;本实施例提供的套锁实现方法则可以应用于MIPS构架中,根据开关参数的指示对编译器程序执行跳转指令,跳转到套锁指令集中目标地址所指示的位置,该位置即为对编译器程序测试的入口位置;或者根据开关参数的指示将编译器程序跳转出该套锁,仅执行该编译器程序而未对其进行测试。
需要说明的是,本实施例中开关参数的选择可以是程序员在执行编译器程序前设置的。
S120,根据对该编译器程序的分析结果对该编译器程序进行优化处理。
在本实施例中,通过套锁指令集对编辑器程序执行分析的结果,具体为当开关参数为指示开启参数时对该编译器程序的进行测试,可以获知该编译器程序存在的缺陷或漏洞,进而对其进行优化处理,以完善该编译器程序。
本实施例所提供的套锁实现方法,通过在执行加入套锁指令集的编译器程序的过程中,根据该套锁指令集中开关参数的指示选择性对该编译器程序进行分析测试,进而根据该分析结果实现对该编译器程序的优化处理,本实施例提供一种适用于MIPS构架中的套锁实现方法,以解决现有技术中基于X86构架的套锁实现方式,对具有固定长度指令的MIPS构架并不适用的问题,使得MIPS构架中编译器程序的开发的更加便利和有效。
实施例二
图2为本发明实施例二所提供的一种套锁实现方法的流程图。如图2所示,本实施例的方法可以包括:
S210,在执行加入套锁指令集的编译器程序时,根据开关参数,向指令缓冲区发送对应的执行指令,该套锁指令集包括开关参数对应的执行指令。
在本实施例中,当开关参数为指示开启参数或关闭参数时对应不同的执行指令,即当开关参数的指示不同时,向指令缓冲区发送的执行指令也不同。
S220,在该开关参数为指示开启参数时,通过该指令缓冲区中对应的执行指令,对该编译器程序进行分析,该执行指令中包括目标地址。
在本实施例中,通过开关参数为指示开启参数时指令缓冲区中对应的执行指令,实现对编译器程序的分析测试。通常地,向指令缓冲区发送指令的功能可以由JS引擎中的汇编器执行,本实施例提供的套锁指令集涉及到的几个基本指令和函数可以包括:汇编器缓冲区(AssemblerBuffer),这个类表示指令buffer,类成员m_buffer表示buffer数组,该类还有容量以及所用大小等成员,当所用buffer数组容量耗尽时采用倍长数组的策略来扩充容量;函数(addPendingJump)是将跳转信息记录到jumps_列表中,包括offset形式的跳转源(src),绝对地址形式的跳转目标(target),以及跳转的目标位置是恒定的还是可变的(kind),如果跳转的目标位置不是恒定的,则还要将该跳转源记录到jumpRelocations_列表中,以便向垃圾回收机制注册,接受其管理;函数中定义的一个标签(Label)就一个成员对象m_label,它记录着相对于buffer起始位置的偏移,通过label和指令buffer的首地址便可以得到这个位置的绝对地址,在整个编译器实现中有很多Label,例如CodeLabel,它有两个数据成员,即源标号src和一个目的标号dest,当两个标号被绑定后,src位置为跳转指令,跳转目标就是dest,并且用绝对地址指向dest;在label定义时,函数(bind)绑定label的位置,该位置确定为指令buffer的当前位置,bind将label跳转源列表中的所有跳转源改写,指向指令buffer中的当前位置。
举例来说,MIPS构架下通过调用和跳转以实现对编译器程序的分析可以由以下几条指令完成:
luireg,target>>16//取目标地址的高16
orireg,reg,target&0x0000ffff//取目标地址的低16位
jalrreg//跳转到指定目标地址
nop()//跳转延时槽
在具体实现中,上述调用和跳转指令均为开关参数为指示开启参数时指令缓冲区中对应的执行指令,该执行指令中包括目标地址,相应地,S220可以包括:在开关参数为指示开启参数时,对寄存器的值进行压栈操作,并将该目标地址存储在该寄存器中;将所述编译器程序跳转到该目标地址所指示的该编译器的待分析程序入口,以对该编译器程序进行分析。
需要说明的是,套锁就如同一个嵌入程序的补丁(patch),在指定的指令缓冲区中插入相应的调用和跳转指令来分析待检测编译器程序的代码,实现静态插入、动态检测功能。本实施例提供的套锁实现方法中,该套锁指令集中两个比较重要的参数为目标地址(target)和开关参数(enable);target就是插入套锁对编译器程序进行分析的目标地址,enabled为套锁的开关,当enable为true时,向指令缓冲区发送函数调用指令,即执行插入套锁的动作,当enable为false时,向指令缓冲区发送nop指令,即跳出该套锁,并且enable由false到ture的转换过程中可以保留在true时跳转的target,因此可以将nop指令切换到函数调用指令。具体的实现过程如图3所示,图3为图2所示实施例提供的一种套锁指令集执行方法的流程图,图4为图2所示实施例提供的一种套锁指令序列的示意图。
S301,根据套锁指令集的开关参数执行相应的指令,该套锁指令集的开关参数包括开启参数和关闭参数;当enabled为true时,执行S302;当enable为false时,执行S305。
S302,在开关参数为指示开启参数时,对寄存器的值进行压栈操作,例如可以为t9压栈。
在本实施例中,实现压栈操作的指令例如可以为:
addiusp,sp,-4
swreg,sp(0)
上述操作为压栈和存入字节的操作,具体将reg压入sp中。
S303,将32位目标地址立即数存入t9,并将跳转信息记录到跳转列表。
在本实施例中,实现将32位目标地址存入t9操作的指令可以为:
luireg,target>>16
orireg,reg,target&0x0000ffff
上述操作为取地址操作,分别为取目标地址的高16位和低16位,具体的,指令中的target即为套锁插入的目标地址,也即编译器程序测试的入口位置。
S304,直接跳转到t9,进行相应的程序处理操作。通过S304中存入的目标地址,将编译器程序跳转到该目标地址所指示的程序的相应位置,对该编译器程序进行分析测试,该跳转指令例如可以为:jalrreg。
S305,向下跳过5条指令。
在执行指令后通常可以有跳转延时槽,即一个空指令nop,因此,该套锁在enable为true时向指令缓冲区发送了图4所示的5条指令,因此,在enable为false时,执行跳转操作,具体向下跳转5条指令就可以跳出该套锁,该跳转指令例如可以为:beqzero,zero,5。
需要说明的是,本实施例提供的套锁实现方法:通过执行开关参数为指示关闭参数时指令缓冲区中对应的执行指令,跳转出该套锁指令集,保留开关参数为指示开启参数时该指令缓冲区中的执行指令。具体地,当enable为ture时,指令缓冲区中填充的是一个用MIPS指令实现的跳转指令序列;当enable为false时,直接跳过上述5条指令,相当于填充了5条nop指令,原先的指令失效,但是并未被覆盖原先的指令内容,当enable再为true时便可以轻易转换成跳转指令。
S230,根据对该编译器程序的分析结果对该编译器程序进行优化处理。
具体地,S230的具体实现方式参照实施例一中的S120。
本实施例所提供的套锁实现方法,通过在执行加入套锁指令集的编译器程序的过程中,根据该套锁指令集中开关参数的指示选择性对该编译器程序进行分析测试,进而根据该分析结果实现对该编译器程序的优化处理,本实施例提供一种适用于MIPS构架中的套锁实现方法,以解决现有技术中基于X86构架的套锁实现方式,对具有固定长度指令的MIPS构架并不适用的问题,使得MIPS构架中编译器程序的开发的更加便利和有效。另外,本实施例对开关参数在指示开启参数和关闭参数之间转换时保留了当前的执行指令,并不影响转换后的跳转地址,进一步提高了该套锁机制的有效性。
进一步地,在本实施例提供的方法中,该套锁指令集中还可以包括的参数有该套锁的返回类型(CodeOffsetLabel),CodeOffsetLabel记录一个label的位置,仅有偏移量的信息;S301之前还包括:S306,记录套锁指令集的返回地址,该返回地址为执行所述套锁指令集前,编译器程序的当前地址,例如,可以定义CodeOffsetLabel变量c1,将跳转前地址移到c1.dest()中;相应地,S304之后还包括:S307,绑定开关参数为指示开启参数时记录的套锁指令集的返回地址,使得在开关参数为指示关闭参数时,确定将该编译器程序跳转到该套锁指令集的返回地址;例如,可以通过绑定c1.src(),返回函数调用前的地址。
在本实施例中,根据CodeOffsetLabel记录的地址作为测试编译器程序后待返回的地址,绑定开关参数为指示开启参数时记录的套锁指令集的返回地址,使得在开关参数为指示关闭参数时确定跳转到该套锁指令集的返回地址。
实施例三
图5为本发明实施例三所提供的一种套锁实现装置的结构示意图。如图5所示,本实施例的套锁实现装置,具体包括:执行模块11和优化模块12。
其中,执行模块11,用于在执行加入套锁指令集的编译器程序时,根据该套锁指令集中的开关参数,对该编译器程序进行分析。
优化模块12,用于根据对该编译器程序的分析结果对该编译器程序进行优化处理。
本发明实施例提供的套锁实现装置用于执行本发明实施例一提供的套锁实现方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
实施例四
图6为本发明实施例四所提供的一种套锁实现装置的结构示意图。如图6所示,本实施例提供的套锁实现装置在图5所示装置结构的基础上,套锁指令集还包括:开关参数对应的执行指令,相应地,该套锁实现装置的执行模块11具体可以包括:发送单元13,用于根据该开关参数,向指令缓冲区发送对应的执行指令;执行单元14,用于在该开关参数为指示开启参数时,通过该指令缓冲区中对应的执行指令,对编译器程序进行分析。
在具体实现中,本实施例提供的装置中,当开关参数为指示开启参数时,向指令缓冲区发送的执行指令中可以包括目标地址;相应地,执行单元14,具体用于在所述开关参数为指示开启参数时,对寄存器的值进行压栈操作,并将该目标地址存储在该寄存器中;进而将所述编译器程序跳转到该目标地址所指示的该编译器的待分析程序入口,以对该编译器程序进行分析。
需要说明的是,本实施例提供的装置,执行单元14,还用于通过执行开关参数为指示关闭参数时指令缓冲区中对应的执行指令,将编译器程序跳转出套锁指令集,保留开关参数为指示开启参数时该指令缓冲区中对应的执行指令。
进一步地,本实施例提供的装置中,执行模块11还包括:记录单元15,用于在执行单元14对寄存器的值进行压栈操作之前,记录套锁指令集的返回地址,该返回地址为执行该套锁指令集前,编译器程序的当前地址;相应的,执行模块11还包括:绑定单元16,用于在该执行单元14将编译器程序跳转到目标地址所指示的该编译器的待分析程序入口,以对该编译器程序进行分析之后,绑定开关参数为指示开启参数时记录的该套锁指令集的返回地址,使得在开关参数为指示关闭参数时,确定将该编译器程序跳转到该套锁指令集的返回地址。
本发明实施例提供的套锁实现装置用于执行本发明实施例二提供的套锁实现方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种套锁实现方法,其特征在于,包括:
在执行加入套锁指令集的编译器程序时,根据所述套锁指令集中的开关参数,对所述编译器程序进行分析;
根据对所述编译器程序的分析结果对所述编译器程序进行优化处理。
2.根据权利要求1所述的方法,其特征在于,所述套锁指令集包括:所述开关参数对应的执行指令,则所述根据所述套锁指令集中的开关参数,对所述编译器程序进行分析,包括:
根据所述开关参数,向指令缓冲区发送对应的执行指令;并在所述开关参数为指示开启参数时,通过所述指令缓冲区中对应的执行指令,对所述编译器程序进行分析。
3.根据权利要求2所述的方法,其特征在于,所述执行指令中包括目标地址,则所述在所述开关参数为指示开启参数时,通过所述指令缓冲区中对应的执行指令,对所述编译器程序进行分析,包括:
在所述开关参数为指示开启参数时,对寄存器的值进行压栈操作,并将所述目标地址存储在所述寄存器中;
将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析。
4.根据权利要求3所述的方法,其特征在于,所述对寄存器的值进行压栈操作之前,所述方法还包括:
记录所述套锁指令集的返回地址,所述返回地址为执行所述套锁指令集前,所述编译器程序的当前地址;
则所述将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析之后,所述方法还包括:
绑定所述开关参数为指示开启参数时记录的所述套锁指令集的返回地址,使得在所述开关参数为指示关闭参数时,确定将所述编译器程序跳转到所述套锁指令集的返回地址。
5.根据权利要求2~4中任一项所述的方法,其特征在于,还包括:通过执行所述开关参数为指示关闭参数时所述指令缓冲区中对应的执行指令,将所述编译器程序跳转出所述套锁指令集,保留所述开关参数为指示开启参数时所述指令缓冲区中对应的执行指令。
6.一种套锁实现装置,其特征在于,包括:
执行模块,用于在执行加入套锁指令集的编译器程序时,根据所述套锁指令集中的开关参数,对所述编译器程序进行分析;
优化模块,用于根据对所述编译器程序的分析结果对所述编译器程序进行优化处理。
7.根据权利要求6所述的装置,其特征在于,所述套锁指令集包括:所述开关参数对应的执行指令,则所述执行模块包括:
发送单元,用于根据所述开关参数,向指令缓冲区发送对应的执行指令;
执行单元,用于在所述开关参数为指示开启参数时,通过所述指令缓冲区中对应的执行指令,对所述编译器程序进行分析。
8.根据权利要求7所述的装置,其特征在于,所述执行指令中包括目标地址;则所述执行单元,具体用于在所述开关参数为指示开启参数时,对寄存器的值进行压栈操作,并将所述目标地址存储在所述寄存器中;进而将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析。
9.根据权利要求8所述的装置,其特征在于,所述执行模块还包括:记录单元,用于在所述执行单元对寄存器的值进行压栈操作之前,记录所述套锁指令集的返回地址,所述返回地址为执行所述套锁指令集前,所述编译器程序的当前地址;
则所述执行模块还包括:绑定单元,用于在所述执行单元将所述编译器程序跳转到所述目标地址所指示的所述编译器的待分析程序入口,以对所述编译器程序进行分析之后,绑定所述开关参数为指示开启参数时记录的所述套锁指令集的返回地址,使得在所述开关参数为指示关闭参数时,确定将所述编译器程序跳转到所述套锁指令集的返回地址。
10.根据权利要求7~9中任一项所述的装置,其特征在于,所述执行单元,还用于通过执行所述开关参数为指示关闭参数时所述指令缓冲区中对应的执行指令,将所述编译器程序跳转出所述套锁指令集,保留所述开关参数为指示开启参数时所述指令缓冲区中对应的执行指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410659761.8A CN105677297B (zh) | 2014-11-18 | 2014-11-18 | 套锁实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410659761.8A CN105677297B (zh) | 2014-11-18 | 2014-11-18 | 套锁实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677297A true CN105677297A (zh) | 2016-06-15 |
CN105677297B CN105677297B (zh) | 2018-05-04 |
Family
ID=56945172
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410659761.8A Active CN105677297B (zh) | 2014-11-18 | 2014-11-18 | 套锁实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677297B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032407A (zh) * | 2019-03-08 | 2019-07-19 | 阿里巴巴集团控股有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
WO2019162828A1 (en) * | 2018-02-23 | 2019-08-29 | International Business Machines Corporation | A chronologically ordered log-structured key-value store from failures during garbage collection |
US10635523B2 (en) | 2018-02-23 | 2020-04-28 | International Business Machines Corporation | Fast recovery from failures in a chronologically ordered log-structured key-value storage system |
US10783073B2 (en) | 2018-02-23 | 2020-09-22 | International Business Machines Corporation | Chronologically ordered out-of-place update key-value storage system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1710547A (zh) * | 2004-06-16 | 2005-12-21 | 华为技术有限公司 | 软件测试方法及其系统 |
CN1983209A (zh) * | 2005-12-14 | 2007-06-20 | 中兴通讯股份有限公司 | 一种软件单元测试自动化系统及其方法 |
US20070169026A1 (en) * | 2005-11-28 | 2007-07-19 | Davis Alan H | Software program with alternative function libraries |
CN102156634A (zh) * | 2011-04-20 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 一种实现值关联间接跳转预测的方法 |
US20120137111A1 (en) * | 2010-11-30 | 2012-05-31 | International Business Machines Corporation | Loop detection apparatus, loop detection method, and loop detection program |
-
2014
- 2014-11-18 CN CN201410659761.8A patent/CN105677297B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1710547A (zh) * | 2004-06-16 | 2005-12-21 | 华为技术有限公司 | 软件测试方法及其系统 |
US20070169026A1 (en) * | 2005-11-28 | 2007-07-19 | Davis Alan H | Software program with alternative function libraries |
CN1983209A (zh) * | 2005-12-14 | 2007-06-20 | 中兴通讯股份有限公司 | 一种软件单元测试自动化系统及其方法 |
US20120137111A1 (en) * | 2010-11-30 | 2012-05-31 | International Business Machines Corporation | Loop detection apparatus, loop detection method, and loop detection program |
CN102156634A (zh) * | 2011-04-20 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 一种实现值关联间接跳转预测的方法 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019162828A1 (en) * | 2018-02-23 | 2019-08-29 | International Business Machines Corporation | A chronologically ordered log-structured key-value store from failures during garbage collection |
US10635523B2 (en) | 2018-02-23 | 2020-04-28 | International Business Machines Corporation | Fast recovery from failures in a chronologically ordered log-structured key-value storage system |
US10642680B2 (en) | 2018-02-23 | 2020-05-05 | International Business Machines Corporation | Chronologically ordered log-structured key-value store from failures during garbage collection |
CN111656331A (zh) * | 2018-02-23 | 2020-09-11 | 国际商业机器公司 | 来自垃圾收集期间的故障的按时间排序的日志结构化键-值储存库 |
US10783073B2 (en) | 2018-02-23 | 2020-09-22 | International Business Machines Corporation | Chronologically ordered out-of-place update key-value storage system |
GB2583884A (en) * | 2018-02-23 | 2020-11-11 | Ibm | A chronologically ordered log-structured key-value store from failures during garbage collection |
GB2583884B (en) * | 2018-02-23 | 2021-03-24 | Ibm | A chronologically ordered log-structured key-value store from failures during garbage collection |
US11150981B2 (en) | 2018-02-23 | 2021-10-19 | International Business Machines Corporation | Fast recovery from failures in a chronologically ordered log-structured key-value storage system |
US11163636B2 (en) | 2018-02-23 | 2021-11-02 | International Business Machines Corporation | Chronologically ordered log-structured key-value store from failures during garbage collection |
CN111656331B (zh) * | 2018-02-23 | 2024-03-29 | 国际商业机器公司 | 在系统中的垃圾收集处理期间从故障中恢复的方法和装置 |
CN110032407A (zh) * | 2019-03-08 | 2019-07-19 | 阿里巴巴集团控股有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
US11080094B2 (en) | 2019-03-08 | 2021-08-03 | Advanced New Technologies Co., Ltd. | Method, apparatus, and electronic device for improving parallel performance of CPU |
Also Published As
Publication number | Publication date |
---|---|
CN105677297B (zh) | 2018-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110059009B (zh) | 用于测试代码文件的方法和装置 | |
US9164754B1 (en) | Runtime patching of native-code programs | |
CN107291480B (zh) | 一种函数调用方法及装置 | |
US8024710B2 (en) | Unwinding unwindable code | |
US20080307006A1 (en) | File mutation method and system using file section information and mutation rules | |
WO2010134330A1 (ja) | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
CN105677297A (zh) | 套锁实现方法及装置 | |
CN108027748B (zh) | 指令集模拟器及其模拟器生成方法 | |
JP4638484B2 (ja) | データ処理装置におけるデータ整合性 | |
JP2015511041A (ja) | ネスト構造化されたエミュレーションおよび動的リンキング環境 | |
EP0933706A1 (en) | Language processing system and language processing method enabling reduction of memory region and overhead in profile information collection of computer | |
US7376935B2 (en) | Design-time system and method to enable programming assistance across languages and compilation boundaries | |
CN104699547A (zh) | JavaEE应用类加载冲突分析方法和装置 | |
JP5886450B2 (ja) | ハイブリッドのエミュレーション及びカーネル関数処理のシステム及び方法 | |
US20100058305A1 (en) | Automatic Generation of Language Bindings for Libraries Using Data from Compiler Generated Debug Information | |
US8250544B2 (en) | Annotating exception information in a computer program | |
US20170075669A1 (en) | System module deployment optimization | |
KR101957552B1 (ko) | 액티비티 스택에 기반한 테스트 시나리오 생성 방법 | |
EP2972880B1 (en) | Kernel functionality checker | |
US9069897B2 (en) | Capturing telemetry data by dynamic language engine | |
CN116540994A (zh) | React项目配置化生成路由的方法、控制装置及存储介质 | |
CN116302095A (zh) | 指令跳转判断方法、装置、电子设备及可读存储介质 | |
JP2007226784A (ja) | インラインされたメソッドの呼出方法およびそれを用いたジャバ仮想マシン | |
CN104834643A (zh) | 一种快速公共网关接口文件分析方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |