【一、vxWorks6.9】
一、vxWorks6.9
- 1. 多任務簡介
- 2. 任務狀態
- 3. 優先級
- 3.1 基于優先級的搶占式任務調度
- 3.2 輪轉式調度
- 3.3 搶占上鎖
- 3.4 驅動程序支持的任務優先級
- 4. 任務控制
- 4.1 創建和激活任務
- 4.2 任務堆棧
- 4.3 任務刪除
- 4.4 任務控制
- 4.5 操作系統任務
- 4.5.1 根任務:tUsrRoot
- 4.5.2 日志任務:tLogTask
- 4.5.3 異常處理任務:tExcTask
- 4.5.4 網絡任務:tNetTask
- 4.5.5 tShell
- 4.5.6 目標代理任務:tWdbTask
- 4.5.5 tTelnetd
1. 多任務簡介
實時系統是在多任務和任務間通信的基礎上建立起來的。一個多任務環境允許將實時應用構成一組獨立的任務,每個任務擁有各自的線程和系統資源。
為了更快的得到中斷響應,vxWorks操作系統里的中斷服務程序(ISR)在一個專門的上下文中執行,是處于環境的上下文之外。
每個任務有各自的上下文,即各自擁有自己的CPU環境和系統環境(指任務被內核調度執行時所使用的資源)。上下文切換時,任務的上下文保存在任務控制塊(TCB).
2. 任務狀態
| 就緒(READY) | 僅等待CPU的資源,不等待其他任務資源 |
| 阻塞 (PEND) | 由于一些資源不可用而被阻塞 |
| 睡眠(DELAY) | 處于睡眠的任務 |
| 掛起(SUSPEND) | 該狀態任務不執行,主要用于調試用 |
3. 優先級
Wind內核中,默認是基于優先級的搶占式調度,當然也可以使用時間片輪轉,兩種調度都基于優先級。有256種優先級,優先級從0到255,優先級0最高,優先級255最低。
3.1 基于優先級的搶占式任務調度
當一個新任務優先級高于系統當前執行任務的優先級時,它將搶占CPU執行。這意味某個任務比當前任務優先級高,并處于就緒狀態,系統內核會立刻保存當前任務的上下文,并切換到高優先級任務的上下文中。
缺點:當多個任務優先級相同,并且任務永不阻塞,那么它將一直獨占處理器,其他任務將沒機會執行。但輪轉式調度可以解決這一問題。
3.2 輪轉式調度
當所有相同優先級任務處于就緒狀態時,通過時間片獲得相同的CPU處理時間,調動kernelTimeSlice()將啟動輪轉式調度
一般不使用輪轉式調度,除非相同代碼被復制執行多次。
3.3 搶占上鎖
通過調用taskLock()和taskUnLock()函數。當任務調用taskLock()函數時,將禁止使用調度程序,若該任務正在執行時,不會發生基于優先級的搶占。
搶占上鎖只能阻止任務的上下文切換,并不禁止中斷
3.4 驅動程序支持的任務優先級
所有應用程序的優先級應該在100-250之間,但驅動程序支持的任務(與中斷服務程序關聯的任務)優先級一般位于51-99之間。
4. 任務控制
4.1 創建和激活任務
//參數:新任務名、優先級、可選字段、堆棧大小、入口函數、10個函數參數 //返回值:任務ID extern TASK_ID taskSpawn (char * name, int priority, int options, size_t stackSize, FUNCPTR entryPt, _Vx_usr_arg_t arg1, _Vx_usr_arg_t arg2, _Vx_usr_arg_t arg3, _Vx_usr_arg_t arg4, _Vx_usr_arg_t arg5, _Vx_usr_arg_t arg6, _Vx_usr_arg_t arg7, _Vx_usr_arg_t arg8, _Vx_usr_arg_t arg9, _Vx_usr_arg_t arg10);4.2 任務堆棧
為了避免堆棧溢出和破壞任務堆棧,最初分配堆棧空間時,可以分配大一點的空間,然后周期性的調用checkStack()函數周期性的監控,若可以使用更小的空間,將修改分配空間尺寸。
4.3 任務刪除
| exit() | 終止任務調用,釋放內存 |
| taskDelete() | 終止指定任務,釋放內存 |
| taskSafe() | 保護調用任務免于刪除 |
| taskUnsafe() | 解除任務刪除保護 |
任務創建時,如果指定的入口函數返回,任務將隱含調用exit()函數,當調用taskDelete()函數,一個任務能夠刪除自身或另另一個任務。
4.4 任務控制
| taskSuspend() | 掛起任務 |
| taskResume() | 恢復任務執行 |
| taskRestart() | 重新啟動任務 |
| taskDelay() | 延時任務,延時單位為“tick” |
| nanosleep() | 延時任務,延時時間為納秒 |
4.5 操作系統任務
4.5.1 根任務:tUsrRoot
根任務是內核執行的首個任務,可初始化vxWorks操作系統的大部分程序。正常情況下,根任務在所有初始化結束后,終止任務并且被刪除。
4.5.2 日志任務:tLogTask
當前任務上下文中不執行輸入/輸出操作時,被操作系統用來記錄系統信息
4.5.3 異常處理任務:tExcTask
必須擁有系統的最高優先級,禁止被掛起、刪除、或改變任務。
4.5.4 網絡任務:tNetTask
用于vxWorks網絡任務級程序。通常配置INCLUDE_NET_LIB組件的操作系統可以發起網絡任務
4.5.5 tShell
用INCLUDE_SHELL組件配置vxWorks操作系統關于目標機命令解釋器
4.5.6 目標代理任務:tWdbTask
用INCLUDE_WDB組件配置目標代理任務
4.5.5 tTelnetd
還后臺允許遠程用戶使用telnet登陸到vxWorks操作系統,使用INCLUDE_TELNET組件配置telnet功能
總結
以上是生活随笔為你收集整理的【一、vxWorks6.9】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Use Case新手上路
- 下一篇: matlab判断矩阵不可约,用Matla