为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

uC-OS-II内核超时等待机制的分析-其它计算机论文

2017-10-30 4页 doc 15KB 5阅读

用户头像

is_496339

暂无简介

举报
uC-OS-II内核超时等待机制的分析-其它计算机论文uC-OS-II内核超时等待机制的分析-其它计算机论文 摘要:本文从源代码角度分析了uC/OS-II内核超时等待机制,证实 在一定情况下超时时间间隔不准确,在时间间隔到期的情况下,内核 仍有可能返回成功,这不符合一般的操作系统原理。另外,结合超时 等待机制的通用模型以及一些主流内核的实现方法,提出了这一不足 之处的改正方法。 关键词:超时等待;资源;内核 Analysisofwaiting-timeoutinkernel Abstract:Waiting-timeoutofkernelisanalyzedfromsour...
uC-OS-II内核超时等待机制的分析-其它计算机论文
uC-OS-II内核超时等待机制的分析-其它计算机 摘要:本文从源代码角度分析了uC/OS-II内核超时等待机制,证实 在一定情况下超时时间间隔不准确,在时间间隔到期的情况下,内核 仍有可能返回成功,这不符合一般的操作系统原理。另外,结合超时 等待机制的通用模型以及一些主流内核的实现方法,提出了这一不足 之处的改正方法。 关键词:超时等待;资源;内核 Analysisofwaiting-timeoutinkernel Abstract:Waiting-timeoutofkernelisanalyzedfromsourcecodeinthispaper.Itindicateswaiting-timeoutofuC/OS-IIisnotcorrestinsomecase.Thekernelcanreturnsuccesswhileitistimeout.Thisisnotcorrest.BasedonthegeneraltypeofWaiting-timeoutofkernelandtheothermainreal-timekernel,amethodisadvancedtoresolvethisproblemintheend. Keywords:waiting-timeout;resource;kernel AL(); return(OS_NO_ERR); } OS_EXIT_CRITICAL(); return(OS_SEM_OVF); } } 从语句(4)可以看出,在资源R的等待列表中有等待任 务的情况下,等待表中最高优先级的任务将从等待列表中删除,并且进入就绪表。如果等待表中的最高优先级任务就是前面讲的等待超时的任务T,这相当于任务T又一次进入就绪表,不过只有一次从等待表中删除。任务T获取到了资源,只不过是在超时时间以外获取到的。任务T获得执行权以后从调度程序返回将运行函数OSSemPend()语句(6)处的条件代码,此时语句(5)处的条件不成立,任务按获取到资源对待。 voidOSSemPend(OS_EVENT*pevent,INT16Utimeout,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; }elseif(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->OSTCBStat&OS_STAT_SEM){//(5) OSEventTo(pevent); OS_EXIT_CRITICAL(); *err=OS_TIMEOUT; }else{//(6) OSTCBCur->OSTCBEventPtr=(OS_EVENT*0); OS_EXIT_CRITICAL(); *err=OS_NO_ERR; } } } voidOSEventTo(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);} 如果任务T由于超时进入就绪态,到T获得执行权之前,仍没有获取到资源R,将运行语句(5)处的条件代码,由函数OSEventTo()可以看出,此时任务T才被从等待表中删除,最后返回超时状态。 通过分析开放源码的nucleus内核,发现nucleus在超时到期时执行定时器的一个回调函数,此回调函数马上将等待任务从等待链表中删除,将返回状态定性为超时。这样在任务获得执行权前,即使资源到达,该任务也不会得到。这样一来,uC/OS-II内核只要在时钟节拍函数里增加代码将延时期满的任务从相应的资源等待列表中删除即可。这一工作很容易实现,内核任务控制块有指向所等待的信号量,消息等事件控制块的指针,事件控制块里有相应的等待表。对于uC/OS-II新引进的事件标志组[2],任务控制块有指向相应的等待节点的指针,等待节点有指向相应的事件标志组控制块的指针,删除一个等待节点也能实现。
/
本文档为【uC-OS-II内核超时等待机制的分析-其它计算机论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索