999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

對(duì)μC/OS-Ⅱ操作系統(tǒng)超時(shí)等待機(jī)制缺陷的分析

2009-04-29 00:00:00許璟峰
電腦知識(shí)與技術(shù) 2009年33期

摘要:該文從源代碼角度分析了μC/OS-Ⅱ的超時(shí)等待機(jī)制,指出了其缺陷,即在一定情況下超時(shí)時(shí)間間隔不準(zhǔn)確,在時(shí)間間隔到期的情況下,內(nèi)核仍有可能返回成功,與此同時(shí)指出了其改進(jìn)方向。

關(guān)鍵詞:超時(shí)等待;資源;任務(wù)

中圖分類號(hào):TP316文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)33-9267-02

Analysis of the Flaw in Waiting-timeout Mechanism inμC/OS-Ⅱ

XU Jing-feng

(Nanjing Institute of Politics, Nanjing 210003, China)

Abstract: This paper analyses the the mechanism of waiting-timeout in μC/OS-Ⅱ. It shows waiting-timeout of the system is not correct in some cases. A method to improve the mechanism is also provided.

Key words: waiting-timeout; resource; task

μC/OS-Ⅱ是一個(gè)著名的嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng),現(xiàn)已廣泛應(yīng)用于各類單片機(jī)上。因?yàn)槠湓创a公開,為專業(yè)人員提供了難得的學(xué)習(xí)機(jī)會(huì)。本文將根據(jù)其源代碼對(duì)其超時(shí)等待機(jī)制進(jìn)行分析并提出相應(yīng)的改進(jìn)方法。

1 超時(shí)等待機(jī)制的基本原理

在實(shí)際使用中,應(yīng)用程序經(jīng)常會(huì)等待一些系統(tǒng)資源,如信號(hào)量,事件標(biāo)志,消息等。這些等待類型分為三種:

1) 如果不能馬上獲取,則掛起等待;

2) 不管是否能獲取資源,馬上返回,不再等待;

3) 如果不能馬上獲取資源,將進(jìn)行有限時(shí)間的等待,即超時(shí)等待。

一般操作系統(tǒng)都會(huì)執(zhí)行以下流程:

1) 如果資源能馬上獲取,系統(tǒng)調(diào)用將成功返回。

2) 如果資源不能馬上獲取,操作系統(tǒng)將設(shè)置一定時(shí)器進(jìn)行計(jì)時(shí),當(dāng)前任務(wù)被掛起并進(jìn)入該資源的等待隊(duì)列中,同時(shí)該任務(wù)從就緒表中刪除,并讓出CPU的使用權(quán)。

3) 如果在指定的時(shí)間內(nèi)資源可以獲取了,定時(shí)器馬上停止計(jì)時(shí),該任務(wù)從等待隊(duì)列中刪除并重新回到就緒表中等候調(diào)度。

4) 如果定時(shí)器到時(shí),該任務(wù)從等待隊(duì)列中刪除并且重新返回就緒表,系統(tǒng)調(diào)用返回超時(shí)信息。

操作系統(tǒng)通常會(huì)提供任務(wù)調(diào)用等待時(shí)間的入口參數(shù),一般以毫秒為單位,內(nèi)部則會(huì)將其轉(zhuǎn)化為系統(tǒng)的時(shí)鐘滴嗒數(shù)tick。每一個(gè)tick都會(huì)做一系列的工作,包括任務(wù)的延遲以及超時(shí)等待資源的定時(shí)器等相關(guān)的檢查操作。一般來講,在指定的時(shí)間間隔以外到達(dá)的資源和信號(hào)被認(rèn)為是無效的,這也是指定超時(shí)時(shí)間間隔的原意所在,有些對(duì)時(shí)間要求苛刻的場(chǎng)合就有這種需求,操作系統(tǒng)必須處理好這方面的問題。

2 μC/OS-Ⅱ超時(shí)等待機(jī)制的缺陷及改進(jìn)

下面我們通過分析μC/OS-Ⅱ的源代碼來看一下它的超過等待機(jī)制。

