uCOS-II內(nèi)核超時(shí)等待機(jī)制的分析_第1頁(yè)
uCOS-II內(nèi)核超時(shí)等待機(jī)制的分析_第2頁(yè)
uCOS-II內(nèi)核超時(shí)等待機(jī)制的分析_第3頁(yè)
uCOS-II內(nèi)核超時(shí)等待機(jī)制的分析_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、uC/OS-II內(nèi)核超時(shí)等待機(jī)制的分析摘要:本文從源代碼角度分析了uC/OS-II內(nèi)核超時(shí)等待機(jī)制,證實(shí)在一定情況下超時(shí)時(shí)間間隔不準(zhǔn)確,在時(shí)間間隔到期的情況下,內(nèi)核仍有可能返回成功,這不符合一般的操作系統(tǒng)原理。另外,結(jié)合超時(shí)等待機(jī)制的通用模型以及一些主流內(nèi)核的實(shí)現(xiàn)方法,提出了這一不足之處的改正方法。關(guān)鍵詞:超時(shí)等待;資源;內(nèi)核Analysis of waiting-timeout in kernelAbstract:Waiting-timeout of kernel is analyzed from source code in this paper.It indicates waiting-

2、timeout of uC/OS-II is not correst in some case.The kernel can return success while it is time out.This is not correst.Based on the general type of Waiting-timeout of kernel and the other main real-time kernel ,a method is advanced to resolve this problem in the end.Key words: waiting-timeout;resour

3、ce;kernel 1引言u(píng)C/OS-II是著名的源碼公開的實(shí)時(shí)內(nèi)核1,是專為嵌入式應(yīng)用設(shè)計(jì)的,可用于各類8位16位和32位單片機(jī)或DSP?,F(xiàn)在有很多使用者正在或已經(jīng)將其移植到各種類型的芯片。因?yàn)樵创a公開,uC/OS-II也經(jīng)常被作為嵌入式實(shí)時(shí)內(nèi)核的教材,為專業(yè)人員提供了學(xué)習(xí)實(shí)時(shí)內(nèi)核的難得機(jī)會(huì)。在實(shí)際使用中不管基于何種操作系統(tǒng)平臺(tái),應(yīng)用程序經(jīng)常會(huì)等待一些系統(tǒng)資源,如信號(hào)量,事件標(biāo)志,消息等。等待類型共有三種:(1)如果不能馬上獲取,懸掛等待;(2)不管是否能獲取資源,馬上返回,不會(huì)等待;(3) 如果不能馬上獲取資源,將進(jìn)行有限時(shí)間的等待,即超時(shí)等待。2超時(shí)等待機(jī)制的基本原理應(yīng)用程序通過操作系統(tǒng)

4、提供的系統(tǒng)調(diào)用接口獲取資源時(shí),在系統(tǒng)調(diào)用的入口參數(shù)里可以指定超時(shí)等待的最大時(shí)間,通常以毫秒為單位,內(nèi)核會(huì)將其轉(zhuǎn)化為系統(tǒng)的時(shí)鐘滴嗒數(shù)(tick)。一般內(nèi)核都會(huì)執(zhí)行以下流程:(1)如果資源能馬上獲取,系統(tǒng)調(diào)用將成功返回。(2)如果資源不能馬上獲取,內(nèi)核將設(shè)置一定時(shí)器進(jìn)行計(jì)時(shí),把當(dāng)前任務(wù)懸掛在該資源的等待隊(duì)列上,該任務(wù)從就緒表中刪除,并進(jìn)行調(diào)度,讓出CPU的使用權(quán)。(3)如果在指定的時(shí)間內(nèi)資源變得可以獲取了,定時(shí)器應(yīng)馬上停止計(jì)時(shí),該任務(wù)從等待隊(duì)列里摘下并且重新回到就緒表中等候調(diào)度。(4)如果定時(shí)器到時(shí),任務(wù)應(yīng)該從等待隊(duì)列里摘下并且重新回到就緒表中,系統(tǒng)調(diào)用返回超時(shí)信息。內(nèi)核在每一個(gè)tick都會(huì)做一系

