專利名稱:一種軟件運(yùn)行狀態(tài)的監(jiān)控方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種對(duì)軟件的運(yùn)行狀態(tài)進(jìn)行監(jiān)控的方法,尤其是涉及一種多任務(wù)環(huán)境下軟件運(yùn)行狀態(tài)的監(jiān)控方法。
背景技術(shù):
在單任務(wù)軟件中,看門狗(Watchdog)技術(shù)是一種比較成熟的監(jiān)控軟件運(yùn)行狀態(tài)的技術(shù)。在采用看門狗技術(shù)的系統(tǒng)中,有一個(gè)獨(dú)立于CPU(中央處理器)的硬件看門狗計(jì)數(shù)器,該看門狗計(jì)數(shù)器上電后開(kāi)始計(jì)數(shù),溢出時(shí)會(huì)復(fù)位CPU,這就要求軟件定期清空該看門狗計(jì)數(shù)器。如果軟件沒(méi)有按時(shí)清空看門狗計(jì)數(shù)器,則認(rèn)為該軟件進(jìn)入異常狀態(tài),看門狗計(jì)數(shù)器會(huì)溢出并復(fù)位CPU,從而復(fù)位軟件。
多任務(wù)軟件中采用看門狗技術(shù)時(shí),每個(gè)任務(wù)都會(huì)定期清空系統(tǒng)中的看門狗計(jì)數(shù)器,以達(dá)到每個(gè)任務(wù)都被監(jiān)控的目的。然而,多任務(wù)軟件中采用看門狗技術(shù)會(huì)產(chǎn)生以下幾方面問(wèn)題軟件中某個(gè)任務(wù)進(jìn)入異常狀態(tài)時(shí),雖然該任務(wù)并不清空看門狗計(jì)數(shù)器,但其他任務(wù)會(huì)定期清空看門狗計(jì)數(shù)器,從而導(dǎo)致看門狗技術(shù)的監(jiān)控作用失效;軟件中優(yōu)先級(jí)高的任務(wù)頻繁獲得執(zhí)行權(quán),低優(yōu)先級(jí)的任務(wù)得不到運(yùn)行,由于優(yōu)先級(jí)高的任務(wù)會(huì)清空看門狗計(jì)數(shù)器,這使得看門狗技術(shù)無(wú)法監(jiān)控到軟件進(jìn)入異常狀態(tài)。另外,看門狗技術(shù)異常處理手段過(guò)于單一,當(dāng)軟件進(jìn)入異常狀態(tài)后,看門狗計(jì)數(shù)器只是簡(jiǎn)單的復(fù)位CPU,并沒(méi)有其他異常處理手段。
發(fā)明內(nèi)容
本發(fā)明需要解決的技術(shù)問(wèn)題是提供一種軟件運(yùn)行狀態(tài)的監(jiān)控方法,采用本發(fā)明能夠分別獨(dú)立地監(jiān)控多任務(wù)軟件中各個(gè)任務(wù)的運(yùn)行狀態(tài),并且能針對(duì)不同的異常情況做出相應(yīng)的異常處理。
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種軟件運(yùn)行狀態(tài)的監(jiān)控方法,該方法通過(guò)計(jì)算機(jī)系統(tǒng)對(duì)軟件中相應(yīng)任務(wù)的運(yùn)行狀態(tài)進(jìn)行監(jiān)控,包括至少一個(gè)注冊(cè)任務(wù)、優(yōu)先級(jí)高于注冊(cè)任務(wù)的監(jiān)控任務(wù)、注冊(cè)任務(wù)列表和互斥量,實(shí)現(xiàn)步驟如下(a1)構(gòu)造注冊(cè)任務(wù)列表,并且定義一個(gè)用于標(biāo)識(shí)是否有任務(wù)正在操作注冊(cè)任務(wù)列表的標(biāo)志作為互斥量,注冊(cè)任務(wù)列表由代表各自注冊(cè)任務(wù)的各節(jié)點(diǎn)組成,各節(jié)點(diǎn)保存的信息包括注冊(cè)任務(wù)名、異常處理函數(shù)指針、計(jì)數(shù)器計(jì)數(shù)、計(jì)數(shù)器門限、檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄;(a2)監(jiān)控任務(wù)初始化注冊(cè)任務(wù)列表,然后需要被監(jiān)控的任務(wù)經(jīng)注冊(cè)后成為注冊(cè)任務(wù),注冊(cè)過(guò)程為將該任務(wù)所提供的包括注冊(cè)任務(wù)名、異常處理函數(shù)指針、計(jì)數(shù)器門限的信息保存到注冊(cè)任務(wù)列表中的一個(gè)未使用節(jié)點(diǎn)中,注冊(cè)任務(wù)運(yùn)行后可清空該節(jié)點(diǎn)中的計(jì)數(shù)器計(jì)數(shù);(a3)監(jiān)控任務(wù)按照一定的時(shí)間間隔重復(fù)檢查注冊(cè)任務(wù)列表,判斷是否存在異常狀態(tài)的注冊(cè)任務(wù),若存在,根據(jù)節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理。
進(jìn)一步地,本方法還具有如下特點(diǎn)各節(jié)點(diǎn)保存的信息還包括節(jié)點(diǎn)使用標(biāo)志,若該節(jié)點(diǎn)已使用,則節(jié)點(diǎn)使用標(biāo)志為真。
進(jìn)一步地,本方法還具有如下特點(diǎn),監(jiān)控任務(wù)對(duì)注冊(cè)任務(wù)列表進(jìn)行檢查判斷的時(shí)間間隔為一個(gè)檢測(cè)周期,其監(jiān)控邏輯包括如下步驟(b1)檢查當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志是否為真,若為真,執(zhí)行步驟(b2),否則執(zhí)行步驟(b5);(b2)檢查當(dāng)前節(jié)點(diǎn)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄是否為零,若為零,則執(zhí)行步驟(b3),否則執(zhí)行步驟(b5);(b3)計(jì)數(shù)器計(jì)數(shù)加1,并且檢測(cè)該計(jì)數(shù)器計(jì)數(shù)值是否超過(guò)其計(jì)數(shù)器門限,若超過(guò),則執(zhí)行步驟(b4),否則執(zhí)行步驟(b5);(b4)判定該節(jié)點(diǎn)代表的注冊(cè)任務(wù)處于異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理;(b5)檢查注冊(cè)任務(wù)列表中的下一個(gè)節(jié)點(diǎn),重復(fù)步驟(b1)至(b5),直至完成注冊(cè)任務(wù)列表中所有節(jié)點(diǎn)的檢測(cè)。
進(jìn)一步地,本方法還具有如下特點(diǎn)各節(jié)點(diǎn)保存的信息還包括清空計(jì)數(shù)器次數(shù)高門限和清空計(jì)數(shù)器次數(shù)低門限,在注冊(cè)過(guò)程中注冊(cè)任務(wù)保存至注冊(cè)任務(wù)列表的信息還包括清空計(jì)數(shù)器次數(shù)高門限和清空計(jì)數(shù)器次數(shù)低門限。
進(jìn)一步地,本方法還具有如下特點(diǎn),監(jiān)控任務(wù)對(duì)注冊(cè)任務(wù)列表進(jìn)行檢查判斷的時(shí)間間隔為一個(gè)計(jì)數(shù)間隔,若干個(gè)計(jì)數(shù)間隔組成一個(gè)檢測(cè)周期,其監(jiān)控邏輯包括如下步驟(c1)檢查當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志是否為真,若為真,執(zhí)行步驟(c2),否則執(zhí)行步驟(c7);(c2)檢查當(dāng)前節(jié)點(diǎn)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄中當(dāng)前計(jì)數(shù)間隔內(nèi)的清空計(jì)數(shù)器次數(shù)是否為零,若為零,則執(zhí)行步驟(c3),否則執(zhí)行步驟(c5);(c3)計(jì)數(shù)器計(jì)數(shù)加1,并且檢測(cè)該計(jì)數(shù)器計(jì)數(shù)值是否超過(guò)其計(jì)數(shù)器門限,若超過(guò),則執(zhí)行步驟(c4),否則執(zhí)行步驟(c7);(c4)判定該節(jié)點(diǎn)代表的注冊(cè)任務(wù)處于異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理,然后執(zhí)行步驟(c7);(c5)判斷是否完成一個(gè)檢測(cè)周期,若是,執(zhí)行步驟(c6),否則執(zhí)行步驟(c7);(c6)累加該節(jié)點(diǎn)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄,若累加結(jié)果大于清空計(jì)數(shù)器次數(shù)高門限或小于清空計(jì)數(shù)器次數(shù)低門限,則判定該節(jié)點(diǎn)代表的注冊(cè)任務(wù)處于異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理;(c7)檢查注冊(cè)任務(wù)列表中的下一個(gè)節(jié)點(diǎn),重復(fù)步驟(c1)至(c7),直至完成注冊(cè)任務(wù)列表中所有節(jié)點(diǎn)的檢測(cè)。
進(jìn)一步地,本方法還具有如下特點(diǎn)監(jiān)控任務(wù)初始化注冊(cè)任務(wù)列表操作包括將注冊(cè)任務(wù)列表中各節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志置為未使用,并將節(jié)點(diǎn)中的其他信息清零。
進(jìn)一步地,本方法還具有如下特點(diǎn)實(shí)現(xiàn)注冊(cè)任務(wù)列表的數(shù)據(jù)結(jié)構(gòu)為列表、數(shù)組或鏈表;所述監(jiān)控任務(wù)和注冊(cè)任務(wù)的具體實(shí)現(xiàn)形式可為操作系統(tǒng)中的進(jìn)程、過(guò)程、線程,或?yàn)樘幚砥鞯闹袛嗵幚恚驗(yàn)楠?dú)立編寫(xiě)的功能模塊;所述互斥量的實(shí)現(xiàn)形式包括變量、寄存器和操作系統(tǒng)提供的互斥量,監(jiān)控任務(wù)或各注冊(cè)任務(wù)在操作注冊(cè)任務(wù)列表前必須首先獲取該互斥量。
進(jìn)一步地,本方法還具有如下特點(diǎn),當(dāng)注冊(cè)任務(wù)不需再被監(jiān)控時(shí),可對(duì)其進(jìn)行注銷,注銷過(guò)程包括如下步驟(d1)獲取互斥量;(d2)根據(jù)注冊(cè)任務(wù)名在注冊(cè)任務(wù)列表中找到保存該注冊(cè)任務(wù)信息的節(jié)點(diǎn),將節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志置設(shè)置為未使用,而其余的節(jié)點(diǎn)信息清零;(d3)釋放互斥量。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)A、由于本發(fā)明通過(guò)注冊(cè)任務(wù)列表對(duì)每個(gè)注冊(cè)任務(wù)分別進(jìn)行計(jì)數(shù)器計(jì)數(shù),并且按照設(shè)定的計(jì)數(shù)器門限進(jìn)行判定,從而可消除注冊(cè)任務(wù)之間的相互影響,實(shí)現(xiàn)對(duì)多個(gè)注冊(cè)任務(wù)運(yùn)行狀態(tài)的同時(shí)監(jiān)控;B、由于本發(fā)明中可由注冊(cè)任務(wù)提供異常處理函數(shù)指針,從而可提供靈活的異常處理手段,既不受看門狗硬件功能的限制,也不受監(jiān)控任務(wù)的具體實(shí)現(xiàn)方式的限制,注冊(cè)任務(wù)可以根據(jù)自身的需求靈活地采用任何異常處理手段;C、通過(guò)累計(jì)注冊(cè)任務(wù)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器記錄,可獲取注冊(cè)任務(wù)占用CPU時(shí)間的信息,當(dāng)注冊(cè)任務(wù)運(yùn)行過(guò)于頻繁或者過(guò)少時(shí),可通過(guò)異常處理函數(shù)來(lái)進(jìn)行調(diào)節(jié),從而可使軟件運(yùn)行更加平穩(wěn)。
圖1是本發(fā)明中注冊(cè)任務(wù)列表的數(shù)據(jù)結(jié)構(gòu)示意圖;圖2是本發(fā)明的結(jié)構(gòu)方框圖;圖3是本發(fā)明中監(jiān)控邏輯運(yùn)行流程圖。
具體實(shí)施例方式
為了深入了解本發(fā)明,下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。
注冊(cè)任務(wù)列表是本發(fā)明的核心數(shù)據(jù)結(jié)構(gòu),是用于保存注冊(cè)任務(wù)信息的列表,還可以采用不同數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)注冊(cè)任務(wù)列表,如數(shù)組或鏈表。注冊(cè)任務(wù)列表的大小由注冊(cè)任務(wù)的數(shù)量決定。
根據(jù)本發(fā)明的實(shí)施例中,注冊(cè)任務(wù)列表由多個(gè)節(jié)點(diǎn)組成,如圖1所示,每個(gè)節(jié)點(diǎn)保存一個(gè)注冊(cè)任務(wù)的信息,節(jié)點(diǎn)保存的信息包括節(jié)點(diǎn)使用標(biāo)志、注冊(cè)任務(wù)名、異常處理函數(shù)指針、計(jì)數(shù)器計(jì)數(shù)、計(jì)數(shù)器門限、檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄、清空計(jì)數(shù)器次數(shù)高門限和清空計(jì)數(shù)器次數(shù)低門限。
其中,節(jié)點(diǎn)使用標(biāo)志為該節(jié)點(diǎn)是否已用于保存一個(gè)注冊(cè)任務(wù)信息的標(biāo)志;注冊(cè)任務(wù)名為注冊(cè)任務(wù)在注冊(cè)任務(wù)列表中的標(biāo)識(shí)符;異常處理函數(shù)指針為監(jiān)控任務(wù)進(jìn)行異常處理的手段,可由注冊(cè)任務(wù)根據(jù)自身需要進(jìn)行靈活設(shè)定;計(jì)數(shù)器計(jì)數(shù)是保存該注冊(cè)任務(wù)列表節(jié)點(diǎn)的計(jì)數(shù)器的當(dāng)前計(jì)數(shù),監(jiān)控任務(wù)主循環(huán)運(yùn)行一次,計(jì)數(shù)器加1,計(jì)數(shù)間隔定義為監(jiān)控任務(wù)主循環(huán)運(yùn)行一次所需時(shí)間;所述計(jì)數(shù)器門限為計(jì)數(shù)器的最大計(jì)數(shù)值,由注冊(cè)任務(wù)提供,如果計(jì)數(shù)器計(jì)數(shù)超過(guò)該值,監(jiān)控任務(wù)可判定注冊(cè)任務(wù)進(jìn)入異常狀態(tài);檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄是指在一個(gè)檢測(cè)周期內(nèi)注冊(cè)任務(wù)在每個(gè)計(jì)數(shù)間隔內(nèi)清空計(jì)數(shù)器次數(shù),檢測(cè)周期為監(jiān)控任務(wù)累計(jì)注冊(cè)任務(wù)清空計(jì)數(shù)器次數(shù)的時(shí)間間隔,一個(gè)檢測(cè)周期可由若干個(gè)計(jì)數(shù)間隔組成,清空計(jì)數(shù)器次數(shù)為注冊(cè)任務(wù)將計(jì)數(shù)器計(jì)數(shù)清零的次數(shù);清空計(jì)數(shù)器次數(shù)高門限、清空計(jì)數(shù)器次數(shù)低門限為注冊(cè)任務(wù)在一個(gè)檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)的最大值和最小值,由注冊(cè)任務(wù)提供,如果一個(gè)檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)大于清空計(jì)數(shù)器次數(shù)高門限,或者小于清空計(jì)數(shù)器次數(shù)低門限,監(jiān)控任務(wù)認(rèn)為注冊(cè)任務(wù)進(jìn)入異常狀態(tài)。
如圖2所示,本發(fā)明借助計(jì)算機(jī)系統(tǒng)對(duì)軟件中相應(yīng)任務(wù)的運(yùn)行狀態(tài)進(jìn)行監(jiān)控,其組成部分包括監(jiān)控任務(wù)、至少一個(gè)注冊(cè)任務(wù)、互斥量以及注冊(cè)任務(wù)列表,監(jiān)控任務(wù)的優(yōu)先級(jí)高于所有注冊(cè)任務(wù)。其中,監(jiān)控任務(wù)是監(jiān)控注冊(cè)任務(wù)運(yùn)行狀態(tài)的任務(wù),注冊(cè)任務(wù)則是指被監(jiān)控任務(wù)監(jiān)控的任務(wù)。監(jiān)控任務(wù)的優(yōu)先級(jí)高于所有注冊(cè)任務(wù),以保證其不被注冊(cè)任務(wù)阻塞。所述任務(wù)是指軟件中占用計(jì)算機(jī)系統(tǒng)中處理器運(yùn)行時(shí)間的相對(duì)獨(dú)立的部分,其具體實(shí)現(xiàn)形式可以是操作系統(tǒng)中的進(jìn)程、過(guò)程、線程,或處理器的中斷處理,或獨(dú)立編寫(xiě)的功能模塊,但不限于以上幾種形式。所述互斥量為一個(gè)用來(lái)標(biāo)識(shí)是否有任務(wù)正在操作注冊(cè)任務(wù)列表的標(biāo)志,可以采用多種形式來(lái)實(shí)現(xiàn)該互斥量,如變量、寄存器或操作系統(tǒng)提供的互斥量,這并不改變本發(fā)明的實(shí)質(zhì)和范圍。由于本發(fā)明中監(jiān)控任務(wù)以及所有注冊(cè)任務(wù)共同操作注冊(cè)任務(wù)列表,所以采用互斥量來(lái)保證注冊(cè)任務(wù)列表中數(shù)據(jù)的一致性;因此,任務(wù)必須先獲取該互斥量,然后才能操作注冊(cè)任務(wù)列表。
借助于計(jì)算機(jī)系統(tǒng)運(yùn)行的本方法在啟動(dòng)過(guò)程中給注冊(cè)任務(wù)列表分配存儲(chǔ)空間,構(gòu)造出注冊(cè)任務(wù)列表,并定義一個(gè)全局變量作為互斥量,然后啟動(dòng)監(jiān)控任務(wù),監(jiān)控任務(wù)需要完成如下的兩部分工作,首先是在初始化階段完成注冊(cè)任務(wù)列表的初始化工作,初始化注冊(cè)任務(wù)列表的過(guò)程包括如下步驟步驟11,獲取互斥量;步驟12,將注冊(cè)任務(wù)列表中所有節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志置為未使用,將節(jié)點(diǎn)中的其他信息清零;步驟13,釋放互斥量。
其次,在完成注冊(cè)任務(wù)列表初始化之后,監(jiān)控任務(wù)進(jìn)入主循環(huán),本發(fā)明中將監(jiān)控任務(wù)主循環(huán)運(yùn)行一次所需時(shí)間定義為計(jì)數(shù)間隔,按照計(jì)數(shù)間隔反復(fù)運(yùn)行主循環(huán),主循環(huán)包括如下步驟步驟21,獲取互斥量;步驟22,運(yùn)行監(jiān)控邏輯,該監(jiān)控邏輯如圖3所示,將在后面進(jìn)行描述說(shuō)明;步驟23,釋放互斥量;步驟24,延時(shí)一段時(shí)間后,讓其它任務(wù)運(yùn)行,在這段延時(shí)時(shí)間內(nèi)注冊(cè)任務(wù)可進(jìn)行注冊(cè)、清零和注銷等操作,返回步驟21。
監(jiān)控任務(wù)完成注冊(cè)任務(wù)列表初始化之后,才可以啟動(dòng)可被監(jiān)控的任務(wù),可被監(jiān)控任務(wù)如需要監(jiān)控則必須注冊(cè),注冊(cè)成功后成為注冊(cè)任務(wù),注冊(cè)任務(wù)完成的工作為注冊(cè)、清空計(jì)數(shù)器和注銷,其中注冊(cè)的過(guò)程包括如下步驟步驟31,獲取互斥量;步驟32,在注冊(cè)任務(wù)列表中尋找一個(gè)節(jié)點(diǎn)使用標(biāo)志為未始用的節(jié)點(diǎn);
步驟33,將該需要被監(jiān)控任務(wù)提供的信息保存到步驟32中所述的節(jié)點(diǎn)中,所述的信息包括注冊(cè)任務(wù)名、異常處理函數(shù)指針、計(jì)數(shù)器門限、清空計(jì)數(shù)器次數(shù)高門限、清空計(jì)數(shù)器次數(shù)低門限;步驟34,將步驟32中所述節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志置為已使用;步驟35,釋放互斥量。
注冊(cè)任務(wù)可在任意時(shí)刻,根據(jù)自身需要清空計(jì)數(shù)器,注冊(cè)任務(wù)可以運(yùn)行一次清空計(jì)數(shù)器一次或數(shù)次,也可以運(yùn)行數(shù)次才清空一次,清空計(jì)數(shù)器的過(guò)程包括如下步驟步驟41,獲取互斥量;步驟42,根據(jù)注冊(cè)任務(wù)名在注冊(cè)任務(wù)列表中找到保存該注冊(cè)任務(wù)信息的節(jié)點(diǎn);步驟43,將步驟42中找到的所述節(jié)點(diǎn)的計(jì)數(shù)器計(jì)數(shù)清零,并將本次清空操作記錄到檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄中;步驟44,釋放互斥量。
注冊(cè)任務(wù)可以通過(guò)注銷使其不再被監(jiān)控任務(wù)監(jiān)控,注銷過(guò)程包括如下步驟步驟51,獲取互斥量;步驟52,根據(jù)注冊(cè)任務(wù)名在注冊(cè)任務(wù)列表中找到保存該注冊(cè)任務(wù)信息的節(jié)點(diǎn),將所述節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志置為未使用,其他信息清零;步驟53,釋放互斥量。
圖2中無(wú)文字的方框表示循環(huán)標(biāo)志,指監(jiān)控任務(wù)的主循環(huán);注冊(cè)任務(wù)必須先注冊(cè),后注銷,且注冊(cè)、注銷必須成對(duì)出現(xiàn)。注冊(cè)任務(wù)可以在注冊(cè)之后,注銷之前的任意時(shí)刻清空計(jì)數(shù)器,但不能在注冊(cè)之前,注銷之后清空計(jì)數(shù)器。
如圖3所示,監(jiān)控任務(wù)主循環(huán)中的監(jiān)控邏輯運(yùn)行包括如下步驟步驟301,檢查當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志是否為被使用,即節(jié)點(diǎn)使用標(biāo)志是否為真,若是,執(zhí)行步驟302,否則,執(zhí)行步驟312;步驟302,檢查當(dāng)前節(jié)點(diǎn)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄中,當(dāng)前計(jì)數(shù)間隔內(nèi)的清空計(jì)數(shù)器次數(shù)是否為零,若是,執(zhí)行步驟303,否則,執(zhí)行步驟306;
步驟303,所述節(jié)點(diǎn)的計(jì)數(shù)器計(jì)數(shù)加1;步驟304,檢測(cè)該計(jì)數(shù)器計(jì)數(shù)值是否超過(guò)其計(jì)數(shù)器門限,若是,執(zhí)行步驟305,否則執(zhí)行步驟306;步驟305,判定該注冊(cè)任務(wù)長(zhǎng)時(shí)間得不到運(yùn)行而進(jìn)入異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理,然后執(zhí)行步驟312;步驟306,判斷是否完成一個(gè)檢測(cè)周期,若是,執(zhí)行步驟307,否則,執(zhí)行步驟312;步驟307,累加所述檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄;步驟308,判斷累加結(jié)果是否大于清空計(jì)數(shù)器次數(shù)高門限,若大于,執(zhí)行步驟309,否則執(zhí)行步驟310;步驟309,判定該注冊(cè)任務(wù)運(yùn)行過(guò)于頻繁而進(jìn)入異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理,然后執(zhí)行步驟312;步驟310,判斷累加結(jié)果是否小于清空計(jì)數(shù)器次數(shù)低門限,若小于,執(zhí)行步驟311,否則執(zhí)行步驟312;步驟311,判定該注冊(cè)任務(wù)獲取的運(yùn)行時(shí)間過(guò)少而進(jìn)入異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理,然后執(zhí)行步驟312;步驟312,遍歷注冊(cè)任務(wù)列表對(duì)其中每個(gè)節(jié)點(diǎn)都進(jìn)行步驟301至步驟312的處理。
綜上所述,采用本發(fā)明可同時(shí)監(jiān)控軟件中多個(gè)任務(wù)的運(yùn)行狀態(tài),且異常處理手段靈活,不受監(jiān)控任務(wù)的具體實(shí)現(xiàn)限制,可有效提高多任務(wù)軟件的自愈性和穩(wěn)定性。
權(quán)利要求
1.一種軟件運(yùn)行狀態(tài)的監(jiān)控方法,該方法通過(guò)計(jì)算機(jī)系統(tǒng)對(duì)軟件中相應(yīng)任務(wù)的運(yùn)行狀態(tài)進(jìn)行監(jiān)控,包括至少一個(gè)注冊(cè)任務(wù)、優(yōu)先級(jí)高于注冊(cè)任務(wù)的監(jiān)控任務(wù)、注冊(cè)任務(wù)列表和互斥量,實(shí)現(xiàn)步驟如下(a1)構(gòu)造注冊(cè)任務(wù)列表,并且定義一個(gè)用于標(biāo)識(shí)是否有任務(wù)正在操作注冊(cè)任務(wù)列表的標(biāo)志作為互斥量,注冊(cè)任務(wù)列表由代表各自注冊(cè)任務(wù)的各節(jié)點(diǎn)組成,各節(jié)點(diǎn)保存的信息包括注冊(cè)任務(wù)名、異常處理函數(shù)指針、計(jì)數(shù)器計(jì)數(shù)、計(jì)數(shù)器門限、檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄;(a2)監(jiān)控任務(wù)初始化注冊(cè)任務(wù)列表,然后需要被監(jiān)控的任務(wù)經(jīng)注冊(cè)后成為注冊(cè)任務(wù),注冊(cè)過(guò)程為將該任務(wù)所提供的包括注冊(cè)任務(wù)名、異常處理函數(shù)指針、計(jì)數(shù)器門限的信息保存到注冊(cè)任務(wù)列表中的一個(gè)未使用節(jié)點(diǎn)中,注冊(cè)任務(wù)運(yùn)行后可清空該節(jié)點(diǎn)中的計(jì)數(shù)器計(jì)數(shù);(a3)監(jiān)控任務(wù)按照一定的時(shí)間間隔重復(fù)檢查注冊(cè)任務(wù)列表,判斷是否存在異常狀態(tài)的注冊(cè)任務(wù),若存在,根據(jù)節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理。
2.根據(jù)權(quán)利要求1所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于各節(jié)點(diǎn)保存的信息還包括節(jié)點(diǎn)使用標(biāo)志,若該節(jié)點(diǎn)已使用,則節(jié)點(diǎn)使用標(biāo)志為真。
3.根據(jù)權(quán)利要求2所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于,監(jiān)控任務(wù)對(duì)注冊(cè)任務(wù)列表進(jìn)行檢查判斷的時(shí)間間隔為一個(gè)檢測(cè)周期,其監(jiān)控邏輯包括如下步驟(b1)檢查當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志是否為真,若為真,執(zhí)行步驟(b2),否則執(zhí)行步驟(b5);(b2)檢查當(dāng)前節(jié)點(diǎn)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄是否為零,若為零,則執(zhí)行步驟(b3),否則執(zhí)行步驟(b5);(b3)計(jì)數(shù)器計(jì)數(shù)加1,并且檢測(cè)該計(jì)數(shù)器計(jì)數(shù)值是否超過(guò)其計(jì)數(shù)器門限,若超過(guò),則執(zhí)行步驟(b4),否則執(zhí)行步驟(b5);(b4)判定該節(jié)點(diǎn)代表的注冊(cè)任務(wù)處于異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理;(b5)檢查注冊(cè)任務(wù)列表中的下一個(gè)節(jié)點(diǎn),重復(fù)步驟(b1)至(b5),直至完成注冊(cè)任務(wù)列表中所有節(jié)點(diǎn)的檢測(cè)。
4.根據(jù)權(quán)利要求2所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于,各節(jié)點(diǎn)保存的信息還包括清空計(jì)數(shù)器次數(shù)高門限和清空計(jì)數(shù)器次數(shù)低門限,在注冊(cè)過(guò)程中注冊(cè)任務(wù)保存至注冊(cè)任務(wù)列表的信息還包括清空計(jì)數(shù)器次數(shù)高門限和清空計(jì)數(shù)器次數(shù)低門限。
5.根據(jù)權(quán)利要求4所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于,監(jiān)控任務(wù)對(duì)注冊(cè)任務(wù)列表進(jìn)行檢查判斷的時(shí)間間隔為一個(gè)計(jì)數(shù)間隔,若干個(gè)計(jì)數(shù)間隔組成一個(gè)檢測(cè)周期,其監(jiān)控邏輯包括如下步驟(c1)檢查當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志是否為真,若為真,執(zhí)行步驟(c2),否則執(zhí)行步驟(c7);(c2)檢查當(dāng)前節(jié)點(diǎn)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄中當(dāng)前計(jì)數(shù)間隔內(nèi)的清空計(jì)數(shù)器次數(shù)是否為零,若為零,則執(zhí)行步驟(c3),否則執(zhí)行步驟(c5);(c3)計(jì)數(shù)器計(jì)數(shù)加1,并且檢測(cè)該計(jì)數(shù)器計(jì)數(shù)值是否超過(guò)其計(jì)數(shù)器門限,若超過(guò),則執(zhí)行步驟(c4),否則執(zhí)行步驟(c7);(c4)判定該節(jié)點(diǎn)代表的注冊(cè)任務(wù)處于異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理,然后執(zhí)行步驟(c7);(c5)判斷是否完成一個(gè)檢測(cè)周期,若是,執(zhí)行步驟(c6),否則執(zhí)行步驟(c7);(c6)累加該節(jié)點(diǎn)的檢測(cè)周期內(nèi)清空計(jì)數(shù)器次數(shù)記錄,若累加結(jié)果大于清空計(jì)數(shù)器次數(shù)高門限或小于清空計(jì)數(shù)器次數(shù)低門限,則判定該節(jié)點(diǎn)代表的注冊(cè)任務(wù)處于異常狀態(tài),并且根據(jù)該節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理;(c7)檢查注冊(cè)任務(wù)列表中的下一個(gè)節(jié)點(diǎn),重復(fù)步驟(c1)至(c7),直至完成注冊(cè)任務(wù)列表中所有節(jié)點(diǎn)的檢測(cè)。
6.根據(jù)權(quán)利要求2所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于監(jiān)控任務(wù)初始化注冊(cè)任務(wù)列表操作包括將注冊(cè)任務(wù)列表中各節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志置為未使用,并將節(jié)點(diǎn)中的其他信息清零。
7.根據(jù)權(quán)利要求6所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于實(shí)現(xiàn)注冊(cè)任務(wù)列表的數(shù)據(jù)結(jié)構(gòu)為列表、數(shù)組或鏈表。
8.根據(jù)權(quán)利要求7所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于所述監(jiān)控任務(wù)和注冊(cè)任務(wù)的具體實(shí)現(xiàn)形式可為操作系統(tǒng)中的進(jìn)程、過(guò)程、線程,或?yàn)樘幚砥鞯闹袛嗵幚?,或?yàn)楠?dú)立編寫(xiě)的功能模塊。
9.根據(jù)權(quán)利要求8所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于所述互斥量的實(shí)現(xiàn)形式包括變量、寄存器和操作系統(tǒng)提供的互斥量,監(jiān)控任務(wù)或各注冊(cè)任務(wù)在操作注冊(cè)任務(wù)列表前必須首先獲取該互斥量。
10.根據(jù)權(quán)利要求9所述的軟件運(yùn)行狀態(tài)的監(jiān)控方法,其特征在于,當(dāng)注冊(cè)任務(wù)不需再被監(jiān)控時(shí),可對(duì)其進(jìn)行注銷,注銷過(guò)程包括如下步驟(d1)獲取互斥量;(d2)根據(jù)注冊(cè)任務(wù)名在注冊(cè)任務(wù)列表中找到保存該注冊(cè)任務(wù)信息的節(jié)點(diǎn),將節(jié)點(diǎn)的節(jié)點(diǎn)使用標(biāo)志置設(shè)置為未使用,而其余的節(jié)點(diǎn)信息清零;(d3)釋放互斥量。
全文摘要
本發(fā)明公開(kāi)了一種軟件運(yùn)行狀態(tài)的監(jiān)控方法,該方法通過(guò)計(jì)算機(jī)系統(tǒng)對(duì)相應(yīng)軟件的運(yùn)行狀態(tài)進(jìn)行監(jiān)控,包括注冊(cè)任務(wù)、監(jiān)控任務(wù)、注冊(cè)任務(wù)列表和互斥量,實(shí)現(xiàn)步驟如下構(gòu)造注冊(cè)任務(wù)列表,并且定義一個(gè)用于標(biāo)識(shí)是否有任務(wù)正在操作注冊(cè)任務(wù)列表的標(biāo)志作為互斥量;監(jiān)控任務(wù)初始化注冊(cè)任務(wù)列表,然后需要被監(jiān)控的任務(wù)經(jīng)注冊(cè)后成為注冊(cè)任務(wù),注冊(cè)任務(wù)運(yùn)行后可清空該節(jié)點(diǎn)中的計(jì)數(shù)器計(jì)數(shù);監(jiān)控任務(wù)按一定的時(shí)間間隔重復(fù)檢查注冊(cè)任務(wù)列表,判斷是否存在異常狀態(tài)的注冊(cè)任務(wù),若存在,根據(jù)節(jié)點(diǎn)中保存的異常處理函數(shù)指針進(jìn)入相應(yīng)的異常處理。采用本發(fā)明能夠分別獨(dú)立地監(jiān)控多任務(wù)軟件中各個(gè)任務(wù)的運(yùn)行狀態(tài),并且能針對(duì)不同的異常情況做出相應(yīng)的異常處理。
文檔編號(hào)G06F11/36GK1908906SQ200510087709
公開(kāi)日2007年2月7日 申請(qǐng)日期2005年8月5日 優(yōu)先權(quán)日2005年8月5日
發(fā)明者吳召惠, 曲欣 申請(qǐng)人:中興通訊股份有限公司