vxworks中Task是什么意思

這篇文章主要為大家展示了“vxworks中Task是什么意思”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“vxworks中Task是什么意思”這篇文章吧。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、五峰ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的五峰網(wǎng)站制作公司

Task是啥?

VxWorks的Task,也就是任務(wù),是系統(tǒng)里最基本的執(zhí)行單元,類似于其它操作系統(tǒng)的Thread(線程)。現(xiàn)代的RTOS基本都通過提供一個多任務(wù)環(huán)境來支撐上層的應(yīng)用程序。而上層的應(yīng)用程序則使用不同的任務(wù)來模擬真實(shí)世界里各種各樣的分離事件。每個任務(wù)就是一個執(zhí)行線程,使用著自己的系統(tǒng)資源。

那如果不使用多任務(wù)呢?也就是單任務(wù)系統(tǒng)又是如何工作的?我們看看這個案例:假設(shè)需要實(shí)現(xiàn)一個控制多節(jié)機(jī)械手臂的程序。

vxworks中Task是什么意思

在單任務(wù)環(huán)境下,通常的代碼實(shí)現(xiàn)就是一個無限循環(huán),循環(huán)里輪詢每節(jié)的狀態(tài)。偽代碼如下:

vxworks中Task是什么意思

代碼結(jié)構(gòu)比較簡單,很容易理解,這就是它的優(yōu)勢。另外,因?yàn)橹挥幸粋€任務(wù),也就不需要切換任務(wù)了,CPU就可以專注于執(zhí)行這個任務(wù)。

但是,單任務(wù)的缺點(diǎn)也很明顯。從代碼來看,每一節(jié)的地位平等,沒有輕重緩急的概念,而真實(shí)世界里,每一節(jié)的重要程度可能是有區(qū)別的。也就是說,這種代碼結(jié)構(gòu),不具備搶占能力,每一節(jié)必須等到被輪詢時,才有可能去執(zhí)行。而且,每一節(jié)的執(zhí)行頻率也不容易控制,很多條件語句會經(jīng)常出現(xiàn)假值判斷的情況,這種代碼就是在浪費(fèi)CPU了。

如果在多任務(wù)環(huán)境里,代碼大致如下:

vxworks中Task是什么意思

需要給每一節(jié)制作一個任務(wù),每個任務(wù)等待一個通知,然后才能執(zhí)行,也就是說每個任務(wù)都是一直在Waiting和Ready兩種狀態(tài)之間切換。Waiting表示它正在等待通知;Ready表示它等到通知了,可以去執(zhí)行了,這個時候操作系統(tǒng)可以決定是不是要把CPU分配給它了。

可以看到,這種實(shí)現(xiàn)對操作系統(tǒng)的要求就高一些了。需要操作系統(tǒng)提供通知機(jī)制,讓不同的任務(wù)等待不同的通知。另外,如果有多個任務(wù)都等到通知了,操作系統(tǒng)還得提供排隊機(jī)制,以便于安排哪個任務(wù)可以使用CPU來執(zhí)行了。

這種多任務(wù)的優(yōu)點(diǎn)有很多:

1 任意頻率,每個任務(wù)的頻率取決于自己被通知的頻率,與其它任務(wù)關(guān)系不大;

2 可以排隊,給每個任務(wù)分配不同的優(yōu)先級,這樣高優(yōu)先級的任務(wù)就可以搶占正在執(zhí)行的低優(yōu)先級任務(wù);

3 易于擴(kuò)展,不同任務(wù)代碼之間的耦合性比較小,增加新任務(wù)時,對已有任務(wù)的影響比較小。

正所謂,春蘭秋菊,各擅勝場。而我們的真實(shí)世界,本身是一個并行的世界,許許多多事件都是同時在發(fā)生的。在模擬真實(shí)世界的軟件世界里,大量的場景也是更適合于用多任務(wù)來實(shí)現(xiàn),例如下圖:

vxworks中Task是什么意思

VxWorks也正是采用這種多任務(wù)方式來保證它的實(shí)時性的。使用多任務(wù)把復(fù)雜問題分解,提供多種多任務(wù)通信機(jī)制來保障任務(wù)間的協(xié)作,提供高效的調(diào)度策略來保障重要任務(wù)的及時響應(yīng)。這些任務(wù)可以分別獨(dú)立地等待系統(tǒng)資源(包括CPU、I/O設(shè)備及內(nèi)存空間等),或者使用資源一起在宏觀上并發(fā)運(yùn)行。當(dāng)然了,在微觀上,并發(fā)運(yùn)行的任務(wù)數(shù)量取決于CPU的內(nèi)核數(shù)量。不過這不影響我們對任務(wù)的理解,關(guān)于多核的內(nèi)容,我們以后會有專門的SMP章節(jié),目前我們假定CPU都是單核的。

VxWorks的任務(wù)由兩部分組成:Stack和TCB。

Stack(棧)用來存放任務(wù)的動態(tài)變量和函數(shù)調(diào)用關(guān)系。

TCB全稱是任務(wù)控制塊(Task Control Block),在代碼中用一個龐大的結(jié)構(gòu)體來表示,windTcb,在target/h/taskLib.h中可以看到它的完整定義。TCB里記錄的信息是任務(wù)的Context(上下文):

  • 任務(wù)的PC指針

  • CPU寄存器

  • 協(xié)處理器的寄存器(可選)

  • 標(biāo)準(zhǔn)IO的分配情況

  • 延時計數(shù)器

  • 時間片計數(shù)器

  • 內(nèi)核控制結(jié)構(gòu)

  • 信號量回調(diào)函數(shù)

  • 任務(wù)的私有環(huán)境變量

  • Errno狀態(tài)

  • 調(diào)試和性能監(jiān)測信息

  • 虛擬內(nèi)存上下文(支持RTP時)

以及Stack的信息,所以也可能把Stack看作Context的一部分。

VxWorks的調(diào)度策略進(jìn)行任務(wù)調(diào)度時,就是讓正在使用CPU執(zhí)行的任務(wù)停下來,然后把CPU分配給另一個任務(wù)來執(zhí)行。這個過程就叫做上下文切換。

vxworks中Task是什么意思

可以看到,上下文切換就是對兩個任務(wù)Context的讀寫操作。為了保證實(shí)時性,這個切換過程必須準(zhǔn)確、快速。

以上是“vxworks中Task是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享題目:vxworks中Task是什么意思
分享地址:http://muchs.cn/article4/pihooe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作網(wǎng)站策劃、品牌網(wǎng)站設(shè)計網(wǎng)站改版、網(wǎng)站營銷、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管