嵌入式实时操作系统的设计与开发(概述学习)

轮询系统(Polling Systems)

嵌入式系统发展初期,嵌入式软件的开发是基于汇编语言和C语言直接编程,不需要操作系统的支持,这样的系统也被称为裸板嵌入式系统。
用过8051单片机的人都知道,8051单片机的程序从开始到结束基本上都是顺序的,最后必定有一个类似于while的死循环。
这种方式必须不停地轮询条件来查询要做什么事,因此这样的嵌入式系统被称为轮询系统。

该方式虽然实现了宏观上执行多个事物的功能,但有以下几个明显的缺点:

  1. 轮询系统是一种顺序执行的系统,事务执行的顺序必须最开始就确定,缺乏动态性,减少了系统的灵活性,也增加系统设计的复杂度。
  2. 系统运行过程中无法接收和响应外部请求,无法处理紧急事情。
  3. 事物之间的耦合性太大,这主要是因为事务不可剥夺的原因,正因为不可剥夺,导致一个事物的任何错误都会使其它的任务长久等待或错误。

前后台系统(Foreground Background Systems)

针对轮询系统的不足,工程师们提出了前后台系统:后台系统与轮询系统一样是顺序执行的,只有一个main程序,程序功能的实现是依靠死循环来实现的;但前台引入了中断机制,能处理外来请求。

对于实时性要求比较高的事物,可以交给中断服务程序(ISR)进行处理,因为中断处理速度快,而对于非实时性的事物,可以交给后台顺序执行。

虽然前后台系统能对实时事物做出快速响应,增加了系统的动态性和灵活性,但存在如下不足:

  1. 事物不可剥夺,比如在某个事物执行的过程中,其它事物不可能执行,也就是说事物没有优先级,这与实际情况有很大出入,实际系统中事物是有优先级的,有些任务来了很紧急,必须先执行。
  2. 事务不可阻塞,也就是说事物没有暂停这一功能来阻塞自己,因为这种方式暂停当前的事物意味着整个系统都暂停了,同时事物必须返回,因为只有这样其它的事物才能有机会执行。

嵌入式操作系统

由于前后台系统并不能很好地解决多任务并发执行的问题,尤其当系统要处理的事物和要响应的外部中断比较多时,系统的维护性就很差。
更关键的是,随着嵌入式系统复杂性的增加,系统中需要管理的资源越来越多,如存储器、外设、网络协议栈、多任务、多处理器等。这时,仅用轮询系统或前后台系统实现的嵌入式系统很难满足用户对功能和性能的要求。

因此,工程师们设计了嵌入式操作系统,也解决事务的不可剥夺,不可阻塞性,实现多任务的并发执行。
由于嵌入式操作系统及其应用软件往往被嵌入到特定的控制设备或者仪器中,用于实时地响应并处理外部事件,所以嵌入式操作系统有时又被称为实时操作系统(Real-time Operating System,RTOS)。

简单内核

RTOS可简单认为是功能强大的主控程序,系统复位后首先执行。
它负责在硬件基础上为应用软件建立一个功能强大的运行环境,用户的应用程序都建立在RTOS之上。
在这个意义上,RTOS的作用是为用户提供一台等价的扩展计算机,它比底层硬件更容易编程。一个简单的RTOS需要至少实现如下功能:

  1. 任务调度。有了操作系统,多个任务就能并发执行。但是系统中的CPU资源有限(如单核环境下只有一个CPU核),于是,需要特定的调度策略来决定哪个任务先执行?哪个任务后执行?哪个任务执行多长时间?而要实现特定的调度策略,支持多任务并发执行,还必须有任务切换机制的支持。当前各种操作系统的任务切换本质上是为了解决任务的不可剥夺和不可抢占性,任务切换分为两种:
    a. 被动切换:也就是被剥夺,因为优先级高的任务来了,或者当前任务的执行时间完了。
    b. 主动切换:当前任务调用相关函数主动放弃CPU,这对应上面的第二点,阻塞自己,让别人去使用CPU。
  2. 任务协调机制。要实现特定调度策略,除了任务切换机制外,还需要任务协调机制的实现,即任务的互斥、同步、通信机制等。这个就是大家常说的互斥量、信号量、邮箱等。互斥量分为普通互斥量、优先级继承的互斥量(解决了优先级反转)、天花板协议的互斥量(解决了死锁问题)。
  3. 内存管理机制。系统中多个任务并发执行,所有任务的执行代码和所需数据都是存储在内存中的,各个任务及相关数据如何被分配到内存中?需要RTOS提供内存管理机制。对于PC等桌面应用,内存管理着重考虑的时如何有效利用内存空间,实时性不是特别重要;对于嵌入式实时应用,内存管理的重点是内存分配和释放时间的确定性,因此RTOS中,内存管理的动态性就少许多。

RTOS结构

整体结构
这是最早出现并一直使用至今的RTOS体系结构。
这种RTOS是一个整块,内部分为若干模块,模块之间直接相互调用,不分层次。形成网状调用模式。
其工作模式分为系统模式和用户模式两类:

  • 用户模式下系统空间受保护,并且有些操作受限制。
  • 系统模式下可访问任何空间,可执行任何操作。

从某种角度上讲,当一个拥有强大功能的RTOS内核被完整地应用在嵌入式环境下,就会给嵌入式软件的开发提供非常完整的平台,最常见的应用是嵌入式Linux和Window CE。
对于简单的小系统而言,整体结构有几乎最高的系统效率和实时性保障。

但是,若将这种结构用于比较复杂的嵌入式系统,需要大量昂贵的硬件资源;而由于内核的复杂性,使得系统的运行变得不可预测和不可靠。此外,随着嵌入式软件规模的扩大,由于模块间依赖严重,整体结构的RTOS在可剪裁性、可扩展性、可移植性、可重用性、可维护性等方面的缺陷越来越明显,严重制约了其应用。

层次结构
层次结构也是许多流行RTOS选择的体系结构。
这层结构中,每一层对其上层而言好像是一个虚拟计算机(Virtual Machine),下层为上层提供服务,上层使用下层提供的服务。
层与层之间定义良好的接口,上下层之间通过接口进行交互与通信,每层划分为一个或多个模块(又称为组件)。在实际应用中可根据需要配置个性化的RTOS。

内核位于RTOS的最底层,在某些简单的实时系统中,内核是唯一的层。
内核最基本的工作是任务切换,此外,还提供了任务管理、定时器管理、中断管理、资源管理、消息管理、队列管理、信号管理等功能。

微内核结构
微内核结构也称为客户机/服务器结构。
微内核只提供几种基本服务:任务调度、任务间通信、底层的网络通信和中断处理接口,以及实时时钟。
整个内核非常小(可能只有几十KB),内核任务在独立的地址空间运行,速度极快。

传统操作系统提供的其它服务,如存储管理、文件管理、中断管理、网络通信等,都以内核上的协作任务的形式出现。
每个协作任务可以看成是一个功能服务器。
用户应用任务执行中若需要得到某种服务,则透过内核向服务器任务发出申请,由服务器任务完成相应的处理并将结果返回给客户任务。

你可能感兴趣的:(嵌入式实时操作系统的设计与开发,学习,嵌入式实时操作系统)