一种基于中断控制流图的中断验证系统的制作方法

文档序号:15312250发布日期:2018-08-31 22:08阅读:154来源:国知局

本发明涉及计算机代码静态分析领域,特别是涉及一种基于中断控制流图的中断验证系统,用于验证中断驱动程序的时间安全与内存安全。



背景技术:

当今,信息技术与移动互联网的发展日新月异,嵌入式实时系统的发展也取得了令人瞩目的进步,并且广泛应用于计算机相关产业,如:制造、医疗、交通以及通信等各个行业。除此之外,包括能源、航天、军事等关键领域都大量应用了嵌入式实时系统,因此一旦这些系统发生错误,将会造成不可估量的损失,那么实时系统工作的正确性与可靠性就显得尤为重要。实际上,实时系统工作的正确性与可靠性不仅取决于系统运行所产生的结果,同时也依赖于产生结果所需的时间,即本发明领域中熟知的deadline(死亡时限)。然而在实践中,有关实时系统的正确性验证是非常困难的,特别时间性质是否满足要求的验证,因为通常系统的运行环境具有相对随机性和复杂性,这也就使得系统运行的相关命令的执行时间是不可预测的。因此,时间性质的正确验证至关重要。

通过引入中断处理程序可以有效的解决上述问题,当一个暂停指令(由中断导致的)执行时,cpu会暂停当前正在执行的程序并转去执行中断处理isr(interruptserviceroutine),当指令执行完毕后,cpu会继续执行之前被暂停的程序。但是,通常一个中断驱动程序中具有大量的并且不同的中断源(发出中断请求信号的来源),甚至大多数实时系统都支持中断处理程序中嵌套中断,通过一个中断可以被具有更高优先级的中断打断而实现,这些情况导致了中断处理程序同样具有随机性和复杂性。此外,由于中断机制的引入,使得中断驱动程序会产生另外一个可能影响安全的问题数据竞争——即两个线程同时访问同一个共享变量,且这两个访问中至少有一个访问是向变量中写值。因此在嵌入式领域中,仍然经常会发生由于中断引发的软件错误,然而目前有关中断数据竞争与时间性质的检测技术与方法还相对缺乏。



技术实现要素:

针对上述问题,本发明通过公开了一种基于中断控制流图的中断验证系统,包括:

代码转换模块,用于根据中断驱动程序获取汇编代码;

中断信息统计模块,根据所述汇编代码统计中断信息;

控制流图生成模块,根据所述汇编代码生成控制流图;

中断控制流图生成模块,根据所述控制流图与所述中断信息生成中断控制流图。

处理模块,用于对所述中断控制流图切片处理;

分析模块,根据所述中断控制流图切片,验证所述中断驱动程序的时间安全与内存安全;

优选的,所述中断驱动程序包括:主控程序与中断处理程序。

优选的,所述中断信息,包括:节点、所述节点中的中断处理程序、所述节点中的中断处理程序的优先级。

更优选的,所述控制流图生成模块包括:

主控控制流图生成单元,用于根据驱动程序中的主控程序生成主控控制流图;

中断处理控制流图生成单元,用于根据驱动程序中的中断处理程序生成中断处理控制流图。

更优选的,所述中断控制流图生成模块利用所述中断信息将所述主控控制流图与所述中断处理控制流图结合,从而获得中断控制力图。

更优选的,所述中断控制流图生成模块、所述中断处理控制流图生成单元与所述主控控制流图生成单元中生成的对应控制流图,均以包括节点集合与有向边集合的数学模型进行保存。

更优选的,所述有向边集合中的有向边由一对有向节点对表示,所述有向节点对中的节点包含于所述节点集合中。

更优选的,所述分析模块根据所述中断控制流图切片验证所述中断驱动程序的时间安全,包括:

(1)通过所述中断控制流图切片,将中断控制流图转换为整数线性规划;

(2)通过对所述整数线性规划进行求解,获得所述目标代码的最坏执行路径;

(3)通过计算所述最坏执行路径的长度,验证中断驱动程序的时间安全。

更优选的,所述分析模块根据所述中断控制流图切片验证所述中断驱动程序的内存安全,包括:

a)遍历节点,判断遍历节点是否为中断处理程序的入口,如果是,则将中断处理程序标记为真,并将上一节点的状态列表变量压入栈中;

