版权归原作者所有,如有侵权,请联系我们

[科普中国]-嵌入式RTOS

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

概述

在嵌入式应用领域,很多场合对系统的实时性要求严格,因此操作系统的选择要基于实时系统。实时多任务操作系统(Real Time Operating System,简称RTOS)是根据操作系统的工作特性而言的,实时是指物理进程的真实时间。实时操作系统是指具有实时性,能支持实时控制系统工作的操作系统。其首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。

通常对于分时操作系统,软件的执行在时间上的要求并不严格,时间上的错误一般不会造成灾难性的后果。但对于实时操作系统,主要任务是要求对事件进行实时的处理,虽然事件可能在无法预知的时刻到达.但是软件上必须在事件发生时能够在严格的时限内做出响应(系统响应时间),即使能够响应,但是如果超出了时限,系统时间响应的超时就意味着致命的失败。实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等情况能做出精确的估计。

实时多任务操作系统(RTOS)是嵌入式应用软件的基础和开发平台。目前大多数嵌入式开发还是在单片机上直接进行,没有RTOS,但仍要有一个主程序负责调度各个任务。RTOS是一段嵌入在目标代码中的程序,系统复位后首先执行,相当于用户的主程序,用户的其他应用程序都建立在RTOS之上。不仅如此,RTOS还是一个标准的内核,将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的API(系统调用),并根据各个任务的优先级,合理地在不同任务之间分配CPU时间。

RTOS是针对不同处理器优化设计的高效率实时多任务内核,RTOS可以面对几十个系列的嵌入式处理器MPU、MCU、DSP、SOC等提供类同的API接口,这是RTOS基于设备独立的应用程序开发基础。因此,基于RTOS的C语言程序具有极大的可移植性。据专家测算,优秀RTOS上跨处理器平台的程序移植只需要修改1%~4%的内容。在RTOS基础上可以编写出各种硬件驱动程序、专家库函数、行业库函数、产品库函数,和通用性的应用程序一起,可以作为产品销售,促进行业的知识产权交流。因此,RTOS又是一个软件开发平台。1

发展过程实时操作系统(RTOS)的研究是从20世纪60年代开始的。从系统结构上看,RTOS到现在已经历了如下三个阶段:

早期的实时操作系统早期的实时操作系统,还不能称为真正的RTOS,它只是小而简单的、带有一定专用性的软件,功能较弱,可以认为是一种实时监控程序。它一般为用户提供对系统的初始化管理以及简单的实时时钟管理,有的实时监控程序也引入了任务调度及简单的任务间协调等功能,属于这类实时监控程序的有RTMX等。这个时期,实时应用较简单,实时性要求也不高。应用程序、实时监控程序和硬件运行平台往往是紧密联系在一起的。

专用实时操作系统专用实时操作系统,随着应用的发展,早期的RTOS已越来越显示出明显的不足了。有些实时系统的开发者为了满足实时应用的需要,自己研制与特定硬件相匹配的实时操作系统。这类专用实时操作系统在国外称为Real—Time Operating System Developed in House。它是在早期用户为满足自身开发需要而研制的。一般只能适用于特定的硬件环境,且缺乏严格的评测,移植性也不太好。属于这类实时操作系统的有Intel公司的iMAX86等。

通用实时操作系统在各种专用RTOS中,一些多任务的机制如基于优先级的调度、实时时钟管理、任务间的通信、同步互斥机构等基本上是相同的,不同的只是面向各自的硬件环境与应用目标。实际上,相同的多任务机制是能够共享的,因而可以把这部分很好地组织起来,形成一个通用的实时操作相同内核。这类实时操作系统大多采用软组件结构,以一个个软件“标准组件”构成通用的实时操作系统,一方面,在RTOS内核的最底层将不同的硬件特性屏蔽掉;另一方面.对不同的应用环境提供了标准的、可剪裁的系统服务软组件。这使得用户可根据不同的实时应用要求及硬件环境选择不同的软组件,也使得实时操作系统开发商在开发过程中减少了重复性工作。这类通用实时操作系统,有Integrated System公司的psosystem,Intel公司的iRMX386,Ready System公司(后与MicrotecResearch合并)的VRTX32,WindRiver SystomS公司(位于美国加州Almeda市)的VxworkS,Accelerated Technology Inc公司的NuclouS PLUS等。它们一般都提供了实时性较好的内核、多种任务通信机制、基于TCP/IP的网络组件、文件管理及I/O服务,提供了集编辑、编译、调试、仿真为一体的集成开发环境,支持用户使用C、C++进行应用程序的开发。1

