專利名稱:實時操作系統(tǒng)中的任務延時處理方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及實時操作系統(tǒng),尤其涉及一種實時操作系統(tǒng)中的任務延時處 理方法及系統(tǒng)。
背景技術(shù):
實時操作系統(tǒng)是 一 種能夠在指定或者確定時間內(nèi)完成系統(tǒng)功能,并且對 外部和內(nèi)部事件在同步或者異步時間內(nèi)能做出及時響應的系統(tǒng)。在實時操作
系統(tǒng)中,操作的正確性不僅依賴于邏輯設(shè)計的正確程度,而且與這些操作運 行的時間有關(guān),也就是說,實時系統(tǒng)對邏輯和時序的要求非常嚴格,如果邏 輯和時序控制出現(xiàn)偏差,則將會產(chǎn)生嚴重后果。
為了提供對于實時性的支持,實時操作系統(tǒng)必須對CPU和其他資源進
行有效的調(diào)度和管理,即實時調(diào)度。實時操作系統(tǒng)中各任務(該任務可以是 線程)的狀態(tài)主要有就緒狀態(tài)、運行狀態(tài)、等待狀態(tài)、中斷狀態(tài)和休眠狀態(tài)。 其中,由于休眠狀態(tài)比較少有,因此不再詳述,圖l示出了其它各狀態(tài)之間 的轉(zhuǎn)換關(guān)系,如圖l所示,就緒狀態(tài)會向運行狀態(tài)轉(zhuǎn)換、運行狀態(tài)中會出現(xiàn) 中斷狀態(tài),中斷狀態(tài)結(jié)束后會返回運行狀態(tài),運行狀態(tài)結(jié)束后進行等待狀態(tài), 等待狀態(tài)再向就緒狀態(tài)進行轉(zhuǎn)換。
具體實現(xiàn)時,將處于就緒狀態(tài)的任務放入就緒隊列中,對就緒隊列中的 任務可基于搶占點進行調(diào)度,即在搶占點上進行任務的切換調(diào)度。其中一種 搶占點可以是按照規(guī)定的時間間隔設(shè)置的搶占點,即一般情況下每隔一定的 時間中斷一次,通常稱為時鐘節(jié)拍或時鐘周期,該時鐘節(jié)拍可看作是系統(tǒng)心
臟的脈動,中斷之間的時間間隔取決于不同的應用,一4殳在5ms到1 OOms 之間。當時鐘周期到來時,操作系統(tǒng)內(nèi)核會將當前運行的任務延時整數(shù)個時
鐘周期,此時進入調(diào)度的搶占點。
由于實時性是實時操作系統(tǒng)內(nèi)核最重要的特性之一。因此,如何在每個 搶占點進行快速調(diào)度對實時系統(tǒng)是非常重要的。通常情況下,當某個任務執(zhí)
行完所要處理的事情并主動放棄CPU時,或某個任務因需要資源而資源沒
有得到時被迫掛起時,會有一定的延時,此時任務進入等待狀態(tài),可被放入 延時隊列中,當操作系統(tǒng)的時鐘周期到來時,延時隊列中所有任務的用時鐘 周期表示的延時時間分別減去1個時鐘周期,當延時隊列中任務的延時時間
為o時,將此任務放入就緒隊列中??梢?,延時隊列中任務延時的處理占用
的是時鐘周期中斷時的搶占點的資源,若該資源占用過多,則任務調(diào)度的響 應時間就會降低。
現(xiàn)有技術(shù)中,延時隊列是一個單向連表,如圖l(a)所示,圖l(a)所示的 延時隊列連表中已存在需要延時IO個時鐘周期的任務1、需要延時20個時 鐘周期的任務5等任務,當有新的任務需要延時時,將此任務加入到連表的 尾部,如圖l(b)所示,任務27即為剛剛加入到延時隊列中的任務。當時鐘 周期到來時,操作系統(tǒng)將在延時隊列頭中依次取出各任務,并將各任務的延 時時間減去1,結(jié)果如圖](c)所示,每個任務的延時時間值均減少1,當延 時隊列中存在延時時間為O的任務時,將該延時時間為O的任務移出延時隊 列,放入就緒隊列中,則延時隊列連表如圖l(d)所示,去掉了任務l??梢?, 現(xiàn)有技術(shù)中,每發(fā)生一次時鐘周期,都要從延時隊列的頭掃描到尾,加上時 鐘周期發(fā)生的頻率通常很頻繁,如果延時隊列比較長,則系統(tǒng)的負擔就會很 大,則會影響任務調(diào)度的響應時間,降低了實時性。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明中一方面提供一種嵌入式實時系統(tǒng)中的任務延時處理 方法,另一方面提供一種嵌入式實時系統(tǒng)中的任務延時處理系統(tǒng),以便提高
實時性。
本發(fā)明所提供的嵌入式實時系統(tǒng)中的任務延時處理方法,包括
在延時隊列為空時,將需要延時的當前任務加入延時隊列中,否則將所述 當前任務按照任務的絕對延時時間的升序加入到延時隊列中,并計算出延時隊
列中相鄰任務之間的相對延時時間;
當時鐘周期到來時,判斷延時隊列中第一個任務的延時時間是否為1個時
鐘周期,如果是,則將所述第一個任務及緊鄰其后的相對延時時間為0的任務 從延時隊列中移出;否則,將所述第一個任務的延時時間減去1個時鐘周期。 其中,所述將當前任務按照任務的絕對延時時間的升序加入到延時隊列中,
Al、從延時隊列中提取第一個任務作為當前進行比較的任務; B1 、判斷所提取的任務的絕對延時時間是否大于等于當前任務的絕對延時 時間,如果是,則執(zhí)行步驟C1后結(jié)束;否則,執(zhí)行步驟D1;
Cl、將當前任務插入所述任務之前,并將所述任務的絕對延時時間減去當
是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任務之前緊 鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間;
Dl、判斷所提取的任務是否為延時隊列中的最后一個任務,如果是,則將 所述當前任務加入所述任務之后,并將所述當前任務的絕對延時時間減去所述 任務的絕對延時時間的差值作為當前任務的相對延時時間;否則,從延時隊列 中提取下一個任務作為當前進行比較的任務,并返回執(zhí)行步驟B1。
或者,所述將當前任務按照任務的絕對延時時間的升序加入到延時隊列中, 并計算出延時隊列中相鄰任務之間的相對延時時間包括
A2、從延時隊列中提取最后一個任務作為當前進行比較的任務;
B2、判斷所提取的任務的絕對延時時間是否小于等于當前任務的絕對延時 時間,如果是,則執(zhí)行步驟C2后結(jié)束;否則,執(zhí)行步驟D2;
C2、將當前任務加入所述任務之后,并將所述當前任務的絕對延時時間減 去所述任務的絕對延時時間后的差值作為當前任務的相對延時時間,若當前任 務不是延時隊列的最后一個任務,則將當前任務之后緊鄰的任務的絕對延時時 間減去當前任務的絕對延時時間的差值作為當前任務之后的所述任務的相對延
時時間;
D2、判斷所提取的任務是否為延時隊列中的第一個任務,如果是,則 將所述當前任務加入所述任務之前,并將所述任務的絕對延時時間減去當前 任務的絕對延時時間的差值作為所述任務的相對延時時間;否則,從延時隊 列中提取前一個任務作為當前進行比較的任務,并返回執(zhí)行步驟B2。 本發(fā)明所提供的嵌入式實時系統(tǒng)中的任務延時處理系統(tǒng),包括
延時隊列加入模塊,用于在延時隊列為空時,將需要延時的當前任務加入 延時隊列中,否則將所述當前任務按照任務的絕對延時時間的升序加入到延時 隊列中,并計算出延時隊列中相鄰任務之間的相對延時時間;
延時處理模塊,用于在時鐘周期到來時,判斷延時隊列中第一個任務的延 時時間是否為1個時鐘周期,如果是,則將所述第一個任務及緊鄰其后的相對 延時時間為0的任務從延時隊列中移出;否則,將所述第一個任務的延時時間 減去1個時鐘周期。
其中,所述延時隊列加入模塊包括
任務提取模塊,用于從第一個任務開始依次從延時隊列中提取當前進行比 較的任務;
絕對延時時間比較模塊,用于將所述任務提取模塊所提取的任務的絕對延 時時間與當前任務的絕對延時時間進行比較,并將比較結(jié)果輸出給當前任務加 入模塊;
當前任務加入模塊,用于在所述比較結(jié)果為所提取的任務的絕對延時時間 大于等于當前任務的絕對延時時間時,將當前任務加入所述任務之前;在所述 比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所提 取的任務為延時隊列中的最后一個任務時,將當前任務加入所述任務之后;在 所述比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且 所提取的任務不是延時隊列中的最后一個任務時,指示所述任務提取模塊提取 當前比較的任務;
相對時間計算模塊,用于在當前任務加入延時隊列后,若當前任務不是延 時隊列的最后 一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減去當 前任務的絕對延時時間后的差值作為所述任務的相對延時時間,若當前任務不 是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任務之前緊 鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間。
或者,所述延時隊列加入模塊包括
任務提取模塊,用于從最后一個任務開始依次從延時隊列中提取當前進行
比較的任務;
絕對延時時間比較模塊,用于將所述任務提取模塊所提取的任務的絕對延 時時間與當前任務的絕對延時時間進行比較,并將比較結(jié)果輸出給當前任務加 入模塊;
當前任務加入模塊,用于在所述比較結(jié)果為所提取的任務的絕對延時時間 小于等于當前任務的絕對延時時間時,將當前任務加入所述任務之后;在所述 比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所提 取的任務為延時隊列中的最后一個任務時,將當前任務加入所述任務之前;在 所述比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且 所提取的任務不是延時隊列中的最后一個任務時,指示所述任務提取模塊提取 當前比較的任務;
相對時間計算模塊,用于在當前任務加入延時隊列后,若當前任務不是 延時隊列的最后一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減
任務不是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任 務之前緊鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間。
從上述方案可以看出,本發(fā)明中通過將各任務按照任務的絕對延時時間 的升序加入到延時隊列中,并計算出延時隊列中相鄰任務之間的相對延時時 間,從而在時鐘周期到來時,只需判斷延時隊列中第一個任務的延時時間是 否為]個時鐘周期,如果不是,則將所述第一個任務的延時時間減去1個時鐘周期,從而完成延時;否則將第一個任務及緊鄰其后的相對延時時間為0
的任務從延時隊列中取出并加入到就緒隊列中即可,無需遍歷整個連表,并 且延時處理只需一個簡單的減法操作便可完成,從而大大節(jié)省了時間,提高 了系統(tǒng)的響應時間,進而提高了實時性。
圖1(a) 圖l(d)為現(xiàn)有技術(shù)中任務延時處理的示意的一個流程示意圖4為本發(fā)明實施例中任務延時處理過程中任務加入延時隊列的方法 的又一個流程示意流程圖6(a) 圖6(d)為本發(fā)明實施例中任務延時處理的示意圖; 圖7為本發(fā)明實施例中任務延時處理系統(tǒng)的示例性結(jié)構(gòu)圖; 圖8為圖7所示系統(tǒng)中延時隊列加入模塊的內(nèi)部結(jié)構(gòu)示意圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下面結(jié)合實施例和 附圖,對本發(fā)明進一步詳細說明。
圖2示出了本發(fā)明實施例中任務延時處理方法的示例性流程圖,如圖2 所示,該流程包括如下步驟
步驟201 ,將各任務按照任務的絕對延時時間的升序加入到延時隊列中, 并計算出延時隊列中相鄰任務之間的相對延時時間。
本步驟中,在延時隊列為空時,將需要延時的當前任務直接加入延時隊 列中;否則,將需要延時的當前任務按照任務的絕對延時時間的升序加入到
延時隊列中,并計算出延時隊列中相鄰任務之間的相對延時時間。
步驟202,當時鐘周期到來時,判斷延時隊列中第一個任務的延時時間 是否為l個時鐘周期,如果是,則將所述第一個任務及緊鄰其后的相對延時
時間為0的任務從延時隊列中移出;否則,將所述第一個任務的延時時間減 去l個時鐘周期。
其中,從延時對列中移出的任務可加入到就緒對列中。此外,本實施例 中的延時隊列可以通過連表實現(xiàn),且該連表可以是單向連表,也可以是雙向 連表,當為雙向連表時,延時隊列連表中的任務不僅可以從頭找到尾,也可 以從尾找到頭。
下面對上述圖2所示流程中的具體實現(xiàn)進行詳細描述。
圖3示出了本發(fā)明實施例中任務延時處理過程中任務加入延時隊列的 方法的一個流程示意圖。本流程中,從延時隊列中提取當前進行比較的任務 時,可按照延時隊列從尾到頭的順序進行提取,即從第一個任務開始依次向 后從延時對列中提取作為當前進行比較的任務。
如圖3所示,該流程包括如下步驟
步驟301,當前任務需要延時。
本步驟中,當前任務可以是完成要處理的操作后主動放棄CPU,則將 該主動放棄CPU并需要延時的任務從就緒隊列中移出。
步驟302,判斷當前延時隊列是否為空,如果是,則執(zhí)行步驟303后結(jié) 束;否則,只需步驟304。
步驟303,將當前任務直接加入延時隊列中。
步驟304,從延時隊列中提取當前進行比較的任務。
步驟305,將所提取的任務的絕對延時時間與當前任務的絕對延時時間 進行比較,若所提取的任務的絕對延時時間大于當前任務的絕對延時時間, 則執(zhí)行步驟306;若所提取的任務的絕對延時時間等于當前任務的絕對延時 時間,則執(zhí)行步驟308;若所提取的任務的絕對延時時間小于當前任務的絕 對延時時間,則執(zhí)行步驟310。步驟306,將當前任務插入所提取的任務前面。
步驟307,將所述提取的任務的絕對延時時間減去當前任務的絕對延時 時間后的差值作為所述提取的任務的相對延時時間,若當前任務不是延時隊 列的第 一個任務,則將當前任務的絕對延時時間減去當前任務之前緊鄰的任 務的絕對延時時間的差值作為當前任務的相對延時時間,之后結(jié)束。
步驟308,將當前任務插入所提取的任務前面。
步驟309,將所述提取的任務的相對延時時間修改為0,若當前任務不 是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任務之前 緊鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間,之后結(jié)束。
步驟310,判斷所提取的任務是否為延時隊列中的最后一個任務,如果 不是,則返回執(zhí)行步驟304;否則,執(zhí)行步驟311。
步驟311,將當前任務插入所提取的任務后面,即最后一個節(jié)點。
步驟312,將當前任務的絕對延時時間減去所提取的任務的絕對延時時 間的差值作為當前任務的相對延時時間,之后結(jié)束。
此外,圖4示出了本發(fā)明實施例中任務延時處理過程中任務加入延時隊 列的方法的又一個流程示意圖。本流程中,從延時隊列中提取當前進行比較 的任務時,可按照延時隊列從尾到頭的順序進行提取,即從最后一個任務開 始依次向前從延時對列中提取作為當前進行比較的任務。
如圖4所示,該流程包括如下步驟
步驟401,當前任務需要延時。
本步驟中,當前任務可以是完成要處理的操作后主動放棄CPU,則將 該主動放棄CPU并需要延時的任務從就緒隊列中移出。
步驟402,判斷當前延時隊列是否為空,如果是,則執(zhí)行步驟403后結(jié) 束;否則,只需步驟404。
步驟403,將當前任務直接加入延時隊列中。
步驟404,從延時隊列中提取當前進行比較的任務。
步驟405,將所提取的任務的絕對延時時間與當前任務的絕對延時時間
進行比較,若所提取的任務的絕對延時時間小于當前任務的絕對延時時間,
則執(zhí)行步驟406;若所提取的任務的絕對延時時間等于當前任務的絕對延時 時間,則執(zhí)行步驟408;若所提取的任務的絕對延時時間大于當前任務的絕 對延時時間,則執(zhí)行步驟410。
步驟406,將當前任務插入所提取的任務后面。
步驟407,將當前任務的絕對延時時間減去所述提取的任務的絕對延時 時間后的差值作為當前任務的相對延時時間,若當前任務不是延時隊列的最 后一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減去當前任務的 絕對延時時間的差值作為當前任務之后緊鄰的任務的相對延時時間,之后結(jié)束。
步驟408,將當前任務插入所提取的任務后面。
步驟409,將當前任務的相對延時時間設(shè)置為0,若當前任務不是延時 隊列的最后 一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減去當 前任務的絕對延時時間的差值作為當前任務之后緊鄰的任務的相對延時時 間,之后結(jié)束。
步驟410,判斷所提取的任務是否為延時隊列中的第一個任務,如果不 是,則返回執(zhí)行步驟404;否則,執(zhí)行步驟411。
步驟411,將當前任務插入所提取的任務前面,即第一個節(jié)點。
步驟412,將所提取的任務的絕對延時時間減去當前任務的絕對延時時 間的差值作為所提取的任務的相對延時時間,之后結(jié)束。
圖3所示流程中的方法和圖4所示流程中的方法可以交叉使用,即本實 施例中可以使用雙向連表,則此時,可以獲得延時隊列中任務的最大絕對延 時時間和最小絕對延時時間,根據(jù)該最大和最小絕對延時時間可確定新的任 務查找是在雙向連表的頭開始找,還是尾開始找,這樣能夠在一定程度上加 速任務插入延時隊列的速度。
圖5示出了本發(fā)明實施例中任務延時處理過程中任務延時的方法的示
例性流程圖。如圖5所示,該流程包括如下步驟
步驟501,時鐘周期到來時,從延時隊列中取出第一個任務。 步驟502,判斷所述第一個任務的延時時間是否為1個時鐘周期,如果
是,則執(zhí)行步驟503;否則執(zhí)行步驟504。
步驟503,將所述第一個任務的延時時間減去1個時鐘周期,之后結(jié)束。 步驟504,將所述第 一個任務移出延時隊列并加入到就緒隊列中。 步驟505,從延時隊列中取出下一個任務。
步驟506,判斷所取出的任務的相對延時時間是否為0,如果是,則執(zhí) 行步驟507;否則,結(jié)束。
步驟507,將所述任務移出延時隊列并加入到就緒隊列中,之后返回執(zhí) 行步驟505。
下面以從頭到尾的順序查找延時隊列的情況為例,列舉 一 個示例 當需要延時IO個時鐘周期(Tick)的任務1 (Taskl)需要加入延時隊 列時,假設(shè)此時延時隊列為空,則將該任務1直接插入延時隊列,如圖6(a)所示。
假設(shè)之后需要延時20個時鐘周期的任務5 (Task5)需要加入延時隊列 時,查找延時隊列中第一個任務節(jié)點,即任務l,將該任務l的絕對延時時 間和需要加入延時隊列的任務5的絕對延時時間進行比較,發(fā)現(xiàn)是小于的情 況,則將任務5加入任務1之后,并將任務5和任務1的絕對延時時間做一 個差值,得到任務5的相對延時時間為IO個時鐘周期,如圖6(b)所示。
如果這時又有一個需要延時5個時鐘周期的任務20 (Task20)需要加 入延時隊列,則查找延時隊列中第一個節(jié)點,即任務l,將該任務l的絕對 延時時間和需要加入延時隊列的任務20的絕對延時時間進行比較,發(fā)現(xiàn)是 是大于的情況,則將任務20插入到任務1之前,即成為延時隊列的第一個 節(jié)點,則將任務1和任務20的絕對延時時間做個差值,得到任務1的相對 延時時間為5個時鐘周期,如圖6(c)所示。
如果此時又有一個需要延時15個時鐘周期的任務27 (Task27)需要加 入延時隊列,則從連表的頭開始查找,如果第一個節(jié)點(即任務20)的絕
對延時時間小于需要加入延時隊列的任務(即任務27 )的絕對延時時間(和 上面的處理方法一樣),再查找第二個節(jié)點(即任務l)的絕對延時時間, 其中,第二個節(jié)點的絕對延時時間是第 一個節(jié)點的絕對延時時間和第二個節(jié) 點的相對延時時間之和,即10個時鐘周期,10還是小于任務27的15,于 是繼續(xù)查找下一個節(jié)點,即任務5,任務5的延時是任務1的絕對延時時間 (10個時鐘節(jié))拍加上任務5的相對延時時間(10個時鐘周期),結(jié)果是 20個時鐘周期,大于了任務27的絕對延時時間(15個時鐘周期),于是將 任務27插入在任務1和任務5之間,任務27的絕對延時時間減去任務1的 絕對延時時間,得到任務27的相對延時時間,此時,任務27之后的任務5 的絕對延時時間減去任務27的絕對延時時間,得到任務5的新的相對延時 時間,如圖6(d)所示。
從圖6(a)至圖6(d)可以看出,每一個任務的絕對延時時間是前面各任務 的相對延時時間的總和加上自身的相對延時時間,即任務20的絕對延時時 間是5個時鐘周期,任務1的絕對延時時間是IO個時鐘周期,任務27的絕 對延時時間是15個時鐘周期,任務5的絕對延時時間是20個時鐘周期。
有了上述描述的連表,每來一個時鐘周期時,對延時的處理只需將延時 隊列中第一個節(jié)點的延時時間(絕對延時時間)減去1就可以了,如果第一 個節(jié)點的延時時間變成了 0,則將其移出延時隊列,加入到就緒隊列,依次 類推。這樣每來一次時鐘周期,就只需要作一次簡單的減法操作就可以,節(jié) 省了大量的時間,使得該搶占點時系統(tǒng)的響應時間得到了提高。
明實施例中的延時處理系統(tǒng)進行詳細描述。
圖7示出了本發(fā)明實施例中任務延時處理系統(tǒng)的一個示例性結(jié)構(gòu)圖。如 圖7所示,該系統(tǒng)包括延時隊列加入模塊和延時處理模塊。
其中,延時隊列加入模塊用于在延時隊列為空時,將需要延時的當前任務 直接加入延時隊列中,否則將當前任務按照任務的絕對延時時間的升序加入到
延時隊列中,并計算出延時隊列中相鄰任務之間的相對延時時間。
延時處理模塊用于在時鐘周期到來時,判斷延時隊列中第 一 個任務的延
時時間是否為l個時鐘周期,如果不是,則將所述第一個任務的延時時間減
去1個時鐘周期,否則將所述第一個任務及緊鄰其后的相對延時時間為0的
任務從延時隊列中取出并加入到就緒隊列中。
其中,延時隊列加入模塊具體實現(xiàn)過程中的操作可與圖3或圖4所示流
程中描述的操作一致;延時處理模塊具體實現(xiàn)過程中的操作可與圖5所示流 程中描述的操作一致。
例如,延時隊列加入模塊的一種內(nèi)部結(jié)構(gòu)可如圖8所示,包括任務提 取模塊、絕對延時時間比較模塊、當前任務加入模塊和相對時間計算模塊。
其中,若與圖3所示流程中的描述一致,則延時隊列加入模塊內(nèi)部各模 塊的功能可如下所示
任務提取模塊用于從第一個任務開始(即按照延時隊列從頭到尾的順序) 依次從延時隊列中提取當前進行比較的任務。
絕對延時時間比較模塊用于將所述任務提取模塊所提取的任務的絕對延時 時間與當前任務的絕對延時時間進行比較,并將比較結(jié)果輸出給當前任務加入 模塊。
當前任務加入模塊用于在所述比較結(jié)果為所提取的任務的絕對延時時間大 于等于當前任務的絕對延時時間時,將當前任務加入所述任務之前;在所述比 較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所提取 的任務為延時隊列中的最后一個任務時,將當前任務加入所述任務之后;在所 述比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所 提取的任務不是延時隊列中的最后一個任務時,指示所述任務提取模塊提取當 前比較的任務。
相對時間計算模塊,用于在當前任務加入延時隊列后,若當前任務不是延 時隊列的最后一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減去當 前任務的絕對延時時間后的差值作為所述任務的相對延時時間,若當前任務不
是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去.當前任務之前緊 鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間。
若與圖4所示流程中的描述一致,則延時隊列加入模塊內(nèi)部各模塊的功
能可如下所示
任務提取模塊用于從最后一個任務開始(即按照延時隊列從尾到頭的順序) 依次從延時隊列中提取當前進行比較的任務。
絕對延時時間比較模塊用于將所述任務提取模塊所提取的任務的絕對延時 時間與當前任務的絕對延時時間進行比較,并將比較結(jié)果輸出給當前任務加入 模塊。
當前任務加入模塊用于在所述比較結(jié)果為所提取的任務的絕對延時時間小 于等于當前任務的絕對延時時間時,將當前任務加入所述任務之后;在所述比 較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所提取 的任務為延時隊列中的最后一個任務時,將當前任務加入所述任務之前;在所 述比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所 提取的任務不是延時隊列中的最后一個任務時,指示所述任務提取模塊提取當 前比較的任務。
相對時間計算模塊,用于在當前任務加入延時隊列后,若當前任務不是 延時隊列的最后一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減 去當前任務的絕對延時時間后的差值作為所述任務的相對延時時間,若當前 任務不是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任 務之前緊鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間。
從上述各實施例中可以看出,本發(fā)明中的技術(shù)方案通過簡化時鐘周期到 來時的延時處理操作,從而節(jié)約了時間,提高了系統(tǒng)的響應時間。
此外,雖然將任務加入延時隊列中時,需要對延時隊列進行查找,但這 并不會影響系統(tǒng)的響應時間,理由如下
操作系統(tǒng)的時鐘周期是很頻繁的,而將任務加入延時隊列的操作相對是 很少的,且任務需要進入延時隊列時,通常是任務主動放棄CPU的,既然
是主動放棄CPU,則將任務加入延時隊列的延時的要求并不嚴格,因此不會 對系統(tǒng)的響應時間進行明顯的影響;此外,還可以根據(jù)查找的時間適當?shù)貙?延時時間進行修改,如某一任務的延時是58個時鐘周期,若在查找列表中 花了比較長的時間,這樣可以使延時的時間修改成57個時鐘周期。
此外,本發(fā)明中的技術(shù)方案在將任務加入延時隊列時, 一般不會遍歷整 個連表,按統(tǒng)計學的規(guī)律,平均查找任務的個數(shù)是整個延時任務連表的1/2。
最后,本發(fā)明在使用雙向連表時,可以得到延時隊列中任務最大絕對延 時時間和最小絕對延時時間,根據(jù)該最大和最小絕對延時時間可確定新的任 務查找是在雙向連表的頭開始找,還是尾開始找,這樣能夠在一定程度上加 速任務插入延時隊列的速度。
綜上所述,本發(fā)明大大降低了操作系統(tǒng)的時鐘周期的延時時間,使得系 統(tǒng)響應時間得到了提高。
本發(fā)明的技術(shù)方案可應用于嵌入式操作系統(tǒng)的實時操作系統(tǒng)中,如面向 控制、通信、醫(yī)療等領(lǐng)域的實時操作系統(tǒng)。嵌入式操作系統(tǒng)是一種支持嵌入 式系統(tǒng)應用的操作系統(tǒng)軟件,它是嵌入式系統(tǒng)(包括硬、軟件系統(tǒng))極為重要 的組成部分,通常包括與硬件相關(guān)的底層驅(qū)動軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動接 口、通信協(xié)議、圖形界面、標準化瀏覽器等。與通用操作系統(tǒng)相比,嵌入式 操作系統(tǒng)在系統(tǒng)實時高效性、硬件的相關(guān)依賴性、軟件固態(tài)化以及應用的專 用性等方面具有較為突出的特點。
以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進行了 進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明的較佳實施例而已, 并非用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi),所作的任 何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1、一種實時操作系統(tǒng)中的任務延時處理方法,其特征在于,該方法包括在延時隊列為空時,將需要延時的當前任務加入延時隊列中,否則將所述當前任務按照任務的絕對延時時間的升序加入到延時隊列中,并計算出延時隊列中相鄰任務之間的相對延時時間;當時鐘周期到來時,判斷延時隊列中第一個任務的延時時間是否為1個時鐘周期,如果是,則將所述第一個任務及緊鄰其后的相對延時時間為0的任務從延時隊列中移出;否則,將所述第一個任務的延時時間減去1個時鐘周期。
2、 如權(quán)利要求l所述的方法,其特征在于,所述將當前任務按照任務的絕 對延時時間的升序加入到延時隊列中,并計算出延時隊列中相鄰任務之間的相 對延時時間包括Al、從延時隊列中提取第一個任務作為當前進行比較的任務;B1 、判斷所提取的任務的絕對延時時間是否大于等于當前任務的絕對延時 時間,如果是,則執(zhí)行步驟C1后結(jié)束;否則,執(zhí)行步驟D1;Cl、將當前任務插入所述任務之前,并將所述任務的絕對延時時間減去當 前任務的絕對延時時間后的差值作為所述任務的相對延時時間,若當前任務不 是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任務之前緊 鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間;Dl、判斷所提取的任務是否為延時隊列中的最后一個任務,如果是,則將 所述當前任務加入所述任務之后,并將所述當前任務的絕對延時時間減去所述 任務的絕對延時時間的差值作為當前任務的相對延時時間;否則,從延時隊列 中提取下一個任務作為當前進行比較的任務,并返回執(zhí)行步驟Bl。
3、 如權(quán)利要求l所述的方法,其特征在于,所述將當前任務按照任務的絕 對延時時間的升序加入到延時隊列中,并計算出延時隊列中相鄰任務之間的相 對延時時間包括A2、從延時隊列中提取最后一個任務作為當前進行比較的任務;B2、判斷所提取的任務的絕對延時時間是否小于等于當前任務的絕對延時 時間,如果是,則執(zhí)行步驟C2后結(jié)束;否則,執(zhí)行步驟D2;C2、將當前任務加入所述任務之后,并將所述當前任務的絕對延時時間減 去所述任務的絕對延時時間后的差值作為當前任務的相對延時時間,若當前任 務不是延時隊列的最后一個任務,則將當前任務之后緊鄰的任務的絕對延時時 間減去當前任務的絕對延時時間的差值作為當前任務之后的所述任務的相對延 時時間;D2、判斷所提取的任務是否為延時隊列中的第一個任務,如果是,則將所 述當前任務加入所述任務之前,并將所述任務的絕對延時時間減去當前任務的前一個任務作為當前進行比較的任務,并返回執(zhí)行步驟B2。
4、 一種實時操作系統(tǒng)中的任務延時處理系統(tǒng),其特征在于,該系統(tǒng)包括 延時隊列加入模塊,用于在延時隊列為空時,將需要延時的當前任務加入延時隊列中,否則將所述當前任務按照任務的絕對延時時間的升序加入到延時 隊列中,并計算出延時隊列中相鄰任務之間的相對延時時間;延時處理模塊,用于在時鐘周期到來時,判斷延時隊列中第一個任務的延 時時間是否為1個時鐘周期,如果是,則將所述第一個任務及緊鄰其后的相對 延時時間為0的任務從延時隊列中移出;否則,將所述第一個任務的延時時間 減去1個時鐘周期。
5、 如權(quán)利要求4所述的系統(tǒng),其特征在于,所述延時隊列加入模塊包括 任務提取模塊,用于從第一個任務開始依次從延時隊列中提取當前進行比較的任務;絕對延時時間比較模塊,用于將所述任務提取模塊所提取的任務的絕對延 時時間與當前任務的絕對延時時間進行比較,并將比較結(jié)果輸出給當前任務加 入模塊;大于等于當前任務的絕對延時時間時,將當前任務加入所述任務之前;在所述比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所提取的任務為延時隊列中的最后一個任務時,將當前任務加入所述任務之后;在 所述比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且 所提取的任務不是延時隊列中的最后一個任務時,指示所述任務提取模塊提取 當前比較的任務;相對時間計算模塊,用于在當前任務加入延時隊列后,若當前任務不是延 時隊列的最后一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減去當 前任務的絕對延時時間后的差值作為所述任務的相對延時時間,若當前任務不 是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任務之前緊 鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間。
6、如權(quán)利要求4所述的系統(tǒng),其特征在于,所述延時隊列加入模塊包括 任務提取模塊,用于從最后一個任務開始依次從延時隊列中提取當前進行 比較的任務;絕對延時時間比較模塊,用于將所述任務提取模塊所提取的任務的絕對延 時時間與當前任務的絕對延時時間進行比較,并將比較結(jié)果輸出給當前任務加 入模塊;小于等于當前任務的絕對延時時間時,將當前任務加入所述任務之后;在所述 比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且所提 取的任務為延時隊列中的最后一個任務時,將當前任務加入所述任務之前;在 所述比較結(jié)果為所提取的任務的絕對延時時間小于當前任務的絕對延時時間且 所提取的任務不是延時隊列中的最后一個任務時,指示所述任務提取模塊提取 當前比較的任務;相對時間計算模塊,用于在當前任務加入延時隊列后,若當前任務不是延 時隊列的最后一個任務,則將當前任務之后緊鄰的任務的絕對延時時間減去當 前任務的絕對延時時間后的差值作為所述任務的相對延時時間,若當前任務不 是延時隊列的第 一個任務,則將當前任務的絕對延時時間減去當前任務之前緊鄰的任務的絕對延時時間的差值作為當前任務的相對延時時間。
全文摘要
本發(fā)明公開了一種實時操作系統(tǒng)中的任務延時處理方法,包括在延時隊列為空時,將需要延時的當前任務加入延時隊列中,否則將所述當前任務按照任務的絕對延時時間的升序加入到延時隊列中,并計算出延時隊列中相鄰任務之間的相對延時時間;當時鐘周期到來時,判斷延時隊列中第一個任務的延時時間是否為1個時鐘周期,如果是,則將所述第一個任務及緊鄰其后的相對延時時間為0的任務從延時隊列中移出;否則,將所述第一個任務的延時時間減去1個時鐘周期。此外,本發(fā)明還公開了一種實時操作系統(tǒng)中的任務延時處理系統(tǒng)。本發(fā)明所公開的技術(shù)方案,能夠提高系統(tǒng)的響應時間,進而提高系統(tǒng)的實時性。
文檔編號G06F9/46GK101183316SQ20071017830
公開日2008年5月21日 申請日期2007年11月28日 優(yōu)先權(quán)日2007年11月28日
發(fā)明者游明琦, 國 艾 申請人:北京中星微電子有限公司