b)判断遍历节点是否为中断处理程序的返回节点:如果既是返回节点并且上一节点的状态列表变量为空,则将中断驱动程序标记设为假,并将上一节点的状态列表变量弹出栈;如果是返回节点但上一节点的状态列表变量不为空,则只进行将上一节点的状态列表变量弹出栈的操作;若不是中断处理程序的返回节点,则继续判断下一个节点;

c)判断中断驱动程序标记是否为真,在标记为真的节点中找出存在数据竞争的节点,若在当前节点中存在有两个或两个以上的子程序同时访问当前节点中的同一个共享变量,并且访问的形式中最少有一个是写操作,则表示存在数据竞争,将当前节点加入到冲突节点集合中。

本发明的优点是,与传统中断验证系统相比,针对中断驱动程序,扩展了传统的主控控制流图,提出了一个新的用以表示中断驱动程序控制流结构的模型—中断控制流图,并给出削减中断控制流图规模(切片)的方法,可有效减少15%~25%的中断控制流图的规模;根据中断控制流图切片,对中断驱动程序进行最坏执行路径分析用以验证时间安全;根据中断控制流图切片,对数据竞争进行检测用以验证内存安全,本发明实现了在同一模型中验证中断驱动程序最常出现的两类问题,提高了中断驱动程序验证的可靠性与安全性。

附图说明

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

图1为本发明的中断验证系统组成图。

图2为本发明的中断验证系统流程图。

图3为本发明的一个可选实施例的主控控制流图结构图。

图4为本发明的一个可选实施的中断处理控制流图结构图。

具体实施方式

本发明公开了一种基于中断控制流图的中断验证系统,所述中断验证系统首先通过构建中断控制流图数学模型,利用中断控制流图数学模型来描述中断驱动程序的控制流信息;然后利用程序切片的技术思想,将中断控制流图进行切片;最后通过对中断控制流图切片的分析来验证中断驱动程序的时间安全与内存安全。其中所述中断驱动程序包括,主控程序与中断处理程序。下面将结合附图详细的介绍本发明的验证过程。

如图1所示,为本发明基于中断控制流图的中断验证系统,包括:代码转换模块、中断信息统计模块、控制流图生成模块,根据所述汇编代码生成控制流图、中断控制流图生成模块、处理模块和分析模块,其中所述控制流图生成模块还包括,主控控制流图生成单元和中断处理控制流图生成单元。本发明利用上述模块,对中断驱动程序进行处理分析,从而验证中断驱动程序的时间安全和内存安全。

具体的,汇编语言的优点是,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、cpu、i/o端口等且易于读写和调试,所以首先本发明利用所述代码转换模块将中断驱动程序进行反汇编,得到中断驱动程序的汇编代码。所述汇编代码包括主控程序汇编代码与中断处理程序汇编代码。传统的主控控制流图只对主控程序流进行了描述,不能对整个中断驱动程序进行描述,并且由于无法通过所述汇编代码直接得到中断控制流图,于是首先本发明通过利用控制流图生成模块中的主控控制流图生成单元生成主控控制流图,从而对主控程序流进行描述;通过利用控制流图生成模块中的中断处理控制流图生成单元生成中断处理控制流图,从而对中断处理程序流进行描述;然后通过本发明中的中断控制流图生成模块,利用中断信息将所述主控控制流图与所述中断处理控制流图结合获得中断控制流图,所述中断控制流图即为对整个驱动程序控制流的描述,其中所述中断信息可通过本系统中的中断信息统计模块利用所述中断驱动程序的汇编代码获得。上述过程中,所述主控控制程序、所述中断处理控制程序以及根据前两者生成的中断控制程序均为有向图,以包括节点集合与有向边集合的数学模型进行保存,并被所述中断验证系统使用。根据中断驱动程序的不同,所述中断控制流图的规模也不尽相同,但是就一般而言,所述中断控制流图具有较大的规模,不易进行分析。所以本发明中在得到中断控制流图后利用处理模块对所述中断控制流图进行切片,从而降低中断控制流图的规模。最后通过处理模块对中断控制流图切片,从而对中断驱动程序的时间安全与内存安全进行分析验证。本发明的中断验证系统的结构如图1所示,代码转换模块根据中断驱动程序获得汇编编码;所述中断信息统计模块接收来自代码转换模块的汇编代码,从而得到中断信息;所述控制流图生成模块接收来自代码转换模块的汇编代码,从而得到主控控制控制流图与中断处理控制流图;所述中断控制流图生成模块接收来自中断信息统计模块的中断信息与来自控制流图生成模块的主控控制流图与中断处理控制流图,从而得到中断控制流图;所述处理模块接收中断控制流图生成模块的中断控制流图,从而得到中断控制流图切片;最后所述分析模块接收来自所述处理模块的中断控制流图切片,从而对所述驱动程序的时间安全与内存安全进行验证。上述过程的具体方法如下:

如图2所示,为本发明的验证系统流程图,公开了本发明中断验证系统的验证过程以及方法,

所述验证过程为,通过目标代码(中断驱动程序)获得汇编代码,根据汇编代码获得中断信息与控制流图,其中所述控制流图包括主控控制流图与中断处理控制流图;通过控制流图与中断信息获得中断控制流图;对中断控制流图进行切片分析,得到中断控制流图切片;通过对中断控制流图切片进行最坏执行路径分析判断是否满足时间安全性质要求,通过对中断控制流图切片进行数据竞争检测判断是否满足内存安全性质要求;满足的话输出验证程序正确;不满足的话举出反例路径。

所述验证方法包括:s1、对中断驱动程序的目标代码进行反汇编操作,获取汇编代码;s2、构建中断控制流图;s2.1、根据汇编代码获得中断信息;s2.2、根据所述汇编代码获得主控控制流图与中断处理控制流图;s3、对中断控制流图切片处理;s4、根据中断控制流图切片,验证中断驱动程序的时间安全与内存安全。

具体的,上述步骤方法具体说明或过程如下:

s1、对中断驱动程序的目标代码进行反汇编操作,获取汇编代码:

汇编语言的优点是,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、cpu、i/o端口等且易于读写和调试,对中断驱动程序的汇编代码转换可通过代码转换模块实现。

s2、构建中断控制流图:

本发明利用中断控制流图生成模块将中断信息、主控控制流图与中断处理控制流图相结合,从而构建出中断控制流图。其中所述主控程序是指中断驱动程序中除了中断处理程序以外的其它子程序,所述中断处理程序专门用来处理中断请求的特殊程序,每个中断处理程序由一系列的指令组成,具有相应的优先级,这些指令执行着特殊的有关中断处理的操作。

s2.1根据汇编代码获得中断信息:

由汇编代码的结构决定,中断信息可通过中断信息统计模块根据汇编代码获得。所述中断信息由中断信息列表ln进行统计,ln中的元素是一个二元组为(i,isren),其中isren表示节点n中优先级为i的使能中断处理程序,i表示优先级。此外列表中的中断信息将按照中断处理程序的优先级进行升序排列。

s2.2、根据所述汇编代码获得主控控制流图与中断处理控制流图:

所述控制流图(包括主控控制流图、中断处理控制流图)为有向图,为了方便使用,所述控制流图通过数学模型表示为g=(n,e),包括:节点集合n(n={n1,n2,…,nk})与有向边集合e,节点集合中每一个节点代表所述控制流图中的一个基础块,有向边集合中每一条有向边可由一个有序节点对(ni,nj)表示,表示从节点ni到节点nj的有向边,需说明的是ni、nj均属于节点集合,此外,所述节点集合中还包括两个特殊的节点,一个是表示控制流进入到控制流图的路入口节点,另一个是表示所有控制流结束的出口节点。上述数学模型通过控制流图生成模块中的主控控制流图生成单元与中断处理控制流图生成单元生成。

进一步的,由于中断流图为利用中断信息,通过主控控制流图与中断处理控制流图而获得,所以中断控制流图同样为有向图,可用数学模型表示为g*=(n*,e*)。其中,n*=n∪nloc×i,其中,n表示主控控制流图中的节点集合,nloc×i表示中断驱动程序中所有使能的中断处理程序的中断处理控制流图中的节点,其中,loc表示中断的节点位置,并且nloc∈n*,i表示在节点nloc中所有使能的中断处理程序。e*=(ni*,nj*)表示有向边的集合,ni*,nj*均属于n*,进一步的,所述有向边集合中包括了三种类型的边,一是主控程序与中断处理程序之间的有向边,该类有向边是一条从n中的节点流向nloc×i中节点或者是从nloc×i中的节点流向n中节点的有向边,该类有向边表示了中断处理程序的执行或是中断执行完成后的返回;二是中断处理程序到中断处理程序的有向边,它是一条从nloc×i中的节点流向nloc×i中的节点的边,该条有向边表示中断处理程序中嵌套了中断,即去执行一个更高优先级的中断处理程序或从一个更高优先级的中断处理程序中的返回。三是过程有向边,它表示了主控程序或到中断处理程序中节点间的连接。所述中断控制流图通过所述流图生成模块根据中断信息、主控控制流图与中断处理控制流图生成,其中生成所述中断控制流图的算法如下:

中断控制流图的构建:

在介绍中断控制流图算法前,设主控控制流图为gz,在算法的开始,令g*=gz,将gz赋值给g*,g*即为所要构建的中断控制流图的数学模型,令n*=nz,将主控程序控制流图节点集合nz赋值给中断控制流图节点集合n*z,令e*=ez,将主控控制流图有向边集合ez赋值给中断控制流图有向边集合e*,上述过程即先将中断控制流图通过主控控制流图表示,之后调用结构函数construct(n*)。在函数constrcut中,本发明对nz中的所有节点进行以下操作:

①如果nz的中断信息不为空,则移除nz的出口边,并获取nz中最低优先级的中断处理程序,如果nz的中断信息为空,则继续处理下一个节点;

②将nz中最低优先级的中断处理程序赋值给i,对i中的所有节点nz'计算其中断信息lnz,其中,nz'表示中断处理程序中的节点;(一个程序的优先级越低那么其中包含的中断就越多,最坏执行路径即要找出执行周期最长的程序执行路径)。

③计算完i中的中断信息之后,将nnz×i并入n*z集合中,其中,nnz表示所有经步骤①与步骤②处理过的nz主控节点的集合。

④然后将边e={(nz-1,entryi),(exiti,nz)}并入到e*中,其中e={(nz-1,entryi),(exiti,nz)}表示位于主控节点nz-1与主控节点nz间的中断处理程序中的所有有向边,其中entryi为中断入口exiti为中断出口,由于上述过程中已经将nz的出口边移除,则接下来所述的循环即为针对入口节点nz-1与出口节点nz间中断处理程序中的节点。

⑤将nnz×i作为新的参数继续调用construct函数,直至所有的节点信息为空,即不会发生中断为止,其中,nnz×i表示主控节点集合和与其对应的具有最低优先级的中断处理程序。

⑥继续判断主控程序中下一个节点,重复上述步骤①、步骤②、步骤③、步骤④与步骤⑤,直到遍历主控流图的节点集合nz=[n1、n2、n3……nz]。

上述操作过程中,骤②、步骤③、步骤④与步骤⑤即为将主控控制流图通过中断信息与中断处理控制流图相结合的过程,接下来即可对中断控制程序进行切片处理。

中断控制流图为本发明中断验证系统的核心,由于中断控制流图一般具有较大的规模,不便进行分析,因此本发明系统中通过所述处理模块,对中断控制流图进行切片处理以削减规模。

本发明中断控制流图切片的方法如下:

给定一个程序的中断控制流图g*=(n*,e*),其中n*=n∪nloc×i,本发明经过以下步骤来降低它的规模进行切片:

对于如果满足:(ni∈nz∧条件1∧条件2∧条件3)∨(ni∈nloc×i∧条件4∧条件5∧条件),其意义为将主控控制流图节点集合nz与中断处理程序的控制流图中的节点集合nloc(nloc是被节点ni中断的节点)分别通过不同的条件,将其中的节点替换为一个只含有指令周期信息的节点,其中符号“∧”表示“且”的关系,“∨”表示“并集”的关系,其中所述条件分别是:

条件1:lni为空,即节点ni不会被中断打断;

条件2:节点ni中的变量不会影响它的依赖变量集合;

条件3:节点ni有且仅有一个后继节点。

条件4:节点ni不能影响节点nloc中的依赖全局变量集合;

条件5:其中ien表示节点ni中所有可以使能的中断,nk不能影响节点ni中的全局依赖变量集合;

条件6:节点ni有且仅有一个后继节点。

其中所述条件给出过程为,通过计算中断控制流图中每个节点的依赖变量,获得依赖变量集合,根据依赖变量集合分析得出上述条件。接下来即可通过分析模块分别对中断控制流图切片进行分析,从而所述中断系统验证时间安全与内存安全。

