介绍

  • 本文主要介绍AADL软件类组件Process、Thread、Thread Group、Data、Subprogram、Subprogram Group的功能和基本用法。
  • 这些被称作进程、线程组和线程的类别用于表示应用的任务体系结构。它们还表示应用软件产品(例如、称作数据组件的数据类型、静态和局部数据)和可执行代码(例如,称作子程序和子程序组的功能和程序库,以及源代码库)。

目录

  • 介绍
  • Process(进程)
    • 介绍
    • 约束
    • 范例
  • Thread(线程)
    • 介绍
    • Period属性(周期基调度)
    • Dispatch_Protocol(发送协议)
    • 线程的作用
    • 运行时状态
    • 约束
    • 范例
  • Thread Group(线程组)
    • 介绍
    • 约束
    • 范例
  • Data(数据)
    • 介绍
    • 约束
    • 数据分类符
    • 范例
  • Subprogram(子程序)
    • 介绍
    • 约束
    • 范例
  • Subprogram Group(子程序组)
    • 介绍
    • 约束
    • 范例
  • 结束

Process(进程)

介绍

  • Process表示通过代码能够与其他线程并行执行的代码的执行路径。它是指定(绑定)执
    行处理器的一个可调度的单元。处理器调度线程并执行与该线程关联的代码。Process抽象表示一个受保护的地址空间,一个空间分区,其中提供保护,防止其他组件访问进程内部的任何东西。

约束

  • 从图中我们可以看出

    • 定义process可以使用features(features内可提供端口、 特征组、提供的数据访问、请求的数据访问等)、flows、properties组件;
    • 在实现的时候,可以有subcomponents、connections、flows、flows、modes、properties组件;
    • 不可以有sybprogram call(子程序调用)组件。

进程中没有隐式线程,所以我们在进程中至少要创建一个线程,用于主动执行线程内的代码。

范例

  • 作用:创建一个进程controller,有两个端口,一个作为进程的input,一个作为进程的output,然后通过speed对controller进行实现,具体实现省略。
  • 代码:
process controller
features
input: in data port;
output: out data port;
end controller;process implementation controller.speed
subcomponents
control_input: thread control_in.basic;
control_output: thread control_out;
control_threads: thread group control_all;
set_point_data: data setpoint_data;
end controller.speed;
  • osate内展示:

注:因为省略了具体的实现,所以代码不完整,不能进行实例化等操作,但可以生成Diagram图

  • Diagram图:

    • 顶层图
    • controller.speed图

Thread(线程)

介绍

  • 线程是通过源代码进行顺序执行的并发可调度单元。多个线程表示并发的执行路径。可以为线程分配各种执行属性,包括时间(例如,最坏情况下的执行时间)、调度协议(例如,周期性、非周期等),内存大小和处理器绑定。
  • 一个AADL线程可以通过操作系统线程实现,或者多个AADL线程也可以作为逻辑线程映射到单个操作系统线程。

Period属性(周期基调度)

  • 线程能够按照Period属性(称为周期基调度)的规定,以固定的时间间隔反复发送,或者能够由于在线程的事件数据端口或事件端口上的数据或事件的到达而发送(称为端口触发型发送)。在后一种情况下,线程会在一个消息的到达或事件为空转时立即发送,或者在一旦当前执行完成时再进行发送。

Dispatch_Protocol(发送协议)

  • Dispatch_Protocol(发送协议)属性的数值定义了一个线程的发送特性。具有规定语
    义的标准发送协议数值是 periodic(周期)线程、aperiodic(非周期)线程、sporadic(偶
    发)线程、timed(定时)线程、hybrid(混合)线程和 background(背景)线程。

    • periodic(周期)线程具有周期基的发送(重复的、固定时间间隔的发送),假定在下一个发送之前上一个执行已经完成的话。
    • aperiodic(非周期)线程具有端口基的发送,如果线程仍在执行上一个发送,这些线程可以是列队的。
    • sporadic(偶发)线程具有端口触发型发送,且具有发送是延时的附加限制,如果
      上一个发送已经发生但发送执行时间小于线程周期所规定的时间的话。
    • timed(定时)线程是在由 Period属性规定的时间之后发送的,除非它们是通过一个事件甚至数据的到达发送的,以便在上一次发送后的一个给定的时间间隔内,如果没有输入到达的话,能有效地提供一个暂停时间。
    • hybrid(混合)线程是通过时间或时间数据到达的发送,和周期性的发送。对于周期性线程、定时线程和混合线程来说,必须说明线程的 Period 属性的数值。
    • background(背景)线程只发送一次且执行完成。除了标准协议之外,能够通过修改的枚举类型 Supported_Dispatch_Protocols——这些协议可在 AADL_Project 属性集中找到——引进项目特定的发送协议。

