太阳城集团

  • / 12
  • 下载费用:30 金币  

一种基于并发控制流图的JAVA并发程序路径剖析方法.pdf

摘要
申请专利号:

太阳城集团CN201610577045.4

申请日:

2016.07.20

公开号:

CN106257425A

公开日:

2016.12.28

当前法律状态:

实审

有效性:

审中

法律详情: 授权|||实质审查的生效IPC(主分类):G06F 9/52申请日:20160720|||公开
IPC分类号: G06F9/52 主分类号: G06F9/52
申请人: 东南大学
发明人: 王璐璐; 李必信; 廖力; 周颖
地址: 211103 江苏省南京市江宁区东山街道万安西路59号
优先权:
专利代理机构: 南京瑞弘专利商标事务所(普通合伙) 32249 代理人: 杨晓玲
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201610577045.4

授权太阳城集团号:

||||||

法律状态太阳城集团日:

2019.04.09|||2017.01.25|||2016.12.28

法律状态类型:

授权|||实质审查的生效|||公开

摘要

本发明公布了一种基于并发控制流图的Java并发程序路径剖析方法,通过分析Java源码中的线程内控制流关系和线程间的联系(包括线程的创建和各类同步关系),构建Java并发控制流图;在Java并发控制流图上实施并发路径剖析算法,并按照算法结果对Java源码进行插桩,使得插桩后的源码在执行过程中能够生成并发程序的路径剖析结果。

权利要求书

1.一种基于并发控制流图的Java并发程序路径剖析方法,其特征在于,该方法包括如
下步骤:
步骤1)从Java并发程序源码中获取各个线程内部的控制流结构和线程之间的并发关
系;
步骤2)首先在各个线程内部的控制流结构的基础之上,按照线程之间的并发关系类
型,对不同的并发元素分别做如下处理,最终构建得到并发控制流图:
a)对于线程创建关系,增加从线程创建节点到被创建线程入口节点的控制流边;
b)对于“通知-阻塞”的线程同步关系,识别同步控制语句,按照每条同步控制语句的含
义,删除线程内部因同步而消失的控制流图结构,增加线程之间因同步而出现的控制流图
结构,使得并发控制流图正确表示线程中每条语句的执行先后次序;
c)对于FutureGet机制的线程同步关系,则在并发控制流图中增加通知节点到被通知
节点的控制流边,并删去被通知节点在线程内部的所有出边;
步骤3)在所述步骤2获得的并发控制流图中实施剖析算法,并将所需探针语句插桩到
原并发程序中,保证插桩后的并发程序在任意的执行情况下,每个线程的执行轨迹均由唯
一的路径编码标识;
步骤4)执行插桩后的程序,在程序执行过程中,通过所插桩的探针语句计算路径编码
并统计路径频率,作为最终的剖析结果。
2.根据权利要求1所述的基于并发控制流图的Java并发程序路径剖析方法,其特征是,
所述步骤3)中所需探针语句使用多个探针变量,在插桩到原并发程序的过程中按照Java线
程ID来动态分配每个线程唯一的探针变量。
3.根据权利要求1或2所述的基于并发控制流图的Java并发程序路径剖析方法,其特征
是,所述步骤3中的所需探针语句根据全路径剖析法计算得到。

说明书

一种基于并发控制流图的Java并发程序路径剖析方法

技术领域

本发明属于动态程序分析领域,涉及一种基于并发控制流图的Java并发程序路径
剖析方法。

背景技术

动态程序分析是基于程序执行的分析技术,所以收集程序的执行太阳城集团是动态分析
方法不可缺少的一部分。为了高效的收集路径的执行太阳城集团,现有技术普遍采用路径编码的
方式,将每条路径映射到一个或一组整数,以快速的判断当前执行的路径是否与已执行的
某条路径相同,方便的进行执行次数的累加。相应的,为了实现路径的编码,在程序执行之
前,首先要对程序进行插桩,在分析程序的控制流图(CFG,control flow graph)的基础上,
在程序的相关位置插入一个或多个探针变量的值操作语句及相关的逻辑控制、探针收集等
语句。这样当程序每一次执行完毕之后,所收集的路径编码计算结果就唯一确定该次执行
的路径。

