CN105512024A - 生成检测指令序列的方法和装置 - Google Patents
生成检测指令序列的方法和装置 Download PDFInfo
- Publication number
- CN105512024A CN105512024A CN201410523100.2A CN201410523100A CN105512024A CN 105512024 A CN105512024 A CN 105512024A CN 201410523100 A CN201410523100 A CN 201410523100A CN 105512024 A CN105512024 A CN 105512024A
- Authority
- CN
- China
- Prior art keywords
- instruction
- bunch
- candidate queue
- group
- 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.)
- Granted
Links
Landscapes
- Advance Control (AREA)
Abstract
本发明提供一种生成检测指令序列的方法和装置,涉及指令随机验证领域,该方法包括:生成至少两个源指令组,将指令划分到对应的源指令组中;根据第一提取信息为每条指令生成对应的至少一个指令簇;从源指令组中选择出目标指令组放入指令组候选队列中;从指令组候选队列中随机选择目标指令组移出指令组候选队列;根据上下文从移出的目标指令组中选取可生成的指令簇,并将可生成的指令簇放入指令簇候选队列;从指令簇候选队列中随机选择一个可生成的指令簇移出指令簇候选队列;根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。从而提高了选择检验指令序列的过程,进一步的加快了通过随机指令检测指令集架构的效率。
Description
技术领域
本发明涉及指令随机验证领域,尤其涉及一种生成检测指令序列的方法和装置。
背景技术
指令集架构(InstructionSetArchitecture,简称ISA)是处理器与软件之间的接口,描述了处理器对程序员提供的各种功能。指令随机验证是一种自动化的处理器验证方法,针对待验证的处理器,随机生成各种指令序列,然后将这些指令序列放入处理器执行,并检查执行结果是否正确。指令随机验证的关键在于指令序列的生成,一般来说,指令序列生成包含两个部分,一是决定序列中使用哪些指令,二是确定每条指令的指令码。虽然在处理器的指令集架构中,每条指令被描述为实现独立的功能,但在处理器的实际运行中,每条指令都会改变处理器的状态,进而影响后续指令的运行,因此每条指令的运行都存在一个上下文,通常包含先行指令、当前寄存器的值、当前内存的值等。
但是,在采用现有技术生成指令的过程中,需要选择处理器执行的指令,当产生大量指令时,需要分析全部的指令来选择相应的指令,从而降低了效率。
发明内容
本发明提供一种用于生成检测指令序列的方法和装置,用于提高选择指令的过程。
本发明的第一个方面是提供一种生成检测指令序列的方法,包括:
生成至少两个源指令组,并将所述指令划分到对应的源指令组中;
根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;其中,所述第一提取信息为处理器配置文件包含的信息;
从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;
从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;
根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;
从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;
根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。
本发明的第二个方面是提供一种生成检测指令序列的装置,包括:
生成模块,用于生成至少两个源指令组,并将所述指令划分到对应的源指令组中;还用于根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列;
提取模块,用于根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;其中,所述第一提取信息为处理器配置文件包含的信息;
处理模块,用于从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;还用于从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;还用于根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;还用于从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列。
本实施例提供的生成检测指令序列的方法和装置,通过生成至少两个源指令组,并将所述指令划分到对应的源指令组中;根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。由于通过指令组选择和指令簇选择两个步骤挑选出一条检测指令,可以提高挑选检测指令的效率。假设指令集中共有10000条指令,如果采用现有技术直接挑选一条检测指令,那么需要分析10000条指令,然后挑选一条,共做10000次分析。而指令分组后,假设分100组,每组100条指令簇,那么机器先分析100个组,挑选一个组,再分析该组内100条指令簇,挑选一段检测指令,共做200次分析。明显提高了选择检测指令的过程,进一步的加快了通过随机指令检测指令集架构的效率。
附图说明
图1为本发明实施例提供的一种生成检测指令序列的方法的流程示意图;
图2为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图;
图3为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图;
图4为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图;
图5为本实施例提供一种生成检测指令序列的装置的结构示意图。
具体实施方式
图1为本发明实施例提供的一种生成检测指令序列的方法的流程示意图,本方法的执行主体为模拟器或仿真器,参照图1,该方法包括如下步骤:
步骤100、生成至少两个源指令组,并将所述指令划分到对应的源指令组中;
具体的,根据每个指令的类型将属于同一类型的所述指令划分到与所述类型对应的所述源指令组中。
步骤101、根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;
具体的,第一提取信息为处理器配置文件包含的信息。每个指令簇包含至少一个指令槽以及每个指令槽的指令选择范围。需要说明的是,指令簇是针对某条指令制定的一个短指令序列,也就是说,该条指令为指令簇的主指令,占用指令簇的一个指令槽,而指令簇中包含的其它指令槽存放该主指令的辅助指令。一个指令簇包含至少一个指令槽,并且该指令簇隶属于该指令簇的主指令,当某些主指令不需要辅助指令时,其对应的指令簇只包含一个指令槽,该指令槽只存放该主指令。因此,每个指令簇中指令槽的数目、每个指令槽存放何种指令可以不同,但指令簇一定包含一个指令槽用以存放主指令。
步骤102、从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组。
步骤103、从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;
步骤104、根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;
其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;
步骤105、从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;
步骤106、根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。
具体的,选择指令簇后,根据该指令簇的指令槽生成所述指令。
优选的,在生成检验指令序列之后,可以将生成的检验指令序列数目与数目阈值进行比较,若检验指令序列数目的超过或等于阈值则运行所述检验指令序列以检测处理器的指令集架构是否正常,若检验指令序列数目小于数目阈值,则返回步骤102,继续生成检验指令序列。需要说明的是,该数目阈值根据不同的处理器的指令集架构有所不同,本实施例对于数目阈值的具体数值不做限定。
本实施例提供的生成检测指令序列的方法,通过生成至少两个源指令组,并将所述指令划分到对应的源指令组中;根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。由于通过指令组选择和指令簇选择两个步骤挑选出一条检测指令,可以提高挑选检测指令的效率。假设指令集中共有10000条指令,如果采用现有技术直接挑选一条检测指令,那么需要分析10000条指令,然后挑选一条,共做10000次分析。而指令分组后,假设分100组,每组100条指令簇,那么机器先分析100个组,挑选一个组,再分析该组内100条指令簇,挑选一段检测指令,共做200次分析。明显提高了选择检测指令的过程,进一步的加快了通过随机指令检测指令集架构的效率。
进一步的,在图1的基础上,图2为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图,参照图2,步骤102的一种可行的实现方式为:
步骤102a、清空指令组候选队列,根据所述上下文,若所述目标指令组为可生成,则为所述目标指令组分配的权重为正值,并将所述目标指令组放入所述指令组候选队列。
需要说明的是,目标指令组是否能生成的依据很多种,例如,由于目标指令组是按照指令类型划分的,例如一个目标指令组都是跳转指令,另一个目标指令组都是访存指令,因此可以依据同一类型的指令间的共性判断该目标指令组能否生成。本实施例对于目标指令组生成的依据不予限定。
参照图2,上述图1中步骤103的一种可行的实现方式为:
步骤103a、判断所述指令组候选队列是否为空。
步骤103b、若不为空,则根据所述指令组候选队列中的每个所述目标指令组的权重,随机选择一个所述目标指令组,并将所述目标指令组移出所述指令组候选队列。
步骤103c、若为空,则检验指令序列失败。
具体的,由于选择目标指令组是随机的,权重仅表明该目标指令组可能被选中的概率,权重大的目标指令组被选中的可能性大,但并不是绝对会被选中。
参照图2,上述图1中步骤104的一种可行的实现方式为:
步骤104a、清空指令簇候选队列,根据所述上下文,若所述移出的目标指令组中具有所述可生成的指令簇,则为所述可生成的指令簇分配的权重为正值,并将权重为正值的所述可生成的指令簇放入所述指令簇候选队列;
需要说明的是,判断指令簇是否可生成,主要看其主检测指令,与上文判断检测指令是否可生成类似。另外,若一个指令簇包含多个指令槽,那么也要检查内存当前位置是否有足够未占用空间可以存放这些指令槽中的检测指令。
参照图2,该方法在步骤105a之前,还包括如下步骤:
步骤107a、判断所述指令簇候选队列是否为空。
具体的,若所述指令簇候选队列为空,则返回执行所述判断所述指令组候选队列是否为空的步骤103a。
具体的,若所述指令簇候选队列不为空,则执行步骤105a。
参照图2,上述图1中步骤105的一种可行的实现方式为:
步骤105a、若所述指令簇候选队列不为空,则根据所述指令簇候选队列中的每个所述可生成的指令簇的权重,随机选择一个所述可生成的指令簇,并将所述可生成的指令簇移出所述指令簇候选队列。
参照图2,图1中步骤106的一种可行的实现方式为:
步骤106a、清空指令候选队列,根据所述上下文,逐一判断每个所述指令槽的指令选择范围中每个所述检验指令序列是否可生成,若可生成,则为所述检验指令序列分配的权重为正值,并将所述检验指令序列放入指令候选队列;
其中,可以有多种判断检验指令序列是否可生成的依据,例如,对于一个根据某个寄存器值做跳转的指令,那么要检查是否有寄存器包含合适的值,可以跳转到尚未占用的内存空间。此外,某些处理器指令架构规定:某类指令不能跟在另一类检验指令之后,这时也需要查看之前生成的是什么类型的检验指令。以上列举的几点仅为几种典型情况,判断检验指令序列是否可生成并没有固定的标准,需要根据不同的处理器指令架构或者不同的指令生成策略采用不同的依据。
需要说明的是,指令簇实际代表一个指令序列,例如,一个指令簇含两个指令槽,则代表由两条指令组成的指令序列,但每个指令槽具体应存放哪个指令不是预先设置的,而只是预先设置有一个指令选择范围,即第一个指令槽具有一个指令选择范围,比如第一个指令槽可以为指令1或指令2,清空指令候选队列,分析权重后,指令1和指令2都放入指令候选队列,然后随机选择指令1或指令2,例如结果选择指令2。再选择指令簇的第二个指令槽中存放的指令,比如说第二个指令槽可以存放指令2或指令3,清空指令候选队列,分析权重后,指令2和指令3都放入指令候选队列,然后随机选择指令2或指令3,例如结果选择的仍为指令2。最后这个指令簇就通过随机选择具体化为一段由两条指令2组成的序列。
步骤106b、判断所述指令候选队列是否为空。
步骤106c、若不为空,则根据所述指令候选队列中的每个所述检验指令序列的权重,随机选择生成一个所述检验指令序列,并将所述检验指令序列移出所述指令候选队列。
具体的,若随机选择生成一个所述检验指令序列失败,则返回执行判断所述指令候选队列是否为空的步骤106b。
在图2的基础上,图3为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图,参照图3,在步骤106c之后,还包括:
步骤106d、若所述指令候选队列为空,则查看上下文堆栈,所述上下文堆栈用于缓存所述上下文的历史,若所述上下文堆栈不为空,则将当前上下文恢复为所述上下文堆栈底的上下文,并清空所述上下文堆栈,并返回执行所述判断所述指令簇候选队列是否为空的相应步骤。
进一步地,将所述当前上下文压入所述上下文堆栈顶,根据所述检验指令序列的指令码,运行所述检验指令序列,并将所述检验指令序列的运行结果记入所述当前上下文;通过分析运行后的上下文查看检验指令序列运行结果,检测所述处理器的指令集架构是否正常。若该结果不符合要求,则将当前上下文恢复为上下文堆栈顶的上下文,并弹出上下文堆栈顶的上下文,再跳回步骤106b。
进一步的,在图1至图3中步骤100之前,还可以包括:
步骤108、读入处理器配置文件和需生成的检验指令序列数目,所述处理器配置文件包括:所述处理器的地址空间配置、寄存器描述和指令描述;
其中,指令数目指需要生成的全部指令的数目。或者,也可以用指令簇数目代替。
步骤109、随机生成所有寄存器的初值和内存的初值;
步骤110、清空所述上下文堆栈。
图4为本发明实施例提供的另一种生成检测指令序列的方法的流程示意图。参照图4,下面结合上文实施例以及各个可行的实现方式,对本实施例提供的生成检测指令序列的方法进行说明:
步骤200、读入处理器配置文件,处理器配置文件包括处理器的地址空间配置、寄存器描述和指令描述。
步骤201、读入需生成的指令数目。
步骤202、初始化上下文,包括随机所有寄存器的初值,随机内存的初值。
步骤203、清空上下文堆栈,上下文堆栈用于缓存上下文的历史。
具体的,该上下文堆栈为先进后出队列。
步骤204、将所有检验指令序列划分为源指令组,源指令组的划分可以依据从处理器配置文件中提取的信息,如检验指令序列是否读内存、检验指令序列是否写PC(PC是一个特殊的寄存器,用于指示当前指令的地址)、检验指令序列访问哪些寄存器堆、检验指令序列是否发例外,也可以使用由验证者输入的自定义划分规则。源指令组用于将检验指令序列归类。
步骤205、为每条检验指令序列生成属于该检验指令序列的指令簇。
具体的,指令簇的生成可以依据从处理器配置文件中提取的信息,如指令是否有延迟槽,也可以使用由验证者输入的自定义生成规则。指令簇描述如何以一段检验指令序列达到生成一条指令的目的,例如,有些跳转指令带有延迟槽指令,那么为了生成这种跳转指令,实际上需要生成一个指令序列,包含该跳转指令及其延迟槽指令,此外,验证者有时为了对指令的生成做特殊控制,需要使用一系列指令做预备工作,例如,为了控制访存指令访问特定的地址空间,可以先使用一些指令将某个寄存器设置为特定值,再指定该寄存器为访存指令的基地址寄存器,这样就形成了该访存指令的一个指令簇。
需要说明的是,上述步骤200至步骤205为初始化过程。
步骤206、目标指令组分析,清空指令组候选队列,根据当前上下文,分析每个目标指令组的权重,若某个目标指令组被分析为可生成,则将其权重置为一个正值,并将该目标指令组放入指令组候选队列。
步骤207、目标指令组选择,判断指令组候选队列是否为空。
具体的,若指令组候选队列不为空,执行步骤208;若指令组候选队列为空,执行步骤209。
步骤208、根据指令组候选队列中目标指令组的权重,随机选择一个目标指令组,并将该目标指令组移出指令组候选队列,接着执行步骤210。
步骤209、报告检验指令序列生成失败,并结束程序。
步骤210、分析指令簇,清空指令簇候选队列,根据上下文,对于所选目标指令组中每条检验指令序列,分析属于该检验指令序列的每个指令簇的权重,若某个指令簇被分析为可生成,将该指令簇权重置为一个正值,并将该指令簇放入指令簇候选队列。
步骤211、选择指令簇,判断指令簇候选队列是否为空。
具体的,若指令簇候选队列不为空,则执行步骤212;若指令簇候选队列为空,则跳回步骤207。
步骤212、根据指令簇候选队列中指令簇的权重,随机选择一个指令簇,并将该指令簇移出指令簇候选队列。
进一步的,依次对所选指令簇中的每条指令槽(记为第i条指令槽,i大于等于1)执行下列步骤:
步骤213,分析检验指令序列,清空指令候选队列,根据上下文,分析所选指令簇的第i条指令槽的指令选择范围中每条检验指令序列的权重,若某个检验指令序列被分析为可生成,那么将该检验指令序列的权重置为一个正值,并将该检验指令序列放入指令候选队列。
需要说明的是,指令簇的每条指令槽通常都有一个指令选择范围,例如延迟槽指令不能为跳转指令。
步骤214,选择检验指令序列,判断指令候选队列是否为空。
具体的,若指令候选队列不为空,则执行步骤215;若指令候选队列为空,则执行步骤216。
步骤215、根据指令候选队列中检验指令序列的权重,随机选择一条检验指令序列,并将该检验指令序列移出指令候选队列。
具体的,在执行完步骤215之后,执行步骤218。
步骤216、查看上下文堆栈是否为空。
具体的,若上下文堆栈不为空,则执行步骤217;若上下文堆栈为空则跳回步骤211。
步骤217、将当前上下文恢复为上下文堆栈底的上下文,并清空上下文堆栈。
需要说明的是,图2中虽未示出,但是在执行完步骤217后,跳转至步骤211。
步骤218、生成检验指令序列对应的指令码。
具体的,根据上下文,随机生成所选检验指令序列的指令码,如果随机失败,则跳回步骤214。
步骤219、将当前上下文压入上下文堆栈顶。
步骤220、根据生成的指令码,运行所选检验指令序列,并将该检验指令序列的运行结果记入当前上下文中。
步骤221、通过分析运行后的上下文查看指令运行结果,若该结果不符合要求,则将当前上下文恢复为上下文堆栈顶的上下文,并弹出上下文堆栈顶的上下文,再跳回步骤214。
在运行完所选指令簇中的全部指令之后,执行下述步骤:
步骤222,清空上下文堆栈。
步骤223,若已经生成足够数目的检验指令序列,则报告检验指令序列生成成功,并结束程序。
具体的,若没有生成足够数目的检验指令序列,则跳回步骤206。
示例:假设某处理器的指令集包含如下检验指令序列,两条跳转指令,JR和BEQ;两条访存指令,LW和SW;两条运算指令,ADD和SUB。按照指令的类型,将这些指令分为3个组,跳转指令组、访存指令组和运算指令组。每个指令的指令簇可以如下设置,每个指令都只有一个指令簇,其中LW、SW、ADD和SUB的指令簇仅包含一条指令,即其主指令,但JR和BEQ的指令簇包含两条指令,第一条为其主指令,第二条为一个延迟槽指令,选择范围为LW、SW、ADD和SUB。首先,分析3个指令组,假设跳转指令组和运算指令组可以生成,放入指令组候选队列,但访存指令组不可生成,接着随机选择一个指令组,假设选中了跳转指令组。其次,分析跳转指令组中的指令簇,即JR的指令簇和BEQ的指令簇,假设两个指令簇都可生成,放入指令簇候选队列,接着随机选择一个指令簇,假设选中了BEQ的指令簇。最后,循环两次,每次生成BEQ指令簇中的一条指令。由于BEQ指令簇的第一条指令必须为其主指令,因此第一条指令的选择范围只有BEQ,假设BEQ可生成,生成BEQ的指令码再将当前上下文压入上下文堆栈然后运行,再生成第二条指令,其选择范围为LW、SW、ADD和SUB,假设只有ADD和SUB可生成,放入指令候选队列,随机选择了ADD,生成ADD的指令码再将当前上下文压入上下文堆栈然后运行。至此生成了两条指令,BEQ和ADD,如果还需生成更多指令,那么返回指令组分析步骤重复执行。
需要说明的,以上方案在选择指令簇、选择检验指令序列、生成检验指令序列的三个步骤中都设置了回撤机制,使机器在各种可能的随机失败情况下能自我恢复,从而搜索更广阔的随机空间。并且,以上方案所使用的源指令组和指令簇都具有实际意义,源指令组描述了指令功能的分类,指令簇描述了特定功能的短指令序列,因此基于源指令组和指令簇生成的指令序列更接近真实程序,从而提高了指令序列的质量。以上方案在分析源指令组、分析指令簇、分析检验指令序列和检验指令序列运行四个步骤中都设置了分析点,使程序在多处都能对检验指令序列的随机施加控制,从而增强指令生成的灵活性。
图5为本实施例提供一种生成检测指令序列的装置的结构示意图,该装置可以为模拟器或仿真器,该装置能够执行图1至图4所示的各个步骤,并能够实现图1至图4对应实施例的技术效果。参照图5,该装置包括:生成模块10、提取模块11、处理模块12。
生成模块10,用于生成至少两个源指令组,并将所述指令划分到对应的源指令组中;还用于根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列;
提取模块11,用于根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;
处理模块12,用于从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;还用于从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;还用于根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;还用于从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列。
具体的,处理模块12还用于运行所述指令以检测处理器的指令集架构是否正常。
本实施例提供的生成检测指令序列的装置,通过生成模块生成至少两个源指令组,并将所述指令划分到对应的源指令组中;并根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列;提取模块根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;处理模块从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;还用于从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列。由于通过指令组选择和指令簇选择两个步骤挑选出一条指令,可以提高挑选指令的效率。假设指令集中共有10000条指令,如果采用现有技术直接挑选一条指令,那么需要分析10000条指令,然后挑选一条,共做10000次分析。而指令分组后,假设分100组,每组100条指令簇,那么机器先分析100个组,挑选一个组,再分析该组内100条指令簇,挑选一段指令,共做200次分析。明显提高了选择指令的过程,进一步的加快了通过随机指令检测指令集架构的效率。
优选的,所述处理模块12,具体用于清空指令组候选队列,根据所述上下文,若所述目标指令组为可生成,则为所述目标指令组分配的权重为正值,并将所述目标指令组放入所述指令组候选队列;还具体用于判断所述指令组候选队列是否为空,若不为空,则根据所述指令组候选队列中的每个所述目标指令组的权重,随机选择一个所述目标指令组,并将所述目标指令组移出所述指令组候选队列;还具体用于清空指令簇候选队列,根据所述上下文,若所述移出的目标指令组中具有所述可生成的指令簇,则为所述可生成的指令簇分配的权重为正值,并将权重为正值的所述可生成的指令簇放入所述指令簇候选队列;还具体用于若所述指令簇候选队列不为空,则根据所述指令簇候选队列中的每个所述可生成的指令簇的权重,随机选择一个所述可生成的指令簇,并将所述可生成的指令簇移出所述指令簇候选队列。
进一步地,所述处理模块12,还用于判断所述指令簇候选队列是否为空,若所述指令簇候选队列为空,则返回执行所述判断所述指令组候选队列是否为空的步骤。
优选的,所述生成模块10,具体用于清空指令候选队列,根据所述上下文,逐一判断每个所述指令槽的指令选择范围中每个所述检验指令序列是否可生成,若可生成,则为所述检验指令序列分配的权重为正值,并将所述检验指令序列放入指令候选队列;判断所述指令候选队列是否为空,若不为空,则根据所述指令候选队列中的每个所述检验指令序列的权重,随机选择生成一个所述检验指令序列,并将所述检验指令序列移出所述指令候选队列。
具体的,生成模块10生成所述检验指令序列为随机生成,即生成模块10随机选择上文步骤106a中权重为正值的指令生成。
进一步地,所述处理模块12,还用于若随机选择生成一个所述检验指令序列失败,则返回执行判断所述指令候选队列是否为空的步骤。
所述处理模块12,还用于若所述指令候选队列为空,则查看上下文堆栈,所述上下文堆栈用于缓存所述上下文的历史,若所述上下文堆栈不为空,则将当前上下文恢复为所述上下文堆栈底的上下文,并清空所述上下文堆栈,并返回执行所述判断所述指令簇候选队列是否为空的相应步骤。
进一步的,所述处理模块12,还具体用于查询所述当前上下文中所述指令的运行结果,检测所述处理器的指令集架构是否正常。
可选的,所述处理模块12,还用于读入所述处理器配置文件和需生成的检验指令序列数目,所述处理器配置文件包括:所述处理器的地址空间配置、寄存器描述和指令描述;还用于随机生成所有寄存器的初值和内存的初值;还用于清空所述上下文堆栈。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (14)
1.一种生成检测指令序列的方法,其特征在于,包括:
生成至少两个源指令组,并将所述指令划分到对应的源指令组中;
根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;其中,所述第一提取信息为处理器配置文件包含的信息;
从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;
从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;
根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;
从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列;
根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列。
2.根据权利要求1所述的方法,其特征在于,所述从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,包括:
清空指令组候选队列,根据所述上下文,若所述目标指令组为可生成,则为所述目标指令组分配的权重为正值,并将所述目标指令组放入所述指令组候选队列;
所述从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列,包括:
判断所述指令组候选队列是否为空,若不为空,则根据所述指令组候选队列中的每个所述目标指令组的权重,随机选择一个所述目标指令组,并将所述目标指令组移出所述指令组候选队列;
根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列,包括:
清空指令簇候选队列,根据所述上下文,若所述移出的目标指令组中具有所述可生成的指令簇,则为所述可生成的指令簇分配的权重为正值,并将权重为正值的所述可生成的指令簇放入所述指令簇候选队列;
所述从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列,包括:
若所述指令簇候选队列不为空,则根据所述指令簇候选队列中的每个所述可生成的指令簇的权重,随机选择一个所述可生成的指令簇,并将所述可生成的指令簇移出所述指令簇候选队列。
3.根据权利要求2所述的方法,其特征在于,在所述根据所述指令簇候选队列中的每个所述可生成的指令簇的权重,随机选择一个所述可生成的指令簇,并将所述可生成的指令簇移出所述指令簇候选队列之前,还包括:
判断所述指令簇候选队列是否为空,若所述指令簇候选队列为空,则返回执行所述判断所述指令组候选队列是否为空的步骤。
4.根据权利要求2或3所述的方法,其特征在于,所述根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列,包括:
清空指令候选队列,根据所述上下文,逐一判断每个所述指令槽的指令选择范围中每个所述检验指令序列是否可生成,若可生成,则为所述检验指令序列分配的权重为正值,并将所述检验指令序列放入指令候选队列;判断所述指令候选队列是否为空,若不为空,则根据所述指令候选队列中的每个所述检验指令序列的权重,随机选择生成一个所述检验指令序列,并将所述检验指令序列移出所述指令候选队列。
5.根据权利要求4所述的方法,其特征在于,在所述随机选择生成一个所述检验指令序列之后,还包括:
若随机选择生成一个所述检验指令序列失败,则返回执行判断所述指令候选队列是否为空的步骤。
6.根据权利要求4或5所述的方法,其特征在于,在所述判断所述指令候选队列是否为空之后,还包括:
若所述指令候选队列为空,则查看上下文堆栈,所述上下文堆栈用于缓存所述上下文的历史,若所述上下文堆栈不为空,则将当前上下文恢复为所述上下文堆栈底的上下文,并清空所述上下文堆栈,并返回执行所述判断所述指令簇候选队列是否为空的相应步骤。
7.根据权利要求4-6任意一项所述的方法,其特征在于,在所述生成至少两个源指令组,并将所述指令划分到对应的源指令组中之前,还包括:
读入所述处理器配置文件和需生成的检验指令序列数目,所述处理器配置文件包括:所述处理器的地址空间配置、寄存器描述和指令描述;
随机生成所有寄存器的初值和内存的初值;
清空所述上下文堆栈。
8.一种生成检测指令序列的装置,其特征在于,包括:
生成模块,用于生成至少两个源指令组,并将所述指令划分到对应的源指令组中;还用于根据移出的指令簇中包含的指令槽个数以及指令槽的指令选择范围生成检验指令序列;
提取模块,用于根据第一提取信息为每条指令生成对应的至少一个指令簇,每个所述指令簇包含至少一个指令槽以及每个指令槽的指令选择范围;其中,所述第一提取信息为处理器配置文件包含的信息;
处理模块,用于从所述至少两个源指令组中选择出至少一个目标指令组放入指令组候选队列中,所述目标指令组为所述至少两个源指令组中可生成的源指令组;还用于从指令组候选队列中随机选择一个目标指令组移出所述指令组候选队列;还用于根据上下文从移出的目标指令组中选取可生成的指令簇,并将所述可生成的指令簇放入指令簇候选队列;其中,所述上下文包括寄存器的内容、内存的内容和已生成的历史指令;还用于从所述指令簇候选队列中随机选择一个所述可生成的指令簇移出所述指令簇候选队列。
9.根据权利要求8所述的装置,其特征在于,所述处理模块,具体用于清空指令组候选队列,根据所述上下文,若所述目标指令组为可生成,则为所述目标指令组分配的权重为正值,并将所述目标指令组放入所述指令组候选队列;还具体用于判断所述指令组候选队列是否为空,若不为空,则根据所述指令组候选队列中的每个所述目标指令组的权重,随机选择一个所述目标指令组,并将所述目标指令组移出所述指令组候选队列;还具体用于清空指令簇候选队列,根据所述上下文,若所述移出的目标指令组中具有所述可生成的指令簇,则为所述可生成的指令簇分配的权重为正值,并将权重为正值的所述可生成的指令簇放入所述指令簇候选队列;还具体用于若所述指令簇候选队列不为空,则根据所述指令簇候选队列中的每个所述可生成的指令簇的权重,随机选择一个所述可生成的指令簇,并将所述可生成的指令簇移出所述指令簇候选队列。
10.根据权利要求9所述的装置,其特征在于,所述处理模块,还用于判断所述指令簇候选队列是否为空,若所述指令簇候选队列为空,则返回执行所述判断所述指令组候选队列是否为空的步骤。
11.根据权利要求9或10所述的装置,其特征在于,所述生成模块,具体用于清空指令候选队列,根据所述上下文,逐一判断每个所述指令槽的指令选择范围中每个所述检验指令序列是否可生成,若可生成,则为所述检验指令序列分配的权重为正值,并将所述检验指令序列放入指令候选队列;判断所述指令候选队列是否为空,若不为空,则根据所述指令候选队列中的每个所述检验指令序列的权重,随机选择生成一个所述检验指令序列,并将所述检验指令序列移出所述指令候选队列。
12.根据权利要求11所述的装置,其特征在于,所述处理模块,还用于若随机选择生成一个所述检验指令序列失败,则返回执行判断所述指令候选队列是否为空的步骤。
13.根据权利要求11或12所述的装置,其特征在于,所述处理模块,还用于若所述指令候选队列为空,则查看上下文堆栈,所述上下文堆栈用于缓存所述上下文的历史,若所述上下文堆栈不为空,则将当前上下文恢复为所述上下文堆栈底的上下文,并清空所述上下文堆栈,并返回执行所述判断所述指令簇候选队列是否为空的相应步骤。
14.根据权利要求11-13任意一项所述的装置,其特征在于,所述处理模块,还用于读入所述处理器配置文件和需生成的检验指令序列数目,所述处理器配置文件包括:所述处理器的地址空间配置、寄存器描述和指令描述;还用于随机生成所有寄存器的初值和内存的初值;还用于清空所述上下文堆栈。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410523100.2A CN105512024B (zh) | 2014-09-30 | 2014-09-30 | 生成检测指令序列的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410523100.2A CN105512024B (zh) | 2014-09-30 | 2014-09-30 | 生成检测指令序列的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105512024A true CN105512024A (zh) | 2016-04-20 |
CN105512024B CN105512024B (zh) | 2018-03-23 |
Family
ID=55720025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410523100.2A Active CN105512024B (zh) | 2014-09-30 | 2014-09-30 | 生成检测指令序列的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105512024B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107665169A (zh) * | 2016-07-29 | 2018-02-06 | 龙芯中科技术有限公司 | 处理器程序的测试方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101021779A (zh) * | 2007-03-19 | 2007-08-22 | 中国人民解放军国防科学技术大学 | 一种针对流处理器的指令控制方法 |
CN101510234A (zh) * | 2009-03-18 | 2009-08-19 | 中国科学院计算技术研究所 | 一种用于指令级随机验证的指令组合过滤方法及系统 |
US20100153653A1 (en) * | 2008-12-15 | 2010-06-17 | Ahmed El-Mahdy | System and method for prefetching data |
US20110161943A1 (en) * | 2009-12-30 | 2011-06-30 | Ibm Corporation | Method to dynamically distribute a multi-dimensional work set across a multi-core system |
-
2014
- 2014-09-30 CN CN201410523100.2A patent/CN105512024B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101021779A (zh) * | 2007-03-19 | 2007-08-22 | 中国人民解放军国防科学技术大学 | 一种针对流处理器的指令控制方法 |
US20100153653A1 (en) * | 2008-12-15 | 2010-06-17 | Ahmed El-Mahdy | System and method for prefetching data |
CN101510234A (zh) * | 2009-03-18 | 2009-08-19 | 中国科学院计算技术研究所 | 一种用于指令级随机验证的指令组合过滤方法及系统 |
US20110161943A1 (en) * | 2009-12-30 | 2011-06-30 | Ibm Corporation | Method to dynamically distribute a multi-dimensional work set across a multi-core system |
Non-Patent Citations (1)
Title |
---|
李德贤等: "基于数据流图的专用指令生成方法", 《浙江大学学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107665169A (zh) * | 2016-07-29 | 2018-02-06 | 龙芯中科技术有限公司 | 处理器程序的测试方法和装置 |
CN107665169B (zh) * | 2016-07-29 | 2020-07-28 | 龙芯中科技术有限公司 | 处理器程序的测试方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105512024B (zh) | 2018-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108415841B (zh) | 一种基于覆盖力度增量的组合测试用例优先级排序方法 | |
CN105302717A (zh) | 一种大数据平台的检测方法及装置 | |
CN101308471B (zh) | 一种恢复数据的方法及装置 | |
CN103729235A (zh) | Java虚拟机的编译方法和Java虚拟机 | |
US20190317879A1 (en) | Deep learning for software defect identification | |
KR102013582B1 (ko) | 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법 | |
CN105512023A (zh) | 一种Monkey测试方法及装置 | |
CN103927305B (zh) | 一种对内存溢出进行控制的方法和设备 | |
CN101876939A (zh) | 系统测试方法及装置 | |
CN103885876A (zh) | 测试方法及设备 | |
Bhimani et al. | Enhancing SSDs with multi-stream: What? why? how? | |
CN105608214A (zh) | 对布控车牌号码进行快速搜索的方法 | |
CN108694318A (zh) | 空操作雪橇探测方法及其装置 | |
CN102298681A (zh) | 一种基于数据流切片的软件识别方法 | |
CN110162472A (zh) | 一种基于fuzzing测试的测试用例生成方法 | |
CN105512024A (zh) | 生成检测指令序列的方法和装置 | |
US20120096247A1 (en) | Reconfigurable processor and method for processing loop having memory dependency | |
US10496519B2 (en) | Method invocation synthesis for software program repair | |
CN100533404C (zh) | 加快从计算机下载数据到单片机目标存储器的方法及系统 | |
EP3662361B1 (en) | Matching consecutive values in a data processing apparatus | |
CN116304699A (zh) | 基于新能源多场站短路比的临界样本集生成方法及系统 | |
CN113127331A (zh) | 一种基于故障注入的测试方法、装置及计算机设备 | |
CN102567169A (zh) | 微处理器的测试方法及测试装置 | |
CN116541268A (zh) | 上下文感知依赖引导的内核模糊测试用例变异方法与系统 | |
US20090265156A1 (en) | Dynamically varying simulation precision |
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 |
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. |
|
CP01 | Change in the name or title of a patent holder |