线程的作用

  • 用于初始化线程的Initialize;
  • 用于正常执行的Compute;
  • 用于从故障状态恢复的Recover;
  • 在线程转为有效(可作为给定模式的一部分执行)的模式转换下 Activate(激活)以恢复线程状态;
  • 在线程无效(不可作为模式的一部分执行)的模式转换下 Deactivate(去激)以避免线程状态;
  • 用于清理活动的 Finalize。

运行时状态

  • 当线程处在运行时,但不是正在执行的活动时,他们可能处于如下的状态;

    • 当在当前模式线程为有效且已准备好发送时为 Suspended-D;
    • 当在当前模式线程为无效且不可发送时为 Suspended-M;
    • 当线程执行被具有较高优先级的线程所先占时为 Suspended-P;
    • 当在线程被堵塞以等待由另一个线程锁定的资源时为 Suspended-B;
    • 当线程被停止并要求在能够执行之前进行初始化时为 Halted。

约束

  • 从图中我们可以看出

    • Thread实现的子构件只能是data,可以有子程序调用

Thread必须被包含在进程或线程组中。

范例

  • 作用:线程control_laws具有输入sensor_data和输出cmd使用的两个端口,通过speed实现,在speed的子程序中,借助data进行数据访问。
  • 代码:
package test_package
publicthread control_laws
features
sensor_data: in data port;
cmd: out data port;
end control_laws;data static_data
end static_data;thread implementation control_laws.speed
subcomponents
stability_data: data static_data;
end control_laws.speed;end test_package;
  • osate内展示:

  • Diagram图:

    • 顶层图:
    • 将实现的内部方法展开图:

Thread Group(线程组)

介绍

  • 线程组是一种组件抽象,用于逻辑地组织进程中的线程、数据和线程组组件。线程组并不表示虚拟地址空间或执行单位。
  • 一个进程内希望有尽可能多的线程。
  • 线程组内的线程通过其线程组的接口与其他线程进行交互。

约束

范例

  • 代码:
package test_package
publicthread group control
features
sensor_data: in data port;
cmd: out data port;
properties
Period => 50 ms;
end control;thread group implementation control.speed
subcomponents
control_algortihms:thread group control_algorithms;
data_scaling: thread data_scaling;
control_data: data control_data;
end control.speed;data control_data
end control_data;thread data_scaling
end data_scaling;thread group control_algorithms
end control_algorithms;end test_package;
  • osate内展示:

  • Diagram图:

    • 顶层图:
    • 将实现的内部方法展开图:

Data(数据)

介绍

  • Data能够抽象表示数据实例、数据类型(用作端口和参数上的数据类型)、数据实现声明中的数据子结构。
  • 应用程序系统中的数据类型可以通过数据组件类型和实现声明进行建模。数据类型和实现声明可用于定义与端口和参数关联的数据。
  • 用数据组件类型和相关的属性声明对应用程序源文本数据类型进行建模就足够了,不需要声明数据实现。
  • 可以对与端口和参数之间的连接关联的数据类型进行一致性检查。
  • 数据子组件声明可用于定义数据类型和实例的子结构。例如,记录的字段可以在数据实现声明中声明为数据子组件。

约束

数据分类符

  • 数据分类符能够由特征和数据组件说明所引用。引用可以是对数据类型或对数据实现的引用。当其放在线程、线程组、进程或系统之中时,数据组件能够共享其访问的静态数据组件,表示放在一个子程序中作为局部数据。