对于单线程程序,在其控制流分析的基础上,现有的技术可以将每条可执行路径
编码为一个唯一的非负整数或一串唯一的整数集合;为了实现该种路径编码,在程序中插
桩的语句需要随着目标程序的执行而执行,在执行完毕时计算出最终的路径编码。

对于并发程序,传统的剖析方法难以实施的困难主要有二:并发程序增加了线程
的创建、终止和交互机制,导致控制流结构和执行空间都与单线程程序有很大的不同;并发
程序中各个线程交替混合执行,导致探针变量的计算语句也可能发生乱序的情况,难以处
理。

在实际的Java软件中,并发机制的应用较为广泛,多个线程之间的复杂关系会导
致其控制流图执行混乱,因此,针对并发程序的实用剖析方案不可缺少。

发明内容

技术问题:本发明提供一种其中探针计算与路径编码方式能够保证并发程序中每
个线程的执行路径的编码具有唯一性,达到能够精确收集并发程序执行太阳城集团的效果的基于
并发控制流图的Java并发程序路径剖析方法。

技术方案:本发明的基于并发控制流图的Java并发程序路径剖析方法,包括如下
步骤:

步骤1)从Java并发程序源码中获取各个线程内部的控制流结构和线程之间的并
发关系;

步骤2)首先在各个线程内部的控制流结构的基础之上,按照线程之间的并发关系
类型,对不同的并发元素分别做如下处理,最终构建得到并发控制流图:

a)对于线程创建关系,增加从线程创建节点到被创建线程入口节点的控制流边;

b)对于“通知-阻塞”的线程同步关系,识别同步控制语句,按照每条同步控制语句
的含义,删除线程内部因同步而消失的控制流图结构,增加线程之间因同步而出现的控制
流图结构,使得并发控制流图正确表示线程中每条语句的执行先后次序;

c)对于FutureGet机制的线程同步关系,增加通知节点到被通知节点的控制流边,
并被通知节点在线程内部的所有出边;

步骤3)在所述步骤2获得的并发控制流图中实施剖析算法,并将所需探针语句插
桩到原并发程序中,保证插桩后的并发程序在任意的执行情况下,每个线程的执行轨迹均
由唯一的路径编码标识;

步骤4)执行插桩后的程序,在程序执行过程中,通过所插桩的探针语句计算路径
编码并统计路径频率,作为最终的剖析结果。

进一步的,本发明方法中,步骤3)中所需探针语句使用多个探针变量,在插桩到原
并发程序的过程中按照Java线程ID来动态分配每个线程唯一的探针变量。

进一步的,本发明方法中,步骤3中的所需探针语句根据全路径剖析法计算得到。

本发明提出了一种基于并发控制流图的Java并发程序路径剖析方法,主要是在合
并多个线程内部控制流图的基础上,通过分析并发相关代码,增加、删除相应的控制流边,
以构建并发控制流图,进而在并发控制流图的基础上实施路径剖析方法。

有益效果:本发明与现有技术相比,具有以下优点:

(1)现有的路径剖析技术未能构建线程之间的控制流关系,亦缺乏对并发程序中
每个线程的剖析能力。本发明由于增加了对线程间创建关系和同步关系等太阳城集团的处理,构
建了并发控制流图,能够在执行过程中区分每个线程执行过程中和其他线程的不同同步状
态,进而使得所编码的路径太阳城集团能够包含每个线程的创建、执行和终止,保证了准确剖析并
发Java程序的能力。

(2)现有的路径剖析技术普遍采用单变量作为探针变量,导致多个线程的探针语
句执行互相影响,难以区分。本发明方法利用了Java语言的线程ID机制,针对每个线程按照
其线程ID动态分配一个特有的探针变量进行编码计算,各个线程之间的执行过程中的路径
编码操作互不影响,能够处理并发程序中同时执行的多个线程。即使是由同一段代码创建
的不同线程,由于其线程ID不同,故也能够在剖析过程中明确地区分,获取每个线程相应的
剖析结果。

附图说明

图1是本发明的体系结构。

图2是并发控制流图构造中对线程创建关系的处理示意图。

