基于下推系统的GPU并行CTL模型检查方法与流程

文档序号:17640981发布日期:2019-05-11 00:40阅读:202来源:国知局
基于下推系统的GPU并行CTL模型检查方法与流程

本发明主要涉及软件技术领域,尤其涉及一种基于下推系统的gpu并行ctl模型检查方法。



背景技术:

软件安全的可靠性、安全性一直是工业界关注的焦点。尤其在航空航天、工业控制及轨道交通领域,软件漏洞可能导致国家及个人的安全受到伤害。传统的测试方法并不能保证系统的所有可能行为的可靠性。模型检查是一种形式化方法,通过将程序转变成一个形式化描述,并用图论算法验证软件。模型检查需要一个模型描述程序,下推系统是一种天然的串行程序形式化模型。

下推系统是一种带有栈元素的有限迁移系统。因为下推系统带栈的特性,其可以精确地模拟程序的串行执行过程和函数调用过程。在实际应用中,下推系统及其扩展模型通常用于程序的分析和验证。ctl(computationtreelogic,计算树逻辑)是一种分支时间逻辑,它可以描述软件性质,常被用于软件和硬件开发过程中的形式化验证。基于下推系统的模型检查方法一直是业界讨论的热点,近年来有人提出一种基于符号执行的下推系统的ctl模型检查方法。这一方法将基于下推系统的模型检查的问题转换为对可交替布奇下推系统的空集分析问题。第一次将基于下推自动机的ctl模型检查方法的算法时间复杂度从指数时间降至多项式时间。虽然该方法比现存所发布的其他同类型ctl模型检查算法都要高效,但是当验证程序变得复杂,程序代码量增加时,该方法仍需消耗大量时间,效率有待进一步提高。



技术实现要素:

为解决以上问题,本发明提出了一种基于下推系统的gpu并行ctl模型检查方法,自动将串行的java程序或c语言程序构建成下推系统,对ctl公式和下推系统进行叉乘,生成可交替布奇下推系统,利用gpu并行技术动态分配计算任务以适应单指令多数据流架构,求解所有可被自动机接收的格局。

具体的,本发明提出了一种基于下推系统的gpu并行ctl模型检查方法,包括:

将待验证的串行目标程序解析为下推系统;

根据预设的ctl公式及所述下推系统,生成可交替布奇下推系统;

采用图形处理器gpu并行技术,通过可交替自动机并行求解所述可交替布奇下推系统中所有被接收的下推系统格局;

根据所有所述下推系统格局,验证所述串行目标程序是否满足所述ctl公式。

优选地,所述将待验证的串行目标程序解析为下推系统,包括:

获取待验证的串行目标程序的入口函数及所述入口函数的传递参数;

根据所述入口函数及所述传递参数,解析所述串行目标程序,得到所述串行目标程序对应的下推系统。

优选地,所述根据预设的ctl公式及所述下推系统,生成可交替布奇下推系统,包括:

根据预设的ctl公式对所述下推系统进行标准赋值和正则赋值;

对所述ctl公式及赋值后的所述下推系统进行叉乘,得到所述串行目标程序对应的可交替布奇下推系统。

优选地,所述采用图形处理器gpu并行技术,通过可交替自动机并行求解所述可交替布奇下推系统中所有被接收的下推系统格局,包括:

将可交替自动机划分为多个独立的子自动机;

通过gpu线程及多个所述子自动机,并行求解所述可交替布奇下推系统中所有被自动机接收的下推系统格局。

优选地,所述下推系统包括程序控制点、栈元素、程序原子性质及迁移规则,所述方法还包括:

确定每个所述迁移规则对应的格局编码;

根据所述格局编码,将所述下推系统包括的迁移规则存储在索引表中。

优选地,所述根据所述格局编码,将所述下推系统包括的迁移规则存储在索引表中,包括:

将格局编码相同的迁移规则存储在索引表中的同一个表项中;

将所述表项中存储的迁移规则的数目确定为所述表项对应的边界值;

在所述索引表中,记录所述表项对应的边界值。

优选地,所述通过gpu线程及多个所述子自动机,并行求解所述可交替布奇下推系统中所有被自动机接收的下推系统格局,包括:

将多个所述子自动机动态分配给多个gpu计算单元;

从所述索引表中获取迁移规则,通过gpu计算单元中运行的子自动机对获取的所述迁移规则进行表示,得到被所述子自动机接收的下推系统格局。

进一步地,所述方法还包括:

通过父线程依据获取的迁移规则的数量开启子线程,进行负载均衡。

进一步地,所述方法还包括:

显示对所述串行目标程序进行ctl公式验证的验证结果,以及显示所述所有被接收的下推系统格局。

进一步地,所述方法还包括:

输出最终的可交替多自动机,并将输出的所述可交替多自动机存储在文本格式文件中。

与现有的模型检查技术相比,本发明所述的基于下推系统的gpu并行ctl模型检查方法,具有如下有益效果:

