欢迎光临112期刊网!
网站首页 > 论文范文 > 计算机论文 > 信息管理 > uC/OS-II内核超时等待机制的分析

uC/OS-II内核超时等待机制的分析

日期:2023-01-24 阅读量:0 所属栏目:信息管理


摘要:本文从源代码角度分析了uc/os-ii内核超时等待机制,证实在一定情况下超时时间间隔不准确,在时间间隔到期的情况下,内核仍有可能返回成功,这不符合一般的操作系统原理。另外,结合超时等待机制的通用模型以及一些主流内核的实现方法,提出了这一不足之处的改正方法。
关键词:超时等待;资源;内核

analysis of waiting-timeout in kernel

abstract:waiting-timeout of kernel is analyzed from source code in this indicates waiting-timeout of uc/os-ii is not correst in some kernel can return success while it is time is not 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;resource;kernel

1引言

uc/os-ii是著名的源码公开的实时内核[1],是专为嵌入式应用设计的,可用于各类8位16位和32位单片机或dsp。wWw.lw881.com现在有很多使用者正在或已经将其移植到各种类型的芯片。因为源码公开,uc/os-ii也经常被作为嵌入式实时内核的教材,为专业人员提供了学习实时内核的难得机会。在实际使用中不管基于何种操作系统平台,应用程序经常会等待一些系统资源,如信号量,事件标志,消息等。等待类型共有三种:(1)如果不能马上获取,悬挂等待;(2)不管是否能获取资源,马上返回,不会等待;(3) 如果不能马上获取资源,将进行有限时间的等待,即超时等待。

2超时等待机制的基本原理

应用程序通过操作系统提供的系统调用接口获取资源时,在系统调用的入口参数里可以指定超时等待的最大时间,通常以毫秒为单位,内核会将其转化为系统的时钟滴嗒数(tick)。一般内核都会执行以下流程:
(1)如果资源能马上获取,系统调用将成功返回。
(2)如果资源不能马上获取,内核将设置一定时器进行计时,把当前任务悬挂在该资源的等待队列上,该任务从就绪表中删除,并进行调度,让出cpu的使用权。
(3)如果在指定的时间内资源变得可以获取了,定时器应马上停止计时,该任务从等待队列里摘下并且重新回到就绪表中等候调度。
(4)如果定时器到时,任务应该从等待队列里摘下并且重新回到就绪表中,系统调用返回超时信息。
内核在每一个tick都会做一系列的工作,包括任务的延迟以及超时等待资源的定时器等相关的检查操作。一般来讲,在指定的时间间隔以外到达的资源和信号被认为是无效的,这也是指定超时时间间隔的原意所在,有些对时间要求苛刻的场合就有这种需求,内核必须处理好这方面的问题。

3uc/os-ii内核超时等待机制的分析