范例

  • 介绍:数据类型和实现有三种。error_data.control 组件实现有两个用于建模数据记录要素的数据分组件。一个是通信错误数据类型comm_error 的实例,另一个是错误数据类型 processor_error 的实例。如本例中所示,当说明数据分组件时,只包括对于数据类型说明(例如,数据实现 error_data.control的分组件说明)的引用,就已经足够。
  • 代码:
package test_package
publicdata error_data
end error_data;data comm_error
properties
Source_Data_Size => 16 bits;
end comm_error;data processor_error
properties
Source_Data_Size => 16 bits;
end processor_error;data implementation error_data.control
subcomponents
Comm_data: data comm_error;
CPU_data: data processor_error;
end error_data.control;end test_package;
  • osate内展示:
  • Diagram图:
    • 顶层图:
    • 将实现的内部方法展开图:

Subprogram(子程序)

介绍

  • 子程序组件抽象表示一个可调用的组件,可以有参数也可以没有,子程序组件可以对数据进行操作,或向调用它的组件提供服务功能。子程序及其参数签名通过组件声明,但不作为子组件实例化。相反,对子程序的调用将在线程和子程序实现中的调用序列中声明。
  • 一个 subprogram 表示可顺序执行代码的可调用单元。子程序类型定义了子程序的特征标志。子程序能够具有多个参数,这些参数只能够利用子程序调用进行传送,并由子程序调用送回。子程序能够具有要求的数据访问特征,以表示对持续状态的访问,或通过引用建模参数的传送。利用输出端口建模意外和错误的报告。
  • 子程序实现表示子程序的内部构件。如果不需要建模子程序内部构件的话,并未要求规定子程序实现。在子程序范围内,数据分组件表示局部变量。我们还能够规定别的子程序的子程序调用序列。这些调用可以是本地的(被调用的子程序是在相同线程内作为该线程内置的调用执行的),也可以是外部的(被调用的子程序是在不同线程内执行的而不是线程内置的调用)。

约束

范例

  • 介绍:序类型 scale_data 和实现说明 scale_data.sensor。分组件 scale_ ac_data是 data 组件 accelerometer 范围内的 scale_data.sensor 的实例。特征scale_data__access 建立了data 组件 accelerometer,该组件用于提供对于子程序实现 scaledata.sensor 的实例的访问。在这种情况下,访问是为分组件 scale_ace_data提供的。
  • 代码:
package test_package
publicsubprogram scale_data
end scale_data;data accelerometer
features
scale_data_access: provides subprogram access
scale_data;
end accelerometer;data implementation accelerometer.basic
subcomponents
scale_acc_data: subprogram scale_data;
end accelerometer.basic;end test_package;
  • osate内展示:

  • Diagram图:

    • 顶层图:
    • 将实现的内部方法展开图:

Subprogram Group(子程序组)

介绍

  • 通过说明带有提供的子程序访问特征的子程序类型,能够使用子程序组表示子程序库一类的可调用的例行程序的集合。类似于子程序,通过搁置将软件库复制到链接/加载程序的软件库数量的确定工作,能够通过子程序组类型建模软件库,或者能够通过子程序组分组件说明,明确说明软件库的实例。在子程序调用时,先引用子程序组类型或子程序组实例,再去引用提供的子程序访问特征(例如,filter_library.basic_ac)。

约束

范例

  • 介绍:子程序组类型 filter_library 包括提供的子程序访问特征∶basic_acc、lowP_flter 和hiP_filter。子程序实现∶filter_library.BLH包括子程序组实例∶basic_filter、LowP_filter 以及对应于类型 filter_ibrary 的访问特征的 HiP_filter。例如,特征 basic_acc提供了对于作为分组件 basic_flter 的子程序filter_library.BLH的实例的访问
  • 代码:
package test_package
publicsubprogram filters
end filters;
subprogram implementation filters.basic
end filters.basic;
subprogram implementation filters.LowPass
end filters.LowPass;
subprogram implementation filters.HiPass
end filters.HiPass;
subprogram group filter_library
features
basic_acc: provides subprogram access
filters.basic;
lowP_acc: provides subprogram access
filters.LowPass;
hiP_acc: provides subprogram access
filters.HiPass;
end filter_library;
subprogram group implementation
filter_library.BLH
subcomponents
basic_filter: subprogram filters.basic;
lowP_filter: subprogram filters.LowPass;
hiP_filter: subprogram filters.HiPass;
end filter_library.BLH;end test_package;
  • osate内展示:
  • Diagram图:
    • 顶层图:
    • 将实现的内部方法展开图:

结束

  • AADL语法学习的过程中,有种当年学习C语言的感觉,但其实它没C语言那么复杂,只不过当年用了一个学期学C语言,现在却只学了两周的AADL,现在的时间比过去宝贵了太多,而且网上教程少,也没有老师可以请假,所以学起来,好累。
  • 此时此刻是2022年1月1日,生活不熄,学习不止。

【OSATE学习笔记】AADL语法介绍(二)软件类构建详细介绍相关推荐

  1. Python学习笔记之Windows下通过pip安装Django详细介绍

    1.首先,你得先安装好Python,然后用pip安装Django的时候就会自动安装相对应的版本,首先,windows+R组合键输入cmd打开命令行窗口,输入下面命令: pip install djan ...

  2. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  3. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  4. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  5. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  6. Zemax学习笔记(1)- 界面与功能的简单介绍

    Zemax学习笔记(1)- 界面与功能的简单介绍 OpticStudio入门-第1部分 界面与功能的简单介绍 OpticStudio入门-第1部分 获取Zemax 2019可以在在淘宝上购买,商家会给 ...

  7. Postgresql学习笔记-高级语法篇

    Postgresql学习笔记-高级语法篇 Postgresql 约束 Postgresql约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表的时候就规定(通 ...

  8. Slicer学习笔记(六十二)slicer下导出模块接口

    Slicer学习笔记(六十二)slicer下导出模块接口 1. 参考文件实现 1. 参考文件实现 通过配置config_file为每一个生成类添加 Export,并为每个Module生成 Export ...

  9. Slicer学习笔记(四十二)slicer c++源码编译

    Slicer学习笔记(四十二)slicer c++源码编译 1.cmake生成项目 2.编译失败的原因汇总 2.1.下载代码失败 之前在windows下编译slicer,没有做笔记. 后面再次编译还会 ...

最新文章

  1. 【摘录】GestureDector使用
  2. Java架构师必知必会,带走不谢
  3. 程序世界的秘密(下)(完)
  4. 学python需要学数据库吗-Python学什么数据库
  5. xp 硬盘安装linux双系统,WinXP硬盘安装Ubuntu 11.10双系统全程图解
  6. c++大作业迷宫游戏 规定时间内完成_孩子写作业慢的7种原因及其解决对策
  7. [BZOJ 1834] [ZJOI2010]network 网络扩容
  8. c语言定义一个字母的范围,C语言学习知识程序设计试卷及其规范标准答案
  9. 知识总结: Activity的四种启动模式
  10. python闭包(一分钟读懂)
  11. 使用Ant发布web应用到tomcat
  12. Flink on Zeppelin (1) - 入门篇
  13. 关于if...else语句的小注意
  14. kafka 的经典教程
  15. 回调函数原理及应用实例
  16. 优矿 python_【优矿uqer.io】量化分析师的Python日记【第5天:数据处理的瑞士军刀pandas】...
  17. 蚁群优化算法之精华蚂蚁系统和排列蚂蚁系统学习笔记
  18. Linux文件编程常用函数详解——read()和write()函数
  19. 写给自己 NOI2012流水帐
  20. RSA算法进行加密和解密

热门文章

  1. 论文中看到的光线投影法(ray casting)是什么?
  2. 想学设计模式、想搞架构设计,先学学 UML 系统建模吧
  3. 构建module遇到pom报错Parent 'Unkown:Unkown:Unkown' has problems
  4. 卡巴斯基 取消 远程控制 限制
  5. 关于QT中“崩溃”问题
  6. ssm 一对多的映射关系
  7. SYSV IPC-共享内存
  8. 浙大计算机能保研交大清华吗,太牛了吧?寝室4个男生分别保研到清华、北大、浙大和上海交大...
  9. 微信小程序控制onenet智能灯
  10. 58 招财猫变形 RSA 与变形 BASE64 逆向分析