μC/OS-II与RTLinux的实时原理及其性能改进分析

时间:2022-10-25 05:04:27

μC/OS-II与RTLinux的实时原理及其性能改进分析

摘要:简要介绍了嵌入式实时操作系统(RTOS)的概念和技术特点。对μC/OS-II与RTLinux两种具有代表性的开源硬实时操作系统实现原理和性能做了详细的对比分析研究。最后提出了影响实时操作系统的主要因素和提高嵌入式操作系统实时性的解决途径。

关键词:嵌入式实时操作系统;μC/OS-II;RTLinux

中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)03-10760-02

1 引言

嵌入式实时操作系统(RTOS,Real Time Operating System)已经广泛应用与军事、工业、生活等各行各业。一般的分时操作系统只要求计算结果在逻辑上是正确的,而时间上的错误一般不会造成不可挽回的后果。而RTOS是对事件进行实时的处理,必须在事件发生时在规定的时间内作出响应,并且及时处理相关事件,否则有可能造成灾难性后果,所以实时性能对一个RTOS是至关重要的。

2 嵌入式操作系统的概念及技术特点

2.1 嵌入式实时操作系统的相关概念

RTOS指的是具有实时性、能实时控制系统工作的嵌入式多任务操作系统。其首要任务是调度计算机一切可以利用的资源完成实时控制任务。

实时系统指的是在RTOS基础上开发出来的针对特定行业应用的实时应用系统,如多媒体通信、在线事务处理、生产过程控制、交通控制等。根据系统对时间要求的紧迫程度不同,我们把实时系统分为硬实时(hard real-time)和软实时(soft real-time)。硬实时系统对时间的要求很高,系统必须及时的对事件作出反应,绝对不能发生错过事件处理的deadline的情况。否则就要造成巨大的损失和灾难。比如,在航天飞机返回地球时,航天飞机上的飞行控制器不能及时调整返回大气层的飞行角度:角度过小,航天飞机会在坠入大气层中被烧毁;角度过大,又会被大气层反弹回太空,这样宇航员就永远回不来了。与硬实时系统相对,软实时系统允许在重负载的情况下发生错过deadline的情况而不会造成非常大的危害。比如在VOIP系统中,当网络非常繁忙的时候允许一些包延迟到达或被丢弃。但是,一般来说硬实时和软实时的时间要求没有一个严格的界限,主要还是根据具体的应用来分类。

2.2 硬实时操作系统技术特点

目前,已经被使用的RTOS有几十种。如Nucleus Plus、QNX、VxWorks、pSos、linux 2.6、μC/OS-II 和 RTLinux 等。这些RTOS一般都能运行在各种不同的微处理器上;具有强大的通用型操作系统的功能,如具备了文件和目录管理、多任务、设备驱动支持、网络支持、图形窗口以及用户界面等功能;具有丰富的API 和嵌入式应用软件。上述RTOS中有些是软实时,如Linux 2.6;有些是硬实时,如VxWorks、μC/OS-II 和 RTLinux。

从大多数硬实时操作系统的技术特点上分析[1-6]:

第一、RTOS内核必须是可重入的。这一点对于实时系统来说特别重要。因为不可重入的内核必然带来慢速的中断响应和不可预料的操作时间。

第二、RTOS必须提供一种合适的进程调度方法,并且快速的进行任务切换。如,在基于优先级的可剥夺的进程调度算法的RTOS中,快速的任务切换在满足高优先级的任务抢先时,提供了完成deadline的保证。

第三、RTOS能够快速的响应外部中断。减少中断时间,将临界区缩到最小,这样可以提供最大的中断响应效率,减少对其他高优先级任务的影响。

第四、系统维护一个满足应用要求的实时时钟。而实时时钟是与硬件密切相关的,其时钟节拍数很大程度上决定了硬实时系统的精确度。RTOS必须通过使用实时时钟的接口来提供各种事件的定时器。

第五、RTOS提供固定的或可变的内存管理机制。内存管理机制在内核中的实现要求尽可能的简单。高级的功能可以由系统级进程来完成。

本文主要对比分析 μC/OS-II 和 RTLinux 两种源代码公开、应用广泛的RTOS实时原理和性能。并提出了影响RTOS的主要因素和提高实时性的解决途径。

3 μC/OS-II实时原理分析

3.1 μC/OS-II简介

μC/OS-II是一种性能优良、源码公开且被广泛应用的硬实时操作系统,源自于 1992 年美国嵌入式系统专家Jean J.Labrosse开发的μC/OS。μC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用ANSI C语言编写的,只有CPU硬件相关部分是用汇编语言编写,以便于移植到其他微处理器上,μC/OS-II核心部分8.3KB,可以根据实际需要剪裁到最少2.7KB,短小精悍。内核提供了:任务调度、任务管理、时间管理、内存管理和任务间通信与同步等基本功能;不提供:输入/输出管理、文件管理、网络服务等扩展功能。具有稳定可靠、效率高、占用空间小、实时性能优良等优点[1]。

