中文摘要:
文中对嵌入式操作系统封装的必要性作了较详细地论述,并以商用嵌入式操作系统
VxWorks 对通信类产品的封装为例对封装层的设计与实现进行了探讨。
英文摘要: In this thesis , the necessity of encapsulated layer in embedded operating system is disussed in detail. And its design
and implementation are explored by encapsulating communication products on commercial embedded system , Vxworks.
1 前言
所谓嵌入式操作系统的封装是指为了能缩短特定领域的
嵌入式系统软件的开发周期,增强嵌入式操作系统功能和实
现嵌入式程序的可移植性、可维护性和代码继承性而对所使
用的特定嵌入式操作系统的再“加工”。
嵌入式
操作系统封装层的目的之一是将具体的底层实现
细节进行屏蔽,给上层具体应用软件编程者提供统一规范的
调用接口。特别是对底层不同操作系统之间差异的屏蔽,大
大降低了应用软件开发人员的开发难度,也使开发出的应用
软件有较好的可移植性、可维护性和代码继承性。另外,针对
许多商用
实时操作系统核心部分源码的不开放性,封装层一
般会对进程调度、内存分配等核心功能进行重新定义和优化,
VOS 层位于嵌入式操作系统与应用程序之间,参与对许多对
象的管理,使用户能跟踪到一些比较靠近内核的东西,对原有
操作系统的适用性和效率都有所提高,而且可提供丰富的调
试手段和实时监控功能。提高了关键应用的效率从而使得程
序的可调试性增强,有利于早期发现故障,缩短项目的开发时
间。由于嵌入式实时
操作系统封装层的使用,使得一个项目
中很多基本功能都可以在这个封装层实现,而这个封装层是
一个经过测试的、可重用的模块,它基本上是比较可靠的。一
个软件的核心部分比较可靠,可以大大增加该软件的稳定性。
2. 1 VOS(Virtual Operating System) 层
与操作系统为了隔离具体的硬件环境而设计出HAL 层
(硬件抽象层) 类似,
VOS 层的功能就是为了隔离下层所使用
的不同的操作系统,从而给程序员提供一个与下层具体操作
系统无关的统一的接口。封装层其他部分或应用程序只需调
用
VOS 提供的标准功能接口,
VOS 层识别该接口调用后,直
接或间接地路由到下层具体OS 提供的相应接口调用。由于
应用程序对具体的嵌入式操作系统的依赖减少,从而便于上
层应用软件在不同操作系统之间移植。
VOS 层的设计主要考
虑给上层应用提供一个什么样的与具体操作系统和硬件平台
无关的调用接口集,这是
VOS 实现的基础。该调用接口集必
须建立在对所使用的各种操作系统提供的
API 以及对大量的
应用软件调用需求进行分析的基础上,同时要考虑到操作系
统的发展趋势以及应用软件程序员的认同程度,类POSIX
接口规范应是一个比较好的参考。
一般而言,嵌入式操作系统得提供消息队列、调度控制、
内存管理、时钟管理、I/ O 驱动等基本接口,对这些接口功能
的实现也可采取先实现一个最小的操作原语闭集,然后在实
际应用中再做相应的扩充。考虑到C 库是各种常见操作系
统都提供了的,因此
VOS 层实现主要考虑标准C 库以外的功
能接口的实现,如进程或线程、信号量、计时器等。
下面以嵌入式操作系统
VxWorks 与通用操作系统
Windows NT的互斥信号量为例利用组件和面向对象的思想通
过虚函数机制考虑
VOS 实现方法,其它的实现与此类似。
该方法的基本思想是通过抽象类的成员函数提供统一的
调用接口,通过对抽象类的继承对应到具体使用的操作系统,
借鉴组件实现方法与虚函数功能最终完成路由。
2. 5 文件系统
在封装层中,最好考虑屏蔽底层文件系统的差别。底层
操作系统的文件系统可以是rt11 (
VxWorks 提供的文件系统) ,
msdos 文件系统等,上层使用相同的访问接口。文件的存储介
质相对上层应用也应是透明的,可以使用硬盘,也可以使用闪
存(Flash) ,内存等。同时封装层的文件系统还可考虑提供嵌
入式的交叉管理功能,前台的文件管理Shell 可以与后台的文
件管理器相连,支持操作维护台对前台文件系统进行的维护
管理。另外很多嵌入嵌入式操作系统未提供文件访问的安全
机制,封装层可根据具体的应用领域实现部分功能。具体的
封装实现可参照Linux 文件系统的实现方法。
2. 6 系统监控
在封装层设计中系统监控主要考虑要完成对系统中与上
层应用无关的系统软硬件资源的监控,如CPU 使用情况,内
存使用率,任务堆栈使用率,各个上层应用任务的运行次数,
运行时间等等。同时还可考虑提供阈值告警,系列错误统计
及上报等功能。该层的实现可考虑用一专门的任务(进程/ 线
程) 来定期地收集统计相关信息。