当前位置:文档之家› 几种嵌入式实时操作系统的研究与比较

几种嵌入式实时操作系统的研究与比较

几种嵌入式实时操作系统的分析与比较2008-07-04 20:54种性能优良并被广泛应用的实时是4C/OS-II和eCos、VxWorks、μClinuxμ种操作系统的主要性能进行分析与比较,归纳出它操作系统。

本文通过对这4 们的选型依据和适用领域。

种操作系统的介绍 1. 4(1>VxWorks公司的产品,是目前嵌入式系统领域中应用很广WindRiver VxWorks是美国多个400 泛,市场占有率比较高的嵌入式操作系统。

VxWorks时操作系统由实相对独立、短小精悍的目标模块组成,用户可根据需要选择适当的模块来裁剪和配置系统;提供基于优先级的任务调度、任务间同步与通信、中断处理、定规范的内存管>POSIX(可移植操作系统接口时器和内存管理等功能,内建符合在核心方面甚至理,以及多处理器控制程序;并且具有简明易懂的用户接口, 8 KB。

町以微缩到OS-IIC/ (2> μC/OS-II是在μC-OS的基础上发展起来的,是美国嵌入式系统专家μJean J.Labrosse用C语言编写的一个结构小巧、抢占式的多任务实时内核。

μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

(3>μClinuxμClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。

同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP /IP网络协议等。

因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。

(4>eCoseCos(embedded Configurable operating system>,即嵌入式可配置操作系统。

它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。

最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。

每个组件可提供大量的配置选项(实时内核也可作为可选配置>,使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求。

2. 性能分析与比较任务管理、任务及中断间的同步与通信机制、内存管理、中断管理、文件系统、对硬件的支持和系统移植这几方面是实时操作系统的主要性能。

下面就从这几个方面着手对上述4种操作系统进行分析与比较。

2.1 任务管理任务管理是嵌入式实时操作系统的核心和灵魂,决定了操作系统的实时性1 / 7 能。

它通常包含优先级设置、多任务调度机制和时间确定性等部分。

2.1.1 优先级设置嵌入式操作系统支持多任务,每个任务都具有优先级,任务越重要,赋予的优先级应越高。

优先级的设置分为静态优先级和动态优先级两种。

静态优先级指的是每个任务在运行前都被赋予一个优先级,而且这个优先级在系统运行期间是不能改变的;动态优先级则是指每个任务的优先级(特别是应用程序的优先级>在系统运行时可以动态地改变。

2.1.2 多任务调度机制任务调度主要是协调任务对计算机系统资源的争夺使用。

对系统资源非常匮乏的嵌入式系统来说,任务调度尤为重要,它直接影响到系统的实时性能。

通常,多任务调度机制分为基于优先级抢占式调度和时间片轮转调度。

基于优先级抢占式调度:系统中每个任务都有一个优先级,内核总是将CPU分配给处于就绪态的优先级最高的任务运行。

如果系统发现就绪队列中有比当前运行任务更高的优先级任务,就把当前运行任务置于就绪队列中,调入高优先级任务运行。

系统采用优先级抢占方式进行调度,可以保证重要的突发事件及时得到处理。

时间片轮转调度:让优先级相同的处于就绪状态的任务按时间片使用CPU,以防止同优先级的某一任务长时间独占CPU。

在一般情况下,嵌入式实时操作系统采用基于优先级抢占式调度与时间片轮转调度相结合的调度机制。

2.1.3 时间的可确定性嵌入式实时操作系统甬数调用与服务的执行时间应具有可确定性。

系统服务的执行时间不依赖于应用程序任务的多少。

基于此特征,系统完成某个确定任务的时间是可预测的。

表1具体列出了4种操作系统的调度机制。

4种嵌入式实时操作系统都支持多任务,只是在支持任务数量上和任务调度机制上有所不同。

VxWorks具有高效的任务管理功能,它支持多任务,可分配256个优先级,支持优先级抢占式调试和时间片轮转调度,实时性最好。

μC/OS-II 内核是针对实时系统的要求设计实现的,只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求。

μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度;仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占。

eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多级队列调度器>,允许用户在进行配置时选择其中一个凋度器,适应性好。

2.2 任务及中断间的同步与通信机制实时操作系统的功能一般要通过若干任务和中断服务程序共同完成。

任务与任务之间、任务与中断间任务及中断服务程序之间必须协调动作,互相配合,这就涉及任务间的同步与通信问题。

嵌入式实时操作系统通常是通过信号量、互斥信号量、事件标志和异步信号来实现同步,通过消息邮箱、消息队列、管道和共享内存来提供通信服务。

由于互斥信号量的使用,带来了实时操作系统中常见的优先级反转问题。

优先级反转是一种不确定的延迟形式,当高2 / 7优先级任务企图访问已被低优先级占有的共享资源时,必须等待低优先级任务释放共享资源;如果这时低优先级任务被一个或多个中优先级任务抢占,那么高优先级任务被延迟的时间将更进一步延长,实时性难以保证。

因此,应采取相关措施以尽鼍避免出现优先级反转问题。

实时系统通常采用优先级继承和优先级置顶机制。

优先级继承足指拥有互斥量的任务被提升到与下一个在等待该互斥最的最高优先级任务相同的优先级;优先级置顶是指获得互斥量的任务将其优先级提升到一个事先规定好的值。

表2为4种操作系统的同步与通信机制的比较。

4种系统都具有灵话的任务间同步与通信机制,都可以通过信号量、消息队列来实现同步与通信,但是VxWorks与μClinux都不支持邮箱和事件标志,而且除了μClinux和eCos中的位图调度器,其他操作系统都采取了措施抑制优先级反转。

2.3 内存管理内存管理主要包括:内存分配原则,存储保护和内存分配方式。

2.3.1 内存分配原则内存分配原则包括快速性、可靠性和高效性。

其中,快速性要求内存分配过程要尽可能快,所以一般采用简单、快速的分配算法;可靠性指的是内存分配的请求必须得到满足;系统强调高效性的要求,不仅仅是对系统成本的要求,而且由于系统本身可配置的内存容量也是很有限的,所以要尽可能地避免浪费。

2.3.2 存储保护通常在操作系统的内存中既有系统程序也有用户程序,为了使两者都能正3 / 7 常运行,避免程序间相互干扰,需要对内存中的程序和数据进行保护。

存储保护通常需要硬件支持,在很多系统中都采用MMU,并结合软件实现;但由于嵌入式系统的成本限制内核和用户程序通常都在相同的内存空间中。

2.3.3 内存分配方式内存分配方式可分为静态分配和动态分配。

静态分配是在程序运行前一次性分配给相应内存,并且在程序运行期间中不允许再申请或在内存中移动;动态分配则允许在程序运行整个过程中进行内存分配。

静态分配使系统失去了灵活性,但对于实时性要求比较高的系统是必需的;而动态分配赋予了系统设计者更多自主性,可以灵活地调整系统的功能。

VxWorks对内存的使用采用的是Flat Mode,可被静态或动态链接。

VxWorks为用户提供了两种内存区域Region和Partition。

Region是变长的内存区,用户可以从创建的Region中分配Segment,其特点是容易产生碎片,但灵活并且不浪费;Partition是定长的内存区,用户可以从刨建的Partition中分配Buffer,其特点是不会产生碎片,技率高但是易浪费。

VxWorks采用最先算法分配内存。

μC/OS-II把连续的大块内存按分区来管理,每个分区中都包含整数个大小相同的内存块,但不同分区之间内存的太小可以不同。

用户动态分配内存时,只须选择一个适当的分区,按块来分配内存,释放时将该块放回到以前所属的分区,这样就消除了因多次动态分配和释放内存所引起的碎片问题。

μClinux是针对没有MMU的处理器设计的,不能使用处理器的虚拟内存管理技术,只能采用实存储器管理策略。

系统使用分页内存分配方式,在启动时对实际存储器进行分页。

系统对内存的访问是直接的操作系统对内存空间没有保护,多个进程可共享一个运行空间,所以,即使是一个无特权进程调用一个无效指针也会触发一个地址错误,并有可能引起程序崩溃甚至系统崩溃。

eCos对内存分配既不分段也不分页,而是采用一种基于内存池的动态内存分配机制。

通过两种内存池类来实现两种内存管理方法:一种是变长的内存池;另一种是定长的内存池,类似于VxWorb的管理方案。

表3为4种操作系统内存管理的比较。

2.4 中断管理中断管理是实时系统中一个很重要的部分,系统经常通过中断与外部事件交互。

主要考虑是否支持中断嵌套、中断处理机制、中断延时等。

(1>VxWorks的中断管理4 / 7VxWorks操作系统中断管理采用中断处理与普通任务分别在不同栈中处理的中断处理机制,使得中断只会引发一些关键寄存器的存储,而不会导致任务的上下文切换,从而极大地缩短了中断延时。

同时,VxWorks的中断处理程序只能在最短时间内通告中断的发生,而将其他的非实时处理尽量放入被引发的中断服务程序中来完成,这也缩短了中断延时。

但是凼为中断服务程序不在一个固定的仟务上下文中执行,而目没有任务控制块,所以所有中断服务程序使用相同的中断堆栈。

为了能处理最坏情况下的中断嵌套,必须分配足够大的中断堆栈空间。

(2>μC/OS-II的中断管理μC/OS-II中断处理比较简单。

一个中断向量上只能挂一个中断服务子程序ISR,而且用户代码必须都在ISR中完成。

ISR需要做的事情越多,中断延时也就越长。

内核所能支持的最大嵌套深度为255。

(3> μClinux的中断管理μClinux操作系统将中断处理分为两部分:顶半处理和底半处理。

在顶半处理中,必须关中断运行,且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的处理,而且接受中断。

相关主题