專利名稱:一種實(shí)時多任務(wù)操作系統(tǒng)的定時器調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)中的操作系統(tǒng)領(lǐng)域,具體地說,涉及一種實(shí)時多任務(wù)操作系統(tǒng)的定時器調(diào)度方法。
背景技術(shù):
在計算機(jī)應(yīng)用中,操作系統(tǒng)是用戶與計算機(jī)硬件之間的橋梁,它方便了用戶對計算機(jī)資源的管理。在操作系統(tǒng)中,有些用戶要求計算機(jī)在特定的時間和空間內(nèi)完成特定的任務(wù),這對操作系統(tǒng)提出了實(shí)時性要求。實(shí)時操作系統(tǒng)是指用戶要求在限定時間內(nèi)必須有相應(yīng)反應(yīng)的系統(tǒng),如果邏輯和時序出現(xiàn)偏差則會引起嚴(yán)重后果。實(shí)時操作系統(tǒng)廣泛應(yīng)用于生產(chǎn)過程控制、汽車工業(yè)、計算機(jī)外設(shè)、通信設(shè)備、機(jī)器人、航空航天、民用消費(fèi)等領(lǐng)域。
對于一般的操作系統(tǒng),如果只要求有一定的結(jié)果,則操作系統(tǒng)只需對系統(tǒng)資源進(jìn)行管理并響應(yīng)用戶的操作動作即可。對于實(shí)時操作系統(tǒng),則必須及時響應(yīng)用戶操作。隨著任務(wù)量的增大和資源的增加,實(shí)時操作系統(tǒng)既要進(jìn)行多任務(wù)處理和共享資源的管理,又要及時響應(yīng)用戶的操作,從而對實(shí)時操作系統(tǒng)的性能提出了更高的要求。
操作系統(tǒng)一般由進(jìn)程調(diào)度管理、資源管理、進(jìn)程同步和通信、時間控制等幾部分組成。實(shí)時操作系統(tǒng)對時序的偏差要求很強(qiáng),因此定時器調(diào)度作為實(shí)時操作系統(tǒng)時間管理的核心就十分重要。
在網(wǎng)絡(luò)通信中,一次通信過程需要多個定時器來完成不同的計時任務(wù)。當(dāng)同時通信的用戶數(shù)增加時,所需定時器的數(shù)目急劇增加。如果定時器的調(diào)度方法效率低,則會因定時器數(shù)目太大而造成定時處理耗用系統(tǒng)資源過大,延長對用戶的反應(yīng)時間,影響定時精度,進(jìn)而影響整個系統(tǒng)的性能。因此,定時器調(diào)度方法的效率高低是反映實(shí)時操作系操性能的重要指標(biāo)之一。
定時器的時鐘來源于硬件時鐘中斷。時鐘中斷會每隔一定周期產(chǎn)生,該周期為最小計時時長,即定時器的計時精度,對硬件時鐘的中斷處理稱為計時周期。
目前定時器的調(diào)度方法很多,主要有以下三種類型第一種類型參見附圖2,所有的定時器按照到期時間的先后排成一個順序鏈表。在每個計時周期,鏈表指針后移一個節(jié)點(diǎn),然后考察當(dāng)前的鏈表節(jié)點(diǎn)如果沒有定時器到期,則等下一個計時周期;如果有定時器到期,就執(zhí)行該節(jié)點(diǎn)上所有定時器的任務(wù)并刪除對應(yīng)的定時器。這種計時方法稱為簡單計時法。
第二種類型參見附圖3,定時器按到期的時間長度線性分段,比如按0~99、100~199、200~299、……進(jìn)行分段,每個定時器在自己所屬的時段中進(jìn)行排序,這樣可以減少排序的數(shù)量。對定時器的處理與類型一相同。
第三種類型參見附圖4,定時器按到期的時間長度非線性分段,比如按0~3、4~7、8~15、16~31、…分段,區(qū)間長度呈指數(shù)上升,與類型二相比這種類型可以進(jìn)一步減少分段數(shù)目。對定時器的處理與類型一相同。
上述三種類型中,對定時器的調(diào)度過程也就是確定新定時器加入到鏈表的哪一個節(jié)點(diǎn)上的過程。其中第一種類型不額外占用系統(tǒng)資源,對定時器的操作和判斷幾乎不費(fèi)時間,但是增加新定時器時需要花費(fèi)較長時間對所有定時器重新進(jìn)行排序;第二種類型雖然排序操作次數(shù)有了一定的減小,但是與第一種類型相比本質(zhì)不變,當(dāng)需要加入到期時間為100000的定時器時,至少需要1000個分段,即1000個節(jié)點(diǎn),其效率仍然很低。第三種的算法在第二種的基礎(chǔ)上進(jìn)行了一些改進(jìn),減少了分段的個數(shù),計時效率有一定的提高,但是每當(dāng)新增定時器時,必須對當(dāng)前所有定時器重新進(jìn)行分段,增加了不必要的操作,降低了效率。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種分段排序的實(shí)時多任務(wù)操作系統(tǒng)的定時器調(diào)度方法,它克服了現(xiàn)有實(shí)時操作系統(tǒng)定時器調(diào)度方法中存在大量冗余操作和重復(fù)排序操作的缺點(diǎn),提高了定時效率,而且具有伸縮性,適用于不同規(guī)模的實(shí)時操作系統(tǒng)。
本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案包括以下環(huán)節(jié)1)設(shè)置M個循環(huán)鏈表,M為不小于2的整數(shù);2)循環(huán)鏈表的初始化根據(jù)設(shè)置的循環(huán)鏈表的個數(shù)M,建立M個循環(huán)鏈表,這些循環(huán)鏈表構(gòu)成類似于時鐘的結(jié)構(gòu)計時間隔最短的循環(huán)鏈表為第一循環(huán)鏈表(T1),它等分成N1個節(jié)點(diǎn),依次編號0~N1-1,相鄰節(jié)點(diǎn)的時間間隔等于操作系統(tǒng)定時器的計時周期τ;第二循環(huán)鏈表(T2)等分成N2個節(jié)點(diǎn),依次編號0~N2-1,相鄰節(jié)點(diǎn)間的時間間隔等于第一循環(huán)鏈表T1的循環(huán)周期N1τ;第三循環(huán)鏈表(T3)等分成N3個節(jié)點(diǎn),依次編號0~N3-1,相鄰節(jié)點(diǎn)間的時間間隔等于第二循環(huán)鏈表T2的循環(huán)周期N2N1τ;以此類推,其余循環(huán)鏈表的結(jié)構(gòu)及關(guān)系與此類似,可分別稱之為第四循環(huán)鏈表(T4)、第五循環(huán)鏈表(T5)、第六循環(huán)鏈表(T6)等等,各循環(huán)鏈表內(nèi)的節(jié)點(diǎn)數(shù)目相等或不等;3)新定時器的加入上層應(yīng)用程序產(chǎn)生新定時器任務(wù)時,首先計算新定時器的設(shè)定時間與當(dāng)前時刻的間隔D;如果新定時器的設(shè)定時間在第M循環(huán)鏈表TM的第NM-1號節(jié)點(diǎn)的計時范圍外,即D>N1N2…(NM-1)τ,就將新定時器加到第M循環(huán)鏈表TM的第NM-1號節(jié)點(diǎn)上;否則根據(jù)D的大小按如下步驟將新定時器加入到某個循環(huán)鏈表的恰當(dāng)節(jié)點(diǎn)上;①置i=M,記從T1到TM各循環(huán)鏈表的當(dāng)前節(jié)點(diǎn)編號依次為A1、A2、…、AM;②計算 即Q為商的整數(shù)部分;③如果Q=0,且i>1,則i=i-1,返回步驟②;④將新定時器加入到循環(huán)鏈表Ti的第n號節(jié)點(diǎn)上,n=[(Q+Ai)mod Ni],即n為(Q+Ai)除以Ni的余數(shù);結(jié)束新定時器的加入操作。
4)定時器位置的調(diào)度更新在每個計時周期,第一循環(huán)鏈表T1的指針向后移動一個節(jié)點(diǎn),然后考察當(dāng)前指向的節(jié)點(diǎn)如果當(dāng)前節(jié)點(diǎn)上沒有定時器,就等下一個計時周期;如果當(dāng)前節(jié)點(diǎn)上有定時器,就執(zhí)行這個節(jié)點(diǎn)上所有定時器的任務(wù)并刪除對應(yīng)的定時器;當(dāng)?shù)谝谎h(huán)鏈表T1的指針移動N1次完成一個循環(huán)后,T1的指針重新指向0號節(jié)點(diǎn),同時將第二循環(huán)鏈表T2的指針移動一個節(jié)點(diǎn),并將新指向節(jié)點(diǎn)上的所有定時器按如下步驟分別轉(zhuǎn)移到第一循環(huán)鏈表T1的相應(yīng)節(jié)點(diǎn)上①計算定時器設(shè)定時間與當(dāng)前時刻的差D;②計算R=D mod N1,即R為D除以N1的余數(shù);③將定時器加入到T1的R號節(jié)點(diǎn)上。
其它循環(huán)鏈表的更新依此類推;當(dāng)循環(huán)鏈表TM的指針指向第NM-1號節(jié)點(diǎn)時,對該節(jié)點(diǎn)上設(shè)定到期時刻與當(dāng)前時刻的差D<N1N2…(NM-1)τ的那部分定時器按新定時器的加入方法轉(zhuǎn)移到其它鏈表的節(jié)點(diǎn)上,對不符合上述條件的其它定時器不作改變,然后將表TM的指針移動到0號節(jié)點(diǎn)。
采用本發(fā)明所述的多循環(huán)隊列定時器調(diào)度方法,經(jīng)過模擬測試,與現(xiàn)有技術(shù)相比,定時器在各種負(fù)載下的平均性能提高10倍以上,達(dá)到了高性能、高效率、高均衡性的統(tǒng)一,并且實(shí)現(xiàn)簡單,節(jié)省了實(shí)時操作系統(tǒng)的定時器管理、調(diào)度所需的計算資源。
圖1為本發(fā)明實(shí)施例中的定時器循環(huán)鏈表結(jié)構(gòu)示意圖。
圖2為第一種現(xiàn)有技術(shù)的定時器調(diào)度方法示意圖。
圖3為第二種現(xiàn)有技術(shù)的定時器調(diào)度方法示意圖。
圖4為第三種現(xiàn)有技術(shù)的定時器調(diào)度方法示意圖。
具體實(shí)施例方式
以下結(jié)合附圖實(shí)施例對發(fā)明作進(jìn)一步詳細(xì)描述。
由于定時器的排序查找與一般的情形不同,處理器最關(guān)心當(dāng)前到期的定時器,對以后到期的定時器以后再關(guān)心。因此,沒有必要對很長時間以后的定時器進(jìn)行排序,只需要把最近有限時間內(nèi)的定時器安排好就行了。
因此,根據(jù)定時器的定時長度進(jìn)行分組,如圖1所示,為本發(fā)明調(diào)度定時器的循環(huán)鏈表的一個實(shí)施例假定循環(huán)鏈表個數(shù)M為4,M個循環(huán)鏈表按定時間隔由短到長排序,依次記為T1,T2,…,T4(即TM),各循環(huán)鏈表中節(jié)點(diǎn)數(shù)分別取為N1=8,N2=8,N3=4,N4=4,它們的結(jié)構(gòu)與時鐘相似。每個鏈表的指針是Index[i],循環(huán)鏈表上每個圓點(diǎn)代表一個節(jié)點(diǎn)Vor[i],每個節(jié)點(diǎn)Vor[i]上都可以掛一串定時器。當(dāng)指針走到某個Vor[i]時,就對該節(jié)點(diǎn)上所有定時器進(jìn)行有關(guān)的處理。T1是最基本的循環(huán)鏈表,在每個時鐘周期,T1的指針移動一個節(jié)點(diǎn),執(zhí)行節(jié)點(diǎn)上掛的定時器對應(yīng)的任務(wù)。T1的指針完成一次循環(huán)后,T2的指針移動一個節(jié)點(diǎn)從而指向T2.Vor[4],該節(jié)點(diǎn)上的四個定時器依設(shè)定的時間按定時器位置調(diào)度更新方法中所述的步驟掛接到T1的相應(yīng)節(jié)點(diǎn)上去,這樣當(dāng)T1的指針移動時會依次執(zhí)行定時器的任務(wù)。其它循環(huán)鏈表的更新依此類推。
如果把第一循環(huán)鏈表T1稱為‘秒表’,第二循環(huán)鏈表T2稱為‘分表’的話,上述關(guān)于定時器的調(diào)度方法可描述為首先依次執(zhí)行當(dāng)前‘秒表’上所有‘秒’的定時器任務(wù);過了一‘分’后,將下一個‘分’節(jié)點(diǎn)(T2.Vor[4])的所有定時器以‘秒’為單位轉(zhuǎn)移到‘秒表’T1的相應(yīng)節(jié)點(diǎn)上;同理,當(dāng)‘分表’T2完成一次循環(huán)指向0號節(jié)點(diǎn)時,將‘時表’T3下一個‘時’節(jié)點(diǎn)(T3.Vor[3])上的所有定時器以‘分’為單位轉(zhuǎn)移到‘分表’T2的相應(yīng)節(jié)點(diǎn)上,并繼續(xù)把‘分表’T2當(dāng)前節(jié)點(diǎn)(即T2.Vor
)上的所有定時器以‘秒’為單位轉(zhuǎn)移到‘秒表’T1的相應(yīng)節(jié)點(diǎn)上;依此類推。當(dāng)某一定時器到期時,操作系統(tǒng)執(zhí)行完定時器相應(yīng)的任務(wù)后會自動刪除該定時器。
插入新定時器時,需要考察插入定時器的設(shè)定時間。記新定時器的設(shè)定時間與當(dāng)前時刻的時間間隔為D。如果D在一‘分’內(nèi)(即D<N1τ),則直接將新定時器加入到T1的某個節(jié)點(diǎn)上,新節(jié)點(diǎn)編號=(T1的當(dāng)前節(jié)點(diǎn)編號+時間差值D)/N1的余數(shù);如果D長于一‘分’但短于一‘時’(N1τ<D<N1N2τ),則將新定時器加入到T2的某個節(jié)點(diǎn)上,新節(jié)點(diǎn)編號=(T2當(dāng)前節(jié)點(diǎn)編號+時間差值D/N1的整數(shù)部分)/N2的余數(shù);其余依此類推;如果D>N1N2…(NM-1)τ,則將新定時器加入到第M個循環(huán)鏈表TM的第NM-1號節(jié)點(diǎn)上。
綜上所述,本發(fā)明采用多循環(huán)隊列的時鐘結(jié)構(gòu)進(jìn)行定時器的調(diào)度,實(shí)現(xiàn)簡單,在空間和時間上效率都很高,節(jié)省了系統(tǒng)的資源。
權(quán)利要求
1.一種實(shí)時多任務(wù)操作系統(tǒng)的定時器調(diào)度方法,其特征在于包括以下環(huán)節(jié)1)設(shè)置M個循環(huán)鏈表,M為不小于2的整數(shù);2)循環(huán)鏈表的初始化根據(jù)設(shè)置的循環(huán)鏈表的個數(shù)M,建立M個循環(huán)鏈表,這些循環(huán)鏈表構(gòu)成類似于時鐘的結(jié)構(gòu)計時間隔最短的循環(huán)鏈表為第一循環(huán)鏈表(T1),它等分成N1個節(jié)點(diǎn),依次編號0~N1-1,相鄰節(jié)點(diǎn)的時間間隔等于操作系統(tǒng)的定時器的計時周期τ;第二循環(huán)鏈表(T2)等分成N2個節(jié)點(diǎn),依次編號0~N2-1,相鄰節(jié)點(diǎn)間的時間間隔等于第一循環(huán)鏈表T1的循環(huán)周期N1τ;第三循環(huán)鏈表(T3)等分成N3個節(jié)點(diǎn),依次編號0~N3-1,相鄰節(jié)點(diǎn)間的時間間隔等于第二循環(huán)鏈表T2的循環(huán)周期N2N1τ;以此類推,余下循環(huán)鏈表的結(jié)構(gòu)及關(guān)系與此類似,可分別稱之為第四循環(huán)鏈表(T4)、第五循環(huán)鏈表(T5)、第六循環(huán)鏈表(T6)等等,各循環(huán)鏈表內(nèi)的節(jié)點(diǎn)數(shù)目相等或不等;3)新定時器的加入上層應(yīng)用程序產(chǎn)生新定時器任務(wù)時,首先計算新定時器的設(shè)定時間與當(dāng)前時刻的間隔D;如果新定時器的設(shè)定時間在第M循環(huán)鏈表TM的第NM-1號節(jié)點(diǎn)的計時范圍外,即D>N1N2…(NM-1)τ,就將新定時器加到第M循環(huán)鏈表TM的第MM-1號節(jié)點(diǎn)上;否則根據(jù)D的大小按如下步驟將新定時器加入到某個循環(huán)鏈表的恰當(dāng)節(jié)點(diǎn)上;①置i=M,記從T1到TM各循環(huán)鏈表的當(dāng)前節(jié)點(diǎn)編號依次為A1、A2、...、AM;②計算 即Q為商的整數(shù)部分;③如果Q=0,且i>1,則i=i-1,返回步驟②;④將新定時器加入到循環(huán)鏈表Ti的第n號節(jié)點(diǎn)上,n=[(Q+Ai)mod Ni],即n為(Q+Ai)除以Ni的余數(shù);結(jié)束新定時器的加入操作。4)定時器位置的調(diào)度更新在每個計時周期,第一循環(huán)鏈表T1的指針向后移動一個節(jié)點(diǎn),然后考察當(dāng)前指向的節(jié)點(diǎn)如果當(dāng)前節(jié)點(diǎn)上沒有定時器,就等下一個計時周期;如果當(dāng)前節(jié)點(diǎn)上有定時器,就執(zhí)行這個節(jié)點(diǎn)上所有定時器的任務(wù)并刪除對應(yīng)的定時器;當(dāng)?shù)谝谎h(huán)鏈表T1的指針移動N1次完成一個循環(huán)后,T1的指針重新指向0號節(jié)點(diǎn),同時將第二循環(huán)鏈表T2的指針移動一個節(jié)點(diǎn),并將新指向節(jié)點(diǎn)上的所有定時器按如下步驟分別轉(zhuǎn)移到第一循環(huán)鏈表T1的相應(yīng)節(jié)點(diǎn)上①計算定時器設(shè)定時間與當(dāng)前時刻的差D;②計算R=D mod N1,即R為D除以N1的余數(shù);③將定時器加入到T1的R號節(jié)點(diǎn)上。其它循環(huán)鏈表的更新依此類推。
2.如權(quán)利要求1所述的定時器調(diào)度方法,其特征在于還包括以下環(huán)節(jié)當(dāng)循環(huán)鏈表TM的指針指向第NM-1號節(jié)點(diǎn)時,對該節(jié)點(diǎn)上設(shè)定到期時刻與當(dāng)前時刻的差D<N1N2…(NM-1)τ的那部分定時器按新定時器的加入方法轉(zhuǎn)移到其它鏈表的節(jié)點(diǎn)上,對不符合上述條件的其它定時器不作改變,然后將表TM的指針移動到0號節(jié)點(diǎn)。
全文摘要
本發(fā)明提供一種實(shí)時操作系統(tǒng)中基于時鐘結(jié)構(gòu)的定時器調(diào)度方法,包括建立M個循環(huán)鏈表,按定時間隔由短到長依次標(biāo)記為T
文檔編號G06F9/46GK1645334SQ20051004894
公開日2005年7月27日 申請日期2005年1月12日 優(yōu)先權(quán)日2005年1月12日
發(fā)明者何加銘, 聶秋華, 徐鐵峰, 曾興斌, 鄧青玲, 朱風(fēng)波 申請人:寧波大學(xué), 寧波新然電子信息科技發(fā)展有限公司