嵌入式操作系统

  • 嵌入式操作系统(Embedded Operating System, EOS)是一种用途广泛的系统软件,它主要负责嵌入式系统的全部软、硬件资源的分配、调度工作,控制、协调并任务。另外,EOS必须体现系统的特征,并能通过装载某些模块来达到系统所需要的功能。
    随着计算机网络技术的发展、各种只能家电的普及,EOS加速朝着微型化、智能化、专业化方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有突出的特点。作为嵌入式系统的重要组成部分,本文主要介绍嵌入式操作系统的特点,并进一步介绍嵌入式系统中常用的实时操作系统与嵌入式系统的设计方法。

一、嵌入式操作系统概述

1.1 嵌入式操作系统的特点

  • 传统的操作系统是计算机的一个大型系统软件,是计算机的指挥中心和管家。通过操作系统,可以实现计算机自身硬件、软件管理,提高计算机资源的利用率,合理地组织计算机工作流程,增强计算机地处理能力,提供良好的人机交互界面,方便用户实用计算机。嵌入式操作系统(EOS)除了以上的功能外,还具有其自身特点 :
  • (1)可装卸性:EOS的体系结构具有开放性、可伸缩性。
  • (2)强实时性:EOS实时性一般较强,可用于各种设备控制中。
  • (3)统一的接口:EOS提供各种设备的驱动接口。
  • (4)操作方便、简单,并能提供良好的图形界面,易于用户上手。
  • (5)强大的网络功能:EOS支持TCP/IP协议,同时也提供TCP/UDP/IP/PPP协议,支持统一的MAC访问层接口,为各种移动计算设备预留接口。
  • (6)强稳定性、弱交互性:EOS一旦运行就不需要用户过多的干预,这就要求EOS具有很强的稳定性。
  • (7)固化代码:EOS的应用软件被固化在嵌入式系统计算机的ROM中。并且辅助存储器在嵌入式系统中很少使用,因此,EOS的文件管理功能应该能够很容易拆卸。
  • (8)良好的移植性:便于更好的实现硬件的适用性。

1.2 嵌入式操作系统的分类

  • 通常情况下,嵌入式操作系统分为两类:面向控制、通信等领域的实时操作系统与面向消费电子产品的非实时操作系统。

1.2.1 非实时操作系统

  • 早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机。在这种情况下,嵌入式程序分为前台程序后台程序。其中,前台程序通过中断处理事件,其结构一般为无限循环;后台程序则控制嵌入式系统软、硬件资源的分配、管理以及任务调度,是系统管理调度程序。因此,后台任务也叫做任务级程序,前台程序也叫事件级程序。
  • 在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件处理。虽然,这样的处理流程不会造成中断服务中处理费时事件而影响后续的其他中断,但是前、后台的实时性比预想的要差,这是因为前、后台系统认为所有任务具有相同的优先级,而且任务执行又是通过FIFO队列排队,因此那些对实时性要求很高的任务不可能立刻得到粗粒。另外,由于前台程序是一个无限循环结构,一旦循环体中处理的任务崩溃,通常会造成整个系统的崩溃。即便如此,由于这类系统结构简单,通常不需要RAM/ROM的额外开销,因此在简单的嵌入式应用中被广泛应用。

1.2.1 实时操作系统

  • 实时操作系统是指在确定的事件内执行其功能并对外部异步事件作出响应的计算机系统。其操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的事件有关。 “在确定的时间内”是实时操作系统的核心,实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差就会带来严重后果。
  • 实时多任务操作系统指具有实时性、支持实时控制系统工作的操作系统。其首要任务是调度一切可利用的资源实现实时控制任务,其次再考虑计算机系统使用率的提高,它的重要特点是满足用户对时间的限制和需求。实时操作系统具有以下功能:
  • (1)任务管理:多任务和基于优先级的任务调度。
  • (2)任务间的同步和通信:信号量与邮箱等。
  • (3)存储器优化管理:包含ROM的管理。
  • (4)实时时钟服务。
  • (5)中断管理服务。
  • 实时操作系统具有以下特点:
  • (1)规模小。(2)中断被屏蔽时间短。(3)中断处理时间短。(4)任务切换快。

二、实时操作系统