本发明自动将串行的java程序或c语言程序构建成下推系统,对ctl公式和下推系统进行叉乘,生成可交替布奇下推系统,利用gpu并行技术动态分配计算任务以适应单指令多数据流架构,求解所有可被自动机接收的格局。本发明可以高效地对下推系统进行空集分析和ctl模型检查,可以用于检查函数的调用过程分析及变量定义的时序性质分析。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

附图1示出了本发明实施例提供的一种基于下推系统的gpu并行ctl模型检查方法的流程示意图。

附图2示出了本发明实施例提供的一种基于下推系统的gpu并行ctl模型检查工具的模块示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

参见图1,本发明实施例提供了一种基于下推系统的gpu(graphicsprocessingunit,图形处理器)并行ctl模型检查方法,该方法具体包括以下步骤:

步骤101:将待验证的串行目标程序解析为下推系统。

上述串行目标程序需是c语言或java语言编写的串行程序。

具体地,获取待验证的串行目标程序的入口函数及入口函数的传递参数;根据入口函数及传递参数,解析串行目标程序,得到串行目标程序对应的下推系统。本发明实施例还根据串行目标程序给出下推系统的默认的赋值属性,下推系统可以模拟函数的调用过程,其默认赋值属性包含行号、变量名、函数名等。

其中,本发明实施例的执行主体可以为用于进行ctl模型检查的终端。上述串行目标程序的入口函数及入口函数的传递参数可以由用户在终端的输入框中进行输入,此外用户还需在终端的输入框中输入串行目标程序的程序地址。终端获取到该程序地址之后,能够根据该程序地址获取到该串行目标程序。然后依据用户输入的入口函数及入口函数的传递参数对该串行目标程序进行解析,从而将该串行目标程序解析成一个下推系统。

在本发明实施例中,下推系统包括程序控制点、栈元素、程序原子性质及迁移规则。对于下推系统中的每一个程序控制点和栈元素都赋值了初始值,包括程序控制点的名字、栈的名字、所有针对本地变量的使用、所有变量的定义、对变量即定义又使用。上述初始值由字符use、def、usedef、变量名、方法名构成。

其中,程序原子性质能够体现串行目标程序中的函数之间的调用关系,迁移规则为下推系统中一个格局转变为另一个格局的规则。格局可以用一个二元组来表示,该二元组包括程序控制点击栈顶元素。上述入口函数主要用于确定下推系统的初始格局。

在本发明实施例中,将串行目标程序解析为下推系统之后,还需将下推系统包括的迁移规则存储在索引表中。即确定每个迁移规则对应的格局编码;根据格局编码,将下推系统包括的迁移规则存储在索引表中。具体地,将格局编码相同的迁移规则存储在索引表中的同一个表项中;将表项中存储的迁移规则的数目确定为表项对应的边界值;在索引表中,记录表项对应的边界值。

步骤102:根据预设的ctl公式及下推系统,生成可交替布奇下推系统。

在本发明实施例中,预设的ctl公式是由用户定义,并在终端的输入框中输入的。例如,ctl公式可以为ag(def(x)->efuse(x)),表示变量x在定义后一定会使用。

具体地,根据预设的ctl公式对下推系统进行标准赋值和正则赋值;对ctl公式及赋值后的下推系统进行叉乘,得到串行目标程序对应的可交替布奇下推系统。

在对下推系统进行标准赋值时,若一个格局满足一个程序原子性质只取决于格局中的控制点而不取决于栈元素,则确定该格局为标准赋值的格局。在对下推系统进行正则赋值中,满足一个程序原子性质的格局集合是一个正则格局集合。

步骤103:采用图形处理器gpu并行技术,通过可交替自动机并行求解可交替布奇下推系统中所有被接收的下推系统格局。

在本发明实施例中,将可交替布奇下推系统用可交替多自动机表示,使用gpu并行技术,并行求解所有可被自动机接收的下推系统格局。

具体地,将可交替自动机划分为多个独立的子自动机;通过gpu线程及多个子自动机,并行求解可交替布奇下推系统中所有被自动机接收的下推系统格局。

具体地,将多个子自动机动态分配给多个gpu计算单元;从索引表中获取迁移规则,通过gpu计算单元中运行的子自动机对获取的迁移规则进行表示,得到被子自动机接收的下推系统格局。

在从索引表中获取迁移规则时,根据表项的边界值一次性读取表项中存储的所有迁移规则。并通过父线程根据迁移规则的数量开启子线程,进行负载均衡。每个线程能够处理的迁移规则的数量存在上限值。若获取的迁移规则的数量大于该上限值,则通过父线程开启子线程进行负载均衡。具体地,父线程计算获取的迁移规则的数量与上述上限值之间的比值,并对该比值进行向上取整,开启向上取整得到的整数个子线程,通过开启的这多个子线程并行处理获取的所有迁移规则,得到所有能够被自动机接收的下推系统格局。本发明实施例可以根据线程的工作负载动态的启动和关闭子线程,从而达到负载均衡的效果。

