小型嵌入式實時作業系統核心之 「排程器」

2021-10-09 11:34:56 字數 1358 閱讀 4882

1.排程器介紹

簡單的說,排程器就是使用相關的排程演算法來決定當前需要實行的任務。所有的排程器有乙個共同的特性:排程器可以區分就緒態任務和掛起任務(由於延遲,訊號量等待,郵箱等待,事件組等待等原因使得任務被掛起)。排程器可以選擇就緒態中的乙個任務,然後啟用它(通過執行這個任務)。當前正在執行的任務是執行態的任務。不同排程器之間最大的區別就是如何分配就緒態任務間的完成時間。

嵌入式實時作業系統的核心就是排程器和任務切換,排程器的核心就是排程演算法。任務切換的實現在各個rtos中區別不大,基本相同的架構,任務切換也是相似的。排程演算法就有些區別了,比如ucos-iii和freertos在搶占式排程器演算法上就是兩種不同的排程方法,下面主要了解一下合作式排程器,搶占式排程器和時間片排程器。

2.1 合作式排程器

簡單的來說,合作式排程器就是根據使用者的設定時刻(週期或者單次)來執行相應的任務,每個時刻是有乙個任務可以執行,這些任務間不支援被搶占,直到任務自願放棄cpu的控制權。當任務需要執行的時候,被新增到等待佇列,當cpu空閒的時候,執行等待佇列中的下乙個(如果有的話),任務執行直到完成,然後由排程器控制。

2.2搶占式排程器

在實際的應用中,不同的任務需要不同的響應時間。例如,我們在乙個應用中需要使用電機,鍵盤和lcd顯示,電機比鍵盤和lcd需要更快速的響應,如果我們使用合作式排程器和時間片排程器,那麼電機將無法得到及時的響應,這時搶占式排程器是必須的。

如果使用了搶占式排程,最高優先順序的任務一旦就緒,總能得到cpu的控制權。當乙個執行著的任務使乙個比它優先順序更高的任務進入了就緒態,當前任務的cpu使用權就被剝奪了,或者說任務被掛起了,比它高優先順序的任務立刻得到cpu的控制權。如果是中斷服務子程式使乙個高優先順序的任務進入就緒態,中斷完成時,中斷了的任務被掛起,優先順序高的哪個任務開始執行。

總的來說,學習搶占式排程掌握最關鍵的一點就是:搶占式排程器會為每乙個任務都分配乙個優先順序,排程器會啟用就緒任務中優先順序最高的任務。

搶占式排程器給任務帶來快速響應的同時也使得任務間的同步和通訊機制顯得很麻煩,因此在原始碼中的很多地方我們都需要設定臨界段(通過開關中斷來實現)。

2.3時間片排程器

在小型的嵌入式rtos中,最常用的時間片排程演算法就是round-robin排程演算法。這種排程演算法可以用於搶占式或者合作式的多工中,時間片排程適合用於不要求任務實時響應的情況下。

實現round-robin排程演算法需要給同優先順序的任務分配乙個專門的列表,用於記錄當前就緒的任務,並為每個任務分配乙個時間片(也就是需要執行的時間長度,時間片用完了就進行任務切換)。

嵌入式 實時作業系統導論

排程任務和資料 訊號量和共享資料 可重入性和訊號量 多個訊號量 訊號量作為訊號裝置 使用訊號量的易出現問題 訊號量變數 所謂任務,是指在乙個rtos中所寫的軟體的基本構造塊,也就是通常所說的子程式。有關任務是如何呼叫 它與rots是如何配合工作的等問題稍後再討論。在rtos中乙個任務總是處在下列三種...

嵌入式系統 實時作業系統 RTOS

一 rtos中的基本概念 背景 rtos具有的功能 作業系統中的程序與執行緒 二 嵌入式作業系統的主要種類 1 uc os ii 2 linux 作業系統 3 vxworks 4 wince os 作業系統,operating system 是嵌入式系統中的靈魂,是其軟體系統中的重要組成部分,嵌入式...

嵌入式實時作業系統的移植 !

所謂移植,就是使選用的實時核心能在某個特定的微處理器上執行。為了方便移植,大部分的實時作業系統 是用c語言編寫的,但仍需要用c和組合語言編寫一些與微處理器相關的 這是因為有一些操作只能通過組合語言來實現。由於所有的實時作業系統在設計時就已經充分考慮了可移植性,所以移植相對來說是比較容易的。以ucos...