嵌入式操作系统
1、定义
嵌入式系统是以应用程序为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
嵌入式系统一般由嵌入式微处理器,外围硬件设备、嵌入式操作系统、用户应用程序4个部分组成,用于实现对其他设备的控制、监视、管理等功能。
- 嵌入式操作系统的核心是嵌入式微处理器,它应具有以下能力:
- 要对实时多任务有很强的支持能力。
- 要具有功能很强的存储区保护功能,因为嵌入式系统的软件结构已模块化,存储器保护能避免在软件模块间出现错误的交叉引用,同时也便于软件调试。
- 必须支持可扩展,从而能最迅速地开发出满足应用的最高性能的嵌入式微处理器。
- 必须功耗很低同时具有功耗管理功能,尤其是一些电池供电的设备。
- 嵌入式系统一般指非PC系统,它和PC相比有如下特点:
- 嵌入式系统通常是面向特定应用的嵌入式CPU,与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常具有低功耗、体积小、集成度高的特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,也就是片上系统(SoC),从而有利于嵌入式系统设计趋于小型化。
- 嵌入式系统是将先进的计算机技术、半导体技术、电子技术与各个行业的具体应用相结合的产物。它是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
- 嵌入式系统的软硬件都必须高度地设计,量体裁衣,去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对嵌入式微处理器的选择更有竞争力。
- 嵌入式系统和具体应用有机结合在一起,它的升级换代也是和具体产品同步进行的,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
- 为了提高系统的速度和可靠性,嵌入式系统中的软件一般都固化或者存储在存储器芯片或单片机本身,而不是磁盘等设备。
- 嵌入式系统本身不具备PC上的本地开发能力,即使设计完成后用户通常也是不能对其中的程序功能进行修改的(或者只能执行简单的下载升级),它必须要有一整套交叉开发工具和环境才能进行开发。
2、嵌入式操作系统的历史和发展
在早期,许多嵌入式系统是根本不需要操作系统的,它往往只不过存在一个控制循环而已。这些单任务的设计,对很简单的嵌入式系统来说已经足够了。随着嵌入式系统在复杂性上的增长,操作系统就显得重要起来,否则,将使控制软件的复杂度变得极不合理,多任务的概念就应运而生了。同时,逐渐有更多的嵌入式系统需要连接到一些网络上,因而需要在嵌入式系统中有网络协议栈支持,如果还是使用控制循环,其复杂度可想而知,这时操作系统就是人们最想在嵌入式系统中引入的了。
但是对于嵌入式系统而言,处理器的能力不强、内存等资源非常少,所以一般的大型传统不适合在嵌入式系统中使用,为了适应需求,发展出所谓的嵌入式操作系统(Embedded OS)。
20世纪80年代中期,嵌入式操作系统的代表是Wendon操作系统。它是一个开发套件,人们可以通过选择一些组件来构建自己的操作系统。
许多用于嵌入式系统的商业操作系统在20世纪80年代获得蓬勃发展。现在已经有很多商业操作系统可供选择。例如VxWorks、pCOS、Neculeus、WindowsCE、Symbian、WindowsPhone、Andriod等,以及免费的Linux。
2、嵌入式操作系统示例
- VxWorks操作系统
以VxWorks操作系统为例。VxWorks微内核只有10kb,VxWorks+FS+TCP/IP+TMS编译后的映像大小为400kb~2mb。VxWorks实时操作系统包括Wind微内核(实时kernel)及用户特定的板级支持包(Board Support Packet,BSP),它介于硬件系统和应用软件之间,为所有上层应用程序提供一个多任务的实时操作系统环境以及一整套API。由于提供了硬件系统的高度抽象,上层所有的软件开发都与硬件细节无关,大大提高了软件可移植性,加快了产品开发速度。
- Vx Works实时操作系统特点
VxWorks操作系统是一种微内核结构,它的内核称为Wind微内核,Wind微内核采取单一实地址空间模式,所有任务在同一地址空间运行,不区分用户态和核心态,不同于Linux和Windows。其主要特点如下。
- 基于优先级的抢占式调度和时间片轮转调度。
- 使用优先级继承协议防止优先级翻转,以确保系统实时性能。
- 任务切换更快,不需要进行虚拟地址空间切换。
- 任务间通信更方便,可以直接共享变量。
实时操作系统
Baike:实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。
Cre:很多嵌入式操作系统都是实时操作系统。例如VxWorks、uCos、ThreadX等。因为很多嵌入式系统要求高实时性。
补充 - 一些航天领域对代码的要求:
- 简单来说,整个操作系统的运行必须是确定的:
- 不能有动态内存分配,不能有动态任务创建。总之一切不确定性的东西都不允许有。
- 不允许超线程,超线程会影响两个线程执行的确定性。
- 不允许虚拟内存。缺页中断的执行是不确定的。