步骤104:根据所有下推系统格局,验证串行目标程序是否满足ctl公式。

遍历所有能够被自动机接收的下推系统格局可知串行目标程序是否满足预设的ctl公式。

获得对串行目标程序的ctl验证结果之后,还显示对串行目标程序进行ctl公式验证的验证结果,以及显示所有被自动机接收的下推系统格局,方便用户直观了解模型检查结果。进一步地,还输出最终的可交替多自动机,并将输出的所述可交替多自动机存储在文本格式文件中。

本发明实施例提供的方法除可以对串行目标程序进行ctl模型检查外,还支持基于可交替布奇下推系统的并行空集分析。具体地,自动获取用户输入的可交替布奇下推系统,将该可交替布奇下推系统用可交替多自动机表示,使用gpu并行技术,并行求解所有可被自动机接收的下推系统格局,依据所有可被自动机接收的下推系统格局进行空集分析。

为了便于进一步的理解本发明实施例提供的方法,下面结合附图进行简要说明。如图2所示,本发明公开一种基于下推系统的gpu并行ctl模型检查工具,该工具包括:程序解析建模模块,用于将串行目标程序(java程序或c语言程序)解析成一个下推系统,并根据程序给出默认的赋值属性;下推系统赋值模块,根据ctl公式对下推系统进行标准赋值和正则赋值,对下推系统和ctl公式叉乘得到可交替布奇下推系统;并行ctl模型检查模块,将可交替布奇下推系统传输给初始可交替自动机,对初始可交替自动机进行划分,得到多个子自动机,通过多个子自动机,使用gpu并行技术,并行求解所有可被自动机接收的下推系统格局,遍历所有可被自动机接收的下推系统格局可知程序是否满足ctl公式;验证结果输出模块,对下推系统的模型检查结果显示输出,并输出最终的可交替多自动机。

下面结合具体实例具体讲述本发明所提供的基于下推系统的gpu并行ctl模型检查方法。具体以应用本发明的基于下推系统的gpu并行ctl模型检查方法对antlr的模型检查为例。

antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。它是基于ll(*)算法实现的语法解析器生成器,用java语言编写,使用自上而下的递归下降ll剖析器方法。它为包括java,c++,c#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器,编译器和解释器的框架。

在本实例中验证某个变量的定义调用顺序。具体操作步骤如下:

步骤a,首先确定ctl公式,如ctl公式ag(def(x)->efuse(x))表示变量x在定义后一定会使用。

步骤b,在终端输入框输入被验证目标程序的程序地址、被验证目标程序的主函数入口、上述ctl公式。

步骤c,程序解析建模模块将被验证目标程序建模成下推系统。根据目标源代码,程序被建模成一个下推系统,其包括程序控制点、栈元素、程序原子性质和迁移规则。

如一个函数的调用可以看做程序栈中压入新的栈元素,函数调用结束时弹出程序栈的栈顶元素。并给出下推系统的性质并给出默认赋值。

步骤d,将下推系统输入下推系统赋值模块,根据ctl公式对下推系统进行标准赋值,对下推系统和ctl公式进行叉乘得到可交替布奇下推系统;

步骤e,将可交替布奇下推系统用一个可交替多自动机表示,初始自动机接收所有格局。将自动机的划分为若干个不相关的子自动机,并行地在gpu线程中计算。线程根据并行索引表中表项的边界值判断线程负载,负载过大时启动子线程分担任务,实现负载均衡。

步骤f,完成自动机的前驱搜索后,gpu任务返回cpu。判断自动机是否到达不动点。如果已到达不动点,计算结束。若没有到达不动点,任务返回gpu进行下一次循环迭代。

步骤g,在终端显示窗口,对下推系统的模型检查结果显示输出,并输出最终的可交替多自动机,输出的结果文件以文本形式存放。

在本发明实施例中,可以自动地将串行的java程序或c语言程序构建成一个下推系统,针对代码行号、变量名及函数名给出基本属性赋值。根据程序系统的设计需求,人工提取出需要安全验证的性质,将其表示为ctl公式。工具自动对ctl公式和下推系统进行叉乘操作,生成可交替的布奇下推系统,利用gpu并行技术动态分配计算任务以适应单指令多数据流架构,求解所有可以被可交替的布奇下推系统接收的格局。采用本发明可以高效地对下推系统进行空集分析和ctl模型检查,可以用于检查函数的调用过程分析及变量定义的时序性质分析。

需要说明的是:

在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的系统、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一根或多根,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的系统解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的步骤进行自适应性地改变并且把它们设置在与该实施例不同的一根或多根设备中。可以把实施例中的步骤或步骤或组件组合成一个步骤或步骤或组件,以及此外可以把它们分成多个步骤或子步骤或子组件。除了这样的特征和/或过程或者步骤中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何系统或者设备的所有过程或步骤进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件步骤实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的系统的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的步骤权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1