VxWorks多任務功能


http://blog.chinaunix.net/uid-23741326-id-84935.html

VxWorks的任務有優先級的概念,其任務調度也是基於優先級考慮的,是搶占式的,VxWorks的任務有256個等級,0—255,數目越小表示優先級越高。高優先級的任務可以打斷低優先級的任務而搶先執行,只有在高優先級的任務執行完后,低優先級的任務才可以執行。其調度算法有兩種:完全搶占式的和循環分配式的。完全搶占式的是除了高優先級任務可以打斷低優先級任務外,在相同優先級的任務之間,不可以相互打斷,並且同優先級任務不是同時執行的,只有等該任務執行完后,與其相同優先級的任務才可以執行;循環分配式除了具有搶占功能之外,相同優先級的任務是可以同時執行的,即系統時間片是在它們之間平均分配的,這樣,相同優先級的任務可以同時執行。可以調用kernelTimeSlice()函數來設定該調度方式,並且參數是相同優先級任務執行的時間片。

VxWorks中任務具有很多種狀態,如下表所示:

狀態

描述

READY

此任務狀態在等待執行

PEND

此任務狀態是由於一些資源不可用而被阻塞

DELAY

此任務狀態是休眠一段時間

SUSPEND

此任務狀態是掛起

BREAK

此任務狀態是停止(暫停),通常是在任務中設置了斷點。

各種狀態的組合

詳細請見原文檔

為了防止任務被誤刪除,VxWorks還提供了taskSafe()函數和taskUnsafe()函數,調用taskSafe()的任務不能被刪除,應用在其它地方調用taskDelete()函數時會出錯。只有該任務在調用了taskUnsafe()后,任務才能被刪除。另外,VxWorks還可以對任務的優先級動態的修改,即可以在執行過程中,調用taskPrioritySet()函數對任務的優先級進行修改。對於任務的創建,VxWorks還提供了不同的方法,用戶可以調用taskSpawn()函數在創建完任務后立即執行它,或者調用taskCreate()taskActivate()函數把創建任務和執行任務分成兩步來實行,即在調用taskCreate()后,任務只是被創建而沒有執行,所以用戶可以在需要的時候調用taskActivate()來恢復任務的執行。下面是VxWorks任務相關函數一覽表:

函數名

功能

kernelTimeSlice( )

控制輪詢式調度程序

taskLock( )

取消任務的再調度

taskUnlock( )

允許任務的再調度

taskSpawn( )

生成(創建和激活)一個新任務

taskCreate( )

創建一個新任務,但不激活它。

taskActivate( )

激活一個已經創建的任務

taskSuspend( )

掛起一個任務

taskResume( )

恢復掛起任務的執行

taskRestart( )

重新開始一個任務的執行(即從頭執行)

taskDelay( )

延時任務,延時單位是時間片

taskIdSelf( )

得到調用任務的id(正在運行的)

taskIdVerify( )

驗證一個指定任務是否存在

taskOptionsGet( )

獲得用戶自定義任務參數

taskOptionsSet( )

設置用戶自定義任務參數

taskIdListGet( )

將所有活動狀態的任務id填寫到個數組中

taskInfoGet( )

得到一個任務的信息

taskPriorityGet( )

獲得任務的優先級

taskPrioritySet( )

改變任務優先級

taskRegsSet( )

設置一個任務的寄存器(但是不能被當前任務使用)

taskIsSuspended( )

檢查一個任務是否在懸掛狀態(suspended.)

taskIsReady( )

檢查一個任務是否准備運行就緒

exit( )

結束正在運行任務,釋放內存*

taskDelete( )

結束制定的任務,釋放內存*

taskSafe()

保護當前任務,防止被刪除

taskUnsafe( )

取消taskSafe( )操作,即能夠刪除當前任務

nanosleep( )

延時任務,延時單位是時間片

 

時間片


對於任務來講,只有相同優先級任務下的循環分配式才存在時間片的概念:時間片就是系統分配給各任務的時間,如果該時間內某任務未完成,CPU將被剝奪並分配給另外一個任務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM