资讯与服务

    (周一至周日 9:00-21:00)
    微信:liu87712531
    微信:lin445385978

    邮箱:87712531@qq.com

    咨询电话:15321970583

网站服务

您当前位置:首页 -> 计算机论文 -> 计算机理论->详细(目前国内最大最全原创最多的免费论文中心)

客服QQ咨询:点击这里给我发消息 点击这里给我发消息

无忧论文,为您指导,让您轻松发表,轻松晋级!

字号大小:


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

作者:不是人 整理:本网站论文网 录入时间:2011-12-14 00:18:11

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

  关键词:超时等待;资源;内核

  Analysis of waiting-timeout in kernel

  Abstract:Waiting-timeout of kernel is analyzed from source code in this paper.It indicates waiting-timeout of uC/OS-II is not correst in some case.Thekernel 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;resource;kernel

  1 引言

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

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

  应用程序通过操作系统提供的系统调用接口获取资源时,在系统调用的入口参数里可以指定超时等待的最大时间,通常以毫秒为单位,内核会将其转化为系统的时钟滴嗒数(tick)。一般内核都会执行以下流程:

  (1)如果资源能马上获取,系统调用将成功返回。

  (2)如果资源不能马上获取,内核将设置一定时器进行计时,把当前任务悬挂在该资源的等待队列上,该任务从就绪表中删除,并进行调度,让出CPU的使用权。

  (3)如果在指定的时间内资源变得可以获取了,定时器应马上停止计时,该任务从等待队列里摘下并且重新回到就绪表中等候调度。

  (4)如果定时器到时,任务应该从等待队列里摘下并且重新回到就绪表中,系统调用返回超时信息。

  内核在每一个tick都会做一系列的工作,包括任务的延迟以及超时等待资源的定时器等相关的检查操作。一般来讲,在指定的时间间隔以外到达的资源和信号被认为是无效的,这也是指定超时时间间隔的原意所在,有些对时间要求苛刻的场合就有这种需求,内核必须处理好这方面的问题。

undefined undefined

  3 uC/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 2 3 下一页 尾页 1/3/3

上一篇赞自由软件(五)
下一篇浅谈应急信息系统的功能需求和规划