專利名稱:一種單線程微處理器的死鎖檢測與干預(yù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器技術(shù)領(lǐng)域,尤其涉及單線程微處理器系統(tǒng)典型如單片機的一種死鎖檢測與干預(yù)方法。
背景技術(shù):
微處理器的線程是指程序的一次執(zhí)行過程,在單線程微處理器如單片機中,一個程序當前只能執(zhí)行一個指令。這種單線程微處理器因其體積小、功能強大、價格低廉以及開發(fā)方便等優(yōu)點已廣泛應(yīng)用于一些便攜式、遠程無人職守儀器儀表系統(tǒng)中。
所述的死鎖,通常認為多存在于與單線程微處理器相對應(yīng)的多線程微處理器中,是兩個或兩個以上線程中的每個線程都在等待其中另外一個線程釋放某個共同使用的資源而被封鎖,使每個線程都無法繼續(xù)下一步的執(zhí)行過程。通常認為,死鎖的發(fā)生必須滿足四個必要條件互斥(資源只能分配給某個確定的任務(wù)或是空閑,資源不能同時為兩個任務(wù)占據(jù)),非搶占(資源不可搶占,只能被占用它的任務(wù)自愿釋放),占用并等待(占據(jù)某些資源的任務(wù)請求另外的新資源,而這些資源為其他任務(wù)占據(jù)),循環(huán)等待(存在一組資源請求{P1,P2,…,Pn},其中P1等待P2占據(jù)的資源,P2等待P3占據(jù)的資源,…,Pn等待P1占據(jù)的資源)。死鎖的發(fā)生會給系統(tǒng)帶來了極大的危險,直接導(dǎo)致系統(tǒng)崩潰,無法正常運行。自1965年Dijkstra提出死鎖問題以來,經(jīng)過多年的發(fā)展,已在多線程微處理器上積累了一些比較好的死鎖檢測和干預(yù)辦法,有軟件方面的方法,也有硬件方面的方法,如Petri網(wǎng)、自動機以及圖論等;這些方法主要體現(xiàn)在三個方面預(yù)防,避免及檢測與恢復(fù),這些處理均是以消耗微處理器的資源如線程、內(nèi)存等為代價的。
單線程微處理器的結(jié)構(gòu)決定了其滿足了死鎖四要素中的大多數(shù)條件,如互斥、資源不可搶占和占用并等待任務(wù)完成,且由于軟件系統(tǒng)與硬件緊密相關(guān),每下一個執(zhí)行步驟往往取決于外部電平信號的狀態(tài),這又滿足了死鎖的另外一個條件循環(huán)等待。因此,此類微處理器的死鎖需要一個快捷的檢測方法,以及在死鎖發(fā)生后能夠進行自我干預(yù)的機制,恢復(fù)系統(tǒng)功能。但由于單線程微處理器的資源較少,如典型的MCS-51單片機,片內(nèi)僅有256字節(jié)RAM和2個定時器,Microchip公司的PIC系列單片機,其片內(nèi)也不過1K左右字節(jié)RAM和2-4個定時器等,無法和多線程微處理器相提并論,因此多線程系統(tǒng)中以資源為代價的死鎖檢測與干預(yù)系統(tǒng)明顯不能應(yīng)用于單線程微處理器系統(tǒng)中。
綜上所述,需要一種簡單實用、資源需求少的單線程微處理器死鎖檢測方法。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種以任務(wù)運行的最大時間需求作為死鎖檢測的主要判斷條件,從而可以簡便有效地對此類線索執(zhí)行的系統(tǒng)中任務(wù)進行死鎖檢測,保障系統(tǒng)正常運行的單線程微處理器的死鎖檢測方法。
本發(fā)明的目的是采用以下技術(shù)方案和步驟實現(xiàn)的。
1)片外存儲器依其系統(tǒng)配置保存單線程微處理器每一個具體任務(wù)的最大運行時間需求,可讀寫修改。
2)單線程微處理器系統(tǒng)片內(nèi)定時器資源,作為任務(wù)計時資源,在定時中斷發(fā)生時,中斷服務(wù)程序?qū)Ξ斍斑\行的第n個任務(wù)計時。
3)第n個任務(wù)占用CPU時間進行處理時,間斷檢查其已占用的CPU時間是否超過了本任務(wù)允許的最大運行時間需求。如果超過了,則認為第n個任務(wù)發(fā)生了死鎖現(xiàn)象,然后干預(yù)恢復(fù)第n個任務(wù)使用的資源。
由于本發(fā)明采用了上述措施,使本發(fā)明與現(xiàn)有技術(shù)相比,有效克服了多線程系統(tǒng)中以資源為代價的死鎖檢測與干預(yù)系統(tǒng)缺點,并成功應(yīng)用于單線程微處理器系統(tǒng)中單線程微處理器單片機的死鎖檢測與干預(yù)方法,既簡單實用,又節(jié)省大量的資源,性能得以顯著提高,從而解決在此類系統(tǒng)中的死鎖現(xiàn)象。
圖1是本發(fā)明所述的單線程微處理器死鎖檢測方法結(jié)構(gòu)示意圖。
圖2是本發(fā)明所述的單線程微處理器任務(wù)模塊死鎖檢測方法流程圖。
圖3是本發(fā)明所述的單線程微處理器死鎖檢測計時流程圖。
具體實施例方式
圖1是本發(fā)明的死鎖檢測結(jié)構(gòu)示意圖,圖中數(shù)據(jù)存儲設(shè)備101保存每一個具體任務(wù)的最大CPU時間需求,可以事先設(shè)置好,也可以在程序運行過程中動態(tài)調(diào)整。單線程微處理器第n個任務(wù)運行102表示當前任務(wù)占用CPU的全部時間,只有在處理器中斷發(fā)生時,才臨時把CPU時間交給中斷服務(wù)程序使用,中斷服務(wù)程序進行現(xiàn)場保護等處理,完成后,再把CPU時間交給當前第n個任務(wù)繼續(xù)使用CPU時間。微處理器物理定時資源103是本發(fā)明的一個重要物理資源,工作在中斷方式,在中斷發(fā)生時剝奪當前任務(wù)的CPU使用時間。
圖2是本發(fā)明的任務(wù)模塊死鎖檢測方法流程圖。下面結(jié)合附圖2對本發(fā)明進一步詳細說明。
步驟201第n個任務(wù)運行前,系統(tǒng)分配一個全局標志位和物理內(nèi)存計時器,其中全局標志位用來指示第n個任務(wù)當前已獲得CPU使用時間,而物理內(nèi)存計時器用于對本任務(wù)使用的CPU時間計時。
步驟202從片外數(shù)據(jù)存儲器中讀取對應(yīng)于第n個任務(wù)的最大運行時間,并保存到指定物理內(nèi)存地址中。這個最大運行時間用于本任務(wù)使用CPU時間的判斷條件參數(shù)。
步驟203對系統(tǒng)分配的物理內(nèi)存計時器資源初始化,從某一個設(shè)置的數(shù)值開始計時。
步驟204對系統(tǒng)分配的全局標志位進行設(shè)置,指示CPU時間已被第n個任務(wù)使用。在定時器中斷服務(wù)程序中,這個標志位決定了是否對第n個任務(wù)的CPU使用時間計時。
步驟205對第n個任務(wù)使用的CPU時間和設(shè)定的本任務(wù)允許最大CPU使用時間進行比較,如果當前物理內(nèi)存計時器資源的計時結(jié)果大于設(shè)定的最大時間需求,則說明發(fā)生了死鎖現(xiàn)象;如果沒有超過最大時間需求,則繼續(xù)執(zhí)行本任務(wù)的代碼工作。
步驟206第n個任務(wù)使用微處理器的CPU時間,完成對應(yīng)任務(wù),直到正常完成退出。如果循環(huán)執(zhí)行一次沒有正常完成退出,則跳轉(zhuǎn)到步驟205。
步驟207在第n個任務(wù)發(fā)生死鎖時,由步驟205強制結(jié)束本任務(wù),在本步驟中將第n個任務(wù)所使用的資源重新初始化,便于下一次第n任務(wù)的繼續(xù)運行。圖3是本發(fā)明所述的單線程微處理器死鎖檢測計時流程圖。圖中,步驟301表示定時中斷剝奪了當前任務(wù)的CPU運行時間,轉(zhuǎn)交給定時中斷服務(wù)程序使用。步驟302中,對正常運行的第n任務(wù)物理內(nèi)存計時器資源進行累計處理,從而獲得該任務(wù)使用的CPU時間。
權(quán)利要求
1.一種單線程微處理器系統(tǒng)死鎖檢測與干預(yù)方法,其特征是所述方法包含以下步驟[1]任務(wù)獲得CPU使用時間前,初始化任務(wù)運行標志和物理內(nèi)存單元的計時器,從數(shù)據(jù)存儲器中依其系統(tǒng)配置讀取設(shè)定的最大CPU需求時間;[2]在微處理的定時中斷服務(wù)程序中,根據(jù)任務(wù)運行狀態(tài)標志位,對物理內(nèi)存單元的任務(wù)計時器累加計時;[3]任務(wù)獲得CPU時間,除非正常結(jié)束,否則在任務(wù)中循環(huán)檢查其占用CPU時間是否超過設(shè)定的最大CPU需求時間,如果超過,則說明當前任務(wù)發(fā)生了死鎖現(xiàn)象,強行結(jié)束其CPU使用時間,交給后續(xù)任務(wù)繼續(xù)執(zhí)行。
2.按照權(quán)利要求1所述的檢測與干預(yù)方法,其特征是數(shù)據(jù)存儲器保存每一個任務(wù)的最大CPU需求時間。
3.按照權(quán)利要求1所述的檢測與干預(yù)系統(tǒng),其特征是每一個獨立的任務(wù)都有一個獨立的、用于指示當前任務(wù)是否獲得CPU運行時間的全局標志位。
4.按照權(quán)利要求1所述的檢測與干預(yù)系統(tǒng),其特征是每一個獨立的任務(wù)都有一個獨立的、用于指示當前任務(wù)占用CPU使用時間的物理內(nèi)存單元的計時器。
5.按照權(quán)利要求1所述的檢測與干預(yù)系統(tǒng),其特征是當前任務(wù)使用CPU時間的計時過程在微處理器的定時中斷服務(wù)程序中完成。
全文摘要
本發(fā)明涉及一種單線程微處理器的死鎖檢測與干預(yù)方法。目的是提供一種簡便有效地對系統(tǒng)中任務(wù)進行死鎖檢測,解決系統(tǒng)中死鎖現(xiàn)象。主要步驟啟動任務(wù)獲得CPU時間前,開啟定時器資源和初始化使用的物理內(nèi)存單元計時器;在定時中斷服務(wù)程序中,根據(jù)任務(wù)當前運行狀態(tài),對物理內(nèi)存單元計時器進行累加計時;當前運行的任務(wù)除非正常結(jié)束,否則不斷循環(huán)檢查其CPU占用使用的時間,如果超過了設(shè)定的最大運行時間,則認為發(fā)生了死鎖現(xiàn)象,從而結(jié)束死鎖的任務(wù),把CPU時間交給后續(xù)任務(wù)繼續(xù)執(zhí)行。該項技術(shù)僅使用少量資源,一個全局標志位、一個物理內(nèi)存單元的計時器和定時器資源,就可以完成死鎖的檢測。
文檔編號G06F9/50GK1811719SQ200610055169
公開日2006年8月2日 申請日期2006年2月22日 優(yōu)先權(quán)日2006年2月22日
發(fā)明者吳允平, 蔡聲鎮(zhèn), 吳進營, 蘇偉達, 李汪彪 申請人:福建師范大學(xué)