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