一种面向细粒度读写锁的软件自动重构方法及装置制造方法及图纸

技术编号:22329899 阅读:29 留言:0更新日期:2019-10-19 12:14
本发明专利技术公开一种面向细粒度读写锁的软件自动重构方法,特别涉及升级锁、降级锁、写锁、读锁、优化读锁的自动重构方法,其包括:采用别名分析、访问者模式分析和可重入分析等程序分析技术对重构前置条件进行检验;采用负面效应分析对代码块中的读写操作进行分析,形成读写操作序列串;定义用于识别读写操作序列串的有限自动机,并对代码块使用哪一种锁进行推断;在源代码抽象语法树上完成锁的重构,通过一致性检验确保重构前后程序行为的一致性;本发明专利技术实现了从粗粒度同步锁向细粒度读写锁的转换,达到节省程序开发者的工作量、加快程序转换效率的目的,进而帮助开发者了解程序使用哪一种锁的性能较好,本发明专利技术主要用于并发程序的同步管理中。

A software automatic reconfiguration method and device for fine-grained read-write lock

【技术实现步骤摘要】
一种面向细粒度读写锁的软件自动重构方法及装置
本专利技术涉及一种面向细粒度读写锁的软件自动重构方法及装置,其属于计算机软件维护和演化领域。
技术介绍
随着多核处理器的普及和众核处理器的不断发展,并行编程将会被越来越多的普通程序员使用,然而在并行编程过程中经常会出现由于多线程同时访问造成数据竞争问题,因此需要对并发访问的数据进行同步控制,以保证数据访问正确性。锁是目前并行编程领域一种典型的的同步控制方式,在访问前通过加锁保证只有一个线程操作共享数据,访问结束后再进行解锁。目前程序员在使用锁时大多数都趋向于单一的使用粗粒度的同步锁,这种加锁方式虽然简单和易于使用,但可能会影响程序性能,而且在多核时代容易引起锁竞争问题。软件自动重构是不需要程序开发人员手动操作的情况下自动的将程序中的某一结构转换为另一种结构,程序的外部语义没有变化。软件重构在早期主要用于提升软件的可维护性,近几年,将软件重构和并行编程结合除了用于提升软件的可维护性外,还用于对软件内部的并发结构进行转换,提升并行程序的性能。目前面向锁的软件重构方法主要面向对于同步锁和可重入锁展开,对于细粒度读写锁的重构支持不足。
技术实现思路
本专利技术所要解决的技术问题是提供了一种面向细粒度读写锁的软件自动重构方法及装置。为解决上述技术问题,本专利技术采用如下技术方案:一种面向细粒度读写锁的软件自动重构方法,其包括:在重构之前进行前置条件检查,检查并分析是否满足重构的条件;进行锁推断,推断代码块使用读锁、写锁、升级锁、降级锁或优化读锁;在抽象语法树上完成锁的重构转换,对重构前后的程序进行程序行为的一致性检验。进一步的,所述重构的条件包括锁是否具有可重入性、是否包含影响转换的线程通信操作,当锁具有可重入性或者包含线程通信操作时,则不满足重构的条件,否则可以进行重构。进一步的,所述锁是否具有可重入性的分析方法为分别对同步方法和同步块进行操作,具体包括:分别对同步方法和同步块进行操作:在对同步方法分析时,对同步方法中包含的同步块也进行重入性分析;在对同步块进行分析时,对同步块中对同步方法的调用进行重入性分析。进一步的,所述锁是否具有可重入性的分析对象为锁的监视器对象。进一步的,所述重入性分析采用别名分析算法,通过别名分析提升分析的准确性。进一步的,进行锁推断的方法包括:采用负面效应分析方法对代码块中每个语句进行读写操作分析,先生成读写操作序列串,再采用有限自动机对代码块使用升级锁、降级锁、写锁、读锁或优化读锁中的一种锁进行推断。进一步的,先生成读写操作序列串,再采用有限自动机对代码块使用升级锁、降级锁、写锁、读锁或优化读锁中的一种锁进行推断,推断过程具有自动型。进一步的,所述读写操作序列串的生成方法包括:通过负面效应分析方法,分析代码块中每一条语句的读写操作,每一个对静态属性、实例属性和堆内存的写入语句都在操作序列串的结尾加上写操作标志w,每一个对属性或变量进行读操作的语句都在操作序列串的结尾加上读操作标志r,当代码块中还有对其他方法调用的语句时,则需对这些方法进行负面效应分析。进一步的,所述有限自动机对代码块使用升级锁、降级锁、写锁、读锁或优化读锁中的一种锁进行推断的方法包括:针对升级锁、降级锁、写锁、读锁和优化读锁分别定义了相应的有限自动机,即对于写锁,至少包含一个写操作;对于读锁,至少包含一个读操作,后面可跟若干个读操作;对于降级锁,指写锁降级为读锁,对应的自动机为写操作后面跟若干个读操作;对于升级锁,首先判断是否为读操作,然后判断是否存在if语句操作,以及if语句中是否包含写操作;对于优化读锁,判定是否对类的属性进行了读操作。进一步的,在抽象语法树上完成锁的重构转换的方法包括:生成程序源代码的抽象语法树,在抽象语法树上查找目标锁结构,获取该锁结构所在的类,找到后在抽象语法树上进行相应的修改,所做的修改保存在一个change对象中,根据change对象生成重构预览。进一步的,重构转换时,引入要替换锁的包,在当前类中生成锁属性,替换目标锁结构。进一步的,对重构前后的程序进行程序行为的一致性检验的方法包括:采用回归测试的方法对重构前后的程序进行测试。进一步的,对重构前后的程序进行程序行为的一致性检验的方法包括:对重构前和重构后的程序进行分析,分析代码变化的部分,根据一致性检验规则,对重构前后的程序行为的一致性进行检验。进一步的,当重构后的代码中的Boolean、Integer类型的为重用性,或者改变了同步依赖关系时判定违背一致性检验规则。进一步的,所述同步依赖关系的建立依赖于以下4种情况:(1)同步块之间存在嵌套关系;(2)同步方法之间存在调用关系;(3)同步方法中含有同步块;(4)同步块中调用某个同步方法。一种面向细粒度读写锁的软件自动重构装置,其包括前置条件检查组件、软件分析组件、锁推断组件、重构转换组件和重构一致性检验组件,通过前置条件检查组件、锁推断组件、重构转换组件和重构一致性检验组件之间依次数据配合,以及软件分析组件获取程序中锁的相关信息,完成从同步锁到细粒度读写锁的自动重构。进一步的,所述前置条件检查组件,用于在重构之前检查是否满足重构的条件,是否可以进行重构;前置条件检查的内容包括锁是否具有可重入性、是否包含影响转换的线程通信操作;所述软件分析组件,用于获取程序中锁的相关信息,用于对程序代码进行控制流分析、数据流分析、可重入分析、别名分析和/或负面效应分析;进一步的,所述软件分析组件在程序分析开始时将程序源代码转换为有利于程序分析的中间代码表示形式。所述锁推断组件,用于推断代码块使用哪种锁;在锁推断时采用负面效应分析方法对某一个代码块或同步方法中的读写操作进行分析,根据分析结果形成一个读写操作序列,采用有限自动机对读写操作序列进行识别,推断使用读锁、写锁、升级锁、降级锁或优化读锁;所述重构转换组件,用于进行程序转换,转换前生成程序代码的抽象语法树,在抽象语法树上查找目标锁结构,获取该锁结构所在的类,重构转换时,引入要替换锁的包,在当前类中生成锁属性,替换目标锁结构;所述重构一致性检验组件,对重构前后的程序行为进行一致性检验,采用回归测试的方法进行重构前后的程序的测试。本专利技术的有益效果如下:本专利技术支持由同步锁到细粒度读写锁的自动重构转换,可以避免程序员手动重构引入的错误,节省时间。本专利技术可以精准的识别程序中的锁,提供软件分析算法和一致性检验,保证重构的正确性。附图说明为了更清楚地说明本专利技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1为本专利技术的整体框架图。图2为本专利技术中可重入性分析算法的流程图。图3为本专利技术中负面效应分析算法的流程图。图4为本专利技术中基于有限自动机的锁推断方法示意图。图5为本专利技术中重构转换方法的结构原理框图。图6为本专利技术中一致性检验的结构原理框图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚,下面结合图1-图6和具体实施例对本专利技术进行清楚、完整的描述。使用细粒度锁是解决锁竞争问题的方法之一,细粒度锁通常只在需要加锁的位置上进行同本文档来自技高网...

