Vxworks系統學習----任務

轉載地址:http://blog.csdn.net/blueoceanindream/article/details/7573818


1.任務隊列

vxworks維護4個隊列:

tick隊列

ready隊列

active隊列

pend隊列

一,tick隊列

當執行taskDelay時,任務會被延長一段時間執行,此時,任務就會被加入到tick隊列中,任務處於Delay狀態,無權競爭CPU;

二,ready隊列

有資格競爭CPU的隊列,按照任務的優先級進行排隊,隊列頭部是優先級最高的任務;

三,active隊列

所有任務無論狀態如何都會在這個隊列中,這個隊列維護着系統當前所有的任務;

四,pend隊列

當多個任務競爭一個資源時,如果資源不可得,任務就會被設置爲pend狀態,進入pend隊列中;


函數taskSpawn創建任務,新建任務會放到active隊列,此時還不能競爭CPU,taskSpawn最後一步就是把任務放到ready隊列中,就可以競爭CPU了。


2.任務優先級

Vxworks共有256個優先級(0~255),0表示優先級最高,255表示優先級最低。taskSpawn創建任務時指定任務優先級,taskPrioritySet可以再創建完成後修改任務優先級。

Vxworks對於應用層任務,推薦使用100~250之間的優先級;驅動層任務,推薦使用51~99之間的任務。

內核網絡任務“tNetTask”的任務爲50,要是有優先級低於這個,網絡收發包就可能受影響。


3.任務上下文

任務的數據結構包含以下內容:

1)CPU的所有寄存器值,還有任務內存映射空間、任務名稱、任務優先級、任務入口函數、信號量、隊列;

2)存放任務運行時的棧。棧的大小是由創建任務時確定的,此後不允許改變任務棧的大小,如果此任務有許多遞歸調用,就要申請大的棧空間,防止棧的溢出;

3)各種定時信息。系統時鐘是系統的脈搏,與高優先級的中斷聯繫。每個Tick,OS都會響應一次中斷,這個中斷可以作爲操作系統調度的觸發點;

4)信號處理函數,ctrl+c中斷當前前臺任務。

5)其他輔助信息,統計數據等


4.常用任務調度函數

1)kernelTimeSlice(int ticks) --------------RR調度使能函數

2)STATUS taskLock(void)和STATUS taskUnlock(void)-------------關閉/開啓任務調度,並不禁止中斷,是一種互斥機制

3)taskSpawn創建了任務之後就進入運行狀態,taskCreate創建了任務,還要通過taskActivate來激活,才能加入到ready隊列中。


5.任務棧

Vxworks的任務棧本質上是內核數據結構的簡單保護機制,僅有一個全局變量kernelState來表示是否在內核態。

Vxworks下任務棧即被應用程序使用,也被內核函數使用。

任務棧大小在任務創建時已經確定,在使用時不能修改。這樣會引起資源浪費,Vxworks官方文檔建議通過試驗法,通過checkStack(taskname or id)來查看任務棧的使用情況。


發佈了28 篇原創文章 · 獲贊 19 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章