一种并行JAVA程序运行时的死锁检测方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种并行JA V A程序运行时的死锁检测方法
关于并行JA V A程序的可靠性,死锁是最为严重和复杂的问题。
在这篇论文中。
我们讨论了在并行JA V A程序运行时如何动态地检测死锁,并提出了在一个JA V A程序的执行过程中,处于等待状态的一个同步象征,被称为JA V A线形等待图表。
我们描述了各种类型的死锁,并提出了一种计算程序来检测死锁和执行方法。
标签:死锁检测器程序
1简介
死锁的问题是一个严重和复杂的并发系统。
建立一些方法来自动检测并发系统中的死锁已成为一个重要的课题。
至于自动死锁的并发程序的检测方法和工具,可分为两个类别:静态检测方法和动态检测方法。
至于静态检测方法,我们试图寻找一个潜在的死锁形式与目标程序来使实际运行。
由于他们的目的是找出所有可能的死锁,那些不能出现在实际环境,多线程的执行时间和输入数据可以包含在结果。
大部分这类工具基于形式化分析和模型检查。
至于动态检测的方法,我们试图通过运行实际,与一些探测器通过某种方法使其目标在实际执行中查找死锁的发生。
我们打算在实际的环境中发生死锁检测时间的多线程的执行,并输入数据。
一种理想的动态检测方法应满足以下三个基本要求:①完整性:方法必须是能够检测出任何死锁。
②健全性:该方法必须报告任何存在的死锁。
③效率性:该方法必须能够得到执行,以便它可以检测到死锁的位置。
至于效率,我们是既要执行它,要尽可能减少成本。
死锁检测组件应列入目标系统本身,为了准确地检测到死锁,我们的想法是基于自我实现的高度可靠的测量原理并发系统。
有对java的动态死锁检测多种产品。
我们坚持他们没有足够的完整性。
尤其是,大部分不是正确识别的通知等关系。
通过这一原因,其中大部分无法检测的文件不能将Java死锁的文件检测清单表达出来。
Java平台特有的问题是依赖性:现有的手段是平台依赖新生凹痕,因为它们取决于特定的虚拟机。
既然是独立于平台的Java最显著特点,有工作的工具之Java 程序也希望将平台独立,它是重要的自我检测的测量原理。
动态检测方法是目前最好的,从死锁检测领域的角度看,这是非常类似Java的并发设施,我们应对与Java特有问题时的Java程序中的死锁检测问题应用此方法。
我们将在本文中介绍方法、推行工具死锁报告的一个示例。
2在Java多线程程序中的死锁
死锁的并发Java程序这样表示:两个或多个线程互相阻塞,而试图访问所需的同步锁继续他们的活动。
在Java死锁通常被视为形成一个公正锁观点,换句话说,我们必须意识到我们处理这个问题时的同步等待关系不是只有中止显示器。
现在我们需要更严格地定义此问题。
定义1一个线程被认为是阻止处于执行状态的并发Java程序,如果它在一个或多个线程的同步某些同步点等待着一或多个线程等待状态,并且将保留此等待状态,直到出现了同步,否则该线程已停止。
定义2死锁是一个并发Java程序同步等候在那里的一些阻塞的线程之间的执行状况形成一个周期,因而在周期所涉及的线程被认为发生死锁。
定义3在一个并发Java程序执行状态被阻塞的线程被认为是如果正在等待同步与死锁的线程被阻止,但不是涉及周期中的死锁涉及被死锁的线程。
请注意死锁的线程应该被认为被阻止的线程等待不能改变任何被死锁的线程的死锁状态。
定义4一个活锁是一个Java程序的每个线程组的成员一组线程都保持线程组中的沟通,并因此可以永远不会响应任何外界线程的同步请求,否则在小组中的任何线程被认为是死锁。
定义5如果一个并发Java程序的执行状态是它正在等待与活锁的线程同步被阻塞就被认为是死锁。
请注意,它也是重要的区别陷入僵局的形式活锁的线程的封锁,因为打破了一活锁,阻塞的线程等候不能改变任何陷入僵局线程死锁状态的线程。
3运行时死锁检测器中使用Java虚拟机分析器界面
我们开发了基于Java程序的运行时死锁检测仪。
它必须能够监视某种目标Java程序运行时所发生的事件。
还有其他办法,一个是运行时环境支持的方法,而另一种是源代码转换的做法。
Java程序运行在Java虚拟机,它很容易得到一些运行时间环境的信息。
具体地说,Java虚拟机分析器界面(JVMPI)是我们的工具,是监察的Java程序的行为。
该JVMPI是在Java虚拟机和一个进程分析器界面,用于我们的死锁检测的方法过程中探查器代理之间的接口。
该死锁探测器部分包括本机代码(不是字节代码),它在Java虚拟机进程运行。
当与死锁检测有关每个事件发生时,有关信息通过JVMPI传递给死锁检测仪。
运行时死锁检测仪使用源代码转换
我们开发了一个运行在死锁探测器上的源代码转换的方法。
目标在Java程序P是由一个预处理器到另一个Java程序P1。
中,使得P1当前行为和执行过程中的P沟通。
运行时,实时监测每个并发事件的P和P1,并通过有关的运行信息实时监测事件发生的有关事件的信息传递到运行时显示器。
此事件通知时,探测器需要一个线程被创建,开始,结束,只是要求事件通知和直接进入同步的方法,只是对接后转出和前后直接等待、加入或通知的所有方法被都调用。
4此方法的优点和缺点
此方法的优点是它的平台独立性:任何目标程序的工具只不过是一个Java程序,可以工作更在任何Java虚拟机。
从独立测试原则的角度看,它对测量有耐久性的优势,因为它可以在任何虚拟机上。
但是,这一问题得到解决,才能成为我们能够使用我们的僵局探测器上使用任何虚拟机JVMPI。
缺点是运算性能降低。
其监测方案使用Java编写的,其性能降低会比在运行时环境多。
5结束语
我们研究Java程序中的死锁问题时讨论了如何在运行时及时地发现。
同时,我们制定了两个办法同时基于Java的程序运行时死锁探测器。
我们成功的探测计划,包括从一并发同步所有类型的等待关系陷入死锁。
采用哪种方法应由设备的性能和平台独立性来权衡决定。
参考文献:
[1]卢超,卢炎生,谢晓东,等,一种基于依赖分析的并发程序潜在算法[J],小型微型计算机系统,2007,28(5):841-844
[2]吴萍,陈意云,张健多线程程序数据竞争的静态检测[J],计算机研究与发展,2006,43(2),329—335。