摘 要:關于并行JAVA程序的可靠性,死鎖是最為嚴重和復雜的問題。在這篇論文中。我們討論了在并行JAVA程序運行時如何動態地檢測死鎖,并提出了在一個JAVA程序的執行過程中,處于等待狀態的一個同步象征,被稱為JAVA線形等待圖表。我們描述了各種類型的死鎖,并提出了一種計算程序來檢測死鎖和執行方法。
關鍵詞:死鎖檢測器 程序
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