?

基于VxWorks的多任務實時性分析*

2013-06-13 11:33王省書胡春生
微處理機 2013年1期
關鍵詞:多任務實時性內核

張 宇,王省書,胡春生

(國防科學技術大學光電科學與工程學院,長沙410073)

1 引言

VxWorks操作系統是由美國Wind River System公司推出的一款嵌入式實時操作系統。該操作系統憑借其高性能的微內核、卓越的可靠性和實時性廣泛的應用在通信、軍事、航天、航空等高精尖技術及實時性要求極高的領域[1]。

VxWorks系統支持組件裁剪、多任務調度、任務間管理通信等功能,在任務量較多的應用中,為了保證所裁剪系統的實時性,需研究VxWorks在不同任務數量下的實時性性能。利用PC104硬件平臺,設計了測量程序對任務搶占切換時間進行測試,進而得出了內核任務切換時間在多任務運行環境下占用的時間開銷。同時根據信號量機制設計了任務間通信程序,并對實時性的影響進行了定量測試與分析。

2 VxWorks多任務實時性的測試與分析

2.1 任務的創建與調度

在VxWorks操作系統中,可以使用taskSpawn()函數創建任務,創建的新任務有自己的上下文,如CPU環境、系統資源等,這些任務的上下文保存在任務控制模塊(TCB)中[2]。

操作系統在單處理器環境下是無法實現多任務同時并發執行的,也就是說多任務必須通過一定的調度算法分時執行。VxWorks的實時內核Wind為Vx-Works的多任務實現提供了基礎,并為多任務的分時執行提供了基于優先級的搶占式任務調度機制[3]。

Wind內核里設置有256種優先級,優先級從0到255,優先級0為最高,優先級255為最低[4]。任務在創建的時候分配一個優先級,使用基于優先級的搶占式任務調度算法,在任意時刻,內核將CPU分配給處于就緒態的優先級最高的任務運行。這意味著當某個任務比當前執行任務的優先級高,并處于就緒狀態,那么系統內核將立刻保存當前執行任務的上下文到TCB中,切換到高優先級任務的上下文中去,執行高優先級任務。任務搶占調度實例如圖1所示。

圖1 優先級搶占調度示意圖

2.2 任務切換時間測試方法

在VxWorks操作系統的多任務環境下,各個任務需要分時執行,為了保證各個任務在特定的時刻能夠搶占CPU完成相關功能,則需要根據任務的優先級高低來對執行任務合理安排。因此,任務間的搶占執行是系統完成一個功能的必要條件。同時這種基于優先級的任務搶占切換時間也是VxWorks實時性的主要特征,該時間越短,說明多個任務運行花在切換上的時間開銷越小,對緊急任務的響應越快,實時性越好。

Workbench提供的System Viewer盡管以圖像化顯示任務切換的先后關系,但并不能測試出具體的時間數據。VxWorks系統提供并口輸出組件,可以使用示波器測試并口中數據引腳電壓變化,得出任務切換時間,但切換時調用I/O函數輸出需要一定的時間,影響測試精度,另外這種方法對測試硬件的依賴性也比較高。因此,考慮直接在VxWorks系統下利用自身頻率時鐘,設計程序實現時間測試。

測試VxWorks的任務切換時間,需要一個高精度時鐘。VxWorks提供操作系統時鐘,該時鐘在操作系統運行后便開始計數,計數精度為1tick,可以通過調用tickGet()獲取當前計數值。因為系統時鐘默認工作頻率為60Hz,一個tick相當于16.7ms,不符合測試精度。盡管可以通過函數sysClkRateSet(1000),將1秒平分為1000等份,每一份為系統時鐘的一個tick,這樣雖然可以將精度提高到1ms,但1kHz的系統時鐘中斷頻率會使得CPU的開銷大增,反而降低了操作系統的性能。

硬件測試平臺選用數字邏輯公司生產的一款PC104,X86架構,Pentium 處理器,主頻 500MHz??紤]到Intel Pentium級以上的CPU都提供了64位寄存器“時間戳”部件,用以記錄CPU自上電后開始經過的時間戳數量。目前CPU的頻率較高,這種定時可以達到微秒級精度甚至更高,因此選用CPU計數器作為切換時間測量工具。盡管CPU的每一個時鐘周期不完全相等,計時數據會存在一定的抖動,但相對主頻500MHz的CPU,其抖動數值在系統中可以忽略[5]。

在VxWorks操作系統中使用CPU時間戳,需要修改BSP,將pentiumLib.h頭文件添加到BSP中,便可在程序開發中調用 pentiumTscGet32()、pentiumTscGet64()、pentiumTsReset()。其中,pentiumTscGet32提供了對時間戳計數器的低32位訪問,pentiumTscGet64提供了對整個寄存器64位值的訪問。

利用時間戳方法可以測試程序執行時間,對于某段待測試程序只需在程序執行前后加入函數調用系統時間戳,在程序執行后將兩次獲得數據相減,最后除以CPU頻率便可得出程序執行的具體時間。

同樣,可以設計程序利用CPU計數器為任務搶占切換時間提供時間戳:優先級為N的任務A占用CPU,任務B優先級為N-1,某個時刻任務B優先級加2,同時記錄時間戳,任務B搶占CPU后優先級馬上-2,任務A重新搶占CPU,再一次記錄時間戳。整個過程發生了兩次搶占,將兩次的時間戳相減后除以2,再除以500MHz的CPU頻率,即可得出任務切換時間。

2.3 實時性測試結果與分析

2.3.1 簡單環境下任務切換時間測試

在程序中只創建兩個任務,分別為主任務和子任務,根據上述測試方法,對任務搶占切換時間進行測試。將測試循環100次,測試結果如圖2所示。最小 值 0.9945μs,最 大 值 1.6579μs,平 均 值1.3257μs,切換時間波動在0.7μs以內,標準方差值為0.1381μs,從數據中可以看出VxWorks的任務切換時間非常穩定。

另外需要說明的是,在大量的循環測試中,會出現個別明顯高于其他數據值的數據點,這是由于VxWorks操作系統后臺中存在一些優先級為0的默認任務,其中某些默認任務按一定周期循環執行。在一定時刻,這些默認任務的執行正好阻塞了測試任務,從而導致了測試時間的顯著增大,在處理數據時只需要將這些數據點刪除即可。在實際應用中,可更改任務屬性,將這些任務改為掛起態,避免阻塞其他任務的執行。

圖2 雙任務運行時任務切換時間

2.3.2 復雜環境下任務切換時間測試

為了測試在多任務環境下任務搶占切換時間,在VxWorks操作系統中添加4個任務,分別為tCosmos、tSchlep、tCrunch、tMontier。其中 tCosmos任務用來模擬中斷服務產生新數據;tSchlep任務完成數據采集功能并將采集到的數據組成一個樣本;tCrunch任務完成數據處理功能;tMontier任務將處理結果顯示。這4個任務依次運行一次為程序的一個周期,測試時使其運行100個周期,分別測試5組,運用時間戳方法,分別得出程序運行時間和任務切換總時間,進而可得出任務搶占所花費的時間開銷百分比如表1所示。

表1 程序執行總時間與切換總時間測試

從數據中可以看出,任務搶占切換時間的開銷非常小,體現出了VxWorks操作系統良好的實時性。同時,測量了在4個任務運行時,每次任務優先級搶占切換時間,見圖3,從圖中數據看出,切換時間最小值1.0479μs,最大值1.6779μs,平均值1.3657μs。

圖3 多任務運行時任務切換時間

同樣,在VxWorks操作系統中繼續增加任務數量,測量不同任務數量下的任務切換時間,結果見表2。從測量數據中可以得出,任務搶占切換時間并沒有因為任務數量的增加而大幅增加,百分之一微秒數量級的增加主要是因為操作系統在運行時,內核Wind需要根據系統時鐘周期查詢任務列表tasklist,從而決定哪個任務應該優先占有CPU資源,因此這個任務列表中的任務數量越多,Wind內核查詢時間越長,對切換時間有一定的影響。

表2 多任務切換時間測試

3 任務間的通信機制

在基于優先級的搶占式任務調度中,可以使緊急任務優先執行,這種算法盡管保證了系統的實時性,但也增加了系統的復雜性。任務間對臨界資源的競爭會使一個高優先級的任務被迫等待一個低優先級任務完成后才能執行,這種情況會產生優先級翻轉。因此,為了加強任務控制,需要使用任務間的通信機制。

3.1 信號量機制通信(Semaphores)

在VxWorks中,信號量被高度優化,提供了最快的任務間通信機制,是實現任務間互斥與同步的最主要手段。VxWorks提供了二進制信號量、計數信號量和互斥信號量3種信號量[6]。其中,二進制信號量是最基本的信號量,速度最快,能夠滿足通常的互斥和同步操作[7]。

3.2 二進制信號量程序設計

在VxWorks中,為實現信號量機制所提供的函數庫是semLib.h,可通過調用該函數庫中的semB-Create()、semCCreate()、semMCeate()分別創建二進制信號量、計數信號量和互斥信號量。信號量通過上述函數創建后將返回一個信號量ID,該ID為隨后其他信號量控制函數的使用提供句柄。

使用VxWorks進行實時多任務建立和任務間的信號量通信,主要步驟如下:

(1)利用taskSpawn()函數創建多個任務,建立多任務環境;

(2)通過semBCreate()、semCCreate()、semMCeate()函數創建信號量,用于任務間的同步與協調;

(3)通過semSend()、semGive()函數獲取和釋放信號量,實現任務的同步或互斥;

(4)任務完成相關功能后,調用taskDelete()、semDelete函數刪除相關任務和信號量,釋放資源。

根據上述開發步驟,設計程序部分代碼如下:

#include"vxWorks.h"

#include"taskLib.h"

#include"semLib.h"

#include"stdio.h"

void taskA(void);

void taskB(void);

SEM_ID semId1,semId2;/*定義信號量ID*/

