CN104199649B - 一种用于父子进程间交互信息的路径剖析方法 - Google Patents
一种用于父子进程间交互信息的路径剖析方法 Download PDFInfo
- Publication number
- CN104199649B CN104199649B CN201410419011.3A CN201410419011A CN104199649B CN 104199649 B CN104199649 B CN 104199649B CN 201410419011 A CN201410419011 A CN 201410419011A CN 104199649 B CN104199649 B CN 104199649B
- Authority
- CN
- China
- Prior art keywords
- path
- subprocess
- program
- parent process
- father
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 197
- 230000008569 process Effects 0.000 title claims abstract description 144
- 230000002452 interceptive effect Effects 0.000 title claims abstract description 8
- 238000004458 analytical method Methods 0.000 claims abstract description 18
- 238000012360 testing method Methods 0.000 claims description 6
- 230000010354 integration Effects 0.000 claims description 3
- 230000003068 static effect Effects 0.000 claims description 3
- 210000003484 anatomy Anatomy 0.000 abstract description 7
- 238000005516 engineering process Methods 0.000 abstract description 7
- 230000003993 interaction Effects 0.000 abstract description 7
- 230000035515 penetration Effects 0.000 abstract description 2
- 230000007812 deficiency Effects 0.000 abstract 1
- 238000004891 communication Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 239000000523 sample Substances 0.000 description 2
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000008846 dynamic interplay Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种用于父子进程间交互信息的路径剖析方法,主要用于处理子进程与父进程产生交互情况下进行路径剖析的问题。路径剖析技术可以为程序提供一个用来对程序运行时的动态行为的分析理解的方法,提供对程序的不足进行针对性分析的切入点。本发明通过将父进程与子进程进行分离形成对两段程序的不同程度的剖析,分别通过对父子进程中获取主要路径信息,进而将子进程中获取的路径信息提供给父进程,将程序路径信息进行有效的整合,形成了对程序中路径的整体运行信息的记录,能够将父进程与子进程的运行关系信息明确的表示出来,提高了路径剖析方法的使用范围。
Description
技术领域
本发明属于程序路径剖析领域,涉及一种程序路径剖析的解决方案,特别涉及一种用于解决在父子进程间程序动态的交互路径剖析问题的方法。
背景技术
路径剖析(Path Profiling)技术是一种重要的动态分析技术,用于帮助了解在计算机构架,程序编译、调试和测试中的程序动态行为特征。通常一个程序的性能与该程序运行时所执行的方法路径直接相关,而路径剖析技术通过收集程序中路径执行频率的方法,提供了一个可以用来指引软件分析、理解和改进,还可以对特定的路径进行针对性的分析的切入点。路径剖析不仅仅是对程序的集合行为的分析,更注重对程序的动态流程图分析。通过这些路径,在计算机构架,程序编译中提供一种提高性能的方法,同时程序员或者编译器能够通过优化频繁执行的路径而使程序的运行速度更快。
对于大型的复杂***,例如操作***、数据库,通过将大量执行的路径进行改进,可以将性能提升。对于编译器,跟踪调度和基于路径的编译,已证明程序的优化可以通过控制程序的动态流程中获益,在计算机的构架设计中也可以用来提高指令的高速缓存和执行的效率。
路径剖析度量了程序中执行路径的频率和成本,是理解一个程序的控制流程的重要技术。然而,当前的路径剖析技术主要可以剖析单个程序的路径,对于带有子进程的程序中产生交互情况的路径难以处理,没有提供一个有效地处理方法。如果不能有效识别程序内的问题路径位置则难以提高软件的性能。
对于一个程序的路径剖析包括以下需求:(1)能够分析无环状和过程内路径的情况;(2)能够表示程序执行过程的循环;(3)剖析程序的流程,同时在程序执行的流程中保持路径信息的精确性。通过剖析结果,可以使研究者将注意力放在可以提升程序性能的地方进行改进。
发明内容
技术问题:本发明的目的是提供一种用来解决子进程的路径剖析问题,在考虑对于程序产生子进程情况下对父子进程交互情况进行分析,可以达到对父子进程交互情况进行路径剖析的用于父子进程间交互信息的路径剖析方法。
技术方案:本发明的用于父子进程间交互信息的路径剖析方法,包括如下步骤:
步骤1)对指定的测试程序进行静态分析,确定程序中的父进程部分与子进程部分;
步骤 2)对所述测试程序的子进程部分进行切片处理,将子进程部分切出,得到测试程序的父进程部分和子进程部分,并将父进程部分改变为单进程程序,然后获取父进程的控制流图和子进程的控制流图;
步骤 3)对父进程使用Efficient路径剖析方法进行分析,具体为:选取父进程控制流图中要剖析的路径作为关键路径,对所述关键路径进行插桩;
步骤 4)对子进程的控制流图进行分析,将分析得到的路径信息以树形结构传递给父进程;
步骤 5)将父进程与子进程的插桩映射到测试程序的相应代码段中,然后对测试程序中的父进程和子进程路径信息进行异步处理;
步骤 6)父进程接收到子进程的路径剖析信息后进行消息整合,具体为:根据所述步骤3)的分析结果,确定当前父进程中的路径ID,以所述路径ID作为根节点连接子进程中路径信息,形成完整路径信息。
本发明的优选方案中,步骤4)中,对子进程的控制流图进行分析的具体方法为:选取子进程控制流图中要剖析的路径作为关键路径,使用k-BLPP方法行插桩。
本发明的优选方案中,步骤 5)的异步处理中,父子进程的管道为单向管道,以子进程为写端,父进程为读端,数据由子进程发送到父进程。
本发明方法强调对父子进程交互中程序路径的分析,分别通过对父进程与子进程两个进程间的路径剖析的整合,通过解析路径剖析的结果,可以有效的对父子进程间的交互关系进行识别。在程序中分离出父子进程的代码段,通过对两种类型进程的关键路径进行剖析,利用进程间的通信机制来完成对父子进程间交互行为的路径剖析。
有益效果:本发明方法与现有其他路径剖析方法相比较,具有以下优点:
(1)目前的剖析方法主要关注于单进程的程序如何进行路径剖析,在剖析过程中没有考虑在软件为多进程情况下,只能够进行一段或单进程程序的路径剖析。如何对多进程程序的路径进行剖析,现有方法并不能解决。本发明方法提供了对父子进程的路径进行先分离后组合的方法,有效的解决对多进程的路径剖析问题。
(2)以目前的路径剖析方法对父子进程的程序进行剖析,只能得到单一的父子进程信息,剖析出的路径信息中没有父子进程的关联性。对于父子进程情况下,不能够表示出父子进程间的路径关系。本发明采用了对子进程进行分析后将信息传送个父进程中,在父进程中整体记录的方法,解决了使父子进程中路径的剖析信息关联的问题,能够记录程序父子进程在交互过程中所产生的路径信息,提高了路径剖析方法的适用范围。
(3)提供对父子路径剖析信息的记录使用树形数据结构,使得路径信息能够清晰的表明路径关联情况,父子进程路径剖析结果的具有紧凑性,避免了其他方法中对多进程程序路径信息的遗漏或不能将父子进程的路径剖析信息有效的联合在一起的问题,有利于程序开发者或使用者理解程序的动态行为。提升了对父子进程交互情况下的路径定位能力。
附图说明
图1表示对父子进程剖析方法关键过程流程图;
图2是父子进程运行时的时间特性分析;
图3是本发明所要分析的程序的控制流图;
图4表示在控制流图中插桩后在父进程的插桩位置以及完成插桩后每条路径所对应的路径ID;
图5表示在控制流图中插桩后在子进程的插桩位置以及完成插桩后每条路径段所对应的路径ID;
图6表示在控制流图中插桩后在父进程的插桩位置以及完成插桩后每条路径所对应的路径ID。
具体实施方式
下面结合实施例对本发明的技术方案进行更详细说明:
体系结构
图1给出了对父子进程路径剖析技术过程中的关键流程图,在剖析过程中包括父关键路径、子路径、管道通信、信号量、k-BLPP。
下面给出几个主要概念的具体说明:
父路径:对于父路径的概念是建立在父进程的概念之上,父进程指已创建一个或多个子进程的进程。父路径表示程序从开始到结束过程中的执行流程,父关键路径的执行时间需要排除等待子进程执行结束的时间。对父进程而言,一个进程可以有多个子进程,因本方法将路径信息整合到父路径中,在剖析路径时,需明确区分父子进程路径。
子路径:子路径是指对子进程的路径剖析,子进程指的是由另一进程(对应称之为父进程)所创建的进程。子进程继承了对应的父进程的大部分属性,如文件描述符。在Unix中,子进程通常为***调用fork的产物。在此情况下,子进程一开始就是父进程的副本,而在这之后,根据具体需要,子进程可以借助exec调用来链式加载另一程序。
关键路径:指从开始到结束程序连续的执行过程中,排除程序中非关键事物处理的路径,关键路径为对程序影响较大或分析人员感兴趣的路径。
插桩:在保证被测程序原有逻辑完整的基础上在程序中***一些探针,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。
管道通信:管道用于有亲缘关系进程间的通信。进程在创建子进程前先创建一个管道,用于父子进程间通信,创建子进程,之后父进程关闭写端,子进程关闭读端;这样子进程就可以向管道写数据,而父进程从另一端读出数据。
信号量:信号量是用于保证唤醒处于等待状态的父进程的一个消息,确保在形成路径信息时不会丢失子进程的剖析结果。
k-Ball-Larus Path Profiling(k-BLPP)方法:该方法的剖析过程主要包括两个阶段:第一阶段,将控制流图中的路径使用Ball-Larus path profiling编码方法对每一条路径进行唯一编码ID;第二阶段,使用第一阶段中生成的路径ID对程序中一个路径的运行流进行可区分标识,用来构建一个数据结构用来跟踪记录每一个片段路径的执行次数,进而将路径剖析结果生成一个前缀森林,k是一个用户定义的参数。
本发明方法利用基于程序转换的控制流图,然后根据控制流图进行后继操作。所使用实施例的控制流图如图3所示。
(1)对指定的测试程序进行静态分析,定位程序中子进程代码的起始位置与结束位置,确定程序中的父进程部分与子进程部分;
(2)由所确定的父子进程两部分,对测试程序进行切片方法处理,程序切片方法是一种用于分解程序的程序分析技术,原理和方法由M.Weiser于1979年在博士论文中建立。具体处理过程为:根据程序中产生子进程的特征语句,作为切片的初始边界,子进程的结束语句处为切片的结束边界,划定子进程的边界后,将识别出的子进程部分切出,得到测试程序的父进程部分和子进程部分。将父进程部分改变为单进程程序,然后获取父进程的控制流图和子进程的控制流图,如图3,以子进程的边界确定父进程的控制流图及子进程的控制流图;
(3)对父进程中关键路径进行记录,使用的方法为Efficient路径剖析方法进行分析。Efficient路径剖析方法为Thomas Ball于1996年在IEEE会议中提出的一种路径剖析方法,用于对程序路径执行频率的分析。其具体流程为:获取程序的控制流图中顶点与边关系,使用算法生成各条边相应的值,对使用插桩算法完成对控制流图的插桩。本发明中具体过程为:选取父进程控制流图中要剖析的路径作为关键路径,对所述关键路径进行插桩;插桩结束后对每一条关键路径有相应的数字编码对应,表示该路径ID;每条关键路径有唯一编码。
对父进程插桩效果如图4;在父进程中剖析结果以数组形式记录;程序运行中得到所执行程序路径,对程序多次运行可得到关键路径执行频率;在父进程中每次路径运行后以头结点形式指向当前路径结点,为该部分父进程所对应子进程剖析结果的头结点。
(4)对子进程的控制流图进行分析,使用k-BLPP的方法为程序进行插桩,具体过程为:选取控制流图中要剖析的路径作为关键路径。对关键路径进行插桩,该方法中提供了一种构造算法,输入新添加的路径流,将该路径流根据插桩信息进行分段后,可将该路径流以森林的形式输出,名为k-SF,添加虚拟节点构成树形结构;
(5)将在父进程与子进程的插桩还原到测试程序的相应代码段中,然后对测试程序中的父进程和子进程路径信息进行异步处理;
根据本发明中进程间通信信息的有向性,建立管道用于进程间的通信,本发明中只需要建立一个半双工管道即可,能用于父子进程之间;设置子进程为写端,父进程为读端,将剖析数据由子进程向管道中写入,被管道另一端的父进程读出。
由于被测程序父子进程的运行时间的不确定性,对父子进程中插桩完成后添加对程序路径信息的异步管理,当父进程剖析结束后,因为两段进程运行耗时不一定相同的原因,子进程可能不能够及时运行结束,子进程可能存在以下两种情况:
a)当父进程剖析结束后,子进程的剖析信息已经得到,父进程可直接将子进程路径剖析信息添加到父进程的剖析信息;
b)当父进程剖析结束后,子进程的剖析信息尚未得到,此时父进程需对子进程路径剖析信息进行等待;
结合以上两种情况,可使用管道通信方式,为父进程中设置阻塞标志,父进程路径剖析结束后设置阻塞标志,等待子进程信息写入。待子进程路径剖析信息写入后可对阻塞标志重置等待下次写入。
(6)将由子进程剖析结果中所得得到的树形结构的路径信息传递给父进程,父进程接收到子进程的路径剖析信息后进行消息,形成完整路径信息,路径信息的数据结构如图5;处理步骤为:
a)根据当前父进程路径中剖析路径的剖析结果,获取父进程中路径ID并记录;
b)由父进程中当前路径ID判断将子路径信息到附加到父进程中当前路径信息下,在每一父进程路径下形成子进程的初始的路径信息;
c)将父进程下的子进程路径信息转化为KIPT树;数据结构如附图6
转化算法如下
procedure make_KIPT():
1: I ← ∅
2: for each node ρ ∈ k-SF do
3: if ℓ(ρ) ∈ I then
4: add ℓ(ρ) to I and let s(ℓ(ρ)) ←∅
5: end if
6: add ρ to s(ℓ(ρ))
7: end for
8: 使树 k-IPT 以父进程ID:r为根节点
9: for each r ∈ I do
10: for each ρ∈ s(r) do
11: join_subtree(ρ, φ, k)
12: end for
13: end for
procedure join_subtree(ρ, γ, d):
1: δ ← child of γ in the k-IPT s.t. ℓ(δ) = ℓ(ρ)
2: if δ = null then
3: add new node δ as a child of γ in the k-IPT
4: ℓ(δ) ← ℓ(ρ) and counter(δ) ← counter(ρ)
5: else
6: counter (δ) ← counter (δ) + counter (ρ)
7: end if
8: if d > 0 then
9: for each child σ of ρ in the k-SF do
10: join_subtree(σ, δ, d − 1)
11: end for
12: end if
集合s(ℓ(ρ))表示在k-SF中的以ℓ(ρ)标记的点ρ的集合;ℓ(ρ)表示对ρ节点的标识;counter (ρ)表示以包含ρ节点的计数器。
上述实施例仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。
Claims (3)
1.一种用于父子进程间交互信息的路径剖析方法,其特征在于,该方法包括如下步骤:
步骤1)对指定的测试程序进行静态分析,确定程序中的父进程部分与子进程部分;
步骤 2)对所述测试程序的子进程部分进行切片处理,将子进程部分切出,得到测试程序的父进程部分和子进程部分,并将父进程部分改变为单进程程序,然后获取父进程的控制流图和子进程的控制流图;
步骤 3)对父进程使用Efficient路径剖析方法进行分析,具体为:选取父进程控制流图中要剖析的路径作为关键路径,对所述关键路径进行插桩;
步骤 4)对子进程的控制流图进行分析,将分析得到的路径信息以树形结构传递给父进程;
步骤 5)将父进程与子进程的插桩映射到测试程序的相应代码段中,然后对测试程序中的父进程和子进程路径信息进行异步处理;
步骤 6)父进程接收到子进程的路径剖析信息后进行消息整合,具体为:根据所述步骤3)的分析结果,将插桩获取的关键路径编码作为当前父进程中的路径ID,以所述路径ID作为根节点连接子进程中路径信息,形成完整路径信息。
2.根据权利要求1所述的用于父子进程间交互信息的路径剖析方法,其特征在于,所述步骤4)中,对子进程的控制流图进行分析的具体方法为:选取子进程控制流图中要剖析的路径作为关键路径,使用k-BLPP方法行插桩。
3.根据权利要求1或2所述的用于父子进程间交互信息的路径剖析方法,其特征在于,所述步骤 5)的异步处理中,父子进程的管道为单向管道,以子进程为写端,父进程为读端,数据由子进程发送到父进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410419011.3A CN104199649B (zh) | 2014-08-22 | 2014-08-22 | 一种用于父子进程间交互信息的路径剖析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410419011.3A CN104199649B (zh) | 2014-08-22 | 2014-08-22 | 一种用于父子进程间交互信息的路径剖析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104199649A CN104199649A (zh) | 2014-12-10 |
CN104199649B true CN104199649B (zh) | 2017-04-05 |
Family
ID=52084946
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410419011.3A Expired - Fee Related CN104199649B (zh) | 2014-08-22 | 2014-08-22 | 一种用于父子进程间交互信息的路径剖析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104199649B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055397B (zh) * | 2016-05-30 | 2019-09-27 | 新浪网技术(中国)有限公司 | 一种锁的控制方法及装置 |
CN108334404B (zh) * | 2017-01-20 | 2022-02-22 | 腾讯科技(深圳)有限公司 | 应用程序的运行方法和装置 |
WO2022178889A1 (zh) * | 2021-02-27 | 2022-09-01 | 华为技术有限公司 | 函数调用上下文的编码、解码方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6072951A (en) * | 1997-10-15 | 2000-06-06 | International Business Machines Corporation | Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure) |
CN101963907A (zh) * | 2010-10-14 | 2011-02-02 | 中国科学技术大学苏州研究院 | 一种计算机程序热点的动态剖析机制 |
CN103399741A (zh) * | 2013-07-24 | 2013-11-20 | 中国科学院声学研究所 | 一种汇编级静态路径剖析方法及装置 |
-
2014
- 2014-08-22 CN CN201410419011.3A patent/CN104199649B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6072951A (en) * | 1997-10-15 | 2000-06-06 | International Business Machines Corporation | Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure) |
CN101963907A (zh) * | 2010-10-14 | 2011-02-02 | 中国科学技术大学苏州研究院 | 一种计算机程序热点的动态剖析机制 |
CN103399741A (zh) * | 2013-07-24 | 2013-11-20 | 中国科学院声学研究所 | 一种汇编级静态路径剖析方法及装置 |
Non-Patent Citations (2)
Title |
---|
全路径剖析方法;王璐璐 等;《软件学报》;20120615(第06期);1413-1428 * |
过程间循环路径剖析方法;王璐璐 等;《计算机学报》;20131115(第11期);2224-2234 * |
Also Published As
Publication number | Publication date |
---|---|
CN104199649A (zh) | 2014-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112699377B (zh) | 基于切片属性图表示学习的函数级代码漏洞检测方法 | |
McPhillips et al. | YesWorkflow: a user-oriented, language-independent tool for recovering workflow information from scripts | |
CN104503917B (zh) | 基于数据流函数调用路径的变更影响域分析方法及*** | |
CN106649100A (zh) | 一种自动化测试方法及*** | |
CN103116540B (zh) | 基于全局超级块支配图的动态符号执行方法 | |
CN104850411B (zh) | 存储***基准评测程序生成方法及装置 | |
CN102750223B (zh) | 一种基于面向对象程序切片谱的错误定位方法 | |
CN104199649B (zh) | 一种用于父子进程间交互信息的路径剖析方法 | |
CN102968375B (zh) | 基于关联规则挖掘的不可达路径检测方法 | |
CN109614980A (zh) | 一种基于半监督广域迁移度量学习的小样本目标识别方法 | |
CN106708739A (zh) | 基于扩展状态机模型的Web服务测试用例生成方法及*** | |
CN106547520A (zh) | 一种代码路径分析方法及装置 | |
CN103914379A (zh) | 故障自动注入与故障检测的方法及其*** | |
Bansal et al. | Holist: An environment for machine learning of higher-order theorem proving (extended version) | |
CN108228187A (zh) | 一种数值程序的全局优化方法 | |
CN112765031A (zh) | 一种群智化漏洞挖掘任务的分解方法 | |
CN115617395A (zh) | 一种融合全局和局部特征的智能合约相似性检测方法 | |
CN116523284A (zh) | 基于机器学习的业务操作流程自动化评估方法、*** | |
CN104915680A (zh) | 基于改进型rbf神经网络的多标签蜕变关系预测方法 | |
CN103744788A (zh) | 基于多源软件数据分析的特征定位方法 | |
CN106294136A (zh) | 并行程序运行期间性能变化的在线检测方法和*** | |
CN116578336A (zh) | 一种基于抄袭者-检测器对抗的软件克隆检测方法 | |
CN102567845B (zh) | 组合服务演化中运行实例的在线迁移方法及设备 | |
CN109471798A (zh) | 一种音乐技能模块的自动化测试***及其测试方法 | |
Qian et al. | A strategy for multi-target paths coverage by improving individual information sharing |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170405 |