摘要

分析了Linux和VxWorks两种多任务操作系统任务调度机制的异同,从任务控制块、调度的时机、调度的优先级和调度的策略方面进行了详细的分析和对比。分析了VxWorks和Linux在POSIX1003.1b调度标准实现上的差异。

关键词:Linux,VxWorks,任务调度,调度策略,优先级

通用的分时操作系统面向多用户的不同任务,意在追求系统整体运行的效率和资源的均衡利用,软件的执行在时间上要求并不严格。实时操作系统不同于分时操作系统,它主要是对任务进行实时的处理,要求任务的运行具有可确定性和可预测性,提供即时响应和高可靠性。由此导致通用分时系统和实时操作系统的内核在任务调度机制方面的不同。本文以Linux(2.4版本内核)和VxWorks(5.4版本)为代表,着重分析二者任务调度机制的异同。

下载地址

Files:
Date 2018-09-05
File Size 715.05 KB
Download 72

AbStract

In this paper, diferences in task scheduling mechanism between the two multi-tasks operating systems Linux and VxWorks are analyzed. The two are compared with aspects of task control block,the standard of scheduling and the policy of scheduling. Further more, the implementation of task scheduling in POSIX 1003.1b specification are analyzed both in Linux and VxWorks.

Keywords:Linux, VxWorks, task scheduling, scheduling policy, priority

摘要:

本文介绍了航天应用领域中CAN总线的多种冗余方法,重点论述了在实时操作系统VxWorks下基于ARM处理器的二模(DRM)CAN冗余的硬件设计和软件驱动程序设计过程,并在空间六自由度机器人通信平台中得到实现。

下载地址

Date 2018-09-05
File Size 553.82 KB
Download 92

作者:Surest

1.双斜杠注释

在WorkBench集成开发环境当中,默认的注释方式为/*xxxxxx*/,如果想要使用// 注释的方法必须修改WorkBench的编译选项,为编译选项添加c99支持或者gnu89,在编译选项中添加 -std=c99

VxWorks 6.9 Build Properties for Project

图1 vxWorks Image Project标题

VxWorks 6.9 Build Properties for app

图2 DKM (downloadable kernel module)

2.编译时,可以通过在编译选项中添加-D Debug 增加对代码的宏定义
3.输出路径选择

目前有多种在嵌入式计算机操作系统中检测CPU占用率的方法,例如,目前在嵌入式操作系统vxWorks中主要有两种CPU占用率检测的方法。

第一种:通过spy工具利用辅助定时器产生中断,并且为每个任务维护一个计数器。然后记下被中断的任务,并且将该任务的计数器加一。经过一段时间后,每个任务的计数器反映了该任务占用CPU利用率的情况。很明显,这是利用抽样技术。并且得到的cpu利用率的准确程度取决于任务的持续性和周期性。

通过查找spyLib.h的文件,我们发现除了spy()函数外,还有一spyCommon函数,带一函数指针参数。推测函数指针类型为(int)(*p)(char * fmtStr,…)(经过验证确实如此)。所以可以写一自己的函数去接受spy需要打印的数据,Spy调用该函数按行打印结果。我们可以不断分析一行字符串来得到我们需要的结果。

int SpyPtnFunc(const char * fmtPtn,...)
{
  char buf[128];

  CPUUSAGEDATAMSG data;

  va_list vl;

  va_start(vl,fmtPtn);

  vsprintf(buf,fmtPtn,vl);  //得到一行字符串。

  va_end(vl);

  //分析buf,得到一个任务的CPU的使用情况。

  return 0;
}

第二种:通过创建两个特殊的任务,一个优先级别最高的任务和一个优先级别最低的任务,在这个优先级别最高的任务里运行一个循环次数很大的循环用于占用所有的CPU时间,记录一段时间内计数值;然后再设置一个优先级别最低的任务,当所有任务都停止时CPU才会调度此任务,此任务记下在无其他任务占用CPU的情况下计数,最后通过算法CPU占用率 = (total -idle)% total。

作者:Surest

一、背景介绍

VxWorks提供了一种错误检测及报告的机制帮助开发者调试软件,6.9版本中称为edr功能。在创建内核时,在workbench组件编辑component configuration中可以找到如下组件

VxWorks 6.9 EDR Component

这个edr功能的特性:在RAM中保留一块内存区域,热启动时不会擦除该块区域的内容,此区域用做edr记录的空间。VxWorks内核在处理CPU、用户以及地址等各种各样的异常时,会在EDR中记录异常发生的任务、地址、堆栈调用、异常触发时间,然后再进行保护机制例如热启动等,当重启发生后,我们可以通过VxWorks提供的show routine在shell中进行查看发生的故障,进行问题回溯。

edr功能记录的种种信息对于我们评估驱动程序、应用程序、调试bug等具有非常大的帮助,但是edr毕竟是在RAM中记录,一旦冷启动,所有的记录信息都会消失。

基于想要保存edr中各种重要的记录的想法,我们可以设置一些列的辅助手段,将EDR中记录的内容写到非易失存储器当中。

二、edr 概要

edr中记录的异常种类极多,但是按照严重级别可以分为几类,如图所示发生异常的事项(Table 14-1),严重级别(Table 14-2),可以注意到有一个envent type是user,这表示edr功能运行开发者在运行时自动触发异常记录,api如下所示。