使用Rhapsody软件框架和UML的实时系统开发
①信号事件。
信号事件(Signal Events)是最常用的事件,它代表对象之间传递的一种异步激励信号。在Rhapsody的框架中,它以OXFEvent表示,所有的用户
事件类都从OXFEvent继承。
信号事件有自己的参数(以其属性表示),并且和一个响应对象关联。事件管理器依据事件的响应对象判断事件的接收者。
②定时事件
定时事件(Timeout Events)在Rhapsody中以OXFTimeOut表示。它在OXF框架中的位置如图3所示。
事件管理器(活动对象)的schedTimeout方法负责定时事件的构造和调度。其执行过程如图4所示。
图3 定时事件及相关框架元素
事件管理器创建一个OXFTimeout对象并将其交由一个定时管理器管理。定时管理器可以管理多个定时事件,它运行于自己的独立线程内且聚合了一个定时器对象。定时器对象每卫固定的时间片会向定时管理器发通知信号,这时定时管理器检查它管理的定时事件集合中是否有定时事件到时,并将到时的定时事件添加到事件管理器(活动对象)的事件队列中(通过调用queueEvent),之后事件管理器再将这些定时事件投递给对应的响应对象。定时事件本身是被动的,它不包含定时器。
(4)状态机
Rhapsody支持UML状态机(State Machines),包括层次状态分解、带参事件、定时事件、伪状态、完成转移、入口和出口动作等功能。Rhapsody也包含了UML中定义的异步事件处理模型:带有状态图的类都是响应类,因此都与一个事件管理器(活动类)关联。事件管理器使用一个队列缓冲收到的事件,然后将事件投递给响应对象。响应对象按照状态图处理收到的事件。
OXF框架使用OXFEvent Consumer、OXFState、OXFLeafState等实现UML状态机的语义。限于篇幅,本文对此不作介绍。
(5)并发控制
Rhapsody的OXF框架使用如下两个类实现对实时系统资源的并发控制(Concurrency Control)。
*OXFOSMutex:包装了实时操作系统的互斥量对象,支持lock()和free()操作。互斥量用于管理独占性资源。
*OXFOSSemaphore:包装了实时操作系统的信号量对象,支持wait()和signal()操作。信号量用于管理共享资源。
UML类的方法可以声明为guarded。这时类被称为protected。protected类用于对独占性资源进行建模,在任何时刻只可有一份guarded方法执行,OXF框架以OXFProtected定义UML protected类,它充当所有用户protected类的父类。
(6)模型的调试及分析
Rhapsody允许用户单步执行状态图和顺序图以验证系统的功能和逻辑。系统执行过程中,对象的方法调用和状态改变都可以在模型图上以动画的形式表现出来。
除了功能和逻辑上的正确性之外,实时系统还对系统的响应时间有严格的要求。对实时系统响应时间的测试称为调度性分析,主要使用两种方法。
①经验法:给系统注入实时测试数据,然后测量系统的相应性能。
②理论分析:为系统模块设定足够的时间信息,然后用数学方法计算系统的整体相应性能。此方法通常需借助专用的软件工具完成。
图4 定时事件的调度和投递
Rhapsody支持基于经验的调度性分析。用户需要为对象方法设定估计的执行时间,并编写一个驱动脚本或状态图以模拟系