一種用于vxWorks的CPU占用率檢測方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種用于vxWorks的CPU占用率檢測方法和系統(tǒng),屬于嵌入式操作系統(tǒng)領(lǐng)域。
【背景技術(shù)】
[0002]Vxfforks操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)(RT0S),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分,具有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術(shù)及實時性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習、彈道制導、飛機導航等。在美國的F-16、FA-18戰(zhàn)斗機、B-2隱形轟炸機和愛國者導彈上,甚至連1997年4月在火星表面登陸的火星探測器、2008年5月登陸的鳳凰號,和2012年8月登陸的好奇號也都使用到了 VxWorks。
[0003]目前有多種在嵌入式計算機操作系統(tǒng)中檢測CPU占用率的方法,例如,目前在嵌入式操作系統(tǒng)vxWorks中主要有兩種CPU占用率檢測的方法。
[0004]第一種:通過spy工具利用輔助定時器產(chǎn)生中斷,并且為每個任務維護一個計數(shù)器。然后記下被中斷的任務,并且將該任務的計數(shù)器加一。經(jīng)過一段時間后,每個任務的計數(shù)器反映了該任務占用CPU利用率的情況。很明顯,這是利用抽樣技術(shù)。并且得到的CPU利用率的準確程度取決于任務的持續(xù)性和周期性。
[0005]第二種:通過創(chuàng)建兩個特殊的任務,一個優(yōu)先級別最高的任務和一個優(yōu)先級別最低的任務,在這個優(yōu)先級別最高的任務里運行一個循環(huán)次數(shù)很大的循環(huán)用于占用所有的CPU時間,記錄一段時間內(nèi)計數(shù)值;然后再設(shè)置一個優(yōu)先級別最低的任務,當所有任務都停止時CPU才會調(diào)度此任務,此任務記下在無其他任務占用CPU的情況下計數(shù),最后通過算法CPU 占用率=(total -1dle) % total。
[0006]但這兩種算法都需要硬件系統(tǒng)配備相應高精度的輔助時鐘,為了節(jié)約成本,通常沒有這樣的時鐘,相對第一種方法來說,精確計算各任務CPU占用率沒有必要,作為報警需要,計算系統(tǒng)總的CPU占用率即可;第二種雖然是計算整個系統(tǒng)的占用率,但必須需要硬件時鐘的中斷才能實現(xiàn)。
【發(fā)明內(nèi)容】
[0007]為了克服現(xiàn)有技術(shù)的缺陷,本發(fā)明分別提出了一種用于vxWorks的CPU占用率檢測方法和系統(tǒng),以在不需要精度相當高的硬件時鐘下計算系統(tǒng)的總的CPU占用率。
[0008]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的采用以下的技術(shù)方案:
根據(jù)本發(fā)明的一個方面,提出了一種用于vxWorks的CPU占用率檢測方法,其包括步驟:
S1:在VxWorks系統(tǒng)任務啟動后,用戶任務啟動前,啟動一最低優(yōu)先級的任務,同時設(shè)置一統(tǒng)計時間,以從統(tǒng)計時間開始對一靜態(tài)變量進行遞加并記錄其計數(shù)值,直至該統(tǒng)計時間結(jié)束;
52:對應該最低優(yōu)先級的任務的統(tǒng)計時間結(jié)束時,將記錄的靜態(tài)變量的計數(shù)值保存至一比較基數(shù)中,以及將靜態(tài)變量清零;
53:在一統(tǒng)計時間內(nèi),該最低優(yōu)先級的任務在VxWorks系統(tǒng)空閑時對靜態(tài)變量進行遞加并記錄其計數(shù)值;
54:啟動一較高優(yōu)先級的任務,以計算每一統(tǒng)計時間內(nèi)的靜態(tài)變量的增量值;
55:利用記錄的靜態(tài)變量的增量值與比較基數(shù)之比,計算出CPU占用率。
[0009]優(yōu)選地,所述統(tǒng)計時間由一延時函數(shù)提供。
[0010]優(yōu)選地,在步驟S5中,CPU占用率=100-增量值/比較基數(shù)。
[0011 ] 優(yōu)選地,在步驟S2中,在將靜態(tài)變量的計數(shù)值保存至一比較基數(shù)之前,先將靜態(tài)變量整除100。
[0012]優(yōu)選地,在步驟S3中,最低優(yōu)先級的任務僅在無其他任務占用CPU時執(zhí)行,以在統(tǒng)計時間內(nèi)CPU空閑時對靜態(tài)變量進行遞加。
[0013]根據(jù)本發(fā)明的另一個方面,提出了一種用于vxWorks的CPU占用率檢測系統(tǒng),包括:
統(tǒng)計計數(shù)模塊,在VxWorks系統(tǒng)任務啟動后,用戶任務啟動前,啟動一最低優(yōu)先級的任務,同時設(shè)置一統(tǒng)計時間,以從統(tǒng)計時間開始對一靜態(tài)變量進行遞加并記錄其計數(shù)值,直至該統(tǒng)計時間結(jié)束;
比較基數(shù)獲取模塊,對應該最低優(yōu)先級的任務的統(tǒng)計時間結(jié)束時,將記錄的靜態(tài)變量的計數(shù)值保存至一比較基數(shù)中,以及將靜態(tài)變量清零;
空閑計數(shù)模塊,在一統(tǒng)計時間內(nèi),該最低優(yōu)先級的任務在VxWorks系統(tǒng)空閑時對靜態(tài)變量進行遞加并記錄其計數(shù)值;
增量計算模塊,啟動一較高優(yōu)先級的任務,以計算每一統(tǒng)計時間內(nèi)的靜態(tài)變量的增量值;
占用率計算模塊:利用記錄的靜態(tài)變量的增量值與比較基數(shù)之比,計算出CPU占用率。
[0014]優(yōu)選地,所述統(tǒng)計時間由一延時函數(shù)提供。
[0015]優(yōu)選地,占用率計算模塊還設(shè)置為,使CPU占用率=100-增量值/比較基數(shù)。
[0016]優(yōu)選地,比較基數(shù)獲取模塊還設(shè)置為,在將靜態(tài)變量的計數(shù)值保存至一比較基數(shù)之前,先將靜態(tài)變量的整除100。
[0017]優(yōu)選地,空閑計數(shù)模塊還設(shè)置為,以使最低優(yōu)先級的任務僅在無其他任務占用CPU時執(zhí)行,以在統(tǒng)計時間內(nèi)CPU空閑時對靜態(tài)變量進行遞加。
[0018]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下顯著優(yōu)點和有益效果:
根據(jù)本發(fā)明的用于vxWorks的CPU占用率檢測方法和系統(tǒng),不需要硬件系統(tǒng)配備相應高精度的輔助時鐘,只需要一延時函數(shù),例如系統(tǒng)函數(shù)taskDelay ()來實現(xiàn)。根據(jù)本發(fā)明的CPU占用率檢測實現(xiàn)簡單,易用,靈活性高,若采用軟件實現(xiàn)代碼非常簡短,通用性強,可作為一個獨立單元,可隨時加入系統(tǒng)或從系統(tǒng)中剝離。
【附圖說明】
[0019]下面結(jié)合附圖對本發(fā)明的【具體實施方式】做進一步的說明,其中: 圖1是根據(jù)本發(fā)明一實施例的流程圖;
圖2是根據(jù)本發(fā)明另一實施例的流程示意圖。
【具體實施方式】
[0020]現(xiàn)結(jié)合圖1-2,對本發(fā)明的具體實施例進行詳細描述,以示例性地說明本發(fā)明的技術(shù)方案。
[0021]如圖1所示,為根據(jù)本發(fā)明的用于vxWorks的CPU占用率檢測方法的一實施例的流程圖,包括步驟:
S1:在VxWorks系統(tǒng)任務啟動后,用戶任務啟動前,啟動一最低優(yōu)先級的任務A,同時設(shè)置一統(tǒng)計時間t,以從統(tǒng)計時間t開始對一靜態(tài)變量s進行遞加并記錄其計數(shù)值i,直至統(tǒng)計時間t結(jié)束。
[0022]具體地,所述統(tǒng)計時間t可由一延時函數(shù)f提供,例如通過一系統(tǒng)函數(shù)taskDelay()的一段2秒的延時來提供,也可設(shè)置為更長或更短的其他穩(wěn)定的統(tǒng)一的延時,作為統(tǒng)計時間t。
[0023]S2:對應最低優(yōu)先級的任務A的統(tǒng)計時間t結(jié)束時,將記錄的靜態(tài)變量s的計數(shù)值i保存至一比較基數(shù)r中,以及將靜態(tài)變量s清零。
[0024]S3:示例性地,在用戶任務啟動后,設(shè)置統(tǒng)計時間t,在統(tǒng)計時間t內(nèi),使最低優(yōu)先級的任務A在VxWorks系統(tǒng)空閑時對靜態(tài)變量s進行遞加并記錄其計數(shù)值。
[0025]S4:啟動一較高優(yōu)先級的任務B,以計算每一統(tǒng)計時間t內(nèi)的靜態(tài)變量s的增量值
Co
[0026]具體地,最低優(yōu)先級的任務A僅在無其他任務占用CPU時執(zhí)行,以在統(tǒng)計時間t內(nèi)CPU空閑時對靜態(tài)變量s進行遞加。因此,增量值c也是通過對靜態(tài)變量S進行計數(shù)而得到,但由于最低優(yōu)先級的任務A僅在無其他任務占用CPU時執(zhí)行,靜態(tài)變量s可能并非一直連續(xù)計數(shù),有可能在其他具有更高優(yōu)先級的任務插入時,即在CPU不空閑時中止計數(shù),待該更高優(yōu)先級的任務結(jié)束時,即在CPU再度空閑時繼續(xù)計數(shù),最終輸出靜態(tài)變量S。
[0027]假設(shè)在第η個統(tǒng)計時間t內(nèi),最低優(yōu)先級的任務A計數(shù)并記錄靜態(tài)變量s ;在第n+1個統(tǒng)計時間t內(nèi),同樣地,最低優(yōu)先級的任務A繼續(xù)計數(shù)并記錄靜態(tài)變量S。較高優(yōu)先級的任務B在每一個統(tǒng)計時間t執(zhí)行一