當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]關(guān)于uC/OS-II中優(yōu)先級翻轉(zhuǎn)問題

引 言

1 uC/OS-II的運(yùn)行機(jī)制

  在嵌入式系統(tǒng)的應(yīng)用中,實(shí)時(shí)性是一個(gè)重要的指標(biāo),而優(yōu)先級翻轉(zhuǎn)是影響系統(tǒng)實(shí)時(shí)性的重要問題。本文著重分析優(yōu)先級翻轉(zhuǎn)問題的產(chǎn)生和影響,以及在uC/OS-II中的解決方案。

  uC/OS-II采用基于固定優(yōu)先級的占先式調(diào)度方式,是一個(gè)實(shí)時(shí)、多任務(wù)的操作系統(tǒng)。系統(tǒng)中的每個(gè)任務(wù)具有一個(gè)任務(wù)控制快OS_TCB,任務(wù)控制塊記錄任務(wù)執(zhí)行的環(huán)境,包括任務(wù)的優(yōu)先級,任務(wù)的堆棧指針,任務(wù)的相關(guān)事件控制塊指針等。內(nèi)核將系統(tǒng)中處于就緒態(tài)的任務(wù)在就緒表(ready list)進(jìn)行標(biāo)注,通過就緒表中的兩個(gè)變量OSRdyGrp和OSRdyTbl[]可快速查找系統(tǒng)中就緒的任務(wù)。在uC/OS-II中每個(gè)任務(wù)有唯一的優(yōu)先級,因此任務(wù)的優(yōu)先級也是任務(wù)的唯一編號(hào)(ID),可以作為任務(wù)的唯一標(biāo)識(shí)。內(nèi)核可用控制塊優(yōu)先級表OSTCBPrioTbl[]由任務(wù)的優(yōu)先級查到任務(wù)控制塊的地址。uC/OS-II主要就是利用任務(wù)控制快OS_TCB、就緒表(ready list)和控制塊優(yōu)先級表OSTCBPrioTbl[]來進(jìn)行任務(wù)調(diào)度的。任務(wù)調(diào)度程序OSSched()首先由就緒表(ready list)中找到當(dāng)前系統(tǒng)中處于就緒態(tài)的優(yōu)先級最高的任務(wù),然后根據(jù)其優(yōu)先級由控制塊優(yōu)先級表OSTCBPrioTbl[]取得相應(yīng)任務(wù)控制塊的地址,由OS_TASK_SW()程序進(jìn)行運(yùn)行環(huán)境的切換。將當(dāng)前運(yùn)行環(huán)境切換成該任務(wù)的運(yùn)行環(huán)境,則該任務(wù)由就緒態(tài)轉(zhuǎn)為運(yùn)行態(tài)。當(dāng)這個(gè)任務(wù)運(yùn)行完畢或因其它原因掛起時(shí),任務(wù)調(diào)度程序OSSched()再次到就緒表(ready list)中尋找當(dāng)前系統(tǒng)中處于就緒態(tài)中優(yōu)先級最高的任務(wù),轉(zhuǎn)而執(zhí)行該任務(wù),如此完成任務(wù)調(diào)度。若在任務(wù)運(yùn)行時(shí)發(fā)生中斷,則轉(zhuǎn)向執(zhí)行中斷程序,執(zhí)行完畢后不是簡單的返回中斷調(diào)用處,而是由OSIntExit()程序進(jìn)行任務(wù)調(diào)度,執(zhí)行當(dāng)前系統(tǒng)中優(yōu)先級最高的就緒態(tài)任務(wù)。當(dāng)系統(tǒng)中所有任務(wù)都執(zhí)行完畢時(shí),任務(wù)調(diào)度程序OSSched()就不斷執(zhí)行優(yōu)先級最低的空閑任務(wù)OSTaskIdle(),等待用戶程序的運(yùn)行。

2 uC/OS-II中的優(yōu)先級翻轉(zhuǎn)問題

  在uC/OS-II中,多個(gè)任務(wù)按照優(yōu)先級高低由內(nèi)核調(diào)度執(zhí)行,而且任務(wù)調(diào)度所花的時(shí)間是常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān)。對于占先式內(nèi)核,任務(wù)的響應(yīng)時(shí)間是確定的,而且是最優(yōu)化的,占先式內(nèi)核保證最高優(yōu)先級的任務(wù)最先執(zhí)行。

  任務(wù)的響應(yīng)時(shí)間=尋找最高優(yōu)先級任務(wù)的時(shí)間+任務(wù)切換時(shí)間
  
  在uC/OS-II中尋找進(jìn)入就緒態(tài)的最高優(yōu)先級任務(wù)是通過查就緒表實(shí)現(xiàn)的,這減少了所需時(shí)間。
y=OSUnMapTbl[OSRdyGrp];
x= OSUnMapTbl [OSRdyTbl[y]];
prio=(y<<3)+x;

  任務(wù)切換是通過調(diào)用匯編函數(shù)OS_TASK_SW()來實(shí)現(xiàn)的,主要完成兩個(gè)任務(wù)運(yùn)行環(huán)境的保存和恢復(fù)。因此用戶可以通過安排任務(wù)的優(yōu)先級,保證系統(tǒng)的實(shí)時(shí)性。當(dāng)涉及到共享資源的互斥訪問時(shí),多任務(wù)實(shí)時(shí)操作系統(tǒng)常常會(huì)出現(xiàn)優(yōu)先級翻轉(zhuǎn)問題(priority inversion),不能保證高優(yōu)先級任務(wù)的響應(yīng)時(shí)間,影響系統(tǒng)的實(shí)時(shí)性,uC/OS-II中也存在同樣問題。所謂優(yōu)先級翻轉(zhuǎn)問題(priority inversion)即當(dāng)一個(gè)高優(yōu)先級任務(wù)通過信號(hào)量機(jī)制訪問共享資源時(shí),該信號(hào)量已被一低優(yōu)先級任務(wù)占有,而這個(gè)低優(yōu)先級任務(wù)在訪問共享資源時(shí)可能又被其它一些中等優(yōu)先級的任務(wù)搶先,因此造成高優(yōu)先級任務(wù)被許多具有較低優(yōu)先級的任務(wù)阻塞,實(shí)時(shí)性難以得到保證。例如:有優(yōu)先級為A、B和C的三個(gè)任務(wù),優(yōu)先級A>B>C,任務(wù)A,B處于掛起狀態(tài),等待某一事件的發(fā)生,任務(wù)C正在運(yùn)行,此時(shí)任務(wù)C開始使用某一共享資源S。在使用中,任務(wù)A等待的事件到來,任務(wù)A轉(zhuǎn)為就緒態(tài),因?yàn)樗热蝿?wù)C優(yōu)先級高,所以立即執(zhí)行。當(dāng)任務(wù)A要使用共享資源S時(shí),由于其正在被任務(wù)C使用,因此任務(wù)A被掛起,任務(wù)C開始運(yùn)行。如果此時(shí)任務(wù)B等待的事件到來,則任務(wù)B轉(zhuǎn)為就緒態(tài)。由于任務(wù)B的優(yōu)先級比任務(wù)C高,因此任務(wù)B開始運(yùn)行,直到其運(yùn)行完畢,任務(wù)C才開始運(yùn)行。直到任務(wù)C釋放共享資源S后,任務(wù)A才得以執(zhí)行。在這種情況下,優(yōu)先級發(fā)生了翻轉(zhuǎn),任務(wù)B先于任務(wù)A運(yùn)行。這樣便不能保證高優(yōu)先級任務(wù)的響應(yīng)時(shí)間,解決優(yōu)先級翻轉(zhuǎn)問題有優(yōu)先級天花板(priority ceiling)和優(yōu)先級繼承(priority inheritance)兩種辦法。

  優(yōu)先級天花板是當(dāng)任務(wù)申請某資源時(shí),把該任務(wù)的優(yōu)先級提升到可訪問這個(gè)資源的所有任務(wù)中的最高優(yōu)先級,這個(gè)優(yōu)先級稱為該資源的優(yōu)先級天花板。這種方法簡單易行,不必進(jìn)行復(fù)雜的判斷,不管任務(wù)是否阻塞了高優(yōu)先級任務(wù)的運(yùn)行,只要任務(wù)訪問共享資源都會(huì)提升任務(wù)的優(yōu)先級。在uC/OS-II中,可以通過OSTaskChangePrio()改變?nèi)蝿?wù)的優(yōu)先級,但是改變?nèi)蝿?wù)的優(yōu)先級是很花時(shí)間的。如果不發(fā)生優(yōu)先級翻轉(zhuǎn)而提升了任務(wù)的優(yōu)先級,釋放資源后又改回原優(yōu)先級,則無形中浪費(fèi)了許多CPU時(shí)間,也影響了系統(tǒng)的實(shí)時(shí)性。

  優(yōu)先級繼承是當(dāng)任務(wù)A申請共享資源S時(shí),如果S正在被任務(wù)C使用,通過比較任務(wù)C與自身的優(yōu)先級,如發(fā)現(xiàn)任務(wù)C的優(yōu)先級小于自身的優(yōu)先級,則將任務(wù)C的優(yōu)先級提升到自身的優(yōu)先級,任務(wù)C釋放資源S后,再恢復(fù)任務(wù)C的原優(yōu)先級。這種方法只在占有資源的低優(yōu)先級任務(wù)阻塞了高優(yōu)先級任務(wù)時(shí)才動(dòng)態(tài)的改變?nèi)蝿?wù)的優(yōu)先級,如果過程較復(fù)雜,則需要進(jìn)行判斷。uC/OS-II不支持優(yōu)先級繼承,而且其以任務(wù)的優(yōu)先級作為任務(wù)標(biāo)識(shí),每個(gè)優(yōu)先級只能有一個(gè)任務(wù),因此,不適宜在應(yīng)用程序中使用優(yōu)先級繼承。

