Last Modified: 2003.05.15 实时CORBA结构构架概述(by huihoo.org 于淼([email protected])提供) 翻译来源 : Real-Time CORBA Specification 1-5 1-6 Real-Time CORBA, v1.1 August 2002 实时CORBA定义了一套CORBA的扩展。CORBA核心的扩展被规划在实时CORBA扩展一章,实时CORBA Scheduling Service(时序调度服务)被规划在实时CORBA Scheduling Service这章。 Figure 1-1表示的是实时CORBA的关键实体部分的规划。这些关键实体的相关特性概述,见后面接下来的内容。 1.5.1实时CORBA模块实时CORBA规划出的所有的CORBA IDL,都包含在新的RTCORBA和RTPortableServer中(其中加入了新增的服务内容,作为IOP模块的补充)。1.5.2实时ORB实体CORBA定义了ORB接口的扩展。RTCORBA::RTORB定义了与实时CORBA配置有关的操作,并且可以管理其他实时CORBA IDL接口实例的创建和删除。1.5.3线程调度实时CORBA将线程作为一个可调度的实体。通常,一个线程代表单个节点中的一系列控制流。线程从属于活动(Activity),组成活动的线程协作起来调度活动。实时CORBA通过线程可操作的属性来规划接口。这些接口是线程池的产生器,同时也是实时CORBA Current接口。 注意-实时CORBA的线程概念与POSIX的线程概念是一致的。1.5.4实时CORBA优先级实时CORBA定义了一个统一的,平台无关的优先级策略,叫做实时CORBA优先级。实时CORBA引进这个概念来克服不同操作系统的优先级策略间的不兼容问题,并且允许实时CORBA应用程序的优先级调用在一系列不同优先级策略的节点中出于一致的被调用。 即使实时CORBA应用程序系统中所有的节点都用同一个本地线程优先策略或是都在用服务器声明的优先级模型,系统也要用CORBA优先级来传递优先性。1.5.5本地优先级和优先级映射实时CORBA为特定的操作系统定义了NativePriority类型,他代表了操作系统本地的优先策略。优先级的值要在实时CORBA优先策略被映射到本地优先级策略后,再确定,这样实时CORBA优先级策略就可以被应用在调度的实体上。少数情况下,翻转代表线程优先级的表示,映射到实时CORBA优先级(注:例如,本地1映射到CORBA9,本地2映射到CORBA8,等等),完全代替本地优先级表示也是必要的。反向映射是可能发生的,比如,当用到优先级的继承性时,或是希望引入一个本地线程到实时CORBA系统中时。1.5.6实时CORBA Current实时CORBA定义了实时CORBA Current接口,用以提供访问当前的CORBA线程优先级。1.5.7优先级模型实时CORBA的一个目标就是限制和尽量减少在CORBA调用中的优先级翻转现象。一个用来实现这个目标的机制就是从客户端向服务器传递活动(注:activity,可能包括网络连接,内存占用等等)的优先级,服务器端的ORB按照这个优先级来进行上行(up-call)调用(这对使用的任何一个优先级继承协议都有效)。然而,在一些情况下,设置应用程序的服务器端优先级是较为方便的,这样可以让服务器应用优先级去控制调用。因此,实时CORBA支持两种服务器处理从客户端发来带有优先级的请求的模型。 o客户端传播优先级模式Client Propagated Priority Model:这种模式中,服务器授权客户端来设置调用的优先级。调用的实时CORBA优先级被传递给服务器的ORB,服务器端的ORB再将实时CORBA映射到他的本地优先级策略,此时使用了PriorityMapping. o服务器声明优先级模式Server Declared Priority Model:这种模式下,服务器处理的请求的优先级在服务器端指定。这种模式在开始一个CORBA调用协同一个新的活动体产生时,用来资源分配是很有用。 1.5.8实时CORBA互斥访问和优先级继承Mutex接口为系统资源提供了一种协作访问的机制。实时CORBA定义了一个RTCORBA::Mutex本地接口,因此应用程序可以使用ORB实现的互斥访问对象mutex。一个符合实时CORBA的实现,必须提供一个实现Mutex的某种优先级的继承协议,这种协议可能包括在简单的优先级继承或者某种优先级最高级别协议中,但并不做硬性限制。对实时CORBA应用程序可用的互斥体必须有相同的优先级继承配置,就象ORB保护资源一样。 1.5.9线程池实时CORBA使用线程池抽象来管理ORB的服务期端的运行线程。线程池的属性只能在创建的时候设置。线程池提供如下的特性:o preallocation of threads预分配线程 - 这可以帮助减少优先级翻转,允许应用开发者确保在当前的并发调用系统中有足够的线程用来服务,并且,帮助增加可预期性,避免在调用的时候销毁和创建线程。 o partitioning of threads划分线称 - 拥有多个和不同的POA关联的线程池,允许一部分系统独立的使用别人的线程,可能是系统的一部分低优先级的线程。这也可以被重用来减少优先级翻转。 o bounding of thread usage线程试用限制范围 - 线程池可以设置POA可以使用的最大线程数。有些系统中,可能所有的线程都服务于同一个POA,线程池的关联划分被用来避免因为线程缺乏而造成的优先级翻转。 o buffering of additional requests缓存额外的请求 - 超过可以分配的线程数量的时候使用。 1.5.10优先级绑定连接要减少优先级翻转应该说一下无优先级传输协议,实时CORBA提供了客户端同服务器端进行多连接通讯的简便方式,每一个连接用来处理某个范围内的不同CORBA优先级的调用。这种方式的连接对应用程序是透明的,应用程序和平时一样使用一个单独的对象引用。1.5.11非多路连接实时CORBA允许客户端获得一个到服务器端的私有传输连接,这个连接不能被其他的客户-服务器的对象引用共享。1.5.12调用超时实时CORBA应用程序可以设置一个调用的超时时间,用来限制客户端应用程序等待请求回复的等待时间。这可以提供系统的可预期性。1.5.13客户端和服务器端协议配置实时CORBA提供一些接口,这可以选择和配置服务器端和客户端的ORB的协议。1.5.14实时CORBA配置定义了新的策略类型来配置下面的服务器端的实时CORBA特性:o 服务器端线程配置(通过线程池起作用) o 优先级模型(客户端传播和服务器声明) o 协议选择 o 协议配置 这些CORBA给出策略的应用程序点(ORB,POA,Curent),可能根据一些策略的说明进行应用。 实时CORBA定义了很多的策略,这些可以被应用在客户端CORBA应用程序中。这些策略允许: o 客户端和服务器的优先级绑定连接创建。 o 到服务器的非多路连接创建。 o 客户端协议选择和配置。 另外,实时CORBA使用一个已存在的CORBA策略,来提供请求超时控制。 1.5.15时序调度服务时序调度服务提供一个用来隐藏协调实时CORBA参数的抽象层;例如,CORBA优先级和实时POA策略。时序调度服务使用"名字"来代表活动体和对象。开发者通过运行时时序调度服务,来使用这些这些命名的活动体和对象。设计时的时序调度服务部分决定这些命名的实体怎样被协调整理,使用实时ORB定义的接口,所以,这些能够满足他们的实时需求。 |