几种嵌入式实时操作系统的分析与比较
应具有可确定性。系统服务的执行时间不依赖于应用程序任务的多少。基于此特征,系统完成某个确定任务的时间是可预测的。表1具体列出了4种操作系统的调度机制。
4种嵌入式实时操作系统都支持多任务,只是在支持任务数量上和任务调度机制上有所不同。VxWorks具有高效的任务管理功能,它支持多任务,可分配256个优先级,支持优先级抢占式调试和时间片轮转调度,实时性最好。μC/OS-II内核是针对实时系统的要求设计实现的,只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求。μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度;仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占。eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多级队列调度器),允许用户在进行配置时选择其中一个凋度器,适应性好。
2.2 任务及中断间的同步与通信机制
实时操作系统的功能一般要通过若干任务和中断服务程序共同完成。任务与任务之间、任务与中断间任务及中断服务程序之间必须协调动作,互相配合,这就涉及任务间的同步与通信问题。嵌入式实时操作系统通常是通过信号量、互斥信号量、事件标志和异步信号来实现同步,通过消息邮箱、消息队列、管道和共享内存来提供通信服务。由于互斥信号量的使用,带来了实时操作系统中常见的优先级反转问题。优先级反转是一种不确定的延迟形式,当高优先级任务企图访问已被低优先级占有的共享资源时,必须等待低优先级任务释放共享资源;如果这时低优先级任务被一个或多个中优先级任务抢占,那么高优先级任务被延迟的时间将更进一步延长,实时性难以保证。因此,应采取相关措施以尽鼍避免出现优先级反转问题。实时系统通常采用优先级继承和优先级置顶机制。
优先级继承足指拥有互斥量的任务被提升到与下一个在等待该互斥最的最高优先级任务相同的优先级;优先级置顶是指获得互斥量的任务将其优先级提升到一个事先规定好的值。表2为4种操作系统的同步与通信机制的比较。
4种系统都具有灵话的任务间同步与通信机制,都可以通过信号量、消息队列来实现同步与通信,但是VxWorks与μClinux都不支持邮箱和事件标志,而且除了μClinux和eCos中的位图调度器,其他操作系统都采取了措施抑制优先级反转。
2.3 内存管理
内存管理主要包括:内存分配原则,存储保护和内存分配方式。
2.3.1 内存分配原则
内存分配原则包括快速性、可靠性和高效性。其中,快速性要求内存分配过程要尽可能快,所以一般采用简单、快速的分配算法;可靠性指的是内存分配的请求必须得到满足;系统强调高效性的要求,不仅仅是对系统成本的要求,而且由于系统本身可配置的内存容量也是很有限的,所以要尽可能地避免浪费。
2.3.2 存储保护
通常在操作系统的内存中既有系统程序也有用户程序,为了使两者都能正常运行,避免程序间相互干扰,需要对内存中的程序和数据进行保护。存储保护通常需要硬件支持,在很多系统中都采用MMU,并结合软件实现;但由于嵌入式系统的成本限制内核和用户程序通常都在相同的内存空间中。
2.3.3 内存分配方式
内存分配方式可分为静态分配和动态分配。静态分配是在程序运行前一次性分配给相应内存,并且在程序运行期间中不允许再申请或在内存中移动;动态分配则允许在程序运行整个过程中进行内存分配。静态分配使系统失去了灵活性,但对于实时性要求比较高的系统是必需的;而动态分配赋予了系统设计者更多自主性,可以灵活地调整系统的功能。
VxWorks对内存的使用采用的是Flat Mode,可被静态或动态链接。VxWorks为用户提供了两种内存区域Region和Partition。Region是变长的内存区,用户可以从创建的Region中分配Segment,其特点是容易产生碎片,但灵活并且不浪费;Partition是定长的内存区,用户可以从刨建的Partition中分配Buffer,其特点是不会产生碎片,技率高但是易浪费。VxWorks采用最先算法分配内存。μC/OS-II把连续的大块内存按分区来管理,每个分区中都包含整数个大小相同的内存块,但不同分区之间内存的太小可以不同。用户动态分配内存时,只须选择一个适当的分区,按块来分配内存,释放时将该块放回到以前所属的分区,这样就消除了因多次动态分配和释放内存所引起的碎片问题。μClinux是针对没有MM
- 蓄电池化成控制系统中显示功能的实现(11-05)
- 基于μC/OS-II+CPLD的电动车电池管理系统设计(09-14)
- 基于Crotex-M3及μC/OS-II的自动智能防盗窗设计(11-30)
- 基于LPC2138和μC/OS II的超声波测距系统设计(01-14)
- μC/OS-II就绪表算法在Cortex-M3架构上的适配设计(01-22)
- 基于STM32和μC/OS-II的嵌入式数字示波器设计(10-08)