溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

vxworks中Task是什么意思

發(fā)布時(shí)間:2021-12-22 10:04:49 來(lái)源:億速云 閱讀:276 作者:小新 欄目:互聯(lián)網(wǎng)科技

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

Task是啥?

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

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

vxworks中Task是什么意思

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

vxworks中Task是什么意思

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

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

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

vxworks中Task是什么意思

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

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

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

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

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

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

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

vxworks中Task是什么意思

VxWorks也正是采用這種多任務(wù)方式來(lái)保證它的實(shí)時(shí)性的。使用多任務(wù)把復(fù)雜問(wèn)題分解,提供多種多任務(wù)通信機(jī)制來(lái)保障任務(wù)間的協(xié)作,提供高效的調(diào)度策略來(lái)保障重要任務(wù)的及時(shí)響應(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ù)量。不過(guò)這不影響我們對(duì)任務(wù)的理解,關(guān)于多核的內(nèi)容,我們以后會(huì)有專(zhuān)門(mén)的SMP章節(jié),目前我們假定CPU都是單核的。

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

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

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

  • 任務(wù)的PC指針

  • CPU寄存器

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

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

  • 延時(shí)計(jì)數(shù)器

  • 時(shí)間片計(jì)數(shù)器

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

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

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

  • Errno狀態(tài)

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

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

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

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

vxworks中Task是什么意思

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

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

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI