在这篇博文中,我将解释如何使用 VxWorks 7 内核控制台(shell)读写硬件设备中的寄存器。对于任何一个开发设备驱动程序或其他直接与内存映射设备进行交付的代码的人来说,这是一个非常有用的功能。

VxWorks 6.9内核Shell控制台

如果您使用过 VxWorks 6.9,你可能常常使用内核 shell 访问目标硬件中的内存映射寄存器。 例如,你可以使用 d 命令(实际上是一个函数)转储映射到内存中已知基地址的一组寄存器:

本文首先从实时内核的定义出发,对实时操作系统进行了介绍,并对实时操作系统的特点进行了说明,接着从内核的功能和结构角度介绍了整体式内核,层次式内核,以及微内核。最后对具有微内核特性的VxWorks Wind内核进行了介绍。

1.1 实时内核概述

“实时”表示控制系统能够及时处理系统中发生的要求控制的外部事件。从事件发生到系统产生响应的反应时间称为延迟(Latency)。对于实时系统,一个最重要的条件就是延迟有确定的上界(这样的系统属于确定性系统)。满足这个条件后,根据这个上界大小再区分不同实时系统的性能。这里的“系统”是从系统论的观点讲的一个功能完整的设计,能够独立和外部世界交互、实现预期功能。这包括实时硬件系统设计、实时操作系统设计、实时多任务设计3部分。后两者可以概括为实时软件系统设计。实现实时系统是这3部分有机结合的结果。

本篇文章分析Wind内核调度器的设计原理以及其工作流程,设计支持多任务RTOS的关键是设计调度器,Wind内核调度器的目标是保证优先级最高的就绪任务处于运行状态。为了达到这一目的,需要在Wind内核的调度点判断就绪队列中优先级最高的任务是否正在运行,如果不在运行,调度器就会让这个优先级最高的任务抢占正在运行任务的CPU。

本文讨论Wind内核的设计思想,正如前文所述,VxWorks的Wind内核采用可裁剪的微内核设计,具有多任务并发执行、可抢占的优先级调度、可选的时间片调度、任务间通信和同步机制、快速的上下文切换,低中断时延、快速的中断响应、支持中断嵌套、支持256个优先级、支持优先级继承、以及任务删除保护机制,Wind内核运行在特权模式,不使用陷阱指令和跳转表,所有的系统调用均采用函数调用的形式实现。

Wind内核是一种强实时操作系统内核,但和当前其它成熟的操作系统一样,并不是“硬实时”的操作系统。所谓“硬实时”是指当某种事件发生时,系统必须在预定时间之内,或者说在限期之前做出反应,否则就会造成灾难性的后果。具有这一特征的操作系统要做到对于所提交的每一项作业及其时间要求,或者做出承诺,或者立即拒绝(以使提交者可以考虑采取其他措施),对于做出的承诺则保证其实现。提交给硬实时系统的作业也可以是不带时间要求的,但是对这些作业的承诺当然也就不包含时间的因素,那将当作后台作业来对待。

接下来我们讨论一下Wind内核的中断处理模块,中断是操作系统内核设计中非常重要的部分。由于周期性和非周期性任务的按时执行都离不开中断,并且大多数实时任务的调度都是由中断引发的,中断管理对于实时系统来说不仅重要而且要求更高。因此,实时系统要求操作系统具备迅速响应外部中断的能力。

本篇我以x86平台的Pentium处理器为例,介绍Wind内核的中断处理框架,以及中断栈幁的设计。通过本篇的分析,我们可以看出Wind内核作为一款优秀的实时内核,到底优秀在什么地方,其为什么会有快速的中断响应时间。