[发明专利]操作系统中的死锁检测方法有效
申请号: | 201310351342.3 | 申请日: | 2013-08-13 |
公开(公告)号: | CN103399818A | 公开(公告)日: | 2013-11-20 |
发明(设计)人: | 李曦;陈香兰;周学海;张海鹏;贾刚勇;朱宗卫 | 申请(专利权)人: | 中国科学技术大学苏州研究院 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/46 |
代理公司: | 苏州创元专利商标事务所有限公司 32103 | 代理人: | 范晴 |
地址: | 215123 江苏省苏州*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 操作系统 中的 死锁 检测 方法 | ||
技术领域
本发明属于操作系统优化技术领域,具体涉及一种操作系统中的死锁检测方法。
背景技术
为了充分发挥cpu多核的性能,并发程序设计已经十分广泛,但是开发并发程序面临很多挑战,死锁就是其中的一个。在设备驱动错误中有19%的错误是由于并发导致的,在这些并发错误中72%(67/93)跟死锁有关,文献S.Lu,S.Park,E.Seo,et al.Learning from mistakes–a comprehensive study on real world concurrency bug characteristics.In Proc.13th Intl.Conf.on Architectural Support for Programming Languages and Operating Systems,2008通过对4大开源软件:MySQL、Apache、Mozilla和OpenOffice中的并发错误进行分析,发现30%(31/105)的错误是由死锁造成的。
死锁检测的方法分为静态和动态两种,静态检测通过工具来分析待检测程序的源代码来找出可能要发生死锁的程序位置,这种方法不适用于检测代码量大的程序,而且很不准确,动态检测是在程序运行时,检查可能发生的死锁,但是动态监测性能开销大,不适用于内核、驱动中死锁的检测。
关于java多线程程序中的死锁检测,无论是静态方法还是动态方法,过去都已经做过大量研究,而且目前已经有比较成熟的工具可以直接检查java程序中的死锁,如jstack、lockstat等。由于操作系统代码量大、对性能敏感,过去关于操作系统死锁方面的研究比较少,死锁检测工具pluse是在操作系统层实现的,但是该工具只能检测应用程序中的死锁,并不能检测操作系统本身的死锁。本发明因此而来。
发明内容
为了克服背景知识中的不足,本发明提供一种操作系统中动态检测死锁的方法,在保证性能的条件下,可以准确检测出操作系统中的死锁。
为了解决现有技术中的这些问题,本发明提供的技术方案是:
一种操作系统中的死锁检测方法,其特征在于所述方法包括操作系统中多线程或进程并发执行时进行以下检测:
1)每隔预定的死锁检测周期检查锁的持有者链表HOLDER_LIST是否为空;
2)当锁的持有者链表HOLDER_LIST不为空时,检查锁的持有者链表HOLDER_LIST中每个锁的持有者是不是锁的等待者;
3)当锁的持有者为锁的等待者时,检测锁的持有者与锁的等待者之间是否会形成循环等待图;
当且仅当锁的持有者链表HOLDER_LIST不为空,锁的持有者链表HOLDER_LIST中锁的持有者是锁的等待者,锁的持有者与锁的等待者之间形成循环等待图三者条件同时满足时,判断操作系统中线程或进程并行处理时存在死锁;否则判断不存在死锁。
优选的,所述方法中先构建空的锁的持有者链表HOLDER_LIST,采用操作系统内核跟踪探测工具在操作系统的加锁函数的函数出口处探测,获取锁的持有者信息;当加锁函数退出时,将进程号或线程号、锁类型、资源地址作为新的锁的持有者信息插入锁的持有者链表HOLDER_LIST;当解锁函数退出时,将相应的锁的持有者信息从锁的持有者链表HOLDER_LIST删除。
优选的,所述方法中操作系统内核跟踪探测工具选自linux内核函数的工具systemtap、Solaris内核或FreeBSD内核中的DTrace。
优选的,所述方法中锁的等待者是通过筛选异常进程或线程的方法获取的,所述异常进程或线程为在预定阈值内获不到处理器或在预定阈值内一直占有处理器的进程或线程。
优选的,所述方法中进程或线程的等待时间通过使用当前的系统时间减去进程或线程描述符中的进程或线程最后一次运行的时间来获得的。
优选的,所述方法中预定阈值为进程的时间片与进程持有锁的时间的较大值。
优选的,所述方法中进程持有锁的时间是通过加锁函数与解锁函数之间的时间统计出来的;所述进程的时间片是通过进程的描述符中记录进程总的运行时间与运行次数的比值统计获得的。
优选的,所述方法中预定阈值为10s。
优选的,所述方法中异常进程或线程的筛选是通过判断异常进程的内核栈上有无加锁函数,从异常进程中筛选出锁的等待者。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学苏州研究院,未经中国科学技术大学苏州研究院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310351342.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种宽视角型偏光片及液晶显示盒
- 下一篇:一种车底安检仪