假設(shè)某任務(wù)T超時(shí)等待信號(hào)量資源R,其時(shí)鐘節(jié)拍函數(shù)OSTimeTick的流程主要如下:

時(shí)鐘中斷服務(wù)程序在每一個(gè)時(shí)鐘中斷需要的情況下對(duì)任務(wù)的延遲進(jìn)行減1操作,如果任務(wù)T的定時(shí)時(shí)間間隔到期(延遲被減為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è)賮矸治隽硪粋€(gè)很重要的函數(shù)OSSemPost的流程,其代碼如下:

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->OSEventCnt>0){

pevent->OSEventCnt--;

OS_EXIT_CRITICAL();

*err=OS_NO_ERR;

}else if(OSIntNesting>0){

OS_EXIT_CRITICAL();

*err=OS_ERR_PEND_ISR;

}else{

OSTCBCur->OSTCBStat|=OS_STAT_SEM;

OSTCBCur->OSTCBDly=timeout;

OSEventTaskWait(pevent);

OS_EXIT_CRITICAL();

OSSched();

OS_ENTER_CRITICAL();

if(OSTCBCur->OSTCBStatOS_STAT_SEM){ //(1)

OSEventTo(pevent);

OS_EXIT_CRITICAL();

*err=OS_TIMEOUT;

}else{ // (2)

OSTCBCur->OSTCBEventPtr=(OS_EVENT*0);

OS_EXIT_CRITICAL();

*err=OS_NO_ERR;}}}

void OSEventTo(OS_EVENT *pevent)

{if((pevent->OSEventTbl[OSTCBCur->OSTCBY]=~OSTCBCur->OSTCBBitX)==0)

{pevent->OSEventGrp=~OSTCBBitY;}

OSTCBCur->OSTCBStat=OS_STAT_RDY;

v OSTCBCur->OSTCBEventPtr=(OS_EVENT*0);}

在資源R的等待隊(duì)列中有等待任務(wù)的情況下,等待隊(duì)列中最高優(yōu)先級(jí)的任務(wù)將從等待隊(duì)列中刪除,并且進(jìn)入就緒表。如果等待隊(duì)列中最高優(yōu)先級(jí)任務(wù)就是前面講的等待超時(shí)的任務(wù)T,這相當(dāng)于任務(wù)T又一次進(jìn)入就緒表,不過只有一次從等待隊(duì)列中刪除。任務(wù)T獲取了資源,只不過是在超時(shí)時(shí)間以外獲取的。任務(wù)T獲得執(zhí)行權(quán)以后從調(diào)度程序返回將運(yùn)行函數(shù)OSSemPend語句(2)處的條件代碼,而此時(shí)語句(1)處的條件不成立,任務(wù)將到資源隊(duì)列中等待。如果任務(wù)T由于超時(shí)進(jìn)入就緒態(tài),到T獲得執(zhí)行權(quán)之前,仍沒有獲取到資源R,將運(yùn)行語句(1)處的條件代碼,由函數(shù)OSEventTo()可以看出,直到此時(shí)任務(wù)T才被從等待隊(duì)列中刪除,最后返回超時(shí)狀態(tài)。

通過分析開放源碼的nucleus內(nèi)核,發(fā)現(xiàn)nucleus在超時(shí)到期時(shí)執(zhí)行定時(shí)器的一個(gè)回調(diào)函數(shù),此回調(diào)函數(shù)馬上將等待任務(wù)從等待隊(duì)列中刪除,將返回狀態(tài)定性為超時(shí)。這樣在任務(wù)獲得執(zhí)行權(quán)前,即使資源到達(dá),該任務(wù)也不會(huì)得到。我們?nèi)粢倪M(jìn),只需在μC/OS-II時(shí)鐘節(jié)拍函數(shù)里增加代碼將延時(shí)期滿的任務(wù)從相應(yīng)的資源等待隊(duì)列中刪除即可。這一改進(jìn)工作很容易實(shí)現(xiàn),內(nèi)核任務(wù)控制塊有指向所等待的信號(hào)量、消息等事件控制塊的指針,事件控制塊里有相應(yīng)的等待表。對(duì)于uC/OS-II新引進(jìn)的事件標(biāo)志組,任務(wù)控制塊有指向相應(yīng)的等待節(jié)點(diǎn)的指針,而等待節(jié)點(diǎn)有指向相應(yīng)事件標(biāo)志組控制塊的指針,這樣刪除一個(gè)等待節(jié)點(diǎn)也能進(jìn)行改進(jìn)。

3 結(jié)論

μC/OS-Ⅱ的超時(shí)等待機(jī)制,存在著上述的超時(shí)時(shí)間不嚴(yán)格的問題,這是由中斷節(jié)拍函數(shù)OSTimeTick()造成的,該函數(shù)只負(fù)責(zé)將任務(wù)移入就緒表,而不處理相應(yīng)的等待隊(duì)列,對(duì)此應(yīng)通過對(duì)等待隊(duì)列操作的修改加以改進(jìn)。

參考文獻(xiàn):

[1] Labrosse J J.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ[M].邵貝貝,譯.2版.北京:北京航空航天大學(xué)出版社,2005.

[2] Cortadella J,Kondratyev A.Task generation and compile-time scheduling for mixed data-controlembedded software[J].Design Automation, 2000,5(9):489-494.

主站蜘蛛池模板: 久久伊人久久亚洲综合| 国产导航在线| 亚洲性影院| 伊人激情综合| 朝桐光一区二区| 欧洲成人在线观看| 亚洲第一区精品日韩在线播放| 国产精品999在线| 71pao成人国产永久免费视频| 欧美69视频在线| 影音先锋丝袜制服| 色成人综合| 亚洲香蕉伊综合在人在线| 欧美成在线视频| 国模私拍一区二区| 欧美中文字幕无线码视频| 欧美精品H在线播放| 中文无码伦av中文字幕| 国产男女XX00免费观看| 久久影院一区二区h| 农村乱人伦一区二区| 国产成人无码播放| 漂亮人妻被中出中文字幕久久| 伊人蕉久影院| 国产99免费视频| a毛片免费观看| 久久毛片免费基地| 久久一色本道亚洲| 91成人试看福利体验区| 强乱中文字幕在线播放不卡| 中文字幕久久波多野结衣| 久久综合婷婷| 54pao国产成人免费视频| 麻豆精选在线| 欧美亚洲综合免费精品高清在线观看| 亚洲一级毛片| 香蕉精品在线| 在线亚洲小视频| 国产精品久久久久久影院| 人妻中文字幕无码久久一区| 婷婷综合缴情亚洲五月伊| 日韩午夜伦| 欧美亚洲国产一区| 日韩少妇激情一区二区| 一级全黄毛片| 97超碰精品成人国产| 爽爽影院十八禁在线观看| 亚洲制服丝袜第一页| 亚洲视频欧美不卡| аⅴ资源中文在线天堂| 免费一级全黄少妇性色生活片| 亚洲精品无码专区在线观看| 日本91视频| 免费国产高清视频| 毛片视频网址| 亚洲欧美日本国产综合在线| 国产女人在线| 亚洲人成影院在线观看| 国产精品一区二区久久精品无码| 欧美a级完整在线观看| 亚洲国产日韩视频观看| 欧美日韩中文国产| 欧美有码在线观看| 91麻豆精品国产高清在线| 国产69精品久久久久孕妇大杂乱| 伊人久久大香线蕉aⅴ色| 欧美成人综合在线| 国产91视频观看| 久久77777| 亚洲激情区| 在线观看av永久| 国产女主播一区| 国产一区二区三区精品欧美日韩| 萌白酱国产一区二区| 国产爽妇精品| 国产精品19p| 久久99国产综合精品1| 国产成人午夜福利免费无码r| 国产精品香蕉在线观看不卡| 狠狠色噜噜狠狠狠狠奇米777| 伊人久久综在合线亚洲2019| 国产精品视屏|