5、列的工作,包括任務(wù)的延遲以及超時(shí)等待資源的定時(shí)器等相關(guān)的檢查操作。一般來講,在指定的時(shí)間間隔以外到達(dá)的資源和信號(hào)被認(rèn)為是無效的,這也是指定超時(shí)時(shí)間間隔的原意所在,有些對(duì)時(shí)間要求苛刻的場(chǎng)合就有這種需求,內(nèi)核必須處理好這方面的問題。3uC/OS-II內(nèi)核超時(shí)等待機(jī)制的分析假設(shè)某任務(wù)T超時(shí)等待信號(hào)量資源R,先來分析時(shí)鐘節(jié)拍函數(shù)的源代碼。void OSTimeTick(void)OS_TCB *ptcb;OSTimeTickHook();ptcb=OSTCBList;while(ptcb-OSTCBPrio!=OS_IDLE_PRIO)OS_ENTER_CRITICAL();if(ptcb-OSTCB

6、Dly!=0)if(-ptcb-OSTCBDly=0)if(!(ptcb-OSTCBStat&OS_STAT_SUSPEND)/(1)OSRdyGrp|=ptcb-OSTCBBity; /(2)OSRdyTblptcb-OSTCBY|=ptcb-OSTCBBitX;/(3)else ptcb-OSTCBDly=1;ptcb=ptcb-OSTCBNext;OS_EXIT_CRITICAL();OS_ENTER_CRITICAL();OSTime+;OS_EXIT_CRITICAL();語(yǔ)句(1),(2),(3)表明:時(shí)鐘中斷服務(wù)程序在每一個(gè)時(shí)鐘中斷在需要的情況下對(duì)任務(wù)的延遲項(xiàng)進(jìn)行減1操作,如果任

7、務(wù)T的定時(shí)時(shí)間間隔到期(延遲項(xiàng)被減為0),并且任務(wù)T沒有附加的掛起操作,任務(wù)T就會(huì)進(jìn)入就緒表,然而該函數(shù)卻沒有進(jìn)一步將任務(wù)T移出資源R的等待隊(duì)列,也就是說此時(shí)任務(wù)T跨了兩個(gè)狀態(tài),這兩個(gè)狀態(tài)從本質(zhì)上講是矛盾的。雖然任務(wù)T此時(shí)處于就緒狀態(tài),但未必馬上就能獲得執(zhí)行權(quán),這取決于任務(wù)T的優(yōu)先級(jí)。在任務(wù)T沒有被調(diào)度執(zhí)行之前的這段時(shí)間內(nèi),假設(shè)資源R到達(dá)了,比如一個(gè)中斷服務(wù)程序調(diào)用了OSSemPost函數(shù),會(huì)是什么情況呢?我們?cè)賮矸治鯫SSemPost函數(shù)。void OSSemPost(OS_EVENT *pevent)OS_ENTER_CRITICAL();if(pevent-OSEventGrp!=0x0

8、0)OS_EventTaskRdy(pevent,(void*)0,OS_STAT_SEM);/(4)OS_EXIT_CRITICAL();OS_Sched();return(OS_NO_ERR);if(pevent-OSEventCntOSEventCnt+;OS_EXIT_CRITICAL();return(OS_NO_ERR);OS_EXIT_CRITICAL();return(OS_SEM_OVF);從語(yǔ)句(4)可以看出,在資源R的等待列表中有等待任務(wù)的情況下,等待表中最高優(yōu)先級(jí)的任務(wù)將從等待列表中刪除,并且進(jìn)入就緒表。如果等待表中的最高優(yōu)先級(jí)任務(wù)就是前面講的等待超時(shí)的任務(wù)T,這相當(dāng)于

9、任務(wù)T又一次進(jìn)入就緒表,不過只有一次從等待表中刪除。任務(wù)T獲取到了資源,只不過是在超時(shí)時(shí)間以外獲取到的。任務(wù)T獲得執(zhí)行權(quán)以后從調(diào)度程序返回將運(yùn)行函數(shù)OSSemPend()語(yǔ)句(6)處的條件代碼,此時(shí)語(yǔ)句(5)處的條件不成立,任務(wù)按獲取到資源對(duì)待。void OSSemPend(OS_EVENT *pevent,INT16U timeout,INT8U *err)OS_ENTER_CRITICAL();if(pevent-OSEventType!=OS_EVENT_TYPE_SEM)OS_EXIT_CRITICAL();*err=OS_ERR_EVENT_TYPE;if(pevent-OSEven

10、tCnt0)pevent-OSEventCnt-;OS_EXIT_CRITICAL();*err=OS_NO_ERR;else if(OSIntNesting0)OS_EXIT_CRITICAL();*err=OS_ERR_PEND_ISR;elseOSTCBCur-OSTCBStat|=OS_STAT_SEM;OSTCBCur-OSTCBDly=timeout;OSEventTaskWait(pevent);OS_EXIT_CRITICAL();OSSched();OS_ENTER_CRITICAL();if(OSTCBCur-OSTCBStat&OS_STAT_SEM) /(5)OSEve

11、ntTo(pevent);OS_EXIT_CRITICAL();*err=OS_TIMEOUT;else /(6)OSTCBCur-OSTCBEventPtr=(OS_EVENT*0);OS_EXIT_CRITICAL();*err=OS_NO_ERR;void OSEventTo(OS_EVENT *pevent)if(pevent-OSEventTblOSTCBCur-OSTCBY&=OSTCBCur-OSTCBBitX)=0)pevent-OSEventGrp&=OSTCBBitY;OSTCBCur-OSTCBStat=OS_STAT_RDY;vOSTCBCur-OSTCBEventPtr=(OS_EVENT*0);如果任務(wù)T由于超時(shí)進(jìn)入就緒態(tài),到T獲得執(zhí)行權(quán)之前,仍沒有獲取到資源R,將運(yùn)行語(yǔ)句(5)處的條件代碼,由函數(shù)OSEventTo()可以看出,此時(shí)任務(wù)T才被從等待表中刪除,最后返回超時(shí)狀態(tài)。通過分析開放源碼的nucleus內(nèi)核,發(fā)現(xiàn)nucleus在超時(shí)到期時(shí)執(zhí)行定時(shí)器的一個(gè)回調(diào)函數(shù),此回調(diào)函數(shù)馬上將等待任務(wù)從等待鏈表中刪除,將返回狀態(tài)定性為超時(shí)。這樣在任務(wù)獲得執(zhí)行權(quán)前,即使資源到達(dá),該任務(wù)也不會(huì)得到。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論