《嵌入式软件开发环境中操作系统抽象层的设计与实现.pdf》由会员分享,可在线阅读,更多相关《嵌入式软件开发环境中操作系统抽象层的设计与实现.pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 23 卷 第 4 期成都大学学报(自然科学版)VoI.23 No.42004 年 12 月JournaI of Chengdu University(NaturaI Science)Dec.2004收稿日期:2003-11-03作者简介:何先波(1971-),男,讲师,博士,主要从事嵌入式软件开发环境的研究.文章编号:1004-5422(2004)04-0018-05嵌入式软件开发环境中操作系统抽象层的设计与实现何先波(西华师范大学 计算机科学系,南充 637002)摘 要:论述了嵌入式软件开发环境中操作系统抽象层存在的必要性,并对其如何实现进行了探索,特别是对利用面向对象的思想实现抽象层
2、方法给出了源代码级的阐述.关键词:嵌入式操作系统;操作系统抽象层;虚函数;嵌入式软件开发环境中图分类号:TP311.51 文献标识码:AThe Design and Implementation of Operating System AbstractLayer in Embedded Software Development EnvironmentHE Xianbo(Department of Computer Science,West NormaI University,Nangchong 637002,China)Abstract:In this paper,the necessity
3、of operating system abstract Iayer is discussed in Embedded SoftwaredeveIopment environment,and its impIementation metheds is expIored especiaIIy.The source code IeveI de-scription of how to impIement operating system abstract Iayer in making use of object oriented ideoIogy is given.Key words:embedd
4、ed operating system;operating system abstact Iayer;virtuaI function;embedded soft-ware deveIopment environmentCLC number:TP311.51 Document:A1 嵌入式软件开发环境中操作系统抽象层存在的必要性嵌入式软件开发环境主要由两部分组成:嵌入式操作系统和嵌入式软件开发工具.嵌入式系统具有的硬件环境多样性、硬软件紧密藕合性以及严格的实时性等特点决定了所使用的操作系统必然是多种多样的.目前,流行的商用嵌入式操作系统有 Windriver 公司的 VxWorks,ISI 公
5、司的 pSOS,ONX 系统软件公司的 ONX,ATI 公司的 nucIeus,微软公司的 Windows CE,SUN 公司的 Java OS,郎讯科技公司的 Inferno,国内的 DeItaOS 等等;开放源码的嵌入式操作系统有各种嵌入式 LINUX、eCos、!C/OS-II 等等.这些嵌入式操作系统各有特点,不同的嵌入式应用出于成本和性能的考虑选择也不一样,有的嵌入式产品开发者干脆自己编写适合特定应用的操作系统,这常造成即使是同一个公司内部不同的产品系统也可能使用不同的操作系统.由于不同操作系统的功能和调用接口往往不一样,这一方面造成嵌入式应用程序移植成本过高,另一方面程序员往往需要
6、熟悉许多不同的开发环境,从而大大增加了嵌入式软件的开发成本.这使得能屏蔽下层不同操作系统,并提供统一调用接口的操作系统抽象层 VOS 层(VirtuaI OperatingSystem)成为必要.2 嵌入式操作系统抽象层的功能与操作系统为隔离具体的硬件环境而设计出 HAL 层(硬件抽象层)类似,VOS 层的功能就是为了隔离下层所使用的不同的操作系统,从而给程序员提供一个与下层具体操作系统无关且统一的接口.VOS层位于嵌入式操作系统与应用程序之间,参与对许多对象的管理,使用户能跟踪到一些比较靠近内核的东西,对原有操作系统的适用性和效率都有所提高,而且可提供丰富的调试手段和实时监控功能.由于应用程
7、序对具体的嵌入式操作系统的依赖减少,从而便于上层应用软件在不同操作系统之间移植.在嵌入式应用软件的开发中,为了方便进一步开发,往往在具体使用的操作系统上添加一封装层,严格地说,VOS 也属于这一层.这样,在嵌入式操作系统开发环境中,VOS 层的位置如图 l 所示(箭头表示调用关系).应用层 1关于调度管理、内存管理、系统控制、设备管理等的封装层 1VOS 层 1各种商用的或开放源码的嵌入式操作系统BSP(板级支持包)硬件层图 l VOS 层位置示意图3 VOS 层的设计与实现探讨VOS 层的设计与实现首先得考虑给上层应用提供一个什么样的与具体平台无关的调用接口集,这也是 VOS 实现的基础.一
8、般而言,嵌入式操作系统需提供消息队列、调度控制、内存管理、时钟管理、I/O 驱动等基本接口.具体的实现上,考虑到操作系统一般都有自己的 C 库,因此,VOS 层实现主要考虑标准 C库以外的功能接口的实现.对这些接口功能的实现可采取先实现一个最小的操作原语闭集,然后在实际应用中再做相应的扩充.封装层或应用程序只需调用 VOS 提供的标准功能接口,VOS 识别该接口调用后,直接或间接地路由到下层具体操作系统提供的相应接口调用.如果某项功能调用不能通过该操作系统实现,给出不能实现的警告信息.由于标准 C 库函数一般的操作系统都提供实现,VOS 主要考虑进程、线程、信号量、计时器等的屏蔽.下面介绍两种
9、 VOS 实现方法,为了便于理解,以嵌入式操作系统 VxWorkS 与通用操作系统 Win-GoWSNT 的互斥信号量为例来考虑 VOS 的实现方法,其他的实现与此类似.3.l 利用组件和面向对象的思想通过虚函数机制实现该方法的基本思想是通过抽象类的成员函数提供统一的调用接口,通过对抽象类的继承对应到具体使用的操作系统,借鉴组件实现方法与虚函数功能最终完成路由.VOS 层提供的互斥信号量调用就是 VOS_mutex 类的成员函数:claSS VOS_mutex public:virtual VOS_mutex();9l第 4 期何先波:嵌入式软件开发环境中操作系统抽象层的设计与实现 virtu
10、ai void iock()=0;virtuai void free()=0;参照组件技术的实现方法,用一类厂类来提供 VOS 层实例化各接口类的方法:ciass VOS_factory pubiic:virtuai thread*createVOS_thread(.)=0;virtuai VOS_Mutex*createVOS_Mutex()=0;virtuai VOS_Semaphore*createVOS_Semaphore(.)=0;VOS_thread,VOS_Mutex,VOS_Semaphore 等分别为线程、互斥信号量、同步信号量对应的 VOS 层接口抽象类.通过对这些抽象类的
11、继承与各 OS 的实现相联系.3.l.l 如果下层操作系统为 VxWorks,其对应的互斥信号量类 VxMutex 和类厂类 VxOSfactory 实现如下:ciass VxMeutex:pubiic VOS_Mutex private:SEM_Id hMutex;pubiic:void iock()semtake(hMutex,WAIt_fOREVER);void free()semgive(hMutex);VxMutex()hMutex=semMcreate(SEM_O_fIfO);VxMutex()semdeiete(hMutex);void*getandie()return(void
12、*)hMutex;semtake、semgive、semMcreate、semdeiete 为 VxWorks 提供的产生互斥信号量的接口调用.ciass VxOSfactory:pubiic VOS_factorypubiic:virtuai VOS_Mutex*createVOS_Mutex()return(VOS_Mutex*)new VxMutex();/对 VxWorks 的直接接口调用.;3.l.2 如果下层 OS 为 WindowsNt,相应的有关实现类描述如下:02成都大学学报(自然科学版)第 23 卷ciass NTmuteX:pubiic VOS_muteX private
13、:HANDLE hmuteX;pubiic:void iock()WaitforSingieObject(hmuteX,INfINITE);void free()ReieasemuteX(hmuteX);NTmuteX()hmuteX=CreatemuteX(NULL,fALSE,NULL);NTmuteX()CioseHandie(hmuteX);HANDLE getHandie()return hmuteX;WaitforSingieObject、ReieasemuteX、CreatemuteX、CioseHandie 皆为为 NT 提供的系统调用.ciass NTOSfactory:pu
14、biic VOS_factory pubiic:virtuai VOS_muteX*createVOS_muteX()return(VOS_mute*)new NTmuteX();有了这些实现后,可用一全局函数,如 theOSfactory()来定位到系统当前使用的具体操作系统,该函数的说明如下:VOS_factory*theOSfactory()该函数的功能就是用于实例化对应操作系统的类厂类.如果当前使用的操作系统是 VXWorks,该函数的实现如下:static VXOSfactory*VXOsf=NULL;VOS_factory*theOSfactory()if(VXOsfNULL)VX
15、Osf=new VXOSfactory;return VXOsf;如果当前使用的操作系统是 WindowsNT,其实现则为:static NTOSfactory*ntOsf=NULL;VOS_factory*theOSfactory()if(ntOsfNULL)ntOsf=new NTOSfactory;return ntOsf;12第 4 期何先波:嵌入式软件开发环境中操作系统抽象层的设计与实现如果当前使用的操作系统为 VXWorks,则只需用上述方法实现函数 theOSfactory 便可通过该函数进行相应的接口调用.比如,对要产生一互斥信号量调用路由如下:VOS_muteX muteX=
16、theOSfactory()-createVOS_muteX().3.2 使用宏方式实现还是以互斥信号量为例.假定 VOS 层提供的互斥信号量的接口如下:VOS_muteX_destroy(),VOS_muteX_create(),VOS_muteX_iock(),VOS_muteX_free().以 VOS_SmuteX_iock()为例,宏方式实现方法简单描述如下:VOS_resuit VOS_SmuteX_iock(VOS_muteX*const me)ifdef NT WindowsNT 对应的代码实现eiseifdef VXWorks VXWorks 对应的代码实现其涉及的相关类型可
17、通过类型重新定义实现.如对抽象型 VOS_muteX,NT 可通过如下方式实现:typedef struct NTmuteX HANDLE hmuteX;NTmuteX;typedef NTmuteX VOS_muteX;对 VXWorks 而言,转换方法为:typedef struct VXmuteX SEm_ID hmuteX:VXmuteX;typedef VXmuteX VOS_muteX;3.3 两种方法的比较第一种方法采用了较新的程序设计思想,可扩充性强,但往往需要面向对象的程序设计语言支持,否则实现上较麻烦.另外,从时间性能上考虑,宏方式实现也具有一定的优势,这一点对于有些嵌入式
18、系统而言往往是至关重要的,这也是从实现上不考虑类似 JAVA 虚拟机方法的重要原因.参考文献:1 汤子瀛,哲凤屏,汤小丹.计算机操作系统 m.西安:西安电子科技大学出版社,19962 Wayne woif,et ai.嵌入式计算系统设计原理 m.孙玉芳译.北京:机械工业出版社,19983 Andrew S T,Aibert S W.操作系统:设计与实现 m.王 鹏等译.北京:电子工业出版社,19984 Jean J L.嵌入式系统构件 m.袁勤勇等译.北京:机械工业出版社,200222成都大学学报(自然科学版)第 23 卷嵌入式软件开发环境中操作系统抽象层的设计与实现嵌入式软件开发环境中操作系统抽象层的设计与实现作者:何先波作者单位:西华师范大学,计算机科学系,南充,637002刊名:成都大学学报(自然科学版)英文刊名:JOURNAL OF CHENGDU UNIVERSITY(NATURAL SCIENCE)年,卷(期):2004,23(4)参考文献(4条)参考文献(4条)1.JEAN J L;袁勤勇 嵌入式系统构件 20022.Andrew S T;Albert S W;王鹏 操作系统:设计与实现 19983.Wayne Wolf;孙玉芳 嵌入式计算系统设计原理 19984.汤子瀛;哲凤屏;汤小丹 计算机操作系统 1996 本文链接:http:/