当前位置: 首页 > 专利查询>清华大学专利>正文

一种操作系统死锁静态检测方法及相关设备技术方案

技术编号:37630591 阅读:13 留言:0更新日期:2023-05-20 08:51
本发明专利技术实施例公开了一种操作系统死锁静态检测方法及相关设备,其中,该操作系统死锁静态检测方法包括:对操作系统内核的函数进行基于变量间的别名关系的锁集分析,得到锁集序列集合;对锁集序列集合进行回环检测,得到至少一个潜在死锁缺陷;对至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测和/或并发性检测,以得到操作系统内核的死锁缺陷检测结果。本申请实施例有利于减少操作系统死锁缺陷检测的误报情况。作系统死锁缺陷检测的误报情况。作系统死锁缺陷检测的误报情况。

【技术实现步骤摘要】
一种操作系统死锁静态检测方法及相关设备


[0001]本专利技术涉及计算机软件测试
,尤其涉及一种操作系统死锁静态检测方法及相关设备。

技术介绍

[0002]计算机软件测试是发现软件缺陷、保证软件正常运行的重要步骤,而死锁是软件中一种常见的并发程序缺陷,易导致进程进程/线程异常挂起、资源利用率降低、甚至系统崩溃等问题。业界普遍采用动态分析方法检测并发程序中的死锁缺陷,通过对被测程序代码进行插桩,在程序运行时发现被测程序代码的死锁缺陷,动态分析方法在死锁缺陷检测上的误报率较低,但是其严重依赖于用户提供的测试用例,存在代码覆盖率低和漏报率高的问题,难以发现不常被执行的程序代码中的死锁缺陷。
[0003]为了解决动态分析方法所存在的问题,业界一些研究者提出了对被测程序代码进行静态检测的方法,且在应用程序的死锁缺陷检测上取得了一定效果。但是,由于应用程序和操作系统(如Linux系统)在代码特征和执行上有着较大差异,目前的静态检测方法难以准确有效地检测出操作系统的死锁缺陷,导致死锁缺陷检测存在大量误报情况。

技术实现思路

