技术领域
[0001] 本发明涉及AADL2TASM模型转换方法,尤其涉及将AADL模型转换为TASM模型的方法。
相关背景技术
[0002] 复杂嵌入式实时系统广泛应用于航空电子、航天器、汽车控制等领域,这些系统具有资源受限、实时响应、容错、专用硬件等特点,对实时性、可靠性等性质有较高的要求,由于计算精度、实时响应的要求,这类系统变得越来越复杂,如何设计与实现高质量的复杂嵌入式实时系统,并有效控制开发时间与成本,是大家共同关心的一个问题。
[0003] 模型驱动开发方法(Model Driven Development,简称MDD)能够在早期阶段对系统进行分析与验证,有助于保证系统的质量属性,并有效控制开发时间与成本。模型转换为模型驱动设计开发方法的核心,它是指将一种语言描述的模型转换成另外一种语言描述的模型。它被认为是基于模型驱动的复杂嵌入式实时系统设计与实现的基础。
[0004] AADL是针对复杂嵌入式实时系统而提出的一种体系结构分析与设计语言。它认为是基于模型驱动的复杂嵌入式实时系统设计与实现的基础。
[0005] 目前已有很多基于AADL的模型转换。法国Verimag实验室提出了AADL到BIP(Behavior Interaction Priority)的模型转换,,BIP是Verimag提出的实时系统建模语言,采用自动机的方式描述行为,并支持异构构件之间的组合;Pennsylvania大学提出AADL到时间进程代数ACSR的模型转换,。ACSR的优点是能够支持资源竞争的描述,使其能够支持更精确的可调度分析。但对线程层次的语义还不够完整,也不能支持模式变换、分区、BehaviorAnnex的转换;Verimag实验室将AADL转换到同步语言Lustre,其它的转换还包括AADL到IF模型的转换、AADL到Petri Net的转换、AADL到Fiacre的转换、AADL到UMLMarte的转换,等。
[0006] 下表是各基于AADL的模型转换的对比。
[0007] AADL模型转换对象比较
[0008]
[0009] 从该对比中,我们发现,各目标语言都有它们各自的优缺点,而且它们的转换集中在线程构件层次,由于TASM较好的可读性以及可以表示资源,我们选用TASM作为目标语言,重点针对AADL模型的模式变换构件以及调度器构件进行转换。
具体实施方式
[0084] 下面将结合附图对本发明作进一步的说明:
[0085] 本发明涉及到一个AADL2TASM模型转换工具,该模型转换工具对任意AADL模型,都能自动将其转换到相应的TASM模型。该模型转换工具的源语言AADL是一种针对复杂嵌入式实时系统的体系结构建模与分析语言,它能提供一种标准、精确的方式,设计与分析嵌入式实时系统的软、硬件体系结构及功能与非功能性质,采用单一模型支持多种分析的方式,将系统设计、分析、验证、自动代码生成等关键环节融合于统一框架之下。该模型转换工具的目标语言TASM是一种广泛应用于软、硬件系统设计的形式化描述语言,它支持嵌入式实时系统的功能行为、时间属性以及资源消耗的描述和验证。
[0086] 1)工具总体概述
[0087] 该模型转换工具,基于ATL模型转换技术,要完成该模型转换工具,定义源语言AADL与目标语言的元模型,元模型是以面向对象的思想描述一种语言的语法结构,从而使模型转换时,能根据其相应的语法元素,进行相对应的转换。针对模型转换的特点,使用了KM3重新描述了AADL和TASM的元模型(语法结构)。
[0088] 2)AADL元模型
[0089] AADL语言是一种语法结构比较复杂,模块化的实时系统体系结构设计语言。根据模型转换工具特性,简化了AADL的语法图,并使用KM3对其进行了描述,如图2是AADL元模型的框架图。
[0090] ●AadlSpec:AADL模型的根节点,包括25个属性,其中包括AADL模型的名字等基本信息以及该模型中所有构件的类型(type)和实现(implementation);
[0091] ●SystemType:主要描述系统的基本信息,比如系统名称,系统中包括哪些子构件等;
[0092] ●SystemImpl:SystemImpl与SystemType等级相同,都是AadlSpec的分支节点,该节点是对之前声明的SystemType进行实例化。该节点声明该系统实例中包含的子构件和连接,所包含的子构件可包含硬件构件和/或软件构件,硬件构件包括用户定义的设备和处理器,软件构件主要是线程,所声明的连接是端口到端口的数据通信,此外还定义了处理器与线程的绑定关系,规定了线程在系统运行时对应的处理器;
[0093] ●ProcessorType:AadlSpec下的一个分支节点,主要描述声明的处理器的基本信息;
[0094] ●ProcessorImpl:ProcessorImpl与ProcessorType等级相同,都是直属于AadlSpec的分支节点,ProcessorImpl是对ProcessorType的实例化;
[0095] ●ProcessType:AadlSpec下的一个分支节点,主要描述声明的进程的基本信息,比如进程名称,数据端口等;
[0096] ●ProcessImpl:ProcessImpl与ProcessType等级相同,都是直属于AadlSpec的分支节点,ProcessImpl是对ProcessType的实例化,定义该线程实例中包含的线程,线程组以及数据端口间的通信关系;
[0097] ●ThreadType:AadlSpec下的一个分支节点,定义一个线程的属性,包括该线程的调度协议,如果是周期性线程,还会包括计算执行时间、时间限和周期表,还会定义线程的输入输出端口;
[0098] ●ThreadImpl:ThreadImpl与ThreadType等级相同,都是直属于AadlSpec的分支节点,ThreadImpl是对ThreadType的实例化。
[0099] 以上各节点还下辖很多节点,并且很多节点有多个父节点,因此在使用KM3语言对AADL元模型进行描述时,通过使用抽象类和多重引用的方法实现代码重用,同时体现了AADL语言的层级关系和模块化。
[0100] 3)TASM元模型
[0101] TASM用比较精简的概念来描述实时系统,TASM中状态机主状态机(Main Machine)、功能状态机(Function Machine)和子状态机(Sub Machine)是描述实时系统的主体,其元模型的结构图如图3所示。
[0102] 下面将模块化地介绍TASM元模型。
[0103] ●tasm:tasm是TASM模型的根节点,可以从其属性中得到该TASM模型的版本信息;
[0104] ●Project:tasm下辖的节点,包含TASM模型名称、模型描述、模型ID号等信息;
[0105] ●Environment:tasm下辖的节点,是保存TASM模型的类型、资源、管道、变量等信息的部分,下面分别介绍其下辖的节点:
[0106] types:用户自定义的类型;
[0107] rsrcs:用户定义的资源,比如内存,处理器;
[0108] chans:用户定义的管道;
[0109] vars:用户声明的变量,并且初始化;
[0110] ●Systems:tasm下辖的节点,保存TASM模型主状态机(Main Machine)和变量的初始化信息;
[0111] ●Mainmachines:tasm下辖的节点,是Main Machine的集合,下辖一定数量的Main Machine节点Machineasm,下面介绍Machineasm下的各主要节点:
[0112] cvars:Main Machine有权限修改的变量;
[0113] mvars:Main Machine有权限读取的变量;
[0114] ivars:Main Machine的内部变量;
[0115] cons:Main Machine的构造公式;
[0116] rls:Main Machine的规则集;
[0117] ●Submachines:tasm下辖的节点,是子状态机(Sub Machine)的集合,下辖一定数量的Sub Machine节点Submachines,下面介绍Submachines下的各主要节点:
[0118] cvars:Sub Machine有权限修改的变量;
[0119] mvars:Sub Machine有权限读取的变量;
[0120] ivars:Sub Machine的内部变量;
[0121] cons:Sub Machine的构造公式;
[0122] rls:Sub Machine的规则集;
[0123] ●Functionmachines:tasm下辖的节点,是功能状态机(Function Machine)的集合,下辖一定数量的Function Machine节点Functionmachines,下面介绍Functionmachines下的各主要节点:
[0124] cvars:Function Machine有权限修改的变量;
[0125] mvars:Function Machine有权限读取的变量;
[0126] ivars:Function Machine的内部变量;
[0127] cons:Function Machine的构造公式;
[0128] rls:Function Machine的规则集。
[0129] 三种状态机均具有的重要节点——规则集rls,是TASM模型可以在模拟中实现各种状态变换,数据通信以及资源消耗的核心部分。可以说,让TASM模型运转起来的动力就来自规则集结点。规则集rls节点下辖若干规则节点rl,下面介绍rl下的主要节点:
[0130] rtime:执行该规则所消耗的时间,可以是固定值、区间值或者是关键字next;
[0131] rrscs:执行该规则时所消耗或占用的各种资源;
[0132] guard:规则的If条件语句;
[0133] effect:满足规则If条件语句时执行的动作。
[0134] 4)模型转换方法
[0135] 研究AADL中各构建元素到TASM的模型转换方法,其中包括线程构件的转换方法,分发器构件的转换方法,模式变换的转换方法,调度器构件的转换方法。
[0136] 4.1)线程构件的转换方法:
[0137] 将一个线程表示成一个状态机,如图4所示,该状态机有五个状态,包括Halted,waiting-mode,waiting-dispatch,waiting-execution,completed等,状态变迁过程中的动作包括:线程初始化,(模式)激活线程、分发线程、线程执行,线程结束执行,退出模式等。
[0138] 线程构件表示一个二进制镜像中顺序执行的指令序列,是系统中主要的执行和调度单元。线程默认开始时是出于halted状态,在执行之前,需要将其二进制镜像文件加载到进程,加载成功才能处于等待分发状态(Waiting-Dispatch);如果系统存在不同模式,只有处于当前模式的线程才能被分发,否则线程处于等待模式状态(Waiting Mode);处于等待分发状态的线程可以被周期性时钟或事件来分发,包括周期、非周期、偶发等多种分发协议;分发后的线程需要等待调度执行(Waiting Execution);得到处理器的线程进入执行状态,执行完后,线程将其计算所得到的数据写到输出端口,进入下一次分发状态。
[0139] 该状态机,我们用七条TASM规则来进行描述,分别是:Initialization规则;Activation规则;Dispatch规则;waiting_execution规则;execution规则;write_data规则;waiting_next_execution规则:
[0140] Initialization规则:用来处理系统加载进程,表示线程初始化的状态变迁;
[0141] Acitvation规则:用来处理线程和模式变换的同步关系,处于当前模式的线程为激活Active状态,否则处于非激活Inactive状态;
[0142] Dispatch规则:用来处理线程等待分发的情况;
[0143] Waiting Execution规则:用来处理线程等待调度的情况;
[0144] Execution规则:此规则的执行时间为最长执行时间(WCET),所述WCET为AADL模型中线程构件的一个属性,其值表示线程一个周期内最长执行时间,该规则抽象表示线程执行;
[0145] Write Dtate规则:线程执行完成之后,直接将输出端口的数据写入接收线程的的输入端口当中;
[0146] Waiting Next Event规则:用于处理当条件不满足而需要等待的情况,如:进程加载失败、不处于当前模式、没有被分发、没有得到处理器资源等,该规则使用了TASM非常重要的等待机制t:=next。
[0147] 4.2)分发器的转换方法:
[0148] 在AADL中,分发器(Dispatcher)并不是一个独立构件,而是线程构件的一个执行模型属性,支持周期、非周期、偶发、实时、混成、后台六种分发协议。主要转换前三种的分发情况。分发器也是通过一个状态机来表示其执行过程的,该状态机如图5所示,有三个状态,分别是undispatched,dispatched,unactivation。在undispatch状态,表示使线程分发,等到一定的条件(周期性线程:处于undispatched的时间大于其周期;偶发线程:分发事件发生;非周期性线程:时间大于周期或分发时间发生)满足,则进入dispatched状态,如果线程还处于当前模式,则分发相应的线程,又进入到undispatched状态;如果线程不处于当前模式了,则进入unactivation状态,一直等着重新进入当前模式。
[0149] 可以用4条TASM规则表示该状态机,分别是dispatch规则,require规则,mode_change规则,waiting规则:
[0150] dispatch规则主要是在分发器处于可被分发(dispatched)状态时,分发线程,并该自动机重新进入不可被分发(undispatched)状态;
[0151] required规则主要用于分发器在不可被分发(undispatched)状态时,重新等待分发条件的满足;
[0152] mode_change规则主要用于当分发器处于dispatched状态时,判断是否已离开当前状态,如果是,进入到非当前模式(unactivation)状态,注意到从unactivation的状态到dispatched状态变迁在模式自动机里面有表示;
[0153] waiting规则主要用于与其它状态机同步。
[0154] 4.3)模式变换的转换方法:
[0155] 模式变换请求到来后,从旧模式变换到新模式,我们认为需要经历3个过程,分别是模式变换准备期,模式变换过程中,新模式。其过程如图6所示
[0156] 从模式变换请求到来,并不马上进行模式变换,而是进入到一个模式变换的准备期(Waiting SOM Transition),等待一个同步点。在该同步点,所有旧模式下的关键线程都已经完成其执行,处于等待分发状态,这样,这些线程间通信的确定性得到保证。因此,这个同步点一般是旧模式下周期性关键线程的超周期。
[0157] 结束模式变换的准备期,系统进入到模式变换过程状态,系统正式开始模式变换:添加新模式下且不属于旧模式的线程;删除旧模式下且不属于新模式的线程和连接;同时属于两个模式的关键线程继续执行;同时属于两个模式的连接可以用于通信;一些非周期或偶发线程,它们属于旧模式并且不属于新模式,在准备期之后才分发,所以需要在模式变换期间终止这类线程的执行,称这类线程为Zombie线程;完成这些动作,系统才正式进入新模式。
[0158] 对于每一个模式变换,我们用4条TASM规则表示,分别是hyperperiod规则,oldmode_has_mcr规则,oldmode_hasnot_mcr规则,inprogress规则:
[0159] hyperperiod规则:表示旧模式的超周期,因此它的执行时间为旧模式下所有关键线程周期的最小公倍数;
[0160] oldmode_has_mcr规则:在同步点检测到有模式变换请求,并将系统状态变到模式变换过程中,使旧模式下的线程的状态设为不处于当前模式状态,新模式下的线程的状态设为处于当前模式状态;
[0161] oldmode_hasnot_mcr规则:在同步点检测到没有模式变换请求到来,重新开始新一次旧模式的超周期;
[0162] inprogress规则:表示从旧模式到新模式的模式变换过程,它的执行时间为模式变换超周期,既新模式下关键线程的周期与删除僵尸线程的时间之和。
[0163] 4.4)调度器的转换方法:
[0164] 使用令牌算法的思想,将TASM这样的状态机语言来表示调度器的行为。其基本思想如图7所示。
[0165] 对于每一个处理器,都有一个令牌,令牌在绑定到该处理器上得线程间传递,从优先级最高的线程依次往优先级最低的线程传递。一个线程拿到令牌,首先判定处理器是否空闲,如果不空闲,则等待处理器空闲,如果处理器空闲了,就判断该线程能否被执行,比如要判断线程是否处于等待执行状态,线程的数据依赖是否得到满足,如果线程能被判定能执行,处理器就分配给该线程,并将令牌重新传给优先级最高的线程(因为高优先级的线程可能仍需执行),如果处理器不能被执行,就需要判断比它优先级的线程是否有能被执行的,如果有,就将令牌传递下去,如果没有,令牌就停止传递,直到有线程能被执行。
[0166] 对于除优先级最低的每一个线程,调度器状态机都需要用两条规则进行表示,分别为schedule规则和pass规则。而优先级最低的线程只有schedule规则,没有pass规则。
[0167] schedule规则:表示线程能被执行,将处理器分发给该线程;
[0168] pass规则:表示线程不能马上执行,需要将令牌分发下去。