3.2 μC/OS-II硬实时性的实现原理

μC/OS-II可以提供极其严格的时间保证,性能甚至超越了某些商业RTOS。

首先,从影响系统实时性最大的任务调度策略看,μC/OS-II是基于优先级驱动的可剥夺型实时多任务内核。每个任务有独立的堆栈空间,并用一个称为任务控制块(TCB)的数据结构表示。每个任务在创建时,根据其重要程度的不同,被赋予一定的优先级。每个任务的优先级是惟一的,这个优先级同时也惟一的标识了一个任务,同时目前的μC/OS-II不支持时间片轮番调度法,所以任务调度策略是很单一的。μC/OS中最多可以支持64个任务,分别对应优先级0~63(其中0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO、保留给系统),其中0为最高优先级任务。优先级驱和可剥夺的含义是最高优先级的任务一旦就绪,总能得到CPU的使用权,而不必等待当前运行的任务主动放弃CPU的使用权。这样,高优先级别的任务何时可以执行、何时可以得到CPU的使用权都是可知的。这对于实时系统的响应时间最优化无疑是非常重要的[1]。(如图1)

μC/OS-II通过两种方法进行任务调度:一是时钟节拍或其他硬件中断到来后系统会调用函数OSIntCtxSw()实现切换功能,称为中断级调度;二是任务主动进入挂起或等待状态,这时系统通过发软中断命令或依靠处理器执行陷阱指令来完成任务切换,称为任务级调度。中断服务程度或陷阱处理程序的向量地址必须指向函数OSCtxSw()。(如图2)

另外,μC/OS-II为了处理临界段(Critical Section)代码,需要关中断,处理完毕后再开中断。这使得μC/OS-II能够避免同时有其他任务或中断服务进入临界段代码。关中断时间是RTOS最重要的指标之一,因为这个指标影响系统对实时事件的响应性。μC/OS-II通过两个宏(macros)实现开关中断,分别是OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()[1]。

最后,和其他RTOS一样,μC/OS-II系统需要时钟节拍来实现时钟周期中断,以及实现任务延时和确认超时。所以时钟节拍对系统实时性的影响很大。μC/OS-II的节拍率是可以根据应用的需要由用户设定的,范围是10-100次/秒,时钟节拍越高,系统的额外负荷就越重,但是实时性却越强。

4 RTLinux实时原理分析

4.1 RTLinux简介

Linux原本是一个通用目的计算机操作系统(GPOS),必须对其进行一些改动才能成为RTOS。新墨西哥理工学院开发的基于标准Linux的硬实时操作系统RTLinux 已成功的应用于从航天飞机的空间数据采集、科学仪器测控到电影特技图像处理等广泛的实时环境下[3]。

RTLinux 开发者并没有针对实时操作系统的特性重写Linux 的内核(这样做工作量会非常大,而且要保证兼容性也非常困难)。RTLinux是通过在底层对Linux实施改造的产物。首先,在Linux内核与硬件中断之间增加一个精巧的可剥夺的实时内核,然后,把标准的Linux内核作为实时内核的一个进程与用户进程一起调度,标准的Linux内核的优先级最低,可以被实时进程抢断。正常的Linux进程仍可以在Linux内核上运行,这样做的好处是对Linux 的改动量最小,从一般的目的内核机制分离出了实时内核机制,有助于每个机制都能独立优化,实时内核能被保持小而且简单[2-3]。Linux与RTLinux内核细节的比较如图3。

4.2 RTLinux硬实时性的实现原理

首先,RTLinux在中断控制上进行了改进。本来是由Linux内核完全控制Linux进程和中断控制硬件的,现在在Linux内核和中断控制硬件之间,增加了一个RTLinux内核。Linux的控制信号都要先交给RTLinux内核进行处理。RTLinux使用的关键技术是中断控制硬件的软件模仿。当Linux使硬件中断无效时,RTLinux内核将阻止这个请求,记录它,然后返回到Linux。这样 Linux就不能真正地禁止中断了,无论Linux在什么状态下都不可能延迟实时中断响应时间。

图3 Linux与RTLinux内核细节的比较

当一个中断到达时,RTLinux内核截获这个中断,然后决定该怎么做。如果有这个中断对应的实时处理程序的话,那么将调用这个处理程序;如果没有这个实时处理程序或者如果那个处理程序表明他想和Linux共享中断,这个中断将标记为“未解决”的;如果Linux已经请求中断是可用的,那么任何未解决的中断都将参与竞争,这时会调用Linux的处理程序,重新启用硬件中断。

