(1.陕西工业职业技术学院 咸阳 712000)(2.中航工业西安飞行自动控制研究所 西安 710075)
安全关键系统的模型驱动开发过程中,怎样提高模型对实时嵌入式系统非功能需求的表达能力,怎样在早期设计过程中对系统进行分析与验证,怎样正确的生成代码一直是研究热点。体系结构分析与设计语言AADL 是在这种背景下产生的,能够描述ERTS的非功能属性,支持静态、动态结构的协同建模,支持软件、硬件的协同建模,并且可以针对特定领域进行扩展。而AADL 具有语法简单、功能强大、可扩展的优点,使基于AADL 的模型驱动过程得到了学术界和工业界的广泛研究和应用。
AADL 是嵌入式实时系统领域的体系结构设计与分析标准[1],而MDD 正在成为主流的开发过程。提出AADL与MDD 结合,能够使AADL 得到更广泛的使用。MDD 定义了三个层次的抽象:平台独立模型(platform independent model,简称PIM)、平台特定模型(platform specific model,简称PSM)以及应用代码。PIM 是模型驱动设计的初始抽象模型,是设计过程中最为重要的环节之一。因此,AADL建模方法的研究主要涉及AADL PIM 的构造。我们归纳为三类:
由于UML,SysML,xUML (executable UML)[2],HOOD 等描述语言已经广泛应用于需求的描述,因此结合这些描述语言的优势是必要的,从需求模型到AADL 模型的转换就成为重要的研究内容。Feiler 提出将xUML 和AADL 集成到统一的模型驱动开发过程,通过一些经验规则来完成需求模型到AADL 模型的转换[4],其中xUML 对UML 增加了更精确的执行语义。
因为AADL 能够同时描述系统的软、硬件体系结构,两者映射即可构成PSM 模型。同时,也可以采用AADL 单独建立系统的软件体系结构模型,作为AADL PIM 模型。
基于AADL UML Profile Annex,将AADL 原型(stereotype)标注在UML 模型上,作为AADL PIM 模型。如构件用UML 类图表示,并标注AADL 构件类型。
模型转换是MDD 的核心,同时也是AADL 模型验证与分析的重要基础。根据嵌入式实时系统的需求,给出了基于AADL 的模型驱动开发过程[6]:
1)获得AADL PIM 模型,如基于AADL UML Profile Annex,将AADL 原型(stereotype)标注在UML 模型上,作为AADL PIM;
2)利用功能转换规则,转换成AADL PSM;
3)利用非功能转换规则,将PSM 转换成AADL 分析模型,进行可调度、性能等分析;
4)基于正确的AADL 模型转成可执行代码。
自动代码生成主要研究从AADL 模型到可执行代码的生成规则、方法和工具。其优点在于减少由手动编程所带来的错误,保证系统质量属性以及降低系统开发时间[7]。目前基于AADL 模型可以生成的程序语言有Ada,C,C++,Java-RTSJ(real time specification for Java)等。同时针对分布式嵌入式实时系统,可以生成实时中间件及其上的分布式应用代码。本文将基于AADL 模型的代码生成归纳为以下几类[8]:
1)基于AADL 各类软件构件,生成对应的源代码。如线程构件到C 代码的转换。STOOD 工具支持AADL 到C,C++,Ada代码生成以及HTML,RTF,MIF 等文档的生成,还支持Ada,C 代码到AADL 描述的逆向工程。
2)生成符合不同领域标准的应用代码,例如生成符合汽车电子控制系统标准AutoSAR、铁路控制系统标准EN-50128 的C代码。
3)实时中间件及其上的分布式应用代码生成。Ocarina工具支持从AADL 模型生成运行在PolyORB,Poly-ORB-HI(PolyORB-high integrity)中间件之上的Ada 分布式应用代码,同时支持生成POSIX 和RTEMS 平台上的C代码,其中PolyORB是一个通用中间件,目标是为不同分布式应用提供统一的解决方案。
4)基于AADL 的设备构件,研究设备驱动代码的生成技术。
为了增强建模工具和验证工具Cheddar之间的互操作性,引入了AADL的四种经典通信设计模式:同步数据流模式、互斥模式、黑板模式和排队缓冲模式。下面对比较常用的几个经典通信设计模式[5]进行概述:
在同步数据流模式中,线程在dispatch时读取输入端口的数据、在complete时向输出端口写数据。此模式不需要共享的data构件,processor构件需要指定固定优先级调度策略(如Rate Monotonic等)。这种模式只能用静态调度策略,每个线程总是在固定的时间读数据、执行、写数据(即使在不需要的情况下),因此显得不灵活。但这种模式的分析却非常简单,可以进行处理器利用率(processor utilization factor)分析和最坏响应时间(WCRT)分析等。
互斥模式考虑了异步通信的情形,在此模式中,线程通过优先级继承协议(priority inheritance protocols)异步访问共享的data构件。这种模式可以进行死锁验证和WCRT等,但计算WCRT 前需要先计算等待时间,这是很重要的。
典型操作系统有很多同步设计模式,如信号量、读者写者、生产者消费者等等。对于编程语言也有专用的同步设计模式,如黑板设计模式。黑板设计模式是读者写者模式的实现,同一时刻只能有一个writer更新数据,但可以有多个readers读取数据。这种模式下,在任何时刻只有最后写入的消息可用。
排队缓冲模式使得在任何时刻,所有的写入数据都可用,AADL通过事件数据端口或共享data构件实现。假设buffer消息的处理协议是FIFO[9]。这种模式需要进行可调度性分析,此外,还需要分析内存使用情况,以确保当生产者速率大于消费者速率时不会丢失数据。
在对飞行管理系统AADL建模时,我们采用自主研制的高可靠实时操作系统FCOS作为其基础运行环境,该操作系统是一款比较成熟的专用操作系统,目前已经成功应用于我们研制的无人飞机、导弹系统中。
飞行管理系统(Flight Management System)是飞机重要的子系统,能够协助飞行员完成从起飞到着陆的各项任务,管理、监视和自动操纵飞机实现全航程的自动飞行。FMS集导航、制导、控制及座舱显示于一体,其主要功能可分为飞行规划、导航、性能优化、制导及信息显示。
飞行管理系统建模中主要使用周期任务来完成,而周期任务集τ的数学模型[3]由四元组τi={φi,Ti,Ci,Di}表示,其中φi为初始请求时间,Ci为任务执行时间,Di为相对死线,Ti为任务周期。本文中论述的FMS系统各任务φi=0,Di=Ti。因此任务模型将简化为τi={Ci,Di}。
从飞行管理系统功能划分可以规划飞行管理系统有导航传感器处理线程、综合导航线程、制导线程、飞行规划线程、飞机性能优化线程和控制显示线程等六个处理线程。其模型[12]为TNav=(15,50),TⅠnt=(40,100),TGui=(30,50),TFli=(30,200),TAir=(100,500),THan=(1,50),单位为ms。为了避免共享数据区的生产者-消费者问题,任务之间通信采用共享数据区,采用单工方式还是进行双工通信,则取决于共享数据区的数目。
该飞行管理系统六个线程的AADL 建模实现如下程序所示:
以上线程的运行处理器平台的AADL建模如下:
[1]http://www.ntsb.gov/aviationquery
[2]Gerard S,Feiler PH,Rolland JF,Filali M,Reiser MO,Delanote D,Berbers Y,Pautet L,Perseil I.UML &AADL 2007 Grand challenge.ACM SIGBED Review,2007,4(4):1-17.
[3]Fuentes L,Sánchez P.Towards executable aspect-oriented UML models.In Proceedings of the 10th Int’l Workshop on Aspect-Oriented Modeling.New York:ACM Press,2007:28-34.
[4]Delanote D,van Baelen S,Joosen W,Berbers Y.Using AADL in model driven development.In Proceedings of the Int’l Conf.on Engineering Complex Computer Systems. Washington:IEEE Computer Society Press,2007:1-10.
[5]Feiler PH,de Niz D,Raistrick C,Lewis BA.From PIMs to PSMs.In Proceedings of the 12th IEEE Int’l Conf.on Engineering Complex Computer Systems.Washington:IEEE Computer Society Press,2007:365-370.
[6]Svetinovic D.Architecture-Level requirements specification.In:Proceedings of the 2nd Int’l Software Requirements to Architectures Workshop,2003:14-19.
[7]SAE Aerospace.SAE AS5506:Architecture Analysis and Design Language(AADL).SAE Int'l,2004.
[8]Gogul Balakrishnan,Thomas Reps.Analyzing Memory Accesses in x86Executables.In Proceedings of CC'04,2004:5-23
[9]F.Singhoff,L.Nana,J.Legrand.Implementing an AADL performance analyzer.In Proceedings of the Conference on Data Systems in Aerospace,DASIA’06.2006.
[10]张莉,姜浩.领域本体半自动化建模工具的设计与实现[J].计算机与数字工程,2009(9).
[11]张斌,刘祥,张琦.舰船电子系统并行工程质量管理模型的研究与应用[J].计算机与数字工程,2010(2).
[12]F.Nemer,H.Cass′e.Papabench:A free real-time benchmark.In Workshop on Worst-Case Execution Time Analysis,WCET’06,2006:1-6.