3 uC/OS-II中優(yōu)先級翻轉(zhuǎn)問題的解決

  在uC/OS-II中,為解決優(yōu)先級翻轉(zhuǎn)影響任務(wù)實(shí)時(shí)性的問題,可以借鑒優(yōu)先級繼承的方法對優(yōu)先級天花板方法進(jìn)行改進(jìn)。對uC/OS-II的使用,共享資源任務(wù)的優(yōu)先級不是全部提升,而是先判斷再?zèng)Q定是否提升。即當(dāng)有任務(wù)A申請共享資源S時(shí),首先判斷是否有別的的任務(wù)正在占用資源S,若無,則任務(wù)A繼續(xù)執(zhí)行,若有,假設(shè)為任務(wù)B正在使用該資源,則判斷任務(wù)B的優(yōu)先級是否低于任務(wù)A,若高于任務(wù)A,則任務(wù)A掛起,等待任務(wù)B釋放該資源,如果任務(wù)B的優(yōu)先級低于任務(wù)A,則提升任務(wù)B的優(yōu)先級到該資源的優(yōu)先級天花板,當(dāng)任務(wù)B釋放資源后,再恢復(fù)到原優(yōu)先級。在uC/OS-II中,每個(gè)共享資源都可看作一個(gè)事件,每個(gè)事件都有相應(yīng)的事件控制塊ECB。在ECB中包含一個(gè)等待本事件的等待任務(wù)列表,該列表包括OSEventTbl[]和OSEventGrp兩個(gè)域,通過對等待任務(wù)列表的判斷可以很容易的確定是否有多個(gè)任務(wù)在等待該資源,同時(shí)也可判斷任務(wù)的優(yōu)先級與當(dāng)前任務(wù)優(yōu)先級的高低,從而決定是否需要用OSTaskChangePio()來改變?nèi)蝿?wù)的優(yōu)先級。這樣,僅在優(yōu)先級有可能發(fā)生翻轉(zhuǎn)的情況下才改變?nèi)蝿?wù)的優(yōu)先級,而且利用事件的等待任務(wù)列表進(jìn)行判斷,比用OSTaskChangePio()來改變?nèi)蝿?wù)的優(yōu)先級速度快,并占用較少的CPU時(shí)間,有利于系統(tǒng)實(shí)時(shí)性的提高。

  總之,優(yōu)先級翻轉(zhuǎn)問題是多任務(wù)實(shí)時(shí)操作系統(tǒng)普遍存在的問題,這個(gè)問題也存在于uC/OS-II中。通過在應(yīng)用程序中進(jìn)行簡單的判斷,在可能出現(xiàn)優(yōu)先級翻轉(zhuǎn)的情況下動(dòng)態(tài)的改變?nèi)蝿?wù)的優(yōu)先級,可以有效地避免任務(wù)的優(yōu)先級翻轉(zhuǎn),保證高優(yōu)先級任務(wù)的執(zhí)行,提高了系統(tǒng)的實(shí)時(shí)性。

 

 