假设某任务t超时等待信号量资源r,先来分析时钟节拍函数的源代码。
void ostimetick(void)
{
os_tcb *ptcb;
ostimetickhook();
ptcb=ostcblist;
while(ptcb->ostcbprio!=os_idle_prio){
os_enter_critical();
if(ptcb->ostcbdly!=0){
if(--ptcb->ostcbdly==0){
if(!(ptcb->ostcbstat&os_stat_suspend)){//(1)
osrdygrp|=ptcb->ostcbbity; //(2)
osrdytbl[ptcb->ostcby]|=ptcb->ostcbbitx;//(3)
}else {
ptcb->ostcbdly=1;
}
}
}
ptcb=ptcb->ostcbnext;
os_exit_critical();
}
os_enter_critical();
ostime++;
os_exit_critical();
}
语句(1),(2),(3)表明:时钟中断服务程序在每一个时钟中断在需要的情况下对任务的延迟项进行减1操作,如果任务t的定时时间间隔到期(延迟项被减为0),并且任务t没有附加的挂起操作,任务t就会进入就绪表,然而该函数却没有进一步将任务t移出资源r的等待队列,也就是说此时任务t跨了两个状态,这两个状态从本质上讲是矛盾的。虽然任务t此时处于就绪状态,但未必马上就能获得执行权,这取决于任务t的优先级。在任务t没有被调度执行之前的这段时间内,假设资源r到达了,比如一个中断服务程序调用了ossempost函数,会是什么情况呢?我们再来分析ossempost函数。
void ossempost(os_event *pevent)
{
os_enter_critical();
if(pevent->oseventgrp!=0x00){
os_eventtaskrdy(pevent,(void*)0,os_stat_sem);//(4)
os_exit_critical();
os_sched();
return(os_no_err);
}
if(pevent->oseventcnt<65535){
pevent->oseventcnt++;
os_exit_critical();
return(os_no_err);
}
os_exit_critical();
return(os_sem_ovf);
}
}
从语句(4)可以看出,在资源r的等待列表中有等待任务的情况下,等待表中最高优先级的任务将从等待列表中删除,并且进入就绪表。如果等待表中的最高优先级任务就是前面讲的等待超时的任务t,这相当于任务t又一次进入就绪表,不过只有一次从等待表中删除。任务t获取到了资源,只不过是在超时时间以外获取到的。任务t获得执行权以后从调度程序返回将运行函数ossempend()语句(6)处的条件代码,此时语句(5)处的条件不成立,任务按获取到资源对待。
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->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;
}
}
}
void oseventto(os_event *pevent)
{
if((pevent->oseventtbl[ostcbcur->ostcby]&=~ostcbcur->ostcbbitx)==0)
{
pevent->oseventgrp&=~ostcbbity;
}
ostcbcur->ostcbstat=os_stat_rdy;
vostcbcur->ostcbeventptr=(os_event*0);}
如果任务t由于超时进入就绪态,到t获得执行权之前,仍没有获取到资源r,将运行语句(5)处的条件代码,由函数oseventto()可以看出,此时任务t才被从等待表中删除,最后返回超时状态。
通过分析开放源码的nucleus内核,发现nucleus在超时到期时执行定时器的一个回调函数,此回调函数马上将等待任务从等待链表中删除,将返回状态定性为超时。这样在任务获得执行权前,即使资源到达,该任务也不会得到。这样一来,uc/os-ii内核只要在时钟节拍函数里增加代码将延时期满的任务从相应的资源等待列表中删除即可。这一工作很容易实现,内核任务控制块有指向所等待的信号量,消息等事件控制块的指针,事件控制块里有相应的等待表。对于uc/os-ii新引进的事件标志组[2],任务控制块有指向相应的等待节点的指针,等待节点有指向相应的事件标志组控制块的指针,删除一个等待节点也能实现。

4结论

uc/os-ii其它资源的等待机制,比如消息以及包括2.5.2版引入的事件标志组的实现都存在上述的超时时间不严格的问题,这是由中断节拍函数ostimetick()决定的,该函数只负责将任务移入就绪表,而不处理相应的等待表。

参考文献:

[1]labrosse jean os-ii-源码公开的实时嵌入式操作系统[m].北京:中国电力出版社,2001.
[2]labrosse jean j. 嵌入式实时操作系统uc/os-ii[m].北京:北京航空航天大学出版社,2003. 本文链接:http://www.qk112.com/lwfw/jsjlw/xinxiguanli/259430.html

论文中心更多

发表指导
期刊知识
职称指导
论文百科
写作指导
论文指导
论文格式 论文题目 论文开题 参考文献 论文致谢 论文前言
教育论文
美术教育 小学教育 学前教育 高等教育 职业教育 体育教育 英语教育 数学教育 初等教育 音乐教育 幼儿园教育 中教教育 教育理论 教育管理 中等教育 教育教学 成人教育 艺术教育 影视教育 特殊教育 心理学教育 师范教育 语文教育 研究生论文 化学教育 图书馆论文 文教资料 其他教育
医学论文
医学护理 医学检验 药学论文 畜牧兽医 中医学 临床医学 外科学 内科学 生物制药 基础医学 预防卫生 肿瘤论文 儿科学论文 妇产科 遗传学 其他医学
经济论文
国际贸易 市场营销 财政金融 农业经济 工业经济 财务审计 产业经济 交通运输 房地产经济 微观经济学 政治经济学 宏观经济学 西方经济学 其他经济 发展战略论文 国际经济 行业经济 证券投资论文 保险经济论文
法学论文
民法 国际法 刑法 行政法 经济法 宪法 司法制度 法学理论 其他法学
计算机论文
计算机网络 软件技术 计算机应用 信息安全 信息管理 智能科技 应用电子技术 通讯论文
会计论文
预算会计 财务会计 成本会计 会计电算化 管理会计 国际会计 会计理论 会计控制 审计会计
文学论文
中国哲学 艺术理论 心理学 伦理学 新闻 美学 逻辑学 音乐舞蹈 喜剧表演 广告学 电视电影 哲学理论 世界哲学 文史论文 美术论文
管理论文
行政管理论文 工商管理论文 市场营销论文 企业管理论文 成本管理论文 人力资源论文 项目管理论文 旅游管理论文 电子商务管理论文 公共管理论文 质量管理论文 物流管理论文 经济管理论文 财务管理论文 管理学论文 秘书文秘 档案管理
社科论文
三农问题 环境保护 伦理道德 城镇建设 人口生育 资本主义 科技论文 社会论文 工程论文 环境科学