本发明验证时间安全(根据中断控制流图切片分析最坏执行路径)的过程如下:

合并所有只具有周期信息的节点(标记节点):

1)将主控程序中同一个分支中的标记节点合并成一个节点;

2)将对应上诉主控程序分支中同一个中断处理程序中处于同一个分支的所有标记节点合并成一个节点。

所述最坏执行路径分析方法是将中断控制流图转换为一个整数线性规划,通过对整数线性规划的求解获取程序的最坏执行路径并计算最坏执行路径长度(周期)。所述执行路径长度的定义为:其中ci表示基础块i中的指令周期,ki表示该基础块执行的次数。最坏路径即为执行路径周期最长的一连串程序,若最坏执行路径仍满足时间安全性质要求,则可以判定目标代码时间安全。若不满足时间安全性质要求,则将路径举出,方便针对路径进行改进。

本发明验证内存安全(查找数据竞争)的过程如下:

该算法的输入为程序p的中断控制流图g*p={n*p,e*p}s,输出是所有存在数据竞争的节点冲突集合race。在算法的开始,首先进行初始化操作,将中断驱动程序标记is_isr设为false,可通过此变量判断算法目前执行的位置是否是在中断驱动程序中;将状态列表变量isr_state置为空,原来该变量中存储了程序的读变量,写变量;初始化访问标记initvisited(),通过该函数将所有节点的访问标记visited设为变量false,其中访问标记的作用是判断该节点是否已被遍历;对中断控制流图的入口节点entry*p进行入队操作enqueue(),表示遍历是从中断控制流图的入口节点开始的。在完成初始化操作后,本发明对中断控制流图进行遍历,对于遍历的节点,本发明主要进行以下操作:

a)判断遍历节点是否为中断处理程序的入口,如果是,则将中断处理程序标记标记设为true,并将上一节点的状态列表变量压入栈中;

b)判断遍历节点是否为中断处理程序的返回节点,如果既是返回节点并且上一节点的状态列表变量为空,则将中断驱动程序标记设为false,并将上一节点的状态列表变量弹出栈,如果是返回节点但上一节点的状态列表变量不为空,则只进行将上一节点的状态列表变量弹出栈的操作,若不是中断处理程序的返回节点,则继续判断下一个节点;

c)判断中断驱动程序标记是否为真,在标记为真的节点中找出存在数据竞争的节点,若在当前节点中存在有两个或两个以上的子程序同时访问本节点中的同一个共享变量,并且访问的形式中最少有一个是写操作,则表示存在数据竞争,将此节点加入到节点冲突集合race中。

实施例

如图3、图4所示,图3中显示了一种主控控制流图的结构方式,包括主控节点、分支1、分支2、分支3与各节点间的有向边,图4中显示了一种中断处理控制流图的结构方式,包括中断节点、分支1、分支2、分支3与各节点间的有向边,设图4中显示的中断处理控制流图为图3中主控控制流图中断的中断处理程序,且每个节点只执行一次,则最坏路径分析过程为:

1)将主控程序中同一个分支中的标记节点合并成一个节点;

2)将对应上诉主控程序分支中同一个中断处理程序中处于同一个分支的所有标记节点合并成一个节点。

其中ci表示基础块i中的指令周期,ni表示该基础块执行的次数,如此,路径1=主控节点1+主控节点2+中断节点1+中断节点2+中断节点3+中断节点6+中断节点8主控节点6;路径2=主控节点1+主控节点2+中断节点1+中断节点2+中断节点4+中断节点7+主控节点6;路径3=主控节点1+主控节点2+中断节点1+中断节点2+中断节点5+主控节点6,设每个主控节点与中断节点的周期相同,则路径1即为最坏执行路径。

上述过程为了直观描述采用了对每个路径进行分析,实际过程中所述最坏执行路径的分析方法是通过分析模块将中断控制流图转换为一个整数线性规划,通过对整数线性规划的求解获取程序的最坏执行路径以及最坏执行路径长度(周期),从而验证时间安全。

最后将在本文最后附上本发明生成中断控制流图的方法逻辑以及检测读写冲突的方法逻辑。

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

本发明生成控制流图的方法逻辑如下所示:

本发明检测读写冲突的方法逻辑如下所示:

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