2.1 实时操作系统与通用操作系统的比较

  • 通用操作系统是由分时操作系统发展而来的,通常支持多用户与多进程,负责管理众多的进程与系统资源的分配。分时操作系统的基本设计原则为:尽量缩短系统的平均响应时间并提高吞吐率,在单位时间内尽可能为更多的用户提供请求服务。因此,分时操作系统更关注平均表现性能,不注重个体表现性能。
  • 然而,实时操作系统除了满足用户需求外,更重要的是是要满足用户应用的实时性要求。组成一个应用的众多实时任务对于实时性的要求各不相同;另外,实时任务之间也会存在一些复杂的关联与同步,比如,执行顺序限制、共享资源的互斥访问等。
  • 因此,实时操作系统所遵循的最重要的设计原则是:采用各种算法和策略,始终保证系统行为的可预测性。其中,可预测性指在系统运行的任何时刻,实时操作系统的资源调配策略都能为争夺资源(比如CPU、内存、网络带宽等)的多个实时任务合理地分配资源,从而使得每个实时任务的实时性要求都能得到满足。
  • 与通用操作系统相比,实时操作系统注重的不是系统的平均表现,而是满足每个任务的实时性要求,即实时操作系统注重的是个体表现。由于实时操作系统与通用操作系统的基本设计原则具有很大的差异,因此,在很多资源调度策略选择与实现方法上也具有很大差异,主要体现以下几点:
  • (1)任务调度策略
  • 通用操作系统中的任务调度策略一般采用基于优先级的抢占式调度策略。对于优先级相同的进程则采用时间片轮调度方式,用户进程可以通过系统调用动态地调整自己的优先级,操作系统则可以根据具体情况,调整某些进程地优先级。
  • 在实时操作系统中,使用最为广泛地两种任务调度策略为:静态表驱动方式与固定优先级抢占式调度方式。
  • 其中,静态表驱动方式是指在系统运行之前,工程师根据各个任务的实时要求,在辅助工具的帮助下,事先生成一张任务运行时间表。在运行时,调度器只需根据这张表在指定的时刻启动相应的任务。
  • 对于固定优先级抢占式调度方式,则与通用操作的基于优先级的相类似,但是顾名思义,进程的优先级是固定不变的,并且优先级在运行前通过某种优先级分配策略指定。
  • (2)内存管理
  • 为了解决虚拟内存给系统带来的不可预测性,实时操作系统通常采用两种方式:第一,在原有虚拟内存管理机制的基础上,增加页面锁定功能,用户可以将关键页面锁定在内存中,从而使该页面不会被swap程序交换出内存;第二,采用静态内存划分的方式,为每一个实时任务划分固定的内存区域。目前市场上的实时操作系统通常采用第一种管理方式。
  • (3)中断处理
  • 对于通用操作系统,大部分外部中断都是激活状态,中断通常由设备驱动程序来处理。由于通用操作系统的用户进程通常没有实时性要求,然而中断处理程序直接根外设交互,可能具有实时性要求,因此,中断处理程序的优先级高于任何其他用户进程。
  • 但是对于实时操作系统,采用上述中断处理机制是不合适的。一种较为适合实时操作系统的中断处理方式为:除时钟中断外,屏蔽所有其他中断,中断处理程序采用周期性的轮询操作;另一种可行的方式是:对于采用轮询方式无法满足需求的外部事件,采用中断方式,其他时间仍然采用轮询方式。
  • (4)共享资源的互斥访问
  • 通用操作系统通常采用信号量机制来解决共享资源的互斥访问问题。对于实时操作系统,如果任务调度采用静态表驱动方式,共享资源的互斥访问问题在生成运行时间表时易经考虑到了,因此在运行时无须再考虑;如果任务调度采用基于优先级的方式,往往需要兑传统的信号量机制进行一些扩展,引入如优先级继承协议、优先级顶置协议等机制,从而较好地解决共享资源互斥访问的问题。
  • (5)系统调用及系统内部操作的时间开销
  • 进程通过系统调用得到操作系统提供的服务。操作系统通过内部操作来完成一些内部管理工作。为了保证系统的可预测性,实时操作系统中所有系统调用都应加一个具体量化的界限。而通用操作系统则对时间开销没有限制。
  • (6)系统的可重入性
  • 在通用操作系统中,核心态系统调用往往是不可重入的。当一低优先级任务调用核心态系统时,在该时间段内到达的高优先级任务必须等到低优先级的系统调用完成才能获得CPU,这就降低了系统的可预测性。因此,实时操作系统中的核心态系统调用往往被设计成可重入性。

