《rh嵌入式软件系统架构设计与构件化分析方法.doc》由会员分享,可在线阅读,更多相关《rh嵌入式软件系统架构设计与构件化分析方法.doc(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流rh嵌入式软件系统架构设计与构件化分析方法.精品文档.嵌入式软件系统架构设计与构件化分析方法一、摘要:5二、SAE AADL 概述52.1.构件抽象52.2.构架分析6三、AADL语言抽象83.1.构件83.2.构件类型93.3.包、属性集和附录10四、AADL系统模型和规范104.1.AADL文本规范114.2.图形化表示134.3.例子详述134.4.类型声明164.5.实现声明174.6.包声明194.7.属性集声明194.8.附录库声明194.9.命名空间204.10.部分规范204.11.扩展、重定义和部分规范20五、软件组件215
2、.1.进程215.1.1.文本表示225.1.2.图形化表示235.1.3.属性235.1.4.约束245.2.线程245.2.1.文本表示245.2.2.图形化表示255.2.3.线程实施265.2.4.属性275.2.5.约束285.3.线程组285.3.1.文本表示285.3.2.图形化表示295.3.3.属性305.3.4.约束315.4.数据315.4.1.文本表示325.4.2.图形化表示335.4.3.属性345.4.4.约束345.5.子程序355.5.1.文本表示355.5.2.图形化表示365.5.3.属性385.5.4.约束39六、运行平台构件396.1.处理器406.1
3、.1.文本和图形化描述416.1.2.属性416.1.3.约束426.2.存储器426.2.1.文本和图形化描述426.2.2.属性436.2.3.约束446.3.总线446.3.1.文本和图形化描述446.3.2.属性456.3.3.约束456.4.设备466.4.1.文本和图形化描述466.4.2.属性486.4.3.约束48七、系统结构与实例497.1.系统抽象497.1.1.原文和图解表示497.1.2.约束507.2.系统实例51八、组件相互作用538.1.端口538.1.1.端口声明538.1.2.端口连接548.1.3.在系统实例模型连接568.1.4.端口通信时序578.1.5
4、.即时和时延通信578.1.6.采样和下采样608.1.7.属性618.1.8.端口及端口连接约束628.2.端口组628.2.1.端口组及其类型声明628.2.2.端口组互联648.2.3.数据端口的聚合658.2.4.属性658.3.子组件的访问658.3.1.数据访问声明668.3.2.数据访问连接668.3.3.总线访问及其连接688.4.子程序调用718.4.1.调用时序718.4.2.远程调用728.4.3.属性748.5.子程序中的数据交换和共享748.5.1.数据值传递交换:参数和连接758.5.2.引用和全局变量的数据传输768.5.3.AADL方法调用78九、模式799.1
5、.模式说明799.1.1.子构件和连接的模式结构799.1.2.调用序列的模式结构829.1.3.模式说明的属性83十、流8310.1.流声明8310.2.流路径8410.2.1.通过构件的流的路径8410.2.2.在构件中首尾相连的流85十一、属性8611.1.属性声明8711.2.属性赋值8711.2.1.基本的属性联合8711.2.2.包含的属性联合8811.2.3.继承的属性联合9111.2.4.模式或有约束力的属性联合9111.2.5.属性值9211.3.定义新的属性9311.4.属性类声明9411.5.属性名声明9511.6.属性常量声明96十二、组织说明9712.1.包9712.
6、2.设计模式9912.2.1.类扩充9912.2.2.实现改进10012.2.3.实现扩充10112.2.4.设计模式样例102附录105构件-子构件之间的关系105允许的特征105约束概要107已建立的属性类109AADL保留字110类扩充中的改进110实现声明中的改进111一、 摘要:2004年11月,美国汽车工程师协会(SAE)公布的航空航天标准AS5506被命名为结构分析与设计语言(AADL)。AADL是一种建模语言,其早期支持系统的体系结构架设和反复论证系统性能的关键属性,AADL是一个明确界定语义的框架工具,它包括软件抽象,计算硬件和系统组件,其指定和分析实时嵌入式系统及其高可靠性
7、。下述将对AADL语言的概念、结构以及应用进行介绍和说明。二、 SAE AADL 概述SAE的AADL为我们提供了形式化的概念。这些概念从组件及组件间的交互对一个应用系统的构架进行描述和分析。AADL建模过程包括将软件、硬件和系统构件进行抽象。这些抽象包括:1) 指定和分析实时嵌入式系统、复杂混合系统和具有专用性能特性系统;2) 软件与可计算硬件元素的对应关系。另外,AADL的有效性也体现在对基于模型分析和对复杂实时嵌入式系统建立规范的操作上。2.1. 构件抽象在AADL标准中,一个构件的特征包括:身份标识(一个唯一的名称和运行要素)、与其他构件的接口、固有性质(构件在其构架体系中的一些关键特
8、性),以及子构件及其交互关系。除了接口和内部结构元素之外,也可以给一个构件和系统构架定义其他的抽象模型。例如:可以被识别、能与特殊构件交互、互联及分析的抽象信息或控制流。这些添加进去的抽象模型元素可以通过AADL语言向用户提供的可补充附录规范加入到AADL的核心语义中。AADL构件抽象可以概括为以下三种类型:应用软件a) 线程:可以并发执行并可组合到线程组中;b) 线程组:抽象为一组线程、数据和线程组的集合;c) 进程:一块受保护的地址空间,它的范围在它自己运行时会被加强;d) 数据:文本中的数据类型和静态数据;e) 子程序:类似于调用返回值和方法调用的概念;执行平台(硬件)a) 处理器:调度
9、和执行线程;b) 内存:储存代码和数据;c) 设备:与外部环境进行交互的构件,比如传感器、制动器等等;d) 总线:连接处理器、内存和设备;复合系统a) 系统:将其它不同的构件集成到一起而形成一套结构,它同样也可包含其它的系统;系统的构件组成是多元的,可以包括其他系统以及软件或硬件构件。AADL中还有一个重要的特点就是实时数据交换,它包括以下几部分:l 消息传递l 事件传递l 对相同构件的同步访问l 线程调度协议l 实时性要求l 远程程序呼叫另外,实时系统结构的动态重配置可以使用操作状态和状态转移来实现。 2.2. 构架分析AADL可用于对已用系统进行建模与分析,并可以用于设计和集成新的系统。A
10、ADL可用于对不完全定义的构架模式进行分析(利用有限的构架细节),同时,也可以从源代码中提取整个系统的构架进行整体分析(依据完整的系统属性)。AADL支持系统的前期预测,并可以分析系统的关键特性,如性能、可调度性和可靠性。例如,在具体描述和分析可调度性能中,AADL提供对线程组件的支持。对这些线程的描述包括周期、非周期(事件驱动)、后台(一次调用并结束执行)和偶然(最大上限触发)事件。这些线程特性将当作线程声明的一部分来定义,并且可以随时分析和提取。在AADL语义中,包含了新的构件属性和其他模型元素的属性集是可以被接受或认可的。依赖AADL语言的扩展能力,更多的模型元素和属性也可以被包含进去。
11、例如,为了减轻马儿可夫或故障树方法对构架分析的难度,我们可以定义一个可靠模型,并定义组件属性的可靠附录。由此建立起的分析方法可以评估构架与特定可靠性要求的一致性程度。总的来说,AADL的这些属性和扩展功能使我们在构架设计中更好地结合入新的分析方法,并更多地关注对相关分析方法的研究工作中。这样的意义在于,分析方法有助于减轻我们在早期的开发或升级过程中对设计方案的比较、评估和选择。 AADL通过专有的接口定义来实现构件间的交互。一个构件的接口由以下具有方向性的流式构件组成: a) 无序状态数据的数据端口b) 队列信号数据的事件数据端口c) 异步事件的事件端口d) 同步函数调用e) 显式数据构件访问
12、构件间的交互是被明确规定的。例如,数据构件间通信是通过连接声明来规定的。这样可以更好地实现即时或延时通信控制。另外,这些连接语义确保了数据流转移的可确定性。这意味着一个线程总是以相同的时间延时来接收数据。如果数据流转移速度超出或未达到线程延时的时间,那么,线程也不会随着需要接收数据流的速度来调整自己的延时。应用构件具有各自的时间特性,例如周期、最坏执行时间、最长执行时间、空间请求、完成效率。同时,应用构件也具有数据和事件流的特性。因而,属性定义需要包括如下内容:a) 实现AADL模型上应用构件的源代码和数据b) 线程到处理器、源代码和数据存储的绑定约束以上约束可以限制应用构件绑定到特定的处理器
13、或者其他存储体类型(例如支持DSP功能的处理器)。同时,也预防了应用构件绑定到其他应用组件的储存单元,提供了容错的功能。三、 AADL语言抽象AADL的核心语义概念和关键规范元素如图3.1所示。在AADL中,构件通过类型和实现声明来定义。一个构件类型的声明定义了一个构件接口元素和外部显式属性(例如,与其他构件交互的接口特性、流式细节和内部属性值)。一个构件实现声明从子构件、子构件连接、子函数调用次序、模式、流式实现和属性这些方面定义了一个构件的内部结构。构件被分为应用软件、执行平台和复合类型。包将AADL元素组织入被命名的组合中。属性集和附录能够让设计者对语义进行扩展,并可以通过用户自定义的A
14、ADL规范来满足工程或者设计中的需求。3.1. 构件构件是AADL中最主要的模型关键字。构件被指定给一个专用的名称,并被声明为一个类型,在一个特殊的构件类别中实现。一个构件类别定义了一个构件的运行要素。构件类别被分成如下三个集合:1.应用软件a) 线程:一个并行执行的可调度单位b) 线程组:用于组织线程的合成单位c) 进程:一个受保护的地址空间d) 数据:源代码中的数据类型或静态数据e) 子函数:可顺序调用并执行的源代码2.执行平台a) 处理器:执行线程的构件b) 存储器:用于存储数据和代码的构件c) 设备:连接并表示外部环境的组件d) 总线:为执行平台组件间提供数据互访的组件3. 复合系统a
15、) 系统:软件、执行平台或者系统构件的复合在本文档的相应章节中,将会对每一个构件类别进行讨论。在4.1节中,将讨论AADL规范中的语法和语义声明。3.2. 构件类型一个AADL构件类型声明确立了组件可见的外部特征。例如,一个声明规定了一个线程构件的接口。一个构件类型声明由一个定义条款和描述子句组成,图3-2是一个线程的类型声明。a) Features 用于描述构件的接口。b) Flows 规定了不同的信息转移管道抽象 c) Properties 定义了一个构件的内在特性。以下是每一个构件类别的预定义属性。(如一个线程的执行时)一个构件类型的多种实现可以被认可。因为每一个实现都会提供一个组件的识
16、别。识别是通过满足接口特性的构件类别来完成的。因此,允许定义多个具有相同外部接口的构件模型。另外,一个组件的实现可以扩展和重定义其他事先声明过的构件实现方式。扩展实现(用extends子句声明)继承了上一级构件实现的特性和之前所有该实现的前驱。精化使得部分规范的构件实现(模版)趋于完整,扩展使得一个构件实现可以被动态的以一个普通构件的描述方式进行完善。另外,一个扩展实现声明可以向对应类型的规范添加入属性值。这些追加定义可以通过重定义类别子句来完成。构件分解通过在构件实现声明中的子构件声明来定义。一个子构件表示分解出的元素而分类器则表示在构件集中的一个选择。一个构件实例由一个示例构件的实现和示例
17、构件的每个子构件的递归来创建。3.3. 包、属性集和附录AADL包允许构件声明以各自独有的命名空间组织封装到分立单元中。具有普通特性的元素可以被封装到包定义中,并可以通过包的名称实现对包中元素的引用。包通过为不同的子系统元素组提供不同的命名空间以支持独立开发大规模系统中子系统的AADL模型。一个属性集是对一组属性的声明,这些属性声明定义了一些新的属性,并且属性类型可以被包含到一个规范中。例如,一个安全属性集可以包含数据库系统安全等级需求的定义。这些属性可以通过属性集名称来引用,并可以在系统规范中与其他构件或其他模型元素相关联。它们的声明和使用方式将成为规范的一部分。一个附录允许用户对AADL语
18、言进行扩展,允许在一个标准的AADL模型中加入专用的标记。例如,可以将一个能够解析系统临界特征的形式语言包含到AADL规范中。在文档的其他章节中将进一步详细描述这些元素。四、 AADL系统模型和规范AADL系统模型以软件构件、执行平台(硬件)构件和它们之间交互的方式,描述一个应用系统的架构和运行时环境。一个AADL模型是语法和语义正确的AADL声明规范,一个完整的AADL系统模型包括所有的规范描述的应用系统的运行实例(如航空飞行控制系统)声明。从用户的角度看,AADL规范和要素声明可以通过文本、图形、图形和文本的组合或者扩展标记语言(XML)来表达,AADL文本和图形符号是由SAE AADL标
19、志和它的扩展SAE 06a来定义的。XML文件格式通过扩展标记语言(XML)1.0(第三版)W3C 04。图4-1总结了AADL规范的描述格式,有示例的文本表示、图形化表示和XML表示。 图-1:AADL表示4.1. AADL文本规范本章节集中在可读性较强、符合AADL标准SAE 06aAADL文本(自然语言)规范,为了增强文本表示和图形化表示之间的关系和帮助读者形象化理解架构,图形化符号和文本表示一起也被包括了进来。关于AADL组成和声明图形化表示更详细的描述,请参考图形化标准。AADL主要声明如下表:表4-1.主要的AADL声明声明 描述构件类型:系统,进程,线程,线程组,数据,子程序处理
20、器,外设,存储器,总线构件类型声明确定了身份(构件类别和名字)和定义了构件类型的特征、流和属性。一个构件类型声明也可以声明另一个类型扩展的类型(extends)。构件实现:系统,进程,线程,线程组,数据,子程序处理器,外设,存储器,总线构件实现声明确定了身份(构件类别、类型和名字)和定义了一个构件实现的改进(refine子句)、子构件、调用、连接、流、模式和属性。身份必须包括一个已经定义的和构件类别一样的构件类型。构件实现声明也可以是另一个实现的扩展(extends子句)。端口组类型端口组类型声明确定了身份(名字)和定义了一组端口或者端口组的特征和属性。在特征声明里,一个端口组可能是另一个端口
21、组的反面,一个端口组类型声明也可能声明端口组是另一个端口组的扩展(extends)。包包声明确定了一些AADL声明的身份(名字),把这些AADL声明划分到私有的或者公有的区域和声明一个包的属性。包用来逻辑上组织AADL声明。AADL包中的AADL构件类型与实现、端口组声明可以被其他包中的声明引用。属性集属性集声明引入预定义的AADL属性集中没有包括的附加的属性、属性类型和属性常量,每一个属性集有一个唯一的全局名字和为它内部的每一项提供了一个唯一的命名空间。换句话说,定义在属性集里的属性类型通过属性集名字和条目名引用。附录库附录库声明确定了身份(名字)和定义了不是标准的AADL语言可重用的声明,
22、附录声明用来扩展AADL核心模型和分析性能。4.2. 图形化表示AADL图形化符号方便了系统的层次架构和通信拓扑可视化描述,提供了清楚的架构观点基础。AADL构件图形化符号元素如图4-2所示。字母形状的AADL图标( )被用来指示同统一建模语言(UML)图形符号相似,但是语义不同的语义。这个标号在图形符号里不是必须得,当同UML符号不同时,它可以被使用。其他的符号,例如圆,被用来描述构件属性(如线程的周期)。 图4-2 AADL图形化符号4.3. 例子详述表4-2包含了AADL文本表示的一个摘录和样例部分图形化表示,这个摘录简单的展示了构件类型、构件实现和子构件声明(仅有一些特征、流或者属性被
23、声明),而且描述了本文档其他例子遵循方式。在这个例子里,相关的类型和实现声明被集合在一起。在AADL规格中,单独的声明可以被任意顺序的组织,例如,一个接口之一为特定端口组构件类型声明,可以在端口组类型声明之前声明。一个组织可能包括所以的类型声明。而且,表4-2总所有的或者一些声明可以使用包分成不同的组,包的选择和含义将在第十二章(组织一个规范)进行讨论。表4-2中的摘录包含一个进程和两个线程构件声明。进程类型定义有构件类型标示符(名字)control_processing。进程类型声明了两个数据端口in data port和out data port。单独的数据类型声明sensor_data和
24、command_data数据类型。 线程类型定义标示符是control_in 和 control_out。进程类型control_processing的实现声明被展示。构件实现标示符是speed_control。实现被引用通过构件类型标示符和构件实现标示符,两者之间通过点(.)分开,一个对线程类型control_in和线程实现input_processing_01引用在子构件control_input的声明中。因此,control_input是构件实现control_in.input_processing_01的一个实例。 进程类型声明control_processing和进程类型实现声明的图
25、形化描述如表4-2的后半部分所示。例子中进程实现符号通过黑线来限制,实现符号的黑线是可选的,它在区分构件类型和构件实现可视化描述中非常有用。实黑三角符号描述了数据端口,端口和其他特征符号将在第八章(构件交互)讨论。 表4-2.简单的AADL规范例子4.4. 类型声明构件类型声明结构(区域标记)、扩展另一个类型类型声明(区域标记)以及例子构件类型声明(区域标记)如表4-3所示。相同构件类型声明进程类型simple_speed_control和线程类型data_management。每个声明开始的第一行是子构件类别,以相应黑体保留的形式。在这些例子中,process和thread是保留字。 表4-
26、3 简单的构件类型声明构件类型classifier(名字)紧跟着构件类别保留字,构件类型声明通过如下几个保留字可能包含达到4个子语句,如下所示: features:指定了和其他构件的交互点,包括输入和其他构件要求的访问以及构件提供的输出 flows:定义了从输入交互点到输出交互点的逻辑流规范(流能被用来指定端到端流,流能追溯数据、控制或者混合流通连接事件和数据端口) properties: 指定了应用到所有构件实例的构件属性,除非构件的实现或者扩展重写这个属性 extends: 一个类型扩展另一个类型,如表4-3线程类型data_management所示如果没有关键字features, flo
27、ws或者properties,它们可以被忽略,保留字none被用来清楚地表示这里没有条目。例如,保留字flows在线程类型data_management中被省略,none被用在表4-3其他的空子句。None的使用明确的指明了这个子句是空的。None的使用避免了开发者偶然的忽略的误解。在表4-3中,simple_speed_control类型声明中features子句下面的声明为类型定义了端口声明:raw_speed: in data port speed_type;toggle_mode: in event port;throttle_cmd: out data port throttle_d
28、ata;注意在类型system_management的features中,有一个in data port声明,data_management类型声明扩展了system_management类型,在扩展声明里,这个in data port in_data声明完整的被包括进refined to,而且向端口声明中增加了数据类型speed_type,另外,out data port声明也被增加。构件类型声明通过关键字end结束,end后面是构件的类型classifier和冒号(;)。4.5. 实现声明构件实现声明结构(和)和示例声明()如表4-4所示。基本的表格()声明了一个清楚的实现,第二份表格()
29、包括关键字extends,指示implementation扩展另一个。 在样例声明中(表4-4),线程实现 control_laws.control_input是类型control_laws的实现,实现名字通过跟随实现特定标识符的类型标识符形成,它们通过点(.)分割。在control_laws.control_input声明中,单独数据子构件被声明,关键字(none)用来为calls子句,其他的子句被忽略。 表4-4. 组件实现声明4.6. 包声明包提供一种方式组织类型声明、实现声明和AADL规范属性,每个包为构件分类声明引进一个的命名空间、端口组类型声明、附录库声明和属性。例如,一个构件类型
30、可以被定义在一个包中,可以被使用多子系统声明中。如表4-5,包acutators_sensors包括使用在主要和备份系统control.实现中的外设speed_sensor。注意包名带着双冒号(:),包名被用来领先外设speed_sensor(在实现声明中的子构件声明)。命令线(- )被用来指示没有被显示的其他声明。在12.1章节中,对包进行更详细的讨论。表4-5 包示例4.7. 属性集声明属性集声明允许对核心AADL属性集增加属性,这些附加能被用来支持特殊模型和分析性能,这些能被定义在AADL附录中。AADL规范声明可以参考存储到不同地方的包和属性集。更多关于属性集声明可以在章11.3中找到
31、。对声明在属性集里的属性名、类型以及常量参考通过属性集名字开始。4.8. 附录库声明附录库声明可以对核心的语言概念和语法进行扩展,这些扩展常常通过特定模型和抽象支持习惯分析(错误模型支持可靠性分析)。附录库定义一种子语言,这种子语言能被用在构件类型内的附录字库和实现声明。附录库被定义在包内,附录子库能被包含在构件类型和实现声明内。这些子句使用声明在附录库的元素(附录元素相关值和表示声明)。4.9. 命名空间AADL规范有一个全局的命名空间,包和属性集的名字在全局命名空间中,它们的内容可以通过包名在任何地方被指定,在AADL规范里的构件声明仅仅在AADL规范内才是可视化的,它们在包内或者其他的A
32、ADL规范里不可以被访问,他们被认为是在匿名的命名空间中。如果AADL规范是在局部的工作区域,那么它的构件声明仅仅局部可视。4.10. 部分规范一些在语法和语义正确的规范声明可以是部分完整的,例如,既不需要构件类别(类型或者实现)包含在另一个构件内,也不需要构件间数据连接中的端口数据类型被指定直到从规范中完整的描述被实例化(设计被完成)。开发部分规范的弹性在设计时可以被有效地使用,尤其是细节还不可以确定的早期阶段。弹性允许语法上检查不完整的规范和管理被扩展的语义、领域和特定的工程分析。例如,在不完整或不详细的通过端口和其他元素的数据交流描述规范下,详细的信号时钟能被指定和信号延迟可以被分析。类
33、似的,通过流规范,端到端流能在没有详细到要求实例化级别的系统层次情况下进行分析。4.11. 扩展、重定义和部分规范当语言带有扩展、重定义和实现时,部分规范能被用来定义核心类型或者实现方式。核心方式能被用来生成一些有关系的构件(带有较少细节和更多详细和修改的声明后裔核心方式)。表4-6是一个扩展例子。基本的系统构件类型声明有两个核心的类型扩展basic_plus和 control,在扩展内,数据输入端口声明input_data带有完整的数据类型,而且加了一个附加的端口。关于扩展和重定义更详细讨论和其他的例子在12.2章节(设计方式)表4-6 简单的扩展和重定义例子五、 软件组件软件组件的抽象概念
34、表示为经过处理的源程序文件(可执行的二进制映像)和可执行源码中的实施通路。可执行的二进制映像(如可执行代码和数据)是与某一组件关联的处理(如编译和连接)源程序文件的结果。一个组件的源程序文件可以被写成传统的程序设计语言(如Ada,,Java,和C),领域建模语言(如MatLab/Simulink),或者硬件描述语言(如VHDL).。源程序文件也可以是处理这些语言的中间结果(如目标文件)。AADL软件组件的抽象概念有l 进程(5.1节):表示一个被保护的地址空间l 线程(5.2节):表示一个并发实施的单元l 线程组(5.3节):表示一个组织线程的成分单元l 数据(5.4节):表示源程序文件里的数
35、据类型和静态数据l 子程序(5.5节):表示可调用的连续执行的代码5.1. 进程进程概念表示为一个被保护的地址空间,一个对其他组件访问进程里的任何事物提供保护的地址划分。地址空间包括l 直接与进程关联的可执行的二进制映像(可执行代码和数据)l 与进程的子组件关联的可执行的二进制映像l 服务器子程序(可执行代码) 和被外部组件引用的数据一个进程不提供固有的线程。因此,为了表示一个活跃的执行组件,一个进程必须包含一个线程。5.1.1. 文本表示表5-1 包含了部分进程的文本描述列表。该进程被表示为所有三种允许的子组件种类的例子:(1)线程,(2)线程组,和(3)数据。这个列表提供了组件的简单化的类
36、型和执行声明。列表显示了两个端口,进程的输入端和输出端。在完整的规范中,定义信息流的连接在进程执行中被声明。只有control_processing.speed_control中进程执行中的子组件定义被明确地给出,没有包括规范的其他细节。这些省略在语法正确性的部分规范上是合法的,在4.10节(部分规范)中已经讨论。表5-1: 一个进程文本表示的例子process control_processingfeaturesinput: in data port;output: out data port;end control_processing;process implementation con
37、trol_processing.speed_controlsubcomponentscontrol_input: thread control_in.input_processing_01;control_output: thread control_out.output_processing_01;control_thread_group: thread groupcontrol_threads.control_thread_set_01;set_point_data: data set_point_data_type;end control_processing.speed_control
38、;thread control_inend control_in;thread implementation control_in.input_processing_01end control_in.input_processing_01;thread control_outend control_out;thread implementation control_out.output_processing_01end control_out.output_processing_01;thread group control_threadsend control_threads;thread
39、group implementation control_threads.control_thread_set_01end control_threads.control_thread_set_01;data set_point_data_typeend setpoint_data_type;5.1.2. 图形化表示图5-1显示了表5-1中进程执行control_processing.speed_control的图形化显示。该进程被表示为允许的子组件种类的例子:线程,线程组,和数据。如图5-1所示,进程执行control_processing.speed_control包含两个线程(contr
40、ol_input和control_output),一个单一的数据组件(set_point_data),和一个线程组(control_thread_group)。图5-1: 一个进程图形化表示的例子5.1.3. 属性对于进程和它的子组件线程, 预先声明的进程属性提供的规范有l 存储器保护的运行时间执行l 相应的源文件信息l 源文件载入时间l 调度协议l 绑定约束另外,某些属性可以被进程的子组件线程 (如Period,Deadline,以及Actual_Processor_Binding)继承和共享,包括预先声明的属性以及新属性, 定义如11.3节。5.1.4. 约束一个AADL进程仅仅表示一个被
41、保护的地址空间。因此, 进程必须包含至少一个明确声明的线程或线程组子组件。也就是说,它并不等同于一个同时定义了一个被保护的地址空间和一个固有的线程的POSIX进程。表5-2 概述了进程的允许类型定义和执行定义原理。一个进程只能是一个系统组件的子组件。117119页的附录包含了允许子组件关联和特征的概要。表5-2: 允许进程定义概要种类类型执行进程特征:l 服务器子程序l 端口l 供应数据访问l 请求数据访问流规范:是属性 是子组件:l 数据l 线程l 线程组子程序调用:否连接:是流:是模式:是属性 是5.2. 线程线程是一个可在源码中连续实施的并发的可调度单元。多路线程表现为并发路径实施。多种
42、实施属性可以被分派到线程, 包括时间选择(如最坏情况实施时间),分派协议(如周期的,非周期的,等等),存储容量,和处理器绑定。5.2.1. 文本表示表5-3显示了线程类型,执行,子组件声明的例子。表5-3中声明了两个线程类型和三个线程执行。其中两个线程执行声明描述了分开执行同一个线程类型data_input.。进程执行data_management的子组件子条款声明定义了线程实例。在本例中相关类型和执行声明集合在同组。这种定义分组用来使结构清晰,并不是规范要求的组织形式。Table 5-3: 一个线程声明的例子thread data_processingend data_processing;
43、thread implementation data_processing.integrated_data_processingend data_processing.integrated_data_processing;thread data_inputend data_input;thread implementation data_input.roll_data_inputend data_input.roll_data_input;thread implementation data_input.pitch_data_inputend data_input.pitch_data_inp
44、ut;process data_managementend data_management;process implementationdata_management.autonomous_submarine_data_managementsubcomponentsroll_input: thread data_input.roll_data_input;pitch_input: thread data_input.pitch_data_input;attitude_data_processing: threaddata_processing.integrated_data_processin
45、g;end data_management.autonomous_submarine_data_management;5.2.2. 图形化表示表5-4显示了线程执行control_laws.control_input的图形化表示和与它相关联的文本表示,没有显示类型、类型或执行的细节声明的界面。在本例中,数据实例configuration_data 被定义成线程的子组件,并且参考标准是数据类型而不是数据执行。这是合法的当且仅当在规范中没有任何关于数据类型的执行定义。表5-4: 一个带有子组件的线程执行的例子thread control_lawsend control_laws;data static_dataend static_data;thread implementationcontrol_laws.control_inputsubcomponentsconfiguration_data: datastatic_data;end control_laws.control_input;5.2.3. 线程实施图5-2显示了线程实施的状态机图形表示法。圆角矩形表示线程的实施状态或至少包含一个实施状态的合成状态。椭圆表示非实施状态。有向弧表示状态间的变迁。弧可以再表示为小圆圈的连接点引出、接入、分叉、停止。线程实例在正常实施(如优先权抢占或初始化完成)或故障/错误的激发下可以在