图3是并发控制流图构造中对线程“通知-阻塞”同步关系的处理示意图。

图4是并发控制流图构造中对线程“FutureGet”同步关系的处理示意图。

图5是示例程序对应的单线程控制流图。

图6是针对图5生成的并发控制流图。

具体实施方式

下面结合实施例和说明书附图对本发明作进一步的说明。

技术中的探针计算和路径编码是密不可分的两个部分,路径的编码与插桩的探针
语句相对应,而探针语句又由所插桩的探针语句在目标程序执行过程中计算得出。精确的
路径编码要求任一路径的编码具有唯一性,相应的,不同路径上所执行的的探针语句也必
须计算出不同的变量取值。

本发明方法的基础在于并发控制流图的构建,该图描述了线程内部的控制流关系
和线程之间的同步执行关系;在并发控制流图模型上实施相应的探针插桩方法,该方法保
证了并发执行路径编码的唯一性,并能够简明的得以实现。

一、体系结构

图1给出了本方法的体系结构。下面给出几个主要部分的具体说明。

1并发控制流分析

该部分的功能在于从源代码中获取线程内部的控制流关系和线程之间的同步执
行关系等相关太阳城集团,以应用于探针插桩方法。在本发明中需要的控制流太阳城集团主要包括单个
方法内部的控制流图、方法之间的调用关系以及线程之间的控制流关系。

a)对于线程创建关系,如果存在A线程控制流图中的Ax节点创建了线程B,线程B的
入口节点为B1,那么在并发控制流图中增加控制流边(Ax,B1),如图2所示:图左侧是线程A和
线程B的控制流图以及A对B的创建关系描述,右侧是相应生成的并发控制流图。

b)对于“通知-阻塞”的线程同步关系,通过识别同步控制语句修正并发控制流图。
在“通知-阻塞”中通知节点分为4类:(1)继承自Object基类的notify、notifyAll;(2)
countdown机制的删减语句;(3)条件变量的signal、signalAll;(4)通过Phaser类实现的
arrive通知语句。与通知节点对应的阻塞节点分别为wait,await,await,awaitAdvance。在
并发控制流图中,构建与阻塞语句相对应的通知语句节点到该阻塞语句后续执行节点的控
制流边,同时在线程内部的控制流结构中删除阻塞语句与其后续执行节点的控制流边,如
图3所示(图中含义同图2)。

c)对于FutureGet机制的线程同步关系,如果存在A线程控制流图中的Ax节点调用
了线程B的get()或join()方法,线程B的出口节点为By,那么在并发控制流图中增加控制流
边(By,Ax),并删去A线程控制流图中的Ax节点的出边,如图4所示(图中含义同图2)。

2并发路径剖析算法

在单个过程的控制流中,探针计算方式需要能够区分不同的路径。传统的单线程
路径剖析算法计算方式为:输入控制流图,通过分析控制流图的结构决定如何进行插桩。所
插桩的语句定义了个整数类型的探针变量r,在程序的不同位置插桩r相关的操作语句(即
探针,包含对r的赋值、累加和累乘等操作),使r的值随着程序执行而变化,与路径编码相对
应。

在此基础上,本发明的并发路径剖析算法改进包括两部分:

a)控制流图的改进。有别于传统路径剖析算法以单线程控制流图作为输入,本发
明通过前一步骤生成了并发控制流图,进而在并发控制流图上实施传统的单线程路径剖析
算法,保证单个线程的剖析能够正确完成。

b)插装方式的改进。有别于传统路径剖析算法使用单一变量作为探针变量,本发
明使用的探针变量为一组整数类型的变量ri,对于并发控制流图中的每一个可能执行的线
程使用一个变量作为其探针变量,避免并发机制中的无序执行对探针计算的干扰,保证不
同线程所执行的路径编码互不干涉。

具体的计算方式是:所有探针变量由一个整数类型的变量数组实现;每个线程创
建时,根据线程编号i申请本线程的探针变量ri,并初始化ri;在线程执行过程中,每个线程
的探针语句通过当前线程编号区分,不会互相影响,进而保证整个并发程序的路径剖析能
够正确实施。

3执行与路径编码