另一个重要的改进是在任务调度方面。由于传统的Linux的进程调度策略并非剥夺型。为了满足硬实时性的要求,RTLinux中的rtl_sched.h中重新定义了实时的进程控制块rtl_thread_struct,并重新定义了可剥夺型的调度程序rtl_schedule()。这样,RTLinux在默认的情况下根据各个实时任务的优先级来确定执行的先后次序。优先级高的先执行,优先级低的后执行,保证最高优先级的任务一旦就绪,总能得到CPU的使用权。这和前面介绍的μC/OS-II的调度策略是一样的。与μC/OS-II不同之处在于,RTLinux将任务调度器本身设计成一个可装载的内核模块,用户可以根据自己的实际需要,编写适合自己的调度算法。

前面提到过,对于μC/OS-II而言,采用的是固定时钟节拍率的设置方式,精细的时钟节拍虽然可以提高任务调度器的效率,但会增加CPU处理定时中断的时间开销。RTLinux的时钟节拍的设置方式和μC/OS-II所采用的固定时钟节拍不一样,RTLinux对时间精度和时钟中断处理的时间开销进行了折中考虑,将定时器芯片设置为终端计时中断方式。根据最近的进程的时间需要,不断调整定时器的节拍率。这样不仅可以获得高定时精度和实时性,同时中断处理的开销又最小。

5 影响实时性能的因素及改进途径

对于评价一个RTOS性能最重要的指标是任务响应时间,任务响应时间指从某事件到来,到系统响应此事件并开始执行的时间间隔。有以下几个因素影响任务响应时间[1-6]:

(1)中断分派时间IDT(Interrupt Dispatch Time)。中断发生时,系统调用中断服务程序之前保存相关寄存器和其他系统状态所花费的时间。

(2)中断服务时间IST(Interrupt Service Time)执行ISR花费的时间。

(3)内核抢占时间KPT(Kernel Preemption Time)从RTOS想要抢占当前进程到这种抢占实际发生的时间间隔。

(4)调度延迟SD(Schedule Delay)。在某个调度时机,调度程序选择下一个进程所花费的时间。

(5)上下文切换时间CST(Context Switching Time)。系统保存当前进程的寄存器和系统状态,其次重置下一个进程的寄存器和状态所用的时间。

(6)系统调用返回时间RSC(Return From System Call)内核在返回到用户态之前用于检查必要的返回条件所用的时间。

任务的调度策略对任务响应时间的影响是最大的,任务调度策略算法有很多种,基于系统实时性的要求μC/OS-II与RTLinux都采用了基于优先级驱动的可剥夺型实时调度策略。另一方面,我们发现可以通过努力减少IDT、IST、KPT来减少任务响应时间,其中减少IST的效果尤为明显。这就要求我们在设计实时应用程序时,进入中断处理程序后,关闭中断的时间要尽量的短,只把必需的处理放在关闭中断期间处理,而其他的都应该放到开中断后处理。当然,提高RTOS的实时性能是一个综合优化的结果,需要结合具体的应用来进行[4-6]。

6 结束语

μC/OS-II和RTLinux两种开源的硬实时操作系统从实现的原理上来说各有特色:μC/OS-II是单个微内核实现了RTOS的基本功能,保持了微内核操作系统固有的优点。RTLinux是在通用Linux版本的基础上经过改进后得到的双内核RTOS,他们都采用了能满足硬实时性的基于优先级驱动的可剥夺型实时调度策略 ,具有很好实时性和扩展性,完全能够满足大多数嵌入式系统的要求。又由于他们都是开放源代码的(虽然有一些限制),应用开发者可以基于特定的应用目的作相关的修改,所以其应用发展前景是相当乐观的。

参考文献:

[1]Jean J. Labrosse.邵贝贝 译. 嵌入式实时操作系统μC/OS-II(第2版)[M]. 北京:北京航空航天大学出版社,2003.

[2]郭春生, 朱兆达. 硬实时操作系统-RTLinux[J]. 电子技术应用,2002,4:17-19.

[3]/.

[4]赵志强, 谢康林. 嵌入式实时操作系统的资源调度[J]. 计算机工程,2003,29(2):273-274.

[5]朱响斌, 涂时亮. Linux的实时性能测试[J]. 微电子学与计算机,2004,21(11):85-88.

[6]刘云生, 徐超. RTOS实时性能测试[J].计算机工程与应用,2004,11:93-95.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:计算机基础课中关于上网部分的实验教学方法改... 下一篇:一种PC机上的全向天线信号强度模拟实现方法