具有固定優(yōu)先級(jí)調(diào)度程序的 RTOS 的核心思想是高優(yōu)先級(jí)任務(wù)應(yīng)該在低優(yōu)先級(jí)任務(wù)之前調(diào)度。如有必要,RTOS 甚至可以搶占正在運(yùn)行的任務(wù),迫使它讓 CPU 執(zhí)行更高優(yōu)先級(jí)的任務(wù)。然而,作為開發(fā)人員,您必須注意可能導(dǎo)致較高優(yōu)先級(jí)任務(wù)必須等待較低優(yōu)先級(jí)任務(wù)的編程缺陷——這種情況稱為優(yōu)先級(jí)倒置。
優(yōu)先級(jí)反轉(zhuǎn)可以與互斥體、消息隊(duì)列或其他類型的同步對(duì)象一起發(fā)生。描述問題的最佳方式可能是通過一個(gè)示例來逐步說明。
在下面的時(shí)間線圖中,使用 Tracealyzer 捕獲,我們有一個(gè)低優(yōu)先級(jí)任務(wù)(綠色)正在執(zhí)行。它需要一個(gè)二進(jìn)制信號(hào)量來保護(hù)某些臨界區(qū)并繼續(xù)在臨界區(qū)內(nèi)執(zhí)行代碼。當(dāng)高優(yōu)先級(jí)任務(wù)(紅色)進(jìn)入就緒狀態(tài)時(shí),RTOS 搶占綠色任務(wù)并讓紅色運(yùn)行。紅色任務(wù)嘗試獲取相同的二進(jìn)制信號(hào)量,但由于低優(yōu)先級(jí)綠色任務(wù)持有它而被阻止。
到目前為止,一切都很好——這是預(yù)期的行為。一般來說,綠色任務(wù)現(xiàn)在會(huì)運(yùn)行并快速釋放信號(hào)量,此時(shí)它再次被搶占,紅色任務(wù)可以獲取信號(hào)量并繼續(xù)。然而,這一次發(fā)生了反轉(zhuǎn)。出于某種原因,可能是定時(shí)等待已過期,中等優(yōu)先級(jí)(橙色)任務(wù)已進(jìn)入就緒狀態(tài)并被允許在綠色任務(wù)之前執(zhí)行。由于橙色任務(wù)不知道有爭(zhēng)議的信號(hào)量,它很高興地運(yùn)行完成。只有這樣,綠色任務(wù)才會(huì)最終運(yùn)行,以便它可以釋放信號(hào)量并將執(zhí)行權(quán)交給紅色的高優(yōu)先級(jí)任務(wù)。
因此,高優(yōu)先級(jí)任務(wù)被阻塞,必須等待不確定的時(shí)間,而中等優(yōu)先級(jí)任務(wù)運(yùn)行完成。這就是工作中的優(yōu)先級(jí)倒置。
重要的是要意識(shí)到這里涉及的三項(xiàng)任務(wù)基本上是無能為力的。他們沒有人可以做任何事情來避免倒置,至少在沒有 RTOS 的支持的情況下是這樣。幸運(yùn)的是,這種支持在許多 RTOS 中以具有優(yōu)先級(jí)繼承的互斥鎖的形式提供?;コ饬浚ɑコ獾目s寫)是一種用于保護(hù)共享資源的信號(hào)量。優(yōu)先級(jí)繼承意味著如果一個(gè)高優(yōu)先級(jí)的任務(wù)在試圖獲得一個(gè)低優(yōu)先級(jí)任務(wù)當(dāng)前持有的互斥鎖時(shí)阻塞,那么持有該互斥鎖的任務(wù)的優(yōu)先級(jí)會(huì)暫時(shí)提高到被阻塞任務(wù)的優(yōu)先級(jí)。在我們的場(chǎng)景中,當(dāng)紅色任務(wù)被阻塞時(shí),綠色任務(wù)將被提升為紅色優(yōu)先級(jí),從而有效地阻止了橙色任務(wù)的運(yùn)行。
優(yōu)先級(jí)繼承并不能真正治愈優(yōu)先級(jí)倒置,它只是在某些情況下將其影響最小化。硬實(shí)時(shí)應(yīng)用程序仍應(yīng)仔細(xì)設(shè)計(jì),以便一開始就不會(huì)發(fā)生優(yōu)先級(jí)反轉(zhuǎn)。
通常,盡可能避免阻塞共享資源。例如,如果您的任務(wù)將數(shù)據(jù)寫入消息隊(duì)列(可能已滿),您可以改為使用足夠大但未滿的隊(duì)列,作為額外的預(yù)防措施,以非阻塞方式寫入并檢查任何失敗寫入的返回值。而不是使用分散在代碼中的多個(gè)關(guān)鍵部分(共享互斥鎖),您可以創(chuàng)建一個(gè)“服務(wù)器”任務(wù),該任務(wù)執(zhí)行對(duì)資源的所有直接操作,并使用消息隊(duì)列從“客戶端”任務(wù)中獲取請(qǐng)求,在非-阻塞方式。服務(wù)器可以通過請(qǐng)求中指定的其他消息隊(duì)列發(fā)送任何回復(fù),這些消息隊(duì)列由客戶端任務(wù)擁有。
審核編輯:郭婷
-
cpu
+關(guān)注
關(guān)注
68文章
10810瀏覽量
210878 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
8976瀏覽量
85098 -
RTOS
+關(guān)注
關(guān)注
21文章
809瀏覽量
119366
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論