------------

關(guān)于μC/OS-II系列軟件版權(quán)的說明

Micrium 公司產(chǎn)品包括μC/OS-II,μC/GUI,uC/FS,μC/TCP-IP,μC/USB等。Micrium 公司提供嵌入式系統(tǒng)應(yīng)用方面的產(chǎn)品,并對其軟件擁有知識(shí)產(chǎn)權(quán)。Micrium花費(fèi)了大量的時(shí)間和財(cái)力為嵌入式領(lǐng)域提供高質(zhì)量的軟件產(chǎn)品。所有上述產(chǎn)品都以源代碼的形式提供給客戶,具有極大的適用性。產(chǎn)品不是免費(fèi)軟件,也不是開放源碼的軟件,因此,不能免費(fèi)使用,需要清楚的闡明μC/OS-II和系列的軟件不是開放源碼的免費(fèi)軟件,這是和Linux完全不一樣的。

開發(fā)和研究者可以通過購買Micrium公司的Jean先生的μC/OS-II的書籍,而得到μC/OS-II源代碼,但是僅可以作為個(gè)人和學(xué)校學(xué)習(xí)使用,所有和μC/OS-II直接和間接相關(guān)的商業(yè)目的行為,必須購買使用μC/OS-II及系列產(chǎn)品的商業(yè)授權(quán),包括芯片/單板/系統(tǒng)廠家的任何參考設(shè)計(jì),教學(xué)設(shè)備和最終的產(chǎn)品,如果沒有得到Micrium公司Jean先生簽字的合法授權(quán)都是不合法的使用, 這在μC/OS-II的書籍Micrium公司(www.micrium.com)和中國代理商-北京麥克泰軟件公司網(wǎng)站(www.bmrtech.com)上面中有明確規(guī)定。

Micrium公司其它軟件如μC/GUI,μC/FS,μC/TCP-IP,μC/USB 等的銷售模式與μC/OS-II不同,如果沒有購買使用授權(quán),完全不可以擁有該源代碼,也不能將源代碼用于產(chǎn)品的設(shè)計(jì),培訓(xùn),教學(xué)和生產(chǎn)。

μC/OS-II, μC/GUI,μC/FS,μC/TCP-IP,μC/USB 等授權(quán)方式有:單個(gè)產(chǎn)品、產(chǎn)品線(系列)、按照CPU 劃分的產(chǎn)品三種形式,μC/OS-KA,μC/OS-VIEW 等工具是按照使用人的數(shù)目收取費(fèi)用的,相對起傳統(tǒng)的RTOS 動(dòng)輒2-3萬美圓的開發(fā)費(fèi)用和每塊單板的使用費(fèi)(根據(jù)數(shù)量從數(shù)百到幾個(gè)美圓),μC/OS-II及系列產(chǎn)品是采用一次性的收費(fèi)方式,應(yīng)該只是大約相當(dāng)于傳統(tǒng)RTOS 的10-20% 的總體費(fèi)用。

如果您正在將μC/OS-II系列軟件用于您的產(chǎn)品,您需要購買并獲得正式使用授權(quán)。

北京麥克泰軟件技術(shù)有限公司

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