關(guān)于uC/OS-II中優(yōu)先級翻轉(zhuǎn)問題
發(fā)布時(shí)間:2007/8/28 0:00:00 訪問次數(shù):5738
作者:山東大學(xué) 秦紹華 陳滌
引 言:
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ù)的唯一編號(ID),可以作為任務(wù)的唯一標(biāo)識。內(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)常常會出現(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ù)通過信號量機(jī)制訪問共享資源時(shí),該信號量已被一低優(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ù)訪問共享資源都會提升任務(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
作者:山東大學(xué) 秦紹華 陳滌
引 言:
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ù)的唯一編號(ID),可以作為任務(wù)的唯一標(biāo)識。內(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)常常會出現(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ù)通過信號量機(jī)制訪問共享資源時(shí),該信號量已被一低優(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ù)訪問共享資源都會提升任務(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
熱門點(diǎn)擊
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究
- 嵌入式操作系統(tǒng)FreeRTOS的原理與實(shí)現(xiàn)
- μC/OS—II的嵌入式串口通信模塊設(shè)計(jì)
- UC系列通用嵌入式軟硬件平臺
- 關(guān)于uC/OS-II中優(yōu)先級翻轉(zhuǎn)問題
- Cache在嵌入式處理器中的使用問題
推薦技術(shù)資料
- 羅盤誤差及補(bǔ)償
- 造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- 超低功耗角度位置傳感器參數(shù)技術(shù)
- 四路輸出 DC/DC 降壓電源
- 降壓變換器和升降壓變換器優(yōu)特點(diǎn)
- 業(yè)界首創(chuàng)可在線編程電源模塊 m
- 可編程門陣列 (FPGA)智能 電源解決方案
- 高效先進(jìn)封裝工藝
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究