專利名稱:一種任務優(yōu)先級動態(tài)調度算法的制作方法
技術領域:
本發(fā)明涉及實時系統中的任務調度技術領域,具體涉及一種任務優(yōu)先 級動態(tài)調度算法。
背景技術:
對實時調度算法的研究,是實時領域的一個重要的研究課題。優(yōu)先級 驅動方式是實時系統調度的最常用的方式,實現的方法是給每一個任務一 個優(yōu)先級,在每一個調度時機選擇優(yōu)先級最高的任務得到運行。基于優(yōu)先
級的調度方式又可以分為兩大類靜態(tài)與動態(tài)優(yōu)先級調度。靜態(tài)優(yōu)先級調度 中,優(yōu)先級的初值是由任務的特定信息確定的,且在運行過程中是不變的; 在動態(tài)優(yōu)先級調度算法中,任務的調度優(yōu)先級隨著任務中任務運行而變化, 任務優(yōu)先級不僅僅與任務自身有關系,而且與系統中其它的任務有關。
常用的靜態(tài)優(yōu)先級調度算法有RM(Rate-Mon()tonic)算法和 DM(Deadline-Monotonic)算法;動態(tài)優(yōu)先級調度算法有經典的EDF(Earliest DeadlineFirst)。靜態(tài)優(yōu)先級調度算法任務的調度時刻確定,實現起來簡單, 但是CPU利用率不高,相對于靜態(tài)優(yōu)先級調度算法,動態(tài)優(yōu)先級調度算法 體現更大的靈活性,系統在運行中是根據臨時的任務的緊迫程度來確定優(yōu) 先級,因此其顯得更合理,但是系統的調度也更復雜,也表現出了更多的 不確定性,特別是在系統超負荷的情況下,EDF算法的截止期錯失率急劇 增加,調度成功率下降很快,因此基于EDF調度策略改進,減小截止期限 錯失率(DMR),減小任務平均延遲,增加調度成功率,對于軟實時的應用 有重要意義。
在實時調度系統中,實時任務分為周期和非周期兩種,常見的實時任 務都是周期性的。假定周期任務組為ryr,,TV..W, n為任務的個數,其中
T^(e,乂,/w,)是任意一個周期任務,e,,A/7,是正實數,分別表示該周期任務 的周期內的,執(zhí)行時間,完成時限,周期大小。n是非負實數,表示該任務 的初始釋放時刻(任務投入運行時刻)。用w表示周期任務r,在第K周期的 釋放時刻,則第K周期的相應的完成時限為^/,,* = ^ + ^。在上述任務組情
況下進行調度。
最早的EDF調度算法是采用非搶占式的,如果一個實時任務在分配的 執(zhí)行時間之前完成本周期內的工作,則在這個空閑時間內其它實時任務也 不能運行,CPU將處于相對空閑狀態(tài)(可能執(zhí)行非實時任務,可能idle)。
如果一個實時任務超出了自己的執(zhí)行時間(overrun),工作沒有結束,則 將保持當前的高優(yōu)先級繼續(xù)執(zhí)行下去,這樣就會順延本來已經安排后后面 的任務,形成"多米諾"效應,造成多個任務超出截止時間。
發(fā)明內容
本發(fā)明的目的在于提供一種任務優(yōu)先級動態(tài)調度算法,該算法可以克 服在系統超負荷的情況動態(tài)優(yōu)先級算法的截止期錯失率急劇增加的問題, 減小任務平均延遲,增加調度成功率,并能提高任務的公平性,對于執(zhí)行 時間E較大的任務來說不會出現過高截止期限錯失率。
為了達到上述目的,本發(fā)明采用的技術方案為
一種任務優(yōu)先級動態(tài)調度算法,包括如下步驟
(1) 作業(yè)調度時刻到來時的作業(yè)調度在任務調度時刻到來時,調度 算法根據相應流程對任務進行調度;
(2) 作業(yè)完成本周期工作轉入睡眠的調度 一個任務的作業(yè)完成本周 期的工作后轉入睡眠狀態(tài)并引發(fā)相應調度;
(3) 動態(tài)優(yōu)先級調度器執(zhí)行調度算法在最早截止期優(yōu)先算法中加入 期望執(zhí)行時間e的因素。截止期相同時,期望執(zhí)行時間比較大的任務,優(yōu) 先級更高。
上述調度算法中對于任意一個沒有完成本周期工作的任務,其優(yōu)先級計算方法為
<formula>formula see original document page 7</formula> 式(l) 對于任意一個完成本周期工作的任務,其優(yōu)先級計算方法為
<formula>formula see original document page 7</formula> 式('2) 其中t為當前時間,p為該任務周期,d為該任務周期內截止期限,e 為周期內執(zhí)行時間,f是一個可調的系數,0<f<l. wfe"6Z/,:"e最小的任務優(yōu)先 級最高。
上述調度算法中對于一個沒有完成本周期工作的任務,不管它的運行時 間是否超過預算,不管它是否超過期限,其任務狀態(tài)一直為active。優(yōu)先級 都按照式(l)來計算。且在該任務每個周期的開始都會更新優(yōu)先級,并按 照這個優(yōu)先級進行調度。
上述調度算法中對于一個完成本周期工作的任務,其任務狀態(tài)設置為 inactive,其任務的優(yōu)先級按照式(2)重新計算。其下一次釋放時間計算方 法為
<formula>formula see original document page 7</formula>(式3)
對于一個沒有完成本周期工作,且延遲至下一周期的任務,此時下一
個周期將會丟失,其mH/,—"靴將會按照式(3)更新。
上述調度算法中調度是完全可搶占的,在每次調度的時刻,在所有的 active任務選取一個優(yōu)先級最高的任務"next"作為將要切換的任務,在包 括所有的active, inactive任務中,選取一個優(yōu)先級最高的任務"preemptor", 作為搶占任務。如果next == preemptor,則下一次調度時刻設置為next的 ms'冊R'.一"'me ; 如果next != preemptor,貝ll將next的rerawe —〃'me和preemptor 的ms'w艦'—"置中的最小值作為下 一次調度時刻。
上述調度算法步驟(1 )的具體步驟為
步驟a、在定時器到期,作業(yè)調度被觸發(fā)之后,獲取當前時間,并將時
間保存到now變量中;獲取當前任務的狀態(tài);
步驟b、循環(huán)遍歷任務隊列,依次找出任務隊列中的任務的狀態(tài)state 為inactive的任務;對遍歷得到的inactive的任務的resume—time和當前時 間變量now進行比較;判斷resume—time是否大于當前時間變量,如果是則 繼續(xù)遍歷任務隊列直到遍歷完畢;如果否則設置該任務T的狀態(tài)為active, 并依照式(1 )計算該任務的優(yōu)先級并進行更新,依照式(3 )計算該任務 的resume—time并進行更新,完成后繼續(xù)遍歷任務隊列直到遍歷完畢;
步驟c、完成遍歷后調用動態(tài)優(yōu)先級調度過程進行調度。
上述調度算法步驟(2)的具體步驟為
步驟a、設置當前任務的狀態(tài)為inactive;
步驟b、調用動態(tài)優(yōu)先級調度過程進行調度。
上述調度算法步驟(3)的具體步驟為
步驟a、按照式(3)更新當前任務的resumejime,獲取當前任務的狀 態(tài),判斷該任務狀態(tài)是否為inactive狀態(tài),如果是則按照式(2)更新該任 務的優(yōu)先級,如果否則按照式(1 )更新該任務的優(yōu)先級;
步驟b、在所有任務中,找出優(yōu)先級最高的任務作為搶占任務,并保存
步驟c、在狀態(tài)為active的任務中,找出優(yōu)先級最高的任務作為將要切 換的新任務,并保存到next變量中;
步驟d、對next變量和preemptor變量進行比l交,判斷next變量和 preemptor變量是否相等,如果是則設置變量preempt—time為任務next的 resume—time, 如果否則i殳置變量preempt—time為"f壬務next的resume—time 和任務preemptor的resume—time中4爻小的 一個;
步驟e、將變量preempt—time設置為下一次作業(yè)的調度時刻;進行作業(yè) 切換,完成調度。
與現有技術相比,本發(fā)明產生的有益效果為
本發(fā)明可以克服在系統超負荷的情況動態(tài)優(yōu)先級算法的截止期錯失率 急劇增加的問題,減小任務平均延遲,增加調度成功率,并能提高任務的
公平性,對于執(zhí)行時間E較大的任務來說不會出現過高截止期限錯失率。
圖1是本發(fā)明調度中作業(yè)調度時刻到來時的作業(yè)調度流程圖; 圖2是本發(fā)明作業(yè)完成本周期工作轉入睡眠流程圖; 圖3是本發(fā)明動態(tài)優(yōu)先級調度器流程圖。
具體實施例方式
下面結合附圖對本發(fā)明的具體實施方式
進行詳細說明。 在具體實施方式
中,利用到的任務的數據結構的偽碼為
Struct task {
Unsigned long p;
Unsigned long e;
Unsigned long d;
Unsigned long deadline;
Unsigned long resume—time;
JLong state;
/* other attributes*/
該任務task的屬性中存在有如上的一些結構體內部變量。在上述中, task的狀態(tài)變量state有兩種屬性 一是active, —個是inactive。 一種任務優(yōu)先級動態(tài)調度算法,包括如下步驟
(1 )作業(yè)調度時刻到來時的作業(yè)調度在任務調度時刻到來時,調度 算法纟艮據相應流程對任務進行調度;
(2)作業(yè)完成本周期工作轉入睡眠的調度 一個任務的作業(yè)完成本周 期的工作后轉入睡眠狀態(tài)并引發(fā)相應調度;(3)動態(tài)優(yōu)先級調度器執(zhí)行調度算法在最早截止期優(yōu)先算法中加入
期望執(zhí)行時間e的因素。截止期相同時,期望執(zhí)行時間比較大的任務,優(yōu)
先級更高。
上述調度算法中對于任意一個沒有完成本周期工作的任務,其優(yōu)先級 計算方法為
<formula>formula see original document page 10</formula> 式(l)
對于任意一個完成本周期工作的任務,其優(yōu)先級計算方法為
<formula>formula see original document page 10</formula> 式(2) 其中t為當前時間,p為該任務周期,d為該任務周期內截止期限,e 為周期內執(zhí)行時間,f是一個可調的系數,0<f<l. 1^^///w最小的任務優(yōu)先
級最高。
上述調度算法中對于一個沒有完成本周期工作的任務,不管它的運行時 間是否超過預算,不管它是否超過期限,其任務狀態(tài)一直為active。優(yōu)先級 都按照式(l)來計算。且在該任務每個周期的開始都會更新優(yōu)先級,并按 照這個優(yōu)先級進行調度。
上述調度算法中對于一個完成本周期工作的任務,其任務狀態(tài)設置為 inactive,其任務的優(yōu)先級按照式(2)重新計算。其下一次釋放時間計算方 法為
<formula>formula see original document page 10</formula> (式3 )
對于一個沒有完成本周期工作,且延遲至下一周期的任務,此時下一
個周期將會丟失,其 將會按照式(3)更新。
上述調度算法中調度是完全可搶占的,在每次調度的時刻,在所有的 active任務選取一個優(yōu)先級最高的任務"next"作為將要切換的任務,在包 4舌所有的active, inactive 任務中,選取一個優(yōu)先級最高的任務"preemptor", 作為搶占任務。如果next == preemptor,則下一次調度時刻設置為next的mra附e—ri附e ; 如果next != preemptor, 貝寸將next的rera附e—"'me和preemptor 的ms'!/膨一//謝中的最小值作為下一次調度時刻。
參見圖1,圖l是本發(fā)明的任務調度算法調度中作業(yè)調度時刻到來時的 作業(yè)調度流程圖。作業(yè)調度時刻到來時的作業(yè)調度的步驟如下
在步驟10,在定時器到期,作業(yè)調度被觸發(fā)之后,獲取當前時間,并 將時間保存到now變量中。該步驟的目的為后續(xù)步驟的比較來做準備。
在步驟20,獲取當前任務的狀態(tài)。當前任務的屬性如前的task結構體 變量所示。該步驟的目的是需要為下一步根據當前任務來進行調度判斷來 做準備。
在步驟30,遍歷任務隊列,依次找出任務隊列中的任務的狀態(tài)state為 inactive的任務,并將得到的任務賦給變量T。
在步驟40,判斷是否遍歷完畢。如果還沒遍歷完畢,則跳到步驟SO; 如果已經遍歷完畢,則跳到步驟IOO。
在步驟50,對遍歷得到的任務T的resume—time和當前時間變量now 進4亍比專i。
在步驟60,判斷resume—time是否大于當前時間變量。如果判斷是對
的,則跳到步驟30,繼續(xù)遍歷任務隊列;如果判斷是錯的,則跳到步驟?O。 在步驟70,設置該任務T的狀態(tài)為active。 在步驟80,依照式(1)計算該任務T的優(yōu)先級并進行更新。 在步驟90,依照式(3 )計算該任務T的resume—time并進行更新。完
成后調轉到步驟30,進行下一次遍歷操作。
在步驟IOO,調用調度器過程。該過程的具體流程圖如圖3所示,上述
過程都是為了調用調度器做準備。
參照圖2,圖2是本發(fā)明的任務調度算法中作業(yè)完成本周期工作轉入睡
眠流程圖。作業(yè)完成本周期工作轉入睡眠的步驟如下在步驟110,設置當前任務的狀態(tài)為inactive。由于當前任務的作業(yè)本 周期已經完成,因此該任務可以設置成inactive,不參與下次調度。
在步驟120,調用調度器過程。該過程的具體流程圖如圖3所示,上述 過程是調用調度器的前期準備工作。
參照圖3,圖3是本發(fā)明的任務調度算法中EDF調度器流程圖。EDF 調度器的步驟如下
在步驟130,按照式(3 )更新當前任務的resume—time。
在步驟140,獲取當前任務的狀態(tài)。獲取到當前任務的狀態(tài)為下一步的 比較判斷來做準備。
在步驟150,判斷步驟140獲取的當前任務狀態(tài)是否為inactive狀態(tài)。 如果判斷結果為是,則跳轉到步驟160;如果判斷結果為否,則跳轉到步驟 170。
在步驟160,按照式(2)更新當前任務的優(yōu)先級。完成更新后跳轉到 步驟180。
在步驟170,按照式(1)更新當前任務的優(yōu)先級。完成更新后跳轉到 步驟180。
在步驟180,在所有任務中,找出優(yōu)先級最高的任務作為搶占任務,并 保存到preemptor變量中。
在步驟190,在狀態(tài)為active的任務中,找出優(yōu)先級最高的任務作為將 要切換的新任務,并保存到next變量中。
在步驟200,對next變量和preemptor變量進行比較。
在步驟210,判斷next變量和preemptor變量是否相等。如果判斷結果 為是,則跳轉到步驟220;如果判斷結果為否,則跳轉到步驟230。
在步驟220,設置變量preempt—time為任務next的resume—time。變量 preempt一time將在步驟240中用到,是作為作業(yè)調度時刻用的。在完成此步 驟后跳轉到步驟240。
在步驟230,設置變量preempt—time為任務next的resume—time和任務 preemptor的resume—time中較小的一個。變量preempt—time將在步驟240 中用到,是作為作業(yè)調度時刻用的。在完成此步驟后跳轉到步驟240。
在步驟240,將變量preempt—time設置為下一次作業(yè)的調度時刻。
在步驟250,進行作業(yè)切換,完成調度。
以上說明僅僅是本發(fā)明的一種實施方式,不能對本發(fā)明進行限定,本
領域
普通技術人員所做的任何不超出本發(fā)明主題的改變,只要在本發(fā)明所請求 的范圍內,都在本發(fā)明的保護范圍內。
權利要求
1、一種任務優(yōu)先級動態(tài)調度算法,其特征在于調度算法包括如下步驟(1)作業(yè)調度時刻到來時的作業(yè)調度在任務調度時刻到來時,調度算法根據相應流程對任務進行調度;(2)作業(yè)完成本周期工作轉入睡眠的調度一個任務的作業(yè)完成本周期的工作后轉入睡眠狀態(tài)并引發(fā)相應調度;(3)動態(tài)優(yōu)先級調度器執(zhí)行調度算法在最早截止期優(yōu)先算法中加入期望執(zhí)行時間e的因素。截止期相同時,期望執(zhí)行時間比較大的任務,優(yōu)先級更高。
2、 如權利要求1所述的一種任務優(yōu)先級動態(tài)調度算法,其特征在于 對于任意一個沒有完成本周期工作的任務,其優(yōu)先級計算方法為<formula>formula see original document page 2</formula> 式(l)對于任意一個完成本周期工作的任務,其優(yōu)先級計算方法為<formula>formula see original document page 2</formula> 式(2)其中t為當前時間,p為該任務周期,d為該任務周期內截止期限,e為周期內期望執(zhí)行時間,f是一個可調的系數,0<f<l, w/e"d/恥最小的任務優(yōu)先級最高。
3、 如權利要求2所述的一種任務優(yōu)先級動態(tài)調度算法,其特征在于 對于一個沒有完成本周期工作的任務,其任務狀態(tài)一直為active;優(yōu)先級都 按照式(l)來計算;且在該任務每個周期的開始都會更新優(yōu)先級,并按照 這個優(yōu)先級進行調度。
4、 如權利要求2所述的一種任務優(yōu)先級動態(tài)調度算法,其特征在于 對于一個完成本周期工作的任務,其任務狀態(tài)設置為inactive,其任務的優(yōu) 先級按照式(2)重新計算,其下一次釋放時間計算方法為對于一個沒有完成本周期工作,且延遲至下一周期的任務,此時下一 個周期將會丟失,其mw鵬—ri靴將會按照式(3)更新。
5、 如權利要求1所述的一種任務優(yōu)先級動態(tài)調度算法,其特征在于 調度是完全可搶占的,在每次調度的時刻,在所有的active任務選取一個優(yōu) 先級最高的任務"next"作為將要切換的任務,在包括所有的active, inactive 任務中,選取一個優(yōu)先級最高的任務"preemptor,,,作為搶占任務;如果next =preemptor, 則下一次調度時刻i殳置為next的rw附e—riwe;長口果next != preemptor,則將next的rera,—ri膨和preemptor的re做附e—乂/附e中的最小值作 為下一次調度時刻。
6、 如權利要求1和4所述的一種任務優(yōu)先級動態(tài)調度算法,其特征在 于作業(yè)調度時刻到來時的作業(yè)調度的具體步驟為步驟a、在定時器到期,作業(yè)調度被觸發(fā)之后,獲取當前時間,并將時 間保存到now變量中;獲取當前任務的狀態(tài);步驟b、循環(huán)遍歷任務隊列,依次找出任務隊列中的任務的狀態(tài)state 為inactive的4壬務;,十遍歷4尋到的inactive的4壬務的resume—time和當前時 間變量now進行比較;判斷resume—time是否大于當前時間變量,如果是則 繼續(xù)遍歷任務隊列直到遍歷完畢;如果否則設置該任務T的狀態(tài)為active, 并依照式(1 )計算該任務的優(yōu)先級并進行更新,依照式(3)計算該任務 的resume—time并進行更新,完成后繼續(xù)遍歷任務隊列直到遍歷完畢;步驟c,完成遍歷后調用動態(tài)優(yōu)先級調度過程進行調度。
7、 如權利要求1所述的一種任務優(yōu)先級動態(tài)調度算法,其特征在于 作業(yè)完成本周期工作轉入睡眠的調度的具體步驟為步驟a、設置當前任務的狀態(tài)為inactive; 步驟b、調用動態(tài)優(yōu)先級調度過程進行調度。
8、如權利要求1或4所述的一種任務優(yōu)先級動態(tài)調度算法,其特征在于動態(tài)優(yōu)先級調度器的調度流程的具體步驟為步驟a、按照式(3)更新當前任務的resume—time,獲取當前任務的狀 態(tài),判斷該任務狀態(tài)是否為inactive狀態(tài),如果是則按照式(2)更新該任 務的優(yōu)先級,如果否則按照式(1 )更新該任務的優(yōu)先級;步驟b、在所有任務中,找出優(yōu)先級最高的任務作為搶占任務,并保存 到preemptor變量中;步驟c、在狀態(tài)為active的任務中,找出優(yōu)先級最高的任務作為將要切 換的新任務,并保存到next變量中;步驟d、對next變量和preemptor變量進行比較,判斷next變量和 preemptor變量是否相等,如果是則設置變量preempt—time為任務next的 resume—time,濁口果否則i更置變量preempt—time為4壬務next的resume—time 和任務preemptor的resume—time中4爻小的一個;步驟e、將變量preempt—time設置為下一次作業(yè)的調度時刻;進行作業(yè) 切換,完成調度。
全文摘要
本發(fā)明涉及實時系統中的任務調度技術領域,具體涉及一種任務優(yōu)先級動態(tài)調度算法。本發(fā)明的目的在于提供一種任務優(yōu)先級動態(tài)調度算法,該算法可以克服在系統超負荷的情況動態(tài)優(yōu)先級算法的截止期錯失率急劇增加的問題,減小任務平均延遲,增加調度成功率,并能提高任務的公平性,對于執(zhí)行時間E較大的任務來說不會出現過高截止期限錯失率。
文檔編號G06F9/46GK101339521SQ20081004859
公開日2009年1月7日 申請日期2008年7月28日 優(yōu)先權日2008年7月28日
發(fā)明者鑫 余, 飛 程 申請人:華中科技大學