本發(fā)明涉及計(jì)算機(jī)技術(shù)中的網(wǎng)絡(luò)任務(wù)異常檢測技術(shù)領(lǐng)域,特別是一種VxWorks系統(tǒng)的網(wǎng)絡(luò)任務(wù)異常檢測方法。
背景技術(shù):
VxWorks是美國Wind River System公司(即WRS公司,簡稱風(fēng)河公司)推出的一個(gè)實(shí)時(shí)操作系統(tǒng)。風(fēng)河公司組建于1981年,是一個(gè)專門從事實(shí)時(shí)操作系統(tǒng)開發(fā)與生產(chǎn)的軟件公司,該公司在實(shí)時(shí)操作系統(tǒng)領(lǐng)域被世界公認(rèn)為是最具有領(lǐng)導(dǎo)地位的公司,主要商業(yè)用戶包括Cisco systems、Bay Networks、3Com、Fore systems、HP、Lucent、Qualcomm等著名公司。VxWorks以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。在美國的 F-16、FA-18 戰(zhàn)斗機(jī)、B-2 隱形轟炸機(jī)和愛國者導(dǎo)彈上,甚至連1997年4月在火星表面登陸的火星探測器上也使用到了VxWorks。目前嵌入式系統(tǒng)應(yīng)用已經(jīng)深入到我們生活中的各個(gè)領(lǐng)域,手機(jī)、機(jī)頂盒、MP4、交換機(jī)、路由器等都可以歸結(jié)為嵌入式設(shè)備。在這些嵌入式設(shè)備中,有一部分設(shè)備需要功能強(qiáng)大、實(shí)時(shí)性強(qiáng)的操作系統(tǒng),VxWorks正是這類操作系統(tǒng)中的佼佼者,因此很多嵌入式設(shè)備都采用VxWorks來實(shí)現(xiàn)。
網(wǎng)絡(luò)任務(wù)tNetTask是VxWorks系統(tǒng)自帶的一個(gè)地位非常重要的系統(tǒng)任務(wù),它主要負(fù)責(zé)處理網(wǎng)絡(luò)協(xié)議棧的事件請求,包括協(xié)議定時(shí)器的處理,協(xié)議狀態(tài)的更新,協(xié)議報(bào)文的發(fā)送等等,部分用戶程序的請求例如網(wǎng)卡中斷服務(wù)程序接收報(bào)文以后也由網(wǎng)絡(luò)任務(wù)tNetTask進(jìn)行后續(xù)報(bào)文處理等等。如果網(wǎng)絡(luò)任務(wù)tNetTask出了異常,就會(huì)導(dǎo)致網(wǎng)絡(luò)任務(wù)的工作隊(duì)列中的請求無法被及時(shí)處理,這時(shí)其它正常的工作請求會(huì)源源不斷的被加入進(jìn)來,最后網(wǎng)絡(luò)任務(wù)的工作隊(duì)列被占滿了,而之后的所有工作請求也加入不進(jìn)來了。也就是說只要網(wǎng)絡(luò)任務(wù)tNetTask出現(xiàn)了異常,網(wǎng)絡(luò)協(xié)議棧也就出了異常,整個(gè)VxWorks系統(tǒng)也就出了異常。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是,提供一種VxWorks系統(tǒng)的網(wǎng)絡(luò)任務(wù)異常檢測方法,以方便系統(tǒng)在網(wǎng)絡(luò)任務(wù)出現(xiàn)異常時(shí)能夠很快被發(fā)現(xiàn),從而可以進(jìn)行相應(yīng)的異常處理,提高整個(gè)系統(tǒng)穩(wěn)定性,降低整個(gè)系統(tǒng)維護(hù)成本。
本發(fā)明采取的技術(shù)方案具體為:一種VxWorks系統(tǒng)的網(wǎng)絡(luò)任務(wù)異常檢測方法,包括步驟:
S1定義一個(gè)空函數(shù)check_func;
S2在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建一個(gè)新任務(wù)tCheck,tCheck任務(wù)的優(yōu)先級高于網(wǎng)絡(luò)任務(wù)的優(yōu)先級;
S3系統(tǒng)運(yùn)行過程中,通過tCheck任務(wù)檢測網(wǎng)絡(luò)任務(wù)是否出現(xiàn)異常:
通過tCheck任務(wù)調(diào)用netJobAdd函數(shù),以將空函數(shù)check_func加入網(wǎng)絡(luò)任務(wù)的工作隊(duì)列中;
判斷netJobAdd函數(shù)是否返回成功,若成功,則表示網(wǎng)絡(luò)任務(wù)的工作隊(duì)列沒有被占滿,網(wǎng)絡(luò)任務(wù)是正常運(yùn)行的;若netJobAdd函數(shù)返回失敗,則表示網(wǎng)絡(luò)任務(wù)的工作隊(duì)列已被占滿,網(wǎng)絡(luò)任務(wù)出現(xiàn)了異常。
優(yōu)選的,本發(fā)明中,tCheck任務(wù)的優(yōu)先級設(shè)定范圍為大于0且小于50。進(jìn)一步優(yōu)選的,tCheck任務(wù)的優(yōu)先級設(shè)為49。VxWorks系統(tǒng)中任務(wù)的優(yōu)先級數(shù)值越小表示其優(yōu)先級越高,網(wǎng)絡(luò)任務(wù)優(yōu)先級為50,也就是tCheck任務(wù)的優(yōu)先級數(shù)值必須小于50。
進(jìn)一步的,本發(fā)明步驟S3中,若netJobAdd函數(shù)返回成功,tCheck任務(wù)休眠設(shè)定時(shí)間后,再次調(diào)用netJobAdd函數(shù),以重復(fù)檢測網(wǎng)絡(luò)任務(wù)是否出現(xiàn)異常。
優(yōu)選的,所述設(shè)定時(shí)間為1秒鐘,即tCheck任務(wù)每隔1秒鐘調(diào)用一次netJobAdd函數(shù),將check_func加入到網(wǎng)絡(luò)任務(wù)的工作隊(duì)列中。tCheck任務(wù)休眠時(shí),其它任務(wù)正常按照優(yōu)先級執(zhí)行,tCheck任務(wù)對整個(gè)系統(tǒng)的負(fù)擔(dān)是非常小的,不會(huì)影響其它任務(wù)的執(zhí)行。
更進(jìn)一步的,本發(fā)明所述netJobAdd函數(shù)返回成功即返回值為0,netJobAdd函數(shù)返回失敗即返回值為-1。
有益效果
利用本發(fā)明的方法,可使得VxWorks系統(tǒng)在網(wǎng)絡(luò)任務(wù)出現(xiàn)異常時(shí)能夠很快發(fā)現(xiàn),從而可以進(jìn)行相應(yīng)的異常處理,例如重啟網(wǎng)絡(luò)任務(wù)、或者重啟設(shè)備、或者發(fā)出告警通知管理人員處理等等,提高整個(gè)系統(tǒng)穩(wěn)定性,降低整個(gè)系統(tǒng)維護(hù)成本。
附圖說明
圖1 所示為netJobAdd函數(shù)流程示意圖;
圖2 所示為網(wǎng)絡(luò)任務(wù)處理流程示意圖;
圖3所示為本發(fā)明方法中檢測任務(wù)處理流程示意圖。
具體實(shí)施方式
以下結(jié)合附圖和具體實(shí)施例進(jìn)一步描述。
參考圖1所示為netJobAdd函數(shù)流程示意圖。netJobAdd函數(shù)是VxWorks系統(tǒng)提供的一個(gè)系統(tǒng)函數(shù),它主要是把工作請求加入網(wǎng)絡(luò)任務(wù)的工作隊(duì)列中,然后觸發(fā)信號量netTaskSemId。這里所說的工作請求就是一個(gè)函數(shù)指針和5個(gè)對應(yīng)的參數(shù),本發(fā)明方法中所使用的check_func函數(shù)是一個(gè)空函數(shù),在調(diào)用時(shí)不需要參數(shù),就將全部5個(gè)參數(shù)設(shè)為0。
參見圖2所示為VxWorks系統(tǒng)的網(wǎng)絡(luò)任務(wù)處理流程示意圖。網(wǎng)絡(luò)任務(wù)一直在等待信號量netTaskSemId,只要系統(tǒng)中有任務(wù)或者中斷服務(wù)程序調(diào)用了netJobAdd函數(shù),就會(huì)觸發(fā)信號量netTaskSemId,網(wǎng)絡(luò)任務(wù)就會(huì)從該信號量返回,取出工作隊(duì)列中的請求并執(zhí)行。這里所說的執(zhí)行就是調(diào)用函數(shù)指針?biāo)赶虻暮瘮?shù),該函數(shù)指針和調(diào)用函數(shù)所需要的參數(shù)由netJobAdd函數(shù)傳入。
參考圖3所示,本發(fā)明VxWorks系統(tǒng)的網(wǎng)絡(luò)任務(wù)異常檢測方法,包括步驟:
S1定義一個(gè)空函數(shù)check_func;
S2在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建一個(gè)新任務(wù)tCheck,tCheck任務(wù)的優(yōu)先級高于網(wǎng)絡(luò)任務(wù)的優(yōu)先級;
S3系統(tǒng)運(yùn)行過程中,通過tCheck任務(wù)檢測網(wǎng)絡(luò)任務(wù)是否出現(xiàn)異常:
通過tCheck任務(wù)調(diào)用netJobAdd函數(shù),以將空函數(shù)check_func加入網(wǎng)絡(luò)任務(wù)的工作隊(duì)列中;
判斷netJobAdd函數(shù)是否返回成功,若成功,則表示網(wǎng)絡(luò)任務(wù)的工作隊(duì)列沒有被占滿,網(wǎng)絡(luò)任務(wù)是正常運(yùn)行的;若netJobAdd函數(shù)返回失敗,則表示網(wǎng)絡(luò)任務(wù)的工作隊(duì)列已被占滿,網(wǎng)絡(luò)任務(wù)出現(xiàn)了異常。
實(shí)施例
本實(shí)施例步驟包括:
S1定義一個(gè)空函數(shù)check_func;
S2系統(tǒng)啟動(dòng)時(shí)創(chuàng)建一個(gè)新任務(wù)tCheck,該任務(wù)優(yōu)先級設(shè)為49,比網(wǎng)絡(luò)任務(wù)tNetTask優(yōu)先級要高,則即使網(wǎng)絡(luò)任務(wù)出了異常例如陷入了死循環(huán)中,tCheck任務(wù)還是可以得到正常運(yùn)行;
S3系統(tǒng)運(yùn)行過程中,通過tCheck任務(wù)來檢測網(wǎng)絡(luò)任務(wù)是否出現(xiàn)異常:
tCheck任務(wù)每隔1秒鐘調(diào)用netJobAdd函數(shù)將函數(shù)指針check_func(c語言中函數(shù)名等價(jià)于函數(shù)指針)添加到網(wǎng)絡(luò)任務(wù)的工作隊(duì)列中;然后通過判斷調(diào)用netJobAdd函數(shù)的返回值,判斷網(wǎng)絡(luò)是否出現(xiàn)異常。若返回值為0則返回成功,表示網(wǎng)絡(luò)任務(wù)的工作隊(duì)列沒有被占滿,網(wǎng)絡(luò)任務(wù)tNetTask還在正常處理工作隊(duì)列中的請求,網(wǎng)絡(luò)任務(wù)tNetTask還是正常運(yùn)行的。若返回值為-1則返回失敗,就表示網(wǎng)絡(luò)任務(wù)的工作隊(duì)列被占滿了,網(wǎng)絡(luò)任務(wù)tNetTask出現(xiàn)了異常,它沒有及時(shí)處理工作隊(duì)列中的請求,系統(tǒng)需要進(jìn)行相應(yīng)的異常處理。
以上所述,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之類。