天天看點

uC/OS-II源碼分析(三)

首先來了解下實時系統的基本概念:

1) 臨界區,共享資源,任務(類似于程序),任務切換,任務排程,可剝奪型核心,可重入函數,動态優先級排程,

2) 如何處理優先級反轉問題。這個問題描述如下:有三個任務,優先級1高于2,2高于3,一開始1和2處于挂起,3在運作,3要使用某個共享資源,就P它的互斥信号量,3得到信号量後開始使用這個共享資源。過一段時間後,1等待的事件發生後剝奪了3的CPU使用權,于是1開始運作。運作時,1也要用3占到的那個資源,是以1隻好進入挂起狀态,等待3釋放這個資源。于是這時3準備繼續運作,但這時2等待的事件也發生了,是以2搶占了3的CPU使用權,等2運作完後把CPU還給3,3繼續運作,直到釋放資源的信号量。這時1才能得以運作。這個過程中,1的優先級實際上降到了3的水準。

處理的方法描述如下:在1第一次搶占3的CPU時,1去申請資源信号量,但核心知道這個信号量被3占了,而3的優先級比1低,于是核心把3的優先級升至與1相同。核心将1放入等待資源信号量的任務清單,然後回到3繼續運作。等3完成後釋放資源信号量,這時核心恢複任務3本來的優先級,并檢視等待該資源信号量的任務清單裡有誰在等待這個信号量,這時有1,是以把信号量交給1,于是1得以運作。等1運作完後,2才能開始運作。但uC/OS-II不支援優先級繼承,這個功能是可以使核心自動變換任務的優先級。

3) 處理互斥:開關中斷(uC/OS-II中用OS_ENTER_CRITICAL和OS_EXTI_CRITICAL來實作),測試并置位,禁止/運作任務切換,互斥信号量,計數型信号量,

4) 同步:信号量,事件标志(任務與多個事件同步,若任務需要與任何事件之一發生同步,叫獨立型同步,若任務與若幹事件都發生同步,叫關聯型同步)。

5) 任務間通信:消息郵箱,消息隊列,中斷,

本文轉自Phinecos(洞庭散人)部落格園部落格,原文連結:http://www.cnblogs.com/phinecos/archive/2007/11/22/969130.html,如需轉載請自行聯系原作者