【技术实现步骤摘要】
一种操作系统死锁静态检测方法及相关设备
[0001]本专利技术涉及计算机软件测试
,尤其涉及一种操作系统死锁静态检测方法及相关设备。
技术介绍
[0002]计算机软件测试是发现软件缺陷、保证软件正常运行的重要步骤,而死锁是软件中一种常见的并发程序缺陷,易导致进程进程/线程异常挂起、资源利用率降低、甚至系统崩溃等问题。业界普遍采用动态分析方法检测并发程序中的死锁缺陷,通过对被测程序代码进行插桩,在程序运行时发现被测程序代码的死锁缺陷,动态分析方法在死锁缺陷检测上的误报率较低,但是其严重依赖于用户提供的测试用例,存在代码覆盖率低和漏报率高的问题,难以发现不常被执行的程序代码中的死锁缺陷。
[0003]为了解决动态分析方法所存在的问题,业界一些研究者提出了对被测程序代码进行静态检测的方法,且在应用程序的死锁缺陷检测上取得了一定效果。但是,由于应用程序和操作系统(如Linux系统)在代码特征和执行上有着较大差异,目前的静态检测方法难以准确有效地检测出操作系统的死锁缺陷,导致死锁缺陷检测存在大量误报情况。
技术实现思路
[0004]本申请实施例提供了一种操作系统死锁静态检测方法及相关设备,有利于减少操作系统死锁缺陷检测的误报情况。
[0005]第一方面,本申请实施例提供一种操作系统死锁静态检测方法,该方法包括:
[0006]对操作系统内核的函数进行基于变量间的别名关系的锁集分析,得到锁集序列集合;
[0007]对锁集序列集合进行回环检测,得到至少一个潜在死锁缺陷;
...
【技术保护点】
【技术特征摘要】
1.一种操作系统死锁静态检测方法,其特征在于,所述方法包括:对操作系统内核的函数进行基于变量间的别名关系的锁集分析,得到锁集序列集合;对所述锁集序列集合进行回环检测,得到至少一个潜在死锁缺陷;对所述至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测和/或并发性检测,以得到所述操作系统内核的死锁缺陷检测结果。2.根据权利要求1所述的方法,其特征在于,所述死锁缺陷检测结果包括死锁缺陷集合,所述对所述至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测,以得到所述操作系统内核的死锁缺陷检测结果,包括:对于所述至少一个潜在死锁缺陷中的任一个潜在死锁缺陷A,基于所述别名关系对所述潜在死锁缺陷A的代码路径中的每条代码路径进行可达性检测,得到所述每条代码路径的可达性检测结果;当所述潜在死锁缺陷A的每条代码路径的可达性检测结果均表示该代码路径具备可达性时,将所述潜在死锁缺陷A放入所述死锁缺陷集合。3.根据权利要求1所述的方法,其特征在于,所述死锁缺陷检测结果包括死锁缺陷集合,当所述至少一个潜在死锁缺陷中的任一个潜在死锁缺陷A的代码路径的数量大于或等于2条时,所述对所述至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行并发性检测,以得到所述操作系统内核的死锁缺陷检测结果,包括:对所述潜在死锁缺陷A的代码路径中的两两代码路径进行并发性检测,得到并发性检测结果;当所述并发性检测结果表示所述潜在死锁缺陷A的代码路径中的两两代码路径均具有并发性时,将所述潜在死锁缺陷A放入所述死锁缺陷集合。4.根据权利要求1所述的方法,其特征在于,所述死锁缺陷检测结果包括死锁缺陷集合,当所述至少一个潜在死锁缺陷中的任一个潜在死锁缺陷A的代码路径的数量大于或等于2条时,所述对所述至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测和并发性检测,以得到所述操作系统内核的死锁缺陷检测结果,包括:基于所述别名关系对所述潜在死锁缺陷A的代码路径中的每条代码路径进行可达性检测,得到所述每条代码路径的可达性检测结果;对所述潜在死锁缺陷A的代码路径中的两两代码路径进行并发性检测,得到并发性检测结果;当所述潜在死锁缺陷A的每条代码路径的可达性检测结果均表示该代码路径具备可达性,且所述并发性检测结果表示所述潜在死锁缺陷A的代码路径中的两两代码路径均具有并发性时,将所述潜在死锁缺陷A放入所述死锁缺陷集合。5.根据权利要求1
‑
4任一项所述的方法,其特征在于,所述对操作系统内核的函数进行基于变量间的别名关系的锁集分析,得到锁集序列集合,包括:对所述操作系统内核的源代码进行编译,得到所述操作系统内核的中间字节码文件,并记录所述中间字节码文件中的所述函数的基本信息;利用所述函数的基本信息对所述函数进行流敏感分析和过程间分析,得到所述函数的代码路径,所述函数的代码路径包括所述每个潜在死锁缺陷的代码路径;对所述函数的代码路径中的变量进行别名分析,得到所述别名关系;
基于所述别名关系对所述函数的代码路径进行锁集分析,得到所述锁集序列集合。6.根据权利要求5所述的方法,其特征在于,所述基于所述别名关系对所述函数的代码路径进行锁集分析,得到所述锁集序列集合,包括:遍历所述函数的代码路径,将所述函数的代码路径中的加锁函数对应的锁变量加入锁集合中;基于所述锁集合中的锁变量,得到锁获取的依赖关系,所述变量包括所述锁集合中的锁变量;基于所述别名关系和所述依赖关系得到所述锁集序列集合。7.根据权利要求6所述的方法,其特征在于,所述方法还包括:将所述函数的代码路径中的解锁函数对应的锁变量从所述锁集合中删除。8.根据权利要求6所述的方法,其特征在于,所述基于所述别名关系和所述依赖关系得到所述锁集序列集合,包括:基于所述别名关系和所述依赖关系得到多个锁集序列;对初始锁集序列集合中的锁集序列进行基于字段的别名分析,识别带有相同锁变量的至少两个锁集序列,所述初始锁集序列集合中的锁集序列是根据所述多个锁集序列得到的;将所述至少两个锁集序列组合为目标锁集序列;采用所述目标锁集序列对所述初始锁集序列集合进行更新,得到所述锁集序列集合。9.根据权利要求8所述的方法,其特征在于,所述相同锁变量为结构体类型相同且成员变量相同的锁变量。10.根据权利要求1
‑
9任一项所述的方法,其特征在于,所述对所述锁集序列集合进行回环检测,得到至少一个潜在死锁缺陷,包括:将所述锁集序列集合中的锁集序列拆分为多个锁集子序列,所述多个锁集子序列中的每个锁集子序列包括两个具有依赖关系的锁变量;根据所述多个锁集子序列对所述锁集序列集合进行回环检测,得到所述至少一个潜在死锁缺陷。11.根据权利要求2或4所述的方法,其特征在于,所述别名关系包括对所述每条代码路径中的变量进行别名分析得到的目标别名关系,所述每条代码路径中包括对多个结构体成员变量的操作,所述基于所述别名关系对所述潜在死锁缺陷A的代码路径中的每条代码路径进行可达性检测,得到所述每条代码路径的可达性检测结果,包括:为所述多个结构体成员变量中结构体类型相同且满足所述目标别名关系的结构体成员变量创建相同的第一条件变量;为所述多个结构体成员变量中结构体类型相同但成员变量不同的结构体成员变量创建不同的第二条件变量;采用所述第一条件变量和/或所述第二条件变量创建条件约束表达式;若所述每条代码路径中对所述多个结构体成员变量的操作均满足所述条件约束表达式,则确定该代码路径具备可达性;若所述每条代码路径中对所述多个结构体成员变量中的任一个结构体成员变量的操作不满足所述条件约束表达式,则确定该代码路径不具备可达性。
12.根据权利要求3或4所述的方法,其特征在于,所述对所述潜在死锁缺陷A的代码路径中的两两代码路径进行并发性检测,得到并发性检测结果,包括:获取所述两两代码路径分别对应的两个函数调用栈;若所述两个函数调用栈表示所述两两代码路径是从同一个函数开始执行的,则确定所述两两代码路径不具有并发性;若所述两个函数调用栈存在调用关系,则确定所述两两代码路径不具有并发性;若所述两个函数调用栈表示所述两两代码路径不是从同一个函数开始执行的,且所述两个函数调用栈不存在调用关系,则确定所述两两代码路径具有并发性。13.根据权利要求5
‑
9任一项所述的方法,其特征在于,所述方法还包括:若对所述函数进行流敏感分析的深度大于或等于预设深度,或者,对所述函数进行流敏感分析的时间大于或等于预设时间,则停止对所述函数进行流敏感分析;若对所述函数进行过程间分析的深度大于或等于预设深度,或者,对所述函数进行过程间分析的时间大于或等于预设时间,则停止对所述函数进行过程间分析。14.一种操作系统死锁静态检测装置,其特征在于,所述装置包括获取单元和处理单元,其中,所述获取单元,用于对操作系统内核的函数进行基于变量间的别名关系的锁集分析,得到锁集序列集合;所述处理单元,用于对所述锁集序列集合进行回环检测,得到至少一个潜在死锁缺陷;所述处理单元,还用于对所述至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测和/或并发性检测,以得到所述操作系统内核的死锁缺陷检测结果。15.根据权利要求14所述的装置,其特征在于,...
【专利技术属性】
技术研发人员:白家驹,李拓,王岳兴,李杨,贾宁,
申请(专利权)人:清华大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。