嵌入式操作系统模块化设计方法分析
为了提高嵌入式操作系统本身以及配合底层软件模块化设计,本文对嵌入式操作系统采用模块化设计进行分析,讨论在应用模块化设计的方法与策略下,嵌入式操作系统设计最简框架和电信级应用框架。
1.前言
嵌入式操作系统的设计,都具有模块化设计的概念,或清晰或模糊。但以往的设计,往往存在以下几个问题: 没有提出标准化的接口; 模块自身设计和应用配置没有分离,移植性差; 没有具体的性能指标; 没有提出模块的最小聚集体,即最简框架; 由于没有强调模块间的松耦合,在后续的功能添加中,往往只考虑到性能、方便等因素,忽视了统一的、模块的设计。本文将在以上诸方面做有益的探索。
2.嵌入式操作系统概念
(1) 嵌入式操作系统嵌入式操作系统与一般通用操作系统是类似的,同样具有多任务、内存管理、时间管理、文件系统、设备管理、异常处理等诸方面。但嵌入式操作系统所面对环境却是多种多样的。一般来说,有以下两点:
资源有限,包括内存、设备。
常有实时响应的要求。
基于这两个方面,嵌入式操作系统必须采用微内核设计,内核只提供最简洁的多任务、内存管理、简单的时间管理、中断管理等功能模块,其余的功能均作为组件提供。常常没有用户和系统态的切换,中断处理做了相当的优化,以提供高的响应速度。
目前市场上嵌入式操作系统有VxWorks、PSOS、WinCE、嵌入式Linux、ucos、PamOS。其中比较成熟的、主流的商用嵌入式操作系统有VxWorks、PSOS、WinCE、PamOS。值得一提的是嵌入式Linux,由于其为公开源码的免费软件,而成为研究热点,相信不久就有比较成熟的产品问世。
(2)企业应用中的嵌入式操作系统设计
企业应用中的嵌入式操作系统是基于商用嵌入式操作系统的,实质上是商用嵌入式操作系统的封装和功能扩展,为上层应用屏蔽商用嵌入式操作系统和下层硬件体系结构的细节,对上层应用提供完全的运行平台,提供上层实体运行必须的调度机制、定时器和通信等方面的支持。企业应用中的嵌入式操作系统应实现基于单处理机的调度、内存管理、设备管理、定时器管理、文件系统、VOS和基于多处理机的通信等模块。
3.模块化设计方法
在嵌入式操作系统中的应用典型地,企业应用中的电信级嵌入式操作系统一般分为以下几个模块: 调度管理模块 内存管理模块 定时管理模块 文件系统模块 通信模块 VOS模块 设备管理模块完善一些的还有异常处理模块,还需要有一个初始化流程。
(1) 调度模块调度模块的设计
可以抽象为调度器和调度对象两个部分。这里的调度对象即指上层实体。 调度器包含如下内容:驱动方式,一般采用消息驱动,包含两个方面:调度器被驱动和调度器驱动(调度)调度对象;调度算法,一般采用先进先出(FIFO);提供初始化操作接口,初始化一个调度器。关键技术:快速的调度对象现场保存恢复和堆栈切换。需要针对不同的CPU,以汇编方式实现。 调度对象:一般称为一个进程实例,调度对象之间相互独立。包含如下内容:入口原型和模板;数据结构,一般包含状态和资源。资源有堆栈、消息队列和定时器等。故与定时管理模块、通信模块有数据上的耦合,而若要实现松耦合,则尽量减少资源在数据结构中的登记;操作,仅提供创建、删除、延时操作,并使这标准化。
(2) 内存管理模块内存管理模块的设计
以简单高效为出发点,包含以下部分: 自建内存分区机制经典的方式是从商用嵌入式操作系统中分配一大块内存,作为用户自建的分区。这个分区的内存按一定的规则(配置)划分成内存块,相同大小的内存块形成内存池。 自建内存分区内存操作接口提供创建分区、删除分区、申请内存和释放内存四个接口,并使这标准化。 可能包含MMU,但MMU应该是可配置的。 内存初始化接口和数据配置文件:MMU的初始化,用户自建静态分区的创建,均为可配置。内存管理模块的最小配置是自建内存分区机制和操作接口,亦即内存管理模块本身的设计。其性能指标方面的要求是比商用嵌入式操作系统申请和释放内存的速度要快。内存管理模块与企业嵌入式操作系统其它的模块不存在耦合。
(3) 定时管理模块
定时管理模块的设计以简单高效为出发点,包含以下部分: 定时器算法:包含两个算法:超时算法、搜索算法。算法必须高效。 定时器操作接口:提供四种类型:无参绝对、无参相对、带参绝对和带参相对定时器,接口标准化。有以下接口:创建、删除,并使这标准化。 初始化接口和数据配置文件。其中,定时器算法部分、初始化接口和数据配置文件是独立的,而由于定时器是作为进程实例(上层实体)的资源存在的,故定时器操作接口与调度模块有一定的数据结构耦合,移植时需要注意这一点。
(4)文件系统模块
文件系统模块必须依赖于商用嵌入式操作系统,包含如下: 提供基于商用操作系统之本地文件系统的OSS接口封装; 可能提供远程文件服务; 初始化接口和数据配置文件。其最小配置不包含远程文件服务。与企业嵌入式操作系统的其它模块没有耦合。
(5) 通信模块
通信模块的设计包含以下几个部分: CPU间通信收发器:提供可靠、不可靠机制。从效率方面考虑,其可靠机制不应依赖于底层,而应自身实现相对简单的可靠机制。 通信接口:提供标准化的同步、异步发送接口,不区分CPU间和CPU内,并使这标准化。 初始化接口和数据配置文件。其中,CPU间通信收发器是设计焦点,是一个独立的设计。通信接口与调度模块有一定的数据耦合。
(6) VOS模块
VOS模块的设计以简洁、可靠、高效为出发点,包含以下方面: 商用操作系统接口的薄封装 标准的、基本的数据结构操作,目前有消息队列、资源池。 VOS模块为企业嵌入式操作系统的其它模块提供服务。
(7)设备管理模块
设备管理模块是基于底层软件BSP的,包含以下方面: 统一的、标准的设备管理接口,提供基本的初始化、读、写、控制功能,并使之标准化。 基本设备管理机制与企业嵌入式操作系统其它模块没有耦合。
(8) 初始化配置流程
初始化配置流程仅需要做以下的工作:按一定的顺序调用各个模块的初始化接口。该流程需要根据企业嵌入式操作系统的实际模块集合而定,实质上体现了企业嵌入式操作系统的模块组合策略。
(9)异常处理模块
异常处理模块必须针对具体的商用操作系统、硬件来进行设计,暂无模块化设计的要求。
综合以上的各个模块的讨论,企业嵌入式操作系统中可以模块化的组成有:调度模块、内存管理模块、通信模块、定时管理模块、文件系统模块、设备管理模块。其中内存管理模块、文件系统模块是独立的模块,而调度模块、通信模块、定时管理模块有数据上的耦合,设备管理模块与底层软件BSP有数据上的耦合。借鉴商用嵌入式操作系统的微内核设计方法,企业嵌入式操作系统的最简框架是调度模块、内存管理模块、通信模块、定时管理模块、VOS模块、初始化配置流程,调试模块、通信模块、定时管理模块属于核心部分。模块化可以从最简框架开始。这个最简框架的每个模块必须保证高效,有适当的耦合度,并提供标准化接口。后续开发的模块以组件方式出现。