VxWorks的任務與任務排程

2021-10-19 05:21:34 字數 1325 閱讀 4108

作為實時作業系統,任務排程是基於優先順序的,且可搶占式的排程方式。同時對於相同優先順序的任務,支援round-robin迴圈排程方式(以下簡稱rr排程)

vxworks核心三個佇列:tick 佇列,ready 佇列,active 佇列,另外還有乙個佇列涉及到任務,即任務等待資源時所處的佇列,這個佇列可以是 vxworks 核心提供的,也可以是使用者提供的,此處令其為 pend 佇列。

tick 佇列: 當呼叫 taskdelay 函式讓任務延遲一段固定的時間時,任務所處的佇列,此時任務為設定為 delay 狀態,無資格競爭使用 cpu;

ready 佇列:有資格競爭使用 cpu 的所有任務,該佇列以優先順序為序排列任務,佇列頭部即除了當前執行任務外,系統中最高優先順序的任務;

active 佇列:系統中所有任務, 無論任務當前狀態為何,都將在這個佇列中,這個佇列維護者系統中當前所有的任務,即通過該佇列可以查詢到當前系統中的所有任務,在 shell 下執行『i』命令,顯示系統中所有的任務,就是通過遍歷 active 佇列完成的;

pend 佇列:當任務競爭使用某資源,而資源當前不可得時,任務就被設定為 pend 狀態,進入 pend 佇列。

任務建立函式taskspawn:taskspawn 函式呼叫完畢後,任務就進入執行狀態,即與其它任務競爭使用 cpu。

taskcreate 函式:建立乙個任務後,需要暫時使其處於掛起狀態,不具有排程執行的資格,需要函式 taskactivate「啟用」

vxworks 核心本身主要提供了三種任務間通訊的機制(不包括訊號機制):訊號量,訊息佇列,管道。都是在使用共享物理記憶體機制,過這塊共享的記憶體由核心在進行管理,任務無法直接進行訪問,而必須通過核心提供的介面函式進行訪問。

1、訊號量

訊號量的主要用途是互斥和同步。

vxworks 訊號量機制具體提供了三種訊號量:通用訊號量;互斥訊號量;資源計數訊號量。

2、訊息佇列

訊息佇列核心實現上實際是乙個結構陣列,陣列大小和陣列中元素的容量在建立訊息佇列時被確定。

訊息佇列對於每個訊息的大小存在限制,而且必須將資訊分批打包

3、管道

提供的基本操作方式類似於對乙個檔案的讀寫,支援 select 函式,所以可以對多個管道進行資訊監測。管道在底層實現上是一種更為直接的共享物理記憶體機制。

管道分為兩種:命名管道和非命名管道。通常任務間通訊使用的一般都是命名管道。

中斷與任務 vxworks

分類 中斷處理是整個執行系統中優先順序最高的 可以搶占任何任務級 執行。中斷機制是多工環境執行的基礎,是系統實時性的保證。幾乎所有的實時多工作業系統都需要乙個週期性系統時鐘中斷的支援,用以完成時間片排程和延時處理。vxworks 提供tickannounce 由系統時鐘中斷呼叫,周期性地觸發核心。為...

VxWorks任務間通訊

1.共享記憶體 雙向鍊錶 環形緩衝 2.互斥 中斷鎖 作用域僅限於中斷內部。優先順序鎖 共享記憶體中,低優先順序的任務不允許被打斷,優先順序鎖就被使用。弊端 會完全禁止任務的排程。3.訊號量 一種指向semaphore結構的指標 sem eventsend err notify,釋放訊號量出錯返回錯...

vxworks任務通訊之管道

管道 任務a寫入管道,任務b讀取 include include include include include include define task priority a 130 define task priority b 130 define stack size 225 int taski...