对于静态路径有限的控制流图,本发明采用的路径编码方式是:在目标程序执行
之前,枚举所有静态无环路径,并建立每条路径与其编码的一一对应关系表;在每次执行完
毕时,按照所收集的编码查表即可得知所执行的路径。

对于有循环语句、递归调用或循环线程依赖的情况下,静态路径数目无限,无法枚
举。这样在目标程序执行之前,无法列出路径编码与路径的一一对应表。为了从路径编码的
统计结果得出相应的路径执行结果,需要采用现有剖析领域中的路径回溯的方法获取编码
所对应的路径。

在插桩后的代码中,探针语句随着并发程序的执行过程不断计算各个线程的路径
编码,在线程终止及程序终止时,使用的探针变量个数即为所执行的线程数目,每个探针变
量的值即为每个线程执行路径的编码。

二、方法流程

本方法通过对目标程序控制流结构的分析,计算出需要在程序源码中插桩的探
针,然后通过目标程序的执行以收集路径编码,得出最后的执行结果。具体的步骤如下:

步骤1)从程序源码中获取各个线程内部和线程之间的控制结构,构造并发控制流
图;

步骤2)对于并发控制流图实施并发路径剖析算法,计算相应的探针并插桩到程序
源码之中;

步骤3)执行插桩后的程序,并收集相应的路径编码及其频率;

步骤4)由收集到的太阳城集团在并发控制流图上进行回溯,将路径编码转化为路径,以
获取并发路径的执行结果。

实施例:

为了方便描述,我们假定有如下简化的应用实例,目标并发程序的源码如下所示:


该代码功能为:生产者Producer和消费者Comsumer并发执行,Producer向
Container的栈中压入数据,Consumer从Container的栈中取出数据,如果栈满,则Producer
线程等待,如果栈空,则Consumer线程等待。

该程序的单线程中方法内和方法间的控制流结构如图5所示。

按照本发明的并发控制流图构造方法,在图5的基础上做如下修正(参见图6):

1.分析线程创建关系,增加线程创建边:4→28,5→-39;

2.分析线程“通知-阻塞”关系,可知程序中通知节点为16和22,相应的阻塞节点为
20和13,而阻塞节点的后继节点为21和14。因此增加边16→21,22→14,删除边13→14,21→
22。

在并发控制流图上插桩的探针如下(每个线程使用自身ID申请、使用唯一的探针
变量ri):

12→14:ri=ri*2;

22→14:ri=ri*2+1;

19→21:ri=ri*2;

16→21:ri=ri*2+1;

4→28:ri=ri*2;

31→28:ri=ri*2+1;

30→31:ri=ri*2;

16→31:ri=ri*2+1;

5→39:ri=ri*2;

42→39:ri=ri*2+1;

41→42:ri=ri*2;

23→42:ri=ri*2+1。

假设有如下执行过程:



执行过程中依次运行了如下边上的探针(计算后的探针变量的值在括号中):

Producer:(r2=0)4→28(r2=0),12→14(r2=0),16→31(r2=1),31→28(r2=3),
22→14(r2=7),16→31(r2=15)

Consumer:(r3=0)5→39(r3=0),19→21(r3=0),23→42(r3=1),42→39(r3=3),
19→21(r3=6),23→42(r3=13)

相应的路径编码:Producer线程为15,Consumer线程为13。

如果另一次执行过程为:



那么执行过程中依次运行了如下探针:

Producer:(r2=0)4→28(r2=0),12→14(r2=0),16→31(r2=1),31→28(r2=3),
22→14(r2=7),16→31(r2=15)

Consumer:(r3=0)5→39(r3=0),19→21(r3=0),23→42(r3=1),42→39(r3=3),
16→21(r3=7),23→42(r3=15)

相应的路径编码:Producer线程为15,Consumer线程为15。

上述实施例仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术
人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明
权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。

关 键 词:
一种 基于 并发 控制 JAVA 程序 路径 剖析 方法
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
太阳城集团本文
本文标题:一种基于并发控制流图的JAVA并发程序路径剖析方法.pdf
链接地址:http://zh228.com/p-6100717.html
太阳城集团我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
葡京赌场|welcome document.write ('');