【技术保护点】
1.一种面向细粒度读写锁的软件自动重构方法,其特征在于,包括:在重构之前进行前置条件检查,检查并分析是否满足重构的条件;进行锁推断,推断代码块使用读锁、写锁、升级锁、降级锁或优化读锁;在抽象语法树上完成锁的重构转换,对重构前后的程序进行程序行为的一致性检验。

【技术特征摘要】
1.一种面向细粒度读写锁的软件自动重构方法,其特征在于,包括:在重构之前进行前置条件检查,检查并分析是否满足重构的条件;进行锁推断,推断代码块使用读锁、写锁、升级锁、降级锁或优化读锁;在抽象语法树上完成锁的重构转换,对重构前后的程序进行程序行为的一致性检验。2.根据权利要求1所述的一种面向细粒度读写锁的软件自动重构方法,其特征在于,所述重构的条件包括锁是否具有可重入性、是否包含影响转换的线程通信操作,当锁具有可重入性或者包含线程通信操作时,则不满足重构的条件,否则可以进行重构。3.根据权利要求2所述的一种面向细粒度读写锁的软件自动重构方法,其特征在于,所述锁是否具有可重入性的分析方法为分别对同步方法和同步块进行操作,具体包括:分别对同步方法和同步块进行操作:在对同步方法分析时,对同步方法中包含的同步块也进行重入性分析;在对同步块进行分析时,对同步块中对同步方法的调用进行重入性分析。4.根据权利要求1所述的一种面向细粒度读写锁的软件自动重构方法,其特征在于,进行锁推断的方法包括:采用负面效应分析方法对代码块中每个语句进行读写操作分析,先生成读写操作序列串,再采用有限自动机对代码块使用升级锁、降级锁、写锁、读锁或优化读锁中的一种锁进行推断。5.根据权利要求4所述的一种面向细粒度读写锁的软件自动重构方法,其特征在于,所述读写操作序列串的生成方法包括:通过负面效应分析方法,分析代码块中每一条语句的读写操作,每一个对静态属性、实例属性和堆内存的写入语句都在操作序列串的结尾加上写操作标志w,每一个对属性或变量进行读操作的语句都在操作序列串的结尾加上读操作标志r,当代码块中还有对其他方法调用的语句时,则需对这些方法进行负面效应分析。6.根据权利要求4所述的一种面向细粒度读写锁的软件自动重构方法,其特征在于,所述有限自动机对代码块使用升级锁、降级锁、写锁、读锁或优化读锁中的一种锁进行推断的方法包括:针对升级锁、降级锁、写锁、读锁和优化读锁分别定义了相应的...

【专利技术属性】
技术研发人员:张杨
申请(专利权)人:河北科技大学
类型:发明
国别省市:河北,13

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1