功能任务管理分时操作系统中的基本调度单位一般是进程(或者线程),而对于实时操作系统,操作系统内核调度的基本单位就是任务。任务一般由任务控制块、程序区、数据区、堆栈区组成,对于多数实时操作系统来说,堆栈一般又分为系统堆栈和用户堆栈。系统堆栈用于任务做系统调用访问系统核心时用到的堆栈,把它从用户堆栈中独立出来,是为了保证系统核心的安全性。任务的驱动一般是基于消息或者事件的.即任务的设计是按照依次处理可能接收到的消息和事件,周而复始轮询循环的。实时操作系统中的任务有四种状态:运行(Executing),就绪(Ready),挂起(Suspended),冬眠(Dormant)。

1)运行:获得CPU控制权。

2)就绪:进入任务等待队列,通过调度转为运行状态。

3)挂起:任务发生阻塞,移出任务等待队列,等待系统实时事件的发生而唤醒,从而转为就绪或运行。

4)冬眠:任务完成或错误等原因被清除的任务,也可以认为是系统中不存在了的任务。

系统中只能有一个任务在运行状态,各任务按级别通过时间片分别获得对CPU的访问权。实时操作系统一个最主要的功能就是多任务管理和基于优先级的任务调度。

任务间同步和通信目前,主要的实时操作系统的任务间同步和通信的机制有:消息、事件、信号量.而部分实时操作系统仍然在沿用邮箱机制,另外一些实时操作系统提供了共享内存的任务间通信机制。

1)消息机制的概念和分时操作系统没有差别,其基本思想是任务通过系统公用的数据交换区(包括私有消息缓冲区和共用消息缓冲池)来交互任务间需要通信的信息。消息机制的系统调用一般包括消息队列的创建(q—create)、删除(q—delete)、接收消息(q—receive)、发送消息(q—send)、广播消息(q-broadcast)、紧急消息(q—urgency)。目前,大多数实时操作系统支持的消息队列既可以是定长的,也可以是变长的。

2)事件机制适用于任务间需要同步并且通信的数据量不大的情况。一般说来,任务之间的事件通信机制是可以覆盖的,即任务A先后发送二次事件给任务B,如果任务B还没有来得及处理的话,任务B只需要处理一次事件就行了。事件机制的系统调用一般包括发送事件(ev—send)、接收事件(ev—receive)。目前大多数实时操作系统支持16~32个事件。

3)如同分时操作系统中的信号量一样,实时操作系统提供的信号量机制也是为了解决对于临界资源共享的加锁机制。信号量机制提供了信号量的创建(sm—create)、信号量的删除(sm—delete)、信号量的P操作(sm—p)、信号量的V操作(sm—v)。实时操作系统与分时操作系统在信号量机制上有一个明显的区别,那就是优秀的商用实时操作系统要解决信号量机制的优先级倒置的问题。

内存管理和分时操作系统一样,实时操作系统会借用CPU的内存管理单元(MMU)来完成内存管理,实时操作系统内存管理模式可以分为实模式与保护模式。目前主流的实时操作系统一般都可以提供两种模式,让用户根据应用自己选择。一般来说,实时操作系统的内存管理,含有对于内存的优化分配,以尽量减少整个系统的内存占有量的要求。

实时时钟服务目前,商用的实时操作系统在硬件的硬时钟中断的基础上,提供了实时时钟服务。实时时钟是系统调度的基础,也是系统定时服务器的基础。实时时钟服务一般包括定时唤醒(tm—wkafter或者tm—wkwhen)、定时事件(tm—wevafter或者tm—evwhen)机制。另外,部分优秀的实时操作系统提供了定时消息机制,即应用任务(比如说任务A)向系统定时服务器申请定时器,当定时时间到后,定时服务器返回任务A一条消息。相应的系统调用一般有定时器申请(tm—start)、定时器删除(tm—delete)、定时器重置(tm—restart),定时消息的接收一般采用消息队列的接收机制(q-receive)。是否提供灵活的、高精确度的定时器服务,是衡量实时操作系统功能完整性的一个重要指标。

中断管理服务如同分时操作系统一样,中断管理服务是操作系统的核心和基本功能。实时操作系统的中断管理有自己的特殊的要求,那就是中断处理程序要更加短小、精悍,以减少中断禁止时间和中断延迟时间。1