1 实时操作系统概述 31.1 实时操作系统 31.2 基本概念 32 VxWorks的系统综述 42.1 VxWorks 42.2 Tornado 63 VxWorks操作系统基础 73.1 VxWorks的任务 73.1.1 多任务 73.1.2 任务的状态迁移 83.1.3 Wind内核的任务调度 93.1.4 任务控制 93.1.5 任务扩展性 123.1.6 任务错误状态:errno 133.1.7 任务异常处理 143.1.8 共享代码和代码重入 143.1.9 VxWorks的系统任务 173.2 任务间通信 183.2.1 共享数据结构 183.2.2 互斥 183.2.3 信号量Semaphores 19 二值信号量 20 互斥信号量 22 计数信号量 23 信号量的特殊参数 243.2.4 消息队列 243.2.5 管道 263.2.6 跨网络的任务间通信 263.2.7 信号 263.3 中断服务代码 273.3.1 应用代码与中断连接 273.3.2 中断堆栈 283.3.3 ISRs的一些特殊限制 283.3.4 中断级别的异常 283.3.5 保持高中断级别 293.3.6 对高中断级别的ISRs的一些附加限制 293.3.7 中断与任务间的通信 293.4 看门狗计时器Watchdog Timers 294 VxWorks中的函数库: 304.1 TaskLib: 304.2 ErrnoLib: 304.3 SigLib: 314.4 LstLib: 314.5 MemLib: 32

注:本文档主要是对VxWorks内核的一个简单介绍;由于word经常把一句话的第一个字母变成大写,所以文中函数名的第一个字母的大小写可能不对。1 实时操作系统概述1.1 实时操作系统在计算的早期开发的操作系统的最原始的结构形式是一个统一的实体(monolithic)。在这样的系统中,提供的不同功能的模块,如处理器管理、内存管理、输入输出等,通常是独立的。他们在执行过程中并不考虑其他正在使用中的模块,各个模块都以相同的时间粒度运行,即严格按时间片分时方式运行。 由于现代实时环境需要许多不同的功能,以及在这样的环境中存在的并发活动所引起的异步性和非确定性,操作系统变得更加复杂。所以早期操作系统的统一结构的组织已经被更加精确的内部结构所淘汰。

层次结构的起点内核操作系统的最好的内部结构模型是一个层次性的结构,最低层是内核。这些层次可以看成为一个倒置的金字塔,每一层都建立在较低层的功能之上。 内核仅包含一个操作系统执行的最重要的低层功能。正象一个统一结构的操作系统,内核提供了在高层软件与下层硬件之间的抽象层。然而,内核仅提供了构造操作系统其他部分所需的最小操作集。 对一个实时内核的要求。一个实时操作系统内核需满足许多特定的实时环境所提出的基本要求,这些包括: 多任务:由于真实世界的事件的异步性,能够运行许多并发进程或任务是很重要的。多任务提供了一个较好的对真实世界的匹配,因为它允许对应于许多外部事件的多线程执行。系统内核分配CPU给这些任务来获得并发性。抢占调度:真实世界的事件具有继承的优先级,在分配CPU的时候要注意到这些优先级。基于优先级的抢占调度,任务都被指定了优先级, 在能够执行的任务(没有被挂起或正在等待资源)中,优先级最高的任务被分配CPU资源。换句话说,当一个高优先级的任务变为可执行态,它会立即抢占当前正在运行的较低优先级的任务。 快速灵活的任务间的通信与同步:在一个实时系统中,可能有许多任务作为一个应用的一部分执行。系统必须提供这些任务间的快速且功能强大的通信机制。内核也要提供为了有效地共享不可抢占的资源或临界区所需的同步、互斥机制。方便的任务与中断之间的通信:尽管真实世界的事件通常作为中断方式到来,但为了提供有效的排队、优先化和减少中断延时,我们通常希望在任务级处理相应的工作。所以需要杂任务级和中断级之间存在通信。性能边界:一个实时内核必须提供最坏情况的性能优化,而非针对吞吐量的性能优化。我们更期望一个系统能够始终以50微妙执行一个函数,而不期望系统平均以10微妙执行该函数,但偶尔会以75微妙执行它。 特殊考虑:由于对实时内核的要求的增加,必须考虑对内核支持不断增加的复杂功能的要求。这包括多进程处理,Ada和对更新的、功能更强的处理器结构如RISC的支持。 拥有其它名字的内核 许多商用化的内核支持的功能远强于上面所列的要求。在这方面,他们不是真正的内核,而更象一个小的统一结构的操作系统。因为他们包含简单的内存分配、时钟管理、甚至一些输入输出系统调用的功能。

1.2 基本概念任务(TASK