這篇文章主要為大家展示了“vxworks中Task是什么意思”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“vxworks中Task是什么意思”這篇文章吧。
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、五峰ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的五峰網(wǎng)站制作公司
Task是啥?
VxWorks的Task,也就是任務(wù),是系統(tǒng)里最基本的執(zhí)行單元,類似于其它操作系統(tǒng)的Thread(線程)?,F(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ī)械手臂的程序。
在單任務(wù)環(huán)境下,通常的代碼實(shí)現(xiàn)就是一個(gè)無(wú)限循環(huán),循環(huán)里輪詢每節(jié)的狀態(tài)。偽代碼如下:
代碼結(jié)構(gòu)比較簡(jiǎn)單,很容易理解,這就是它的優(yōu)勢(shì)。另外,因?yàn)橹挥幸粋€(gè)任務(wù),也就不需要切換任務(wù)了,CPU就可以專注于執(zhí)行這個(gè)任務(wù)。
但是,單任務(wù)的缺點(diǎn)也很明顯。從代碼來(lái)看,每一節(jié)的地位平等,沒(méi)有輕重緩急的概念,而真實(shí)世界里,每一節(jié)的重要程度可能是有區(qū)別的。也就是說(shuō),這種代碼結(jié)構(gòu),不具備搶占能力,每一節(jié)必須等到被輪詢時(shí),才有可能去執(zhí)行。而且,每一節(jié)的執(zhí)行頻率也不容易控制,很多條件語(yǔ)句會(huì)經(jīng)常出現(xiàn)假值判斷的情況,這種代碼就是在浪費(fèi)CPU了。
如果在多任務(wù)環(huán)境里,代碼大致如下:
需要給每一節(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也正是采用這種多任務(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ì)有專門(mén)的SMP章節(jié),目前我們假定CPU都是單核的。
VxWorks的任務(wù)由兩部分組成:Stack和TCB。
Stack(棧)用來(lái)存放任務(wù)的動(dòng)態(tài)變量和函數(shù)調(diào)用關(guān)系。
TCB全稱是任務(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ò)程就叫做上下文切換。
可以看到,上下文切換就是對(duì)兩個(gè)任務(wù)Context的讀寫(xiě)操作。為了保證實(shí)時(shí)性,這個(gè)切換過(guò)程必須準(zhǔn)確、快速。
以上是“vxworks中Task是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享題目:vxworks中Task是什么意思
分享地址:http://chinadenli.net/article4/pihooe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站策劃、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)站營(yíng)銷、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)