[0004]本申请实施例提供了一种操作系统死锁静态检测方法及相关设备,有利于减少操作系统死锁缺陷检测的误报情况。
[0005]第一方面,本申请实施例提供一种操作系统死锁静态检测方法,该方法包括:
[0006]对操作系统内核的函数进行基于变量间的别名关系的锁集分析,得到锁集序列集合;
[0007]对锁集序列集合进行回环检测,得到至少一个潜在死锁缺陷;
[0008]对至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测和/或并发性检测,以得到操作系统内核的死锁缺陷检测结果。
[0009]本申请实施例中,应理解,操作系统内核的代码中存在大量别名关系,利用操作系统内核的函数变量间的别名关系进行锁集分析,有利于提升锁集分析的准确性,示例性的,比如可将重复获取到的锁集序列删除、可将具有相同锁变量的锁集序列重新组合,从而使得锁集序列集合中的锁集序列的准确度更高,对准确度更高的锁集序列集合进行回环检测,有利于得到准确度更高的潜在死锁缺陷。另外,由于操作系统内核的代码中有大量条件语句,且并非所有操作系统内核的代码都可以并发执行,基于这些特性对每个潜在死锁缺陷的代码路径进行可达性检测和/或并发性检测,有利于对代码路径中的条件语句进行验证,得到可达性检测结果,和/或对每个潜在死锁缺陷的代码路径进行并发性判定,得到并发性检测结果,示例性的,比如某条代码路径不具备可达性,则可将该代码路径对应的潜在死锁缺陷过滤掉,同理,比如某两条代码路径不具有并发性,则可将该某两条代码路径对应的潜在死锁缺陷过滤掉。基于别名关系的锁集分析有利于减少死锁缺陷检测的误报和漏报
情况,此基础上再采用可达性检测和/或并发性检测,对假的死锁缺陷进行过滤,可进一步减少操作系统死锁缺陷检测的误报情况。
[0010]在一些可能的实施方式中,死锁缺陷检测结果包括死锁缺陷集合,对至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测,以得到操作系统内核的死锁缺陷检测结果,包括:
[0011]对于至少一个潜在死锁缺陷中的任一个潜在死锁缺陷A,基于别名关系对潜在死锁缺陷A的代码路径中的每条代码路径进行可达性检测,得到每条代码路径的可达性检测结果;
[0012]当潜在死锁缺陷A的每条代码路径的可达性检测结果均表示该代码路径具备可达性时,将潜在死锁缺陷A放入死锁缺陷集合。
[0013]本申请实施例中,对任一个潜在死锁缺陷A的每条代码路径采用基于别名关系的可达性检测,有利于对每条代码路径中的条件语句进行验证,以判定该代码路径是否具备可达性,只有每条代码路径均具备可达性的情况下,才会将对应的潜在死锁缺陷A放入死锁缺陷集合,作为真实死锁缺陷进行报告,否则过滤掉该潜在死锁缺陷A,从而有利于避免将不具备可达性的代码路径对应的潜在死锁缺陷报告为真实死锁缺陷,进而有利于减少误报情况。
[0014]在一些可能的实施方式中,死锁缺陷检测结果包括死锁缺陷集合,当至少一个潜在死锁缺陷中的任一个潜在死锁缺陷A的代码路径的数量大于或等于2条时,对至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行并发性检测,以得到操作系统内核的死锁缺陷检测结果,包括:
[0015]对潜在死锁缺陷A的代码路径中的两两代码路径进行并发性检测,得到并发性检测结果;
[0016]当并发性检测结果表示潜在死锁缺陷A的代码路径中的两两代码路径均具有并发性时,将潜在死锁缺陷A放入死锁缺陷集合。
[0017]本申请实施例中,当潜在死锁缺陷A所涉及的代码路径大于或等于2时,对于潜在死锁缺陷A的所有代码路径,将其两两进行并发性检测,只有当潜在死锁缺陷A的代码路径中的两两代码路径均具有并发性时,才将该潜在死锁缺陷A放入死锁缺陷集合,作为真实死锁缺陷进行报告,否则过滤掉该潜在死锁缺陷A,从而有利于避免将不具有并发性的代码路径对应的潜在死锁缺陷确定为真实死锁缺陷进行误报的情况。
[0018]在一些可能的实施方式中,死锁缺陷检测结果包括死锁缺陷集合,当至少一个潜在死锁缺陷中的任一个潜在死锁缺陷A的代码路径的数量大于或等于2条时,对至少一个潜在死锁缺陷中的每个潜在死锁缺陷的代码路径进行可达性检测和并发性检测,以得到操作系统内核的死锁缺陷检测结果,包括:
[0019]基于别名关系对潜在死锁缺陷A的代码路径中的每条代码路径进行可达性检测,得到每条代码路径的可达性检测结果;
[0020]对潜在死锁缺陷A的代码路径中的两两代码路径进行并发性检测,得到并发性检测结果;
[0021]当潜在死锁缺陷A的每条代码路径的可达性检测结果均表示该代码路径具备可达性,且并发性检测结果表示潜在死锁缺陷A的代码路径中的两两代码路径均具有并发性时,
将潜在死锁缺陷A放入死锁缺陷集合。
[0022]本申请实施例中,当潜在死锁缺陷A所涉及的代码路径大于或等于2时,既对潜在死锁缺陷A的每条代码路径进行可达性检测,又将其两两进行并发性检测,只有当每条代码路径均具备可达性且两两代码路径均具有并发性时,才将该潜在死锁缺陷A放入死锁缺陷集合,作为真实死锁缺陷进行报告,否则过滤掉该潜在死锁缺陷A,在可达性检测的基础上再结合并发性检测,进一步有利于避免潜在死锁缺陷误报的情况。
[0023]在一些可能的实施方式中,对操作系统内核的函数进行基于变量间的别名关系的锁集分析,得到锁集序列集合,包括:
[0024]对操作系统内核的源代码进行编译,得到操作系统内核的中间字节码文件,并记录中间字节码文件中的函数的基本信息;
[0025]利用函数的基本信息对函数进行流敏感分析和过程间分析,得到函数的代码路径,函数的代码路径包括每个潜在死锁缺陷的代码路径;
[0026]对函数的代码路径中的变量进行别名分析,得到别名关系;
[0027]基于别名关系对函数的代码路径进行锁集分析,得到锁集序列集合。
[本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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所述的装置,其特征在于,...

【专利技术属性】
技术研发人员:白家驹李拓王岳兴李杨贾宁
申请(专利权)人:清华大学
类型:发明
国别省市:

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

1