RTOS 任務排程 搶占式,時間片輪轉式

2021-09-13 17:50:52 字數 2040 閱讀 9415

時間片排程器基本概念

如果使用者在 freertos 的配置檔案 freertosconfig.h 中禁止使用時間片排程, 那麼每個任務必須配

置不同的優先順序。當 freertos 多工啟動執行後,基本會按照如下的方式去執行:

 首先執行的最高優先順序的任務 task1, task1 會一直執行直到遇到系統阻塞式的 api 函式,比如延遲,

事件標誌等待,訊號量等待,task1 任務會被掛起,也就是釋放 cpu 的執行權,讓低優先順序的任務

得到執行。

 freertos 作業系統繼續執行任務就緒列表中下乙個最高優先順序的任務 task2,task2 執行過程中有

兩種情況:

 task1由於延遲時間到, 接收到訊號量訊息等方面的原因, 使得 task1從掛起狀態恢復到就緒態,

在搶占式排程器的作用下,task2 的執行會被 task1 搶占。

 task2 會一直執行直到遇到系統阻塞式的 api 函式,比如延遲,事件標誌等待,訊號量等待, task2

任務會被掛起,繼而執行就緒列表中下乙個最高優先順序的任務。

 如果使用者建立了多個任務並且採用搶占式排程器的話,基本都是按照上面兩條來執行。 根據搶占式調

度器,當前的任務要麼被高優先順序任務搶占,要麼通過呼叫阻塞式 api 來釋放 cpu 使用權讓低優先

級任務執行,沒有使用者任務執行時就執行空閒任務。

 這裡僅對搶占式排程進行說明。

 建立 3 個任務 task1,task2 和 task3。

 task1 的優先順序為 1,task2 的優先順序為 2,task3 的優先順序為 3。 freertos 作業系統是設定的數值

越小任務優先順序越低,故 task3 的優先順序最高,task1 的優先順序最低。

 此框圖是 freertos 作業系統執行過程中的一部分。

 此時任務 task1 在執行中,執行過程中由於 task2 就緒,在搶占式排程器的作用下任務 task2 搶占

task1 的執行。 task2 進入到執行態,task1 由執行態進入到就緒態。

 任務 task2 在執行中,執行過程中由於 task3 就緒,在搶占式排程器的作用下任務 task3 搶占 task2

的執行。 task3 進入到執行態,task2 由執行態進入到就緒態。

 任務 task3 執行過程中呼叫了阻塞式 api 函式,比如 vtaskdelay,任務 task3 被掛起,在搶占式調

度器的作用下查詢到下乙個要執行的最高優先順序任務是 task2,任務 task2 由就緒態進入到執行態。

 任務 task2 在執行中,執行過程中由於 task3 再次就緒,在搶占式排程器的作用下任務 task3 搶占

task2 的執行。 task3 進入到執行態,task2 由執行態進入到就緒態。

上面就是乙個簡單的不同優先順序任務通過搶占式排程進行任務排程和任務切換的過程。

在小型的嵌入式 rtos 中,最常用的的時間片排程演算法就是 round-robin 排程演算法。這種排程演算法

可以用於搶占式或者合作式的多工中。另外,時間片排程適合用於不要求任務實時響應的情況。

實現 round-robin 排程演算法需要給同優先順序的任務分配乙個專門的列表,用於記錄當前就緒的任務,

並為每個任務分配乙個時間片(也就是需要執行的時間長度,時間片用完了就進行任務切換)。

任務1、2、3為相同優先順序的三個任務,在在時間片輪轉的排程下有序執行,至於他們的執行順序,這是由排程佇列來調控的,乙個任務出隊(執行)後會被插入到隊尾,這樣就實現了多個任務的迴圈執行。

(1)任務3正在執行,時基中斷發生,但任務3還沒有到期

(2)任務3主動放棄剩下的時間片

(3)ucosiii恢復任務1,因為它是排程佇列中任務3的下乙個任務

(4)任務1執行直到它的時間片到期

(5) (6) (7) (8)同上;

程序排程 時間片輪轉

include include include typedef struct table node node creat void p2 next null return head 輸出函式 void print node head 對程序表按優先數從大到小排序 node insert node h...

時間片輪轉排程演算法

include define max 10 struct task struct tasks max int counter 實際程序個數 int time counter 0 int poutput 排程結果輸出 int time int charge 判斷是否所有的程序都被執行過 int tim...

UCOSIII時間片輪轉排程

os rate hz const oscfg tickrate hz os rate hz os cfg tick rate hz define os cfg tick rate hz 200u tick rate in hertz 10 to 1000 hz 時間片長度200hz,也就是乙個系統時...