1.4 嵌入式操作系统
为了使嵌入式系统的开发更加方便和快捷,需要有专门负责管理存储器分配、中断处理、任务调度等功能的软件模块,这就是嵌入式操作系统。
1.4.1 操作系统的概念和分类
嵌入式操作系统是用来支持嵌入式应用的系统,软件A是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形用户界面等。
嵌入式操作系统根据应用场合可以分为两大类:一类是面向消费电子产品的非实时系统A,这类设备包括个人数字助理(PDA)、移动电话、机顶盒(STB)等;另一类则是面向控制、通信、医疗等领域的实时操作系统A,如WindRiver公司的Vx2Works、QNX系统软件公司的QNX等。实时系统(RealTimeSystem)是一种能够在指定或者确定时间内完成系统功能A并且对外部和内部事件在同步或者异步时间内能做出及时响应的系统。
1.4.2 实时操作系统
实时操作系统(RTOS)是具有实时性且能支持实时控制系统工作的操作系统。
RTOS与通用计算机OS的区别:
■ 实时性:响应速度快,只有几微秒;执行时间确定、可预测;
■ 代码尺寸小:10~100KB,节省内存空间,降低成本;
■ 应用程序开发较难;
■ 需要专用开发工具:仿真器、编译器和调试器等。
(1)实时操作系统的组成
根据面向实际应用领域的不同,实时操作系统的组成也有所不同,但一般实时操作系统都由以下几个重要部分组成。实时操作系统的组成如图1-3所示。
图1-3 实时操作系统的组
1)实时内核
实时内核一般都是多任务的。它主要实现任务管理、定时器管理、存储器管理、任务间通信与同步、中断管理等功能。
2)文件系统
对于比较复杂的文件操作应用来说,文件系统是必不可少的。它也是可裁减的网络组件。
3)网络组件
实现了链路层的ARP/RARP协议、PPP及SLIP协议,网络层的IP协议,传输层的TCP和UDP协议。网络组件为应用层提供服务,它本身是可裁减的。
4)图形用户界面(GUI)
图形用户界面为用户提供文字和图形及中英文的显示和输入,它同样是可裁减的。
(2)实时操作系统的设计原则
实时系统与其他普通系统之间的最大差异是满足处理与时间的关系。在实时计算中,系统的正确性不仅仅依赖于计算的逻辑结果,还依赖于结果产生的时间。对于实时系统来说,最重要的就是实时操作系统必须有能力在一个事先定义好的时间限制中对外部或内部的事件进行响应和处理。
实时系统可以定义为“一个能够在事先指定或确定时间内完成系统功能和对外部或内部、同步或异步时间做出响应的系统”。由于实时系统设计与应用的关系密切,所以,有许多分类的方法。可分为硬实时和软实时:硬实时系统就是系统须及时对事件做出反应,绝对不能发生错过事件处理的期限的情况。在硬实时系统中一旦发生了这种情况就意味着巨大的损失和灾难。在软实时系统中,当系统在重负载的情况下允许发生错过期限的情况而不会造成非常大的危害。对于软实时系统,基于优先级调度的调度算法可以满足要求,提供高速的响应和大的系统吞吐率,而对于硬实时系统,则必须及时做出响应。现代实时系统一般都有实时操作系统,因为操作系统使系统的设计更加简便,保证系统的质量及能够提供其他通用操作系统所提供的服务。这样,实时的操作系统就面临着更高的设计要求。最后是实时系统的体系结构设计。实时系统的体系结构必须满足以下要求:
■ 高运算速度。
■ 高速的中断处理。
■ 高的I/O吞吐率。
■ 合理的处理器和1/O设备的拓扑连接。
■ 高速可靠的和有时间约束的通信。
■ 体系结构支持的出错处理。
■ 体系结构支持的调度。
■ 体系结构支持的操作系统。
■ 体系结构支持的实时语言特性。
从计算机科学角度出发,实时系统还必须解决以下几点:
■ 时间特性的指定和确定,这点与实际系统设计相同。
■ 实时的调度理论。由于实时系统应用的特殊性,以往通用系统中以大吞吐量为目标的调度算法必须改进,以适应实时应用的需要。主要要求是满足时间的正确性,然后提供高度动态的、满足在线需求的、计算方法性的实时调度。
■ 实时操作系统的设计和实现。在设计上的首要目标是提供保证实时性的方法,包括一系列的经典问题的针对实时系统的解决方案。实现要求操作系统的低开销,而且必须保证内核及其他关键的可重入性。
■ 实时的编程语言和设计方法。
■ 分布式的实时数据库。
■ 系统的容错。
■ 实时时钟的同步。
■ 实时系统中的人工智能。
作为实时系统,其特性决定了传统的性能衡量标准是不适用的。对传统的通用系统的要求是大的系统吞吐量、合理的响应速度及对每个系统用户相对公平的进行计算资源的分配。然而在实时系统中,以上这些要求都不再适用或者是不再占重要位置。实时系统中系统的一切动作都以实时任务为中心,实时的数据吞吐取代了以吞吐量为目标的标准。对感应实时应用的优先响应取代了对每个用户的恰当的反应速度。系统的计算资源和其他外设资源必须优先满足实时应用的要求。针对实时系统新的要求,必须以实时的进程调度在实时操作系统中是一个关键性的问题。实时操作系统的实时进程调度的根本要求是保证实时任务的时间正确性。此外,实时操作系统的进程调度算法必须保证系统是可以事先定义的和易维护的。实时任务的时间正确性以实时任务是否能够总是满足期限为标准。
(3)实时操作系统的特点
实时操作系统必须具备以下几个特点:
■ 支持同步。提供同步和协调共享数据的使用。
■ 中断和调度任务的优先级机制。为区分用户的中断及调度任务的轻重缓急,需要有中断和调度任务的优先级机制。
■ 确定的任务切换时间和中断延迟时间。确定的任务切换时间和中断延迟时间是实时操作系统区别于普通操作系统的一个重要标志,是衡量实时操作系统实时性的重要标准。
■ 支持异步事件的响应。实时操作系统为了使外部事件在规定的时间内响应,要求具有中断和异步处理的能力。
1.4.3 常用的嵌入式操作系统
实时操作系统中,目前较为知名的有VxWorks、NeutrinoRTOS、NucleusPlus、OS/9、VRTX、LinuxOS,RTLinux和BlueCatRT等。
通用型操作系统的执行性能与反应速度相比实时操作系统,没有那么严格。通用型操作系统中,目前较为知名的有WindowsCE、PalmOS、TimeSysLinux/GPL和BlueCatLinux等。
(1)WindowsCE
从多年前发表WindowsCE开始,微软公司就开始涉足嵌入式操作系统领域,如今历经WinCE2.0、3.0,新一代的WinCE呼应微软.NET的意愿,定名为“WindowsCE.NET”(目前最新版本为5.0)。WinCE主要应用于PDA及智能电话(smartphone)等多媒体网络产品。微软于2004年推出了代号为“Macallan”的新版WinCE系列的操作系统。
WindowsCE.NET的目的,是让不同语言所写的程序可以在不同的硬件上执行,也就是所谓的.NETCompactFramework,在这个Framework下的应用程序与硬件互相独立无关。而核心本身是一个支持多线程及多CPU的操作系统。在工作调度方面,为了提高系统的实时性,主要设置了256级的工作优先级及可嵌入式中断处理。
如在PCDesktop环境中,WindowsCE系列在通信和网络的能力,以及多媒体方面极具优势。其提供的协议软件非常完整,如基本的PPP、TCP/IP、IrDA、ARP、ICMP、WirelessTunableTCP/IP、PPTP、SNMP和HTTP等几乎应有尽有,甚至还提供了有保密与验证的加密通信,如PCT/SSL。而在多媒体方面,目前在PC上执行的WindowsMedia和DirectX都已经应用到WindowsCE3.0以上的平台。这些包括WindowsMediaTechnologies4.1、WindowsMediaPlayer6.4Control、DirectDrawAPI、DirectSoundAPI和DirectShowAPI,其主要功能就是对图形、影音进行编码译码,以及对多媒体信号进行处理。
(2)Linux
Linux正在嵌入式开发领域稳步发展。Linux使用GPL,所有对特定开发板、PDA、掌上机、可携带设备等使用嵌入式Linux感兴趣的人都可以从Internet上免费下载其内核和应用程序,并开始移植和开发。许多Linux改良品种迎合了嵌入式市场。
嵌入式Linux的发展比较迅速。NEC、索尼已经在销售个人视频录像机等基于Linux的消费类电子产品,摩托罗拉公司则计划在其未来的大多数手机上使用Linux,IBM公司也制定了在手持机上运行Linux的计划。
虽然大多数Linux系统运行在PC平台上,但Linux也是嵌入式系统的可靠主力。Linux的安装和管理比UNIX更加简单灵活,这对于那些UNIX专家们来说又是一个优点,因为Linux中有许多命令和编程接口同传统的UNIX一样,但是对于习惯于Windows操作系统的人来说,需要记忆大量的命令行参数却是一个缺点。随着Linux社团的不断努力,linux的人机界面开发环境正在不断完善。
典型的Linux系统经过打包,在拥有硬盘和大容量内存的PC上运行,嵌入式系统不需要这么高的配置。一个功能完备的Linux内核大约需要1MB内存,而Linux微内核只占用其中很小一部分内存,包括虚拟内存和所有核心的操作系统功能在内,只需占用系统约100KB内存。只要有500KB的内存,一个有网络栈和基本实用程序的完全的Linux系统就可以在一台8位总线(SX)的Intel386微处理器上运行的很好了。由于内存要求常常是由需要的应用所决定的,例如,Web服务器或者SNMP代理,Linux系统甚至可以仅使用256KB ROM和512KB RAM进行工作。因此,它是一个瞄准嵌入式市场的轻量级操作系统。
与传统的实时操作系统相比(RTOS),采用象嵌入式Linux这样的开放源码的操作系统的另外一个好处是Linux开发团体比RTOS的供应商更快地支持新的IP协议和其他协议。例如,用于Linux的设备驱动程序要比用于商业操作系统的设备驱动程序多,如网络接口卡(NIC)驱动程序及并口和串口驱动程序。
核心Linux操作系统本身的微内核体系结构相当简单。网络和文件系统以模块形式置于微内核的上层。驱动程序和其他部件可在运行时作为可加载模块编译或者添加到内核。这为构造定制的可嵌入系统提供了高度模块化的构件方法,而在典型情况下该系统需结合定制的驱动程序和应用程序以提供附加功能。
嵌入式系统也常常要求通用的功能,为了避免重复劳动,这些功能的实现运用了许多现成的程序和驱动程序,它们可以用于公共外设和应用。Linux可以在外设范围广泛的多数微处理器上运行,并早已有了现成的应用库。
Linux用于嵌入式的Internet设备也是很合适的,原因是它支持多处理器系统,该特性使Linux具有了伸缩性。因而设计人员可以选择在双处理器系统上运行实时应用,提高整体的处理能力。例如,可以在一个处理器上运行GUI,同时在另一个处理器上运行Linux系统。
在嵌入式系统上运行Linux的一个缺点是Linux体系提供实时性能时需要添加实时软件模块,而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分。由于这些实时软件模块是在内核空间运行的,因此,代码错误可能会破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是一个非常严重的弱点。已经有许多嵌入式Linux系统的示例,可以有把握地说,某种形式的Linux能在几乎任一台执行代码的计算机上运行。
(3)μC/OS-Ⅱ
μC/OS-Ⅱ是JeanJ.Labrosse在1990年前后编写的一个实时操作系统内核。名称μC/OS-II来源于术语Micro-ControllerOperatingSystem(微控制器操作系统),它通常也称为MUCOS或者UCOS。
μC/OS-Ⅱ只是一个实时操作系统内核,特点如下:
■ 提供任务调度、任务管理、时间管理、内存管理、任务间通信和同步等基本功能。
■ 没有提供I/O管理、文件管理、网络等额外的服务。
■ 源码开放及可扩展。
■ 基于优先级调度的抢占式实时内核,在内核上提供最基本的系统服务,例如,信号量、邮箱、消息队列、内存管理和中断管理等。
■ μC/OS-Ⅱ具有良好的可移植性。
■ μC/OS-Ⅱ的大部分代码都是用C语言写成的,只有与处理器的硬件相关的一部分代码用汇编语言编写。
目前,μC/OS-Ⅱ支持ARM、PowerPC、MIPS、68k/ColdFire和x86等多种体系结构。
(4)VxWorks
VxWorks是美国风河公司设计开发的一种嵌入式实时操作系统,是嵌入式开发环境的关键组成部分。风河公司自1983年推出VxWroks实时操作系统后,因为其良好的可靠性、卓越的实时性、高性能的内核及友好的用户开发环境,被广泛的应用于通信、军事、航空、航天等高端技术及实时性要求非常高的领域中。
实际上,VxWorks已经成为嵌入式软件产品的行业标准,大量的电子设备制造商都提供了基于VxWorks的扩展组件。因此,VxWorks能够支持大部分的微处理器,应用程序甚至不用做任何改动就可以运行在许多微处理器上。
VxWorks的基本结构包括7个部分:WindMicro2kernel(微内核)、OperatingSystem Module(操作系统模块)、I/OSubsystem(输入/输出子系统)、NetworkingSubsystem(网络子系统)、TargetDepf.Tools(目标开发工具)、Multi-processing(多处理机制)和VirtualMemory(虚拟内存)。其中最核心的部分就是微内核,它具有全部的实时特性,包括多任务调度、中断支持及同时支持抢占式调度和时间片轮转调度。
(5)pSOS
pSOS是ISI公司研发的产品,是世界上最早的实时系统之一,也是最早进入中国市场的实时操作系统。
pSOS是一个模块化、高性能、完全可扩展的实时操作系统。专为嵌入式微处理器设计,提供了一个完全的多任务环境,在定制的或是商业化的硬件上提供高性能和高可靠性。包含单处理器支持模块(pSOS+)、多处理器支持模块(pSOS+m)、文件管理器模块(pHILE)、TCP/IP通信包(pNA)、流式通信模块(OpEN)、图形界面和Java,HTTP等。
(6)DeltaOS
DeltaOS是电子科技大学嵌入式实时教研室和科银公司联合研制开发的全中文的嵌入式操作系统。提供强实时和嵌入式多任务的内核,任务响应时间快速、确定,不随任务负载大小改变。绝大部分的代码由C语言编写,具有很好的移植性。适用于内存要求较大、可靠性要求较高的嵌入式系统。主要包括嵌入式实时内核DeltaCORE、嵌入式TCP/IP组件DeltaNET、嵌入式文件系统DeltaFILE及嵌入式图形用户界面DeltaGUI等。提供一整套的嵌入式开发套件LamdaTOOL和一整套嵌入式开发应用解决方案,已成功应用于通信、网络、信息家电等多个领域。
(7)eCos
eCos是由CygnusSolutions公司开发的一个嵌入式可配置操作系统,最早的版本是Cygnus公司于1998年11月发布的eCos1.1,当时只支持几种有限的处理器。1999年11月,Cygnus公司被RedHat公司收购后,eCos得到了迅速发展并且使其成为RedHat公司进军嵌入式领域的关键产品之一,并于2003年5月正式发布了eCos2.0版本。
eCos是一个开放源码的实时嵌入式操作系统,专门设计用于32位和64位的微处理器上,已经成功移植到ARM(包括StrongARM,XScale)、Intelx86、MIPS32、PowerPC和RenesasSuperH等多种CPU体系结构上。目前,eCos支持的CPU体系结构的数量还在不断增加。
eCos不仅提供了对一般嵌入式应用(设备驱动、文件系统、TCP/IP、内存管理、异常处理等)的支持,而且还提供了对所有必要的同步原语、调度器和中断处理机制的支持。eCos是一个实时型系统,提供了许多实时性功能,例如,充分抢占、最小中断延迟、同步原语、中断响应处理等;eCos还提供了一个图形化集成开发环境,极大的方便了嵌入式应用程序的开发和调试。eCos的核心是一个功能全面、灵活、可配置的实时内核,并且还包括C语言库和底层运行包等组件,其中,每个组件都有大量的可配置选项,所以,可以根据不同的嵌入式应用并利用eCos提供的配置工具方便的进行相应的配置。