void binary(void)

{int taskIdA,taskIdB;

semId1=semBCreate(SEM_Q_FIFO,SEM_FULL);

semId2=semBCreate(SEM_Q_FIFO,SEM_EMPTY);/*創建信號量,信號量1初始狀態可用,信號量2初始狀態不可用*/

taskIdA=taskSpawn("tTaskA",120,0,2000,(FUNCPTR)taskA,0,0,0,0,0,0,0,0,0,0);

taskIdB=taskSpawn("tTaskB",120,0,2000,(FUNCPTR)taskB,0,0,0,0,0,0,0,0,0,0);

/*創建任務A、B*/}

void taskA(void)

{semTake(semId1,WAIT_FOREVER);/* 獲取信號量1*/

/* 處理任務A的相關事務*/;…

semGive(semId2);/*釋放信號量2*/}

void taskB(void)

{semTake(semId2,WAIT_FOREVER);/* 等待信號量2,直至其被任務A釋放 */

/* 處理任務B的相關事務*/;…

semGive(semId1);/*釋放信號量1*/}

將程序代碼在Wind River Workbench中編譯生成.out文件,文件加載到集成仿真器VxSim,并啟動命令解釋工具WindSh,輸入->sp binary,調用主函數binary(),發起任務A和任務B,程序開始執行,執行情況如圖4所示。同時,可以通過開發環境提供的軟件邏輯分析儀WindView對系統各個任務的運行情況進行觀察分析。從圖5中可以觀察到,任務A與任務B在信號量的控制下,分別有序處理各自事務。

圖4 信號量控制下任務執行情況仿真

圖5 VxWorks中的多任務運行時序

3.3 信號量機制的實時性影響

同樣利用時間戳方法,測試在使用信號量控制時,任務搶占時間的大小。測試程序應用上述的二進制信號量程序代碼,只需將在任務釋放和獲得信號量的同時添加時間戳調用函數記錄數據,對數據通過簡單的計算即可得出任務切換時間。信號量測試程序循環測試100次,測試結果如圖6所示。

圖6 信號量機制下任務切換時間

圖中○表示沒有使用二進制信號量時,任務切換時間的數據點,最小值 0.9945μs,最大值1.6579μs,平均值1.3257μs?!鞣柋硎镜氖窃谛盘柫靠刂葡?,任務搶占時間的數據,最小值1.1459μs,最大值 1.7158μs,平均值 1.4109μs。

與二進制信號量的程序設計和測試方法相似,對計數信號量和互斥信號量進行測試,測試結果見表3。比較圖6和表3中的數據可發現,使用信號量后,任務切換平均時間僅僅增大了約0.1μs,并沒有對任務的搶占造成很大的延時,這是由于Wind內核對信號量做了優化,增加的時間主要是由于處理器解讀信號量代碼所造成的,并且這三種信號量的切換時間沒有顯著差異。因此,在VxWorks的具體開發中,可根據三種信號量各自的特點應用在不同需求的任務控制中。

表3 三種信號量的任務切換時間測試

4 結束語

任務切換時間反映了實時操作系統對緊急任務的響應速度。本文利用CPU計數器提供時間測量工具,對任務搶占切換時間進行了測試,分析了多任務環境下任務的實時性。同時設計了信號量通信機制程序,結合測試數據,分析了信號量機制對操作系統實時性的影響。該測量方法不需要其它測試硬件的輔助,操作簡單,且還可以對某段程序執行時間進行測試,在程序調試時有利于優化源代碼,進一步提高執行效率,具有廣泛的應用性。

[1]王金剛,宮霄霖,蘇琪,等.基于VxWorks的嵌入式實時系統設計[M].北京:清華大學出版社,2004-10.

[2]金敏,周翔,金梁.嵌入式系統組成、原理與設計編程[M].北京:人民郵電出版社,2006.

[3]王永亮,李秀娟.嵌入式多任務程序設計[J].電子科技,2010,23(1):94 -96.

[4]李洪亮,侯朝楨,周紹生.VxWorks下實時多任務程序的實現[J].微計算機信息,2008(7-2):90-91.

[5]Wind River Inc.VxWorks Programmer’s Guide 5.5[C].[2008 -06 -23].http://www.windriver.com.

[6]張楊,于銀濤.VxWorks內核、設備驅動與BSP開發詳解[M].北京:人民郵電出版社,2009.

[7]李俊.VxWorks下多任務間通信方式的比較與分析[J].信息技術,2009(25):24-25.

猜你喜歡
多任務實時性內核
多內核操作系統綜述①
強化『高新』內核 打造農業『硅谷』
活化非遺文化 承啟設計內核
基于中心化自動加權多任務學習的早期輕度認知障礙診斷
Linux內核mmap保護機制研究
航空電子AFDX與AVB傳輸實時性抗干擾對比
計算機控制系統實時性的提高策略
基于判別性局部聯合稀疏模型的多任務跟蹤
基于多任務異步處理的電力系統序網絡拓撲分析
一種車載Profibus總線系統的實時性分析
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合