2.2 实时操作系统的评价指标

  • 实时操作系统对性能指标的要求相对于通用操作系统来说更为严格。评价一个实时操作系统,通常从进程管理、任务调度、内存管理、任务通信、内存开销、任务切换时间和最大中断禁止时间等技术指标来衡量其优劣。
  • (1)任务调度算法
  • 任务调度算法在很大程度上决定了实时操作系统的实时性和多任务能力。任务调度算法可以有以下分类方式:从调度策略来讲,可分为优先级调度策略和时间片轮转调度策略;从调度方式上来讲,可分为可抢占式、不可抢占式以及选择克抢占式三种调皮方式:从时间片来看,可分为固定与可变时间片轮转两种方式。
  • (2)内存管理和最小内存开销**
  • 在内存管理方面,可分为实时模式和保护模式两种。
  • 在实时操作系统的设计过程中,最小内存开销是一个较重要的指标。这是因为在工业控制领域中,出于降低成本的考虑,某些工控机的内存配置一般不大。而在有限的空间内不仅要装载实时操作系统,还要装载用户程序。这是实时操作系统与通用操作系统设计的明显区别之一。
  • (3)确定性
  • 在实时操作系统中,在一定的条件下,系统调用运行的时间应该是可以预测的,但这并不意味着所有的系统调用都总是执行一个固定长度的时间,而不管系统的负载如何。但是,系统调用的最大执行时间可以确定。
  • (4)任务切换时间
  • 当由于某种原因一个任务退出运行时,实时操作系统要保存它的运行现场信息,插入相应队列,并依据一定的调度算法重新选择一个任务位之投入运行。这一过程所需时间称为任务切换时间。
  • (5)最大中断禁止时间
  • 当实时操作系统运行在内核态或执行某些系统调用时,是不会因为外部中断的到来而中断执行的。只有当实时操作系统重新回到用户态时才会响应外部中断请求。这一过程所需的最大时间就是最大中断禁止时间。
  • 上述几项指标中,最大中断禁止时间和任务切换时间是评价实时操作系统性能最重要的两个技术指标。

三、基于Linux的嵌入式操作系统

  • Linux是一个成熟且稳定的网络操作系统。将Linux植入嵌入式设备具有许多优点。首先Linux的代码是开放的,任何人都可以获取并修改,用来开发自己的产品;其次,Linux是可以定制的,它的内核最小只有大约134K,并且非常稳定;另外,它和多数UNIX系统兼容,应用程序的开发和移植非常容易;最后,由于Linux具有良好的可移植性,人们已成功使用Linux运行于数百种硬件平台上,并且出现了很多嵌入式Linux系统:ARMLinux、uClinux、ETLinux、ThinLinux、LOAF等。下面着重介绍应用最为广泛的ARMLinux和uClinux。

3.1 ARMLinux简介

  • 完整的嵌入式Linux解决方案应包括嵌入式Linux操作系统内核、运行环境、图形化界面和应用软件等。由于嵌入式设备的特殊要求,嵌入式Linux解决方案中的内核、环境、GUI等都于标准Linux由很大不同,其主要挑战是如何在有限的FLASH、ROM和内存中实现高质量的任务实时调度、图形化显示、网络通信等功能。

  • Linux内核具有自己的体系结构,其中最基本的3个子系统为:进程管理、内存管理和文件系统。图1给出了Linux内核体系结构。用户进程可直接通过系统调用或者函数库来访问内核资源。由于Linux内核具有这样的结构,所以修改内核时候,必须注意各个子系统之间的关系。

  • (1)裁剪内核

  • 嵌入式Linux内核一般由标准Linux内核裁剪而来。用户可以依据需求配置系统,裁剪掉不需要的服务功能、文件系统和设备驱动。

  • 通常情况下,对于标准Linux的修改主要是虚拟内存和调度程序部分的裁剪。嵌入式系统的实时任务通常要求CPU具有很强的突发处理能力,因此,需要屏蔽内存的虚拟内存管理机制。

  • 强实时需求的嵌入式系统可以通过修改任务调度模块来实现,即在内核与外设驱动程序中添加很多切换点。在切入点处,系统检测是否存在待处理的紧急中断,如果存在,则抢占内核的运行,及时处理中断。实现实时性任务的一个很好的方案为,在标准的Linux内核上添加一个实时内核,标准Linux内核作为一个任务运行于实时内核上。

  • 文件系统是嵌入式Linux操作系统的重要组成部分,通常情况下,嵌入式设备文件系统主要使用RamDisk技术和网络文件系统技术。

  • (2)精简运行环境

  • 通常,Linux的运行环境指用户运行任何应用的基础设施,主要包括函数库和基本命令集。

  • Linux应用运行所需要的函数库主要由C库、数学库、线程库、加密库、网络通信库等,其中最基本的是C语言的运行库glibc。glibc主要完成基本的输入/输出、内存访问、文件处理等功能,它需要大约1.2MB的存储空间,由于嵌入式内核通常很小,因此需要做一些精简工作,通常采用的方法有两种:第一种,使用静态链接的方法,而不适用运行库动态链接;第二种,对glibc库的函数进行精简,嵌入式系统中,很少有多个程序并行的情况,因此库函数的维护更新是不常见的,因此只需要保留一些基本功能即可。

  • 基本命令集也是运行用户的基础,主要包括初始化进程init、终端获取getty、shell和基本命令等。嵌入式系统的运行过程有时候与标准Linux不同,这就需要修改init、getty等。标准Linux命令集由于体积问题无法直接应用于嵌入式环境,目前小命令集解决方法主要包括集成方法和汇编方法,集成方法通过继承公共部分来减小命令集整体体积,采用C语言来实现,具有很好的平台移植性;汇编方法通过汇编程序来减小每个命令的体积,这样可使得体积非常小,但是平台移植性较差。

  • (3)嵌入式Linux下的GUI

  • 随着智能化技术的告诉发展,GUI在实时嵌入式系统中的地位越来越重要,比如PDA、智能手机、智能手表等,都需要一个漂亮、完整的图形用户界面。嵌入式GUI主要通过削减功能、降低性能来缩减体积和资源占用率。

3.2 uCLinux简介

  • uClinux是Linux操作系统的一种,是由Linux2.0内核发展而来的,它主要有三个基本部分组成:引导程序、uClinux内核(内存管理、进程管理和中断处理)和文件系统。由于uClinux操作系统内核定制具有高度灵活性,开发者可以很容易地对其进行配置,并且它的代码是公开的,开发人员只需了解内核原理就可以自由开发部分软件。
  • (1)uClinux的内核结构
  • uClinux内核结构于标准Linux基本相同,不同的只是对内存管理和进程管理进行了改写,以满足MMU处理器的需求。另外,由于大多数内核源代码都被重写,uClinux的内核比原来的Linux2.0的内核小得多,但保留了Linux操作系统的稳定性、优异的网络能力、优秀的文件系统支持等主要优点。
  • (2)uClinux的内存管理
  • uClinux与标准Linux的最大不同就在于内存管理,标准Linux是针对由MMU的处理器设计的,在这种处理器上,虚拟地支被送入MMU,MMU把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟-物理地址转换映射,支持不同任务之间的保护。
  • 然而,对于uClinux来说,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术。uClinux仍采用存储器的分页管理,系统在启动时对实际存储器进行分页,在加载应用程序时程序分页加载。由于没有MMU管理,所以实际上uClinux采用实存储器管理策略(Real Memeory Management)。uClinux系统是直接访问内存的,所以程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间,即没有独立的地址转换表。
  • uClinux的这种内存管理设计,从内存访问角度来看,增加了开发人员的自由性,开发人员在编程时可以访问任意地址空间,但是系统的安全性大幅下降。
  • (3)uClinux的多进程处理
  • uClinux没有MMU管理存储器,在通过fork调用生成子进程,实现多个进程时,需要实现数据保护。这就意味着uClinux系统fork调用完成后,要么子程序替代父进程直至紫禁城推出;要么调用exec执行一个新的进程,此时将产生的可执行文件的加载。当子进程执行exit或exec后,子进程使用wakeup把父进程唤醒,使父进程继续执行下去。
  • uClinux的这种多进程实现机制于它的内存管理模式紧密相关。uClinux没有MMU处理器的开发,所以它采用一种flat方式的内存管理模式,启动新的应用程序时系统必须为应用程序分配存储空间,并立刻把应用程序加载到内存。由于缺少MMU内存重映射机制,uClinux必须在可执行文件加载阶段对可执行文件进行reloc出路,以便程序执行时能够直接使用物理内存。
  • (4)uClinux实时性的解决方案
  • uClinux并没有针对实时性方面的设计,但是它可以使用TR-Linux的patch来增强uClinux的实时性。RT-Linux执行管理器把普通Linux的内核堪称一个任务运行,同时管理实时进程,并将非实时进程交给普通Linux内核处理。

四、嵌入式操作系统设计方法

4.1 嵌入式系统开发特点

  • (1)人机交互界面
  • 嵌入式体哦那个和通用计算机之间最大的区别就是人机交互界面。嵌入式系统通常不具备键盘、鼠标、显示器等设备。它所处理的任务可能是网络监控、传感器信号等内容,并按照实现设定号的流程完成任务。
  • (2)有限功能
  • 嵌入式系统的功能在设计时i经定利好,在开发完成投入使用之后就不再变化。系统将反复执行这些预订好的任务,而不像通用计算机那样随时可以运行新任务。当然,使用嵌入式操作系统的嵌入式系统可以刚u新的任务,删除旧的任务。但这样的变化对嵌入式系统而言是关键性变化.有4能会对整个系统行为产生影响。
  • (3)时间的关键性与稳定性
  • 嵌入式系统需要实时响应,所以具有严格的时序。同时,由于嵌入式系统工作环境非常恶劣,嵌入式系统要求非常可靠的稳定性。
  • 于此同时,嵌入式软件开发与传统软件开发具有很多共同点,但是嵌入式软件运行特定目标应用环境,只需要完成预定功能即可,因此嵌入式软件开发也具有自身特点如下:
  • (1)需要交叉开发环境
  • 交叉开发环境指实现编译、链接、调试应用程序代码的环境,它分散在由通信连接的宿主机和目标机环境中。
  • 宿主机(Host)是一台通用计算机,它通过串口或网口与目标机通信;目标机(Target)可以是嵌入式应用软件的实际运行环境,也可以是仿真系统。
  • 交叉软件开发工具包括交叉编辑器、交叉调试器和模拟软件等。交叉编译器允许应用程序开发者在宿主机上生成能在目标机运行的代码。交叉调试器和模拟调试软件用于完成宿主机和目标机应用程序代码的调试。
  • (2)引入任务设计方法
  • 嵌入式应用系统以任务为基本的执行单元。在系统设计阶段,用多个并发的任务代替通用软件的多个模块,并定义了应用软件间的接口。
  • (3)需要固化程序
  • 通用软件的开发在测试完成后可直接投入使用,其目标环境与开发环境差别不大。然而,嵌入式应用程序开发环境和运行目标环境差别很大,并且要求应用软件在目标环境下必须存储在非易失性存储器中,以便重启后可继续使用。所以应用软件在开发完成后,应生成固化版本,烧写到目标环境的FLASH中运行。

4.2 嵌入式系统开发流程

  • 嵌入式系统的设计与一般包括需求分析阶段、详细设计阶段、实现阶段和测试阶段等。
  • (1)需求分析阶段
  • 需求分析阶段是在项目开始时了解项目的情况,解决用户而要做什的问题。这一阶段主要包括分析用户的需求、初步确定硬件和软件、检查需求分析的结果、确定项目的约束条件、进行概要设计等几个方面。
  • (2)详细设计阶段
  • 详细设计阶段是通过需求分析的结果,设计出满足用户需求的嵌入式系统产品,这一阶段主要包括串查需求分析获得的资料、进行体系结构设计、对硬件和软件功能进行划分、设计硬件和软件、检查设计等过程。
  • (3)实现阶段
  • 实现阶段是根据详细设计的结果实现设计好的嵌入式系统产品,这一阶段主要包括选择开发平台和进行软件开发。嵌入式系统购开发平台由4部分组成:硬件平台、操作系统、编程语言和开发工具。嵌入式系统软件开发过程包括建立交叉开发环境、交叉编译和链接、重定位和T载、联机调试、在主机系统上验证软件、在目标系统上验证软件、优化代码。
  • (4)测试阶段
  • 嵌入式软件需要在很长时间内稳定运行,嵌入式软件一般不会频繁地由用户进行升级,嵌入式软件有时使用在关键性的应用产品中,嵌入式软件必须与嵌入式硬件一起对产品故障负责,真实世界中的事件一舱是异步而且不可预测的,这就使模拟测试既困难又不可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值