嵌入式实时CORBA的研究与实现

时间:2022-10-04 03:10:42

嵌入式实时CORBA的研究与实现

摘要:实现符合minCORBA规范的嵌入式CORBA是为了支持多种资源有限的嵌入式操作系统。为建立这种嵌入式CORBA,本文主要就是基于minCORBA规范对嵌入式CORBA的整体结构、对象请求、可移植对象适配器以及IDL(Interface Definition Language)编译器各方面进行设计和实现。

关键词:CORBA;minimumCORBA;实时CORBA;平台依赖层

中图分类号:TP316 文献标识码:A文章编号:1009-3044(2007)04-11032-04

1引言

为满足日益增长的嵌入式系统之间以及嵌入式系统与普通桌面、服务器系统之间协同工作的需求,OMG(Object Management Group,对象管理组织) 针对嵌入式系统资源有限的特点,在保证应用的可移植性和ORB(Object Request Broker,对象请求)间的互操作性以及对IDL完全支持下,对完整的CORBA规范进行了裁减,并在2000年底推出了面向嵌入式系统的minimumCORBA规范,并在推出CORBA3.0规范时将其单独列出。

在国外,嵌入式CORBA产品也才问世不久。其中,针对电信领域的主要有:Visibroker For Tornado &pSoS及e*ORB;针对控制和军事领域的主要有ORBExpress 和HardPack。它们都符合minimumCORBA规范且性能优良,但其价格较昂贵。在国内,国防科技大学推出的StarBus,是国内第一个嵌入式CORBA产品。它主要通过扩展SUN IIOP而形成。但它并不完全符合mininumCORBA规范。因此,实现国产的完全符合minimumCORBA规范、能够支持多种嵌入式操作系统的嵌入式CORBA很有必要。

本文就基于minimumCORBA规范如何设计与实现能够支持多种嵌入式操作系统的嵌入式CORBA进行了研究,介绍了嵌入式CORBA整体框架搭建、对象请求的分层实现、POA(Portable Object Adapter,可移植对象适配器)主要类的实现以及IDL的优化,重点集中在保证整个系统实时性的平台依赖层的实现上面。

2 嵌入式CORBA的整体结构

由于嵌入式系统资源有限,minimumCORBA规范去掉了动态调用接口(DII)和动态框架接口(DSI),除保留RepisitoryIds和TypeCode两部分外,接口库的大部分被去掉。裁减了可移植对象适配器(POA)中的AdapterActivator、ServantManagerse及一些策略取值,动态Any值的管理、拦截器、COM与CORBA之间的互操作也被裁减。符合minimumCORBA规范的嵌入式CORBA,其整体结构如图1。

3 ORB的分层设计和实现策略

图1 嵌入式CORBA的整体结构

若将ORB作为一个整体来设计,会由于其和具体操作系统有较强的依赖关系,使其过于复杂,不易移植。因此,应采取分层设计的方法,将ORB分成ORB接口实现、ORB与平台相关、ORB通信三层。如图2:

图2 ORB分层示意图

3.1 ORB接口层

ORB接口层分ORB核心、客户端ORB和服务端ORB三部分来设计和实现。同时还应选择合适的并发模式。并发模式是指ORB如何处理通信和请求执行。

3.1.1 ORB核心

应设计的类及其功能如表1所示:

表1 ORB核心类表

3.1.2 客户端ORB

客户端ORB根据对象引用构造并传送请求。为使客户端的通信和其他操作并行进行,客户端ORB的并发模式为用一个单独的接收线程接收来自服务端的回应。应设计的类及其功能如表2所示:

表2 客户端ORB类表

其中,客户端ORB控件类继承ORB核心中的ORB控制类,客户端ORB实例类继承ORB核心中的ORB实例类。

3.1.3 服务端ORB

服务端ORB侦听并接收请求。实际应用中,服务端一般不会有太多请求,但通常要求服务端立即响应请求。服务端并发模式为用一个独立的线程来侦听连接,当连接到来后,对应每个请求生成一个新接收线程,当向客户端发送请求对应的应答时,生成的接收线程被销毁。这样每个请求就在服务端得到立即响应。其缺点是生成新线程要消耗一定的CPU和内存资源。在许多嵌入式操作系统中,没有线程的概念,只有任务。此时任务就和线程类似。应设计的类及其功能如表3所示:

表3 客户端ORB类表

其中,服务端ORB控件类继承于ORB核心中的ORB控制类,服务端ORB实例类继承于ORB核心中的ORB实例类。

3.2 ORB平台依赖层

CORBA规范是针对对象请求系统制定的规范。ORB直接置于操作系统之上,这使得ORB对具体的操作系统具有较强的依赖关系。为了使ORB具有很好的可移植性,在设计ORB时,将这些依赖关系抽象出来,作为平台依赖层来实现(如图3),这就去掉了ORB与具体操作系统的强耦合关系,使其具有很好的可移植性。针对不同的操作系统,只要对平台依赖层进行相应的修改,就可以很容易地将ORB移植到不同的操作系统之上。

图3 平台依赖层

平台依赖层的设计吸收了Java的线程管理风格,并采用了面向对象的设计思想,具有使用简单、修改容易的优点。作为通用的线程平台,平台依赖层首先应具有通用线程功能,同时平台依赖层还强调对于实时应用的支持,所以必须提供如下的实时功能:

(1)配置和管理应用程序的优先级类别;

(2)实时CORBA优先级到具体操作系统优先级的映射;

(3)高优先级线程抢占低优先级线程的执行;

(4)具有相同优先级的线程按照时间片轮转方式调度执行;

(5)能够避免优先级反转,通过实现一个带优先级继承的互斥锁来避免优先级反转带来的对实时可预测性的负面影响,这是保证实时线程可预测性的重要条件。

3.2.1 优先级映射

为了屏蔽操作系统的差异,实时CORBA将优先级区分为两种:CORBA优先级和本地优先级,CORBA优先级是独立于任何具体操作系统的优先级,本地优先级是具体操作系统的优先级,本地优先级的特性由具体的操作系统决定,本地优先级的差异主要体现在优先级级别个数上的不同、优先级高低与优先级值的关系不同(有的操作系统优先级值越小,级别越高)。

平台依赖层采取的映射法的基本思想如下:假设系统有N个本地优先级,在某一时刻,系统需要有M个CORBA优先级级别需要映射。如果MN,这在该时刻,从M个CORBA优先级中选择N个(选择优先级高的前N个),将它们映射到本地优先级,其他CORBA优先级在M-N中的线程则被暂停执行。当需要映射的CORBA优先级级别发生变化时,需要重新调整映射,所以这种方法是一种动态的映射方法。

优先级映射需要在平台依赖层中设置一个调度线程,它通常运行在系统的最高优先级,并监控系统状态,当状态发生改变时,按照映射的方法,重新调整系统的优先级映射。

优先级映射必须定时、周期地进行,以便及时排除退出的线程和不满足运行条件的线程。优先级映射除了定时执行外,线程设置优先级和有新线程创建和销毁时都要重新映射。

上一篇:用蓝牙笔记本共享宽带上网 下一篇:如何在网上隐藏自己的IP地址