AADL的四种经典设计模式

栏目: 后端 · 发布时间: 5年前

内容简介:一、同步数据流(Synchronous data-flows)模式1.描述在同步数据流模式中,线程在dispatch时读取输入端口的数据、在complete时向输出端口写数据。此模式不需要共享的data构件,processor构件需要指定固定优先级调度策略(如Rate Monotonic等)。
编辑推荐:
本文来自于个人博客,本文在AADL基本知识了解的基础上,为了增强建模 工具 和验证工具Cheddar之间的互操作性,引入了AADL的四种经典通信设计模式,我希望对您的学习有所帮助。

一、同步数据流(Synchronous data-flows)模式

1.描述

在同步数据流模式中,线程在dispatch时读取输入端口的数据、在complete时向输出端口写数据。此模式不需要共享的data构件,processor构件需要指定固定优先级调度策略(如Rate Monotonic等)。

2.举例

例如,三个周期线程通过两个事件端口连接(data port connections)链接在一起,AADL图形模型如图1所示,AADL文本表示较简单,此处省略。

AADL的四种经典设计模式

图1 同步数据流模式

3.分析

这种模式只能用静态调度策略,每个线程总是在固定的时间读数据、执行、写数据(即使在不需要的情况下),因此显得不灵活。但这种模式的分析却非常简单,可以进行处理器利用率(processor utilization factor)分析和最坏响应时间(WCRT)分析等。

二、互斥(Mutex)模式

1.描述

互斥模式考虑了异步通信的情形,在此模式中,线程通过优先级继承协议(priority inheritance protocols)异步访问共享的data构件。

2.举例

为了阐释异步线程间通信,本文以互斥信号量Mutex的P/V原语的实现作为案例。AADL模型的图形表示如图2。

AADL的四种经典设计模式

图2 互斥通信模式

AADL模型的文本表示如下:

SUBPROGRAM IMPLEMENTATION P.others

ANNEX Behavior_Specification {**

states

s0: initial state;

s1: return state;

transitions:

busy: s0 -[on me.The_Value=0]->s1{};

free: s0-[on me.The_Value=1]-> s1{ me.The_Value := 0; };

**};

END P.others;

SUBPROGRAM IMPLEMENTATION V.others

ANNEX Behavior_Specification {**

states

s: initial return state;

transitions:

s -[]-> s { me.The_Value := 1; };

**};

END V.others;

THREAD IMPLEMENTATION Thread_A.others

PROPERTIES

Dispatch_Protocol => Periodic;

Period => 10 ms;

ANNEX Behavior_Specification {**

states

s0: initial state;

s1, s2, s3, s4: state;

s5: complete state;

transitions

acquire_M1: s0-[]->s1{P!(Mutex_1);};

acquire_M2: s1-[]->s2{P!(Mutex_2);};

critical_section: s2-[]->s3 {…};

release_M1: s3-[]->s4{V!(Mutex_1);};

release_M2: s4-[]->s5{V!(Mutex_2);};

**};

END Thread_A.others;

THREAD IMPLEMENTATION Thread_B.others

ANNEX Behavior_Specification {**

transitions

acquire_M2: s0-[]->s1{P!(Mutex_2);};

acquire_M1: s1-[]->s2{P!(Mutex_1);};

**};

END Thread_B.others;

3.分析

这种模式可以进行死锁验证和WCRT等,但计算WCRT前需要先计算等待时间,这是很重要的。

三、黑板(Blackboard)模式

1.描述

典型操作系统有很多同步设计模式,如信号量、读者写者、生产者消费者等等。对于编程语言也有专用的同步设计模式,如黑板设计模式。黑板 设计模式 是读者写者模式的实现,同一时刻只能有一个writer更新数据,但可以有多个readers读取数据。

2.举例

用黑板模式实现读者写者的AADL图形模式如图3。

AADL的四种经典设计模式

图3 黑板模式

AADL文本模型如下:

DATA T_BlackBoard

FEATURES

Request_Read: SUBPROGRAM Read0.o;

Read: SUBPROGRAM Read1.o;

Release_Read: SUBPROGRAM Read2.o;

Request_Write: SUBPROGRAM Write0.o;

Write: SUBPROGRAM Write1.o;

Release_Write: SUBPROGRAM Write2.o;

END T_BlackBoard;

DATA IMPLEMENTATION T_BlackBoard.o

SUBCOMPONENTS

Contents: DATA T_Item;

Readers: DATA Behavior::Integer;

Is_Idle: DATA Behavior::Boolean;

Is_Reading: DATA Behavior::Boolean;

Is_Writing: DATA Behavior::Boolean;

END T_BlackBoard.o;

SUBPROGRAM IMPLEMENTATION Read0.o

ANNEX Behavior_Specification {**

states

s: initial return state;

transitions

s -[on me.Is_Idle and me.Readers=0 ]-> s {

me.Readers := me.Readers + 1;

me.Is_Reading := true;

me.Is_Idle := false;

};

**};

END Read0.o;

3.分析

这种模式下,在任何时刻只有最后写入的消息可用。

四、排队缓冲(Queued buffer)模式

1.描述

排队缓冲模式使得在任何时刻,所有的写入数据都可用(即所有的写入数据都存储到内存),AADL通过事件数据端口(event data port)或共享data构件实现。假设buffer消息的处理协议是FIFO。

2.举例

以生产者-消费者为例阐释排队缓冲模式。生产者-消费者的AADL图形模型如图4所示。

AADL的四种经典设计模式

图4 排队缓冲模式

AADL模型的文本表示如下:

DATA IMPLEMENTATION T_Buffer.others

SUBCOMPONENTS

Stack: DATA T_Item;

Current: DATA Behavior::Integer;

Max: DATA Behavior::Integer;

END T_Buffer.others;

SUBPROGRAM Push

FEATURES

me: IN OUT PARAMETER T_Buffer.others;

Item: IN PARAMETER T_Item;

END Push;

SUBPROGRAM IMPLEMENTATION Push.others

ANNEX Behavior_Specification {**

states

s: initial return state;

transitions

s-[on me.Current < me.Max]->s {

me.Stack(me.Current) := Item;

me.Current := me.Current+1;};

**};

END Push.others;

SUBPROGRAM Pop

FEATURES

me: IN OUT PARAMETER T_Buffer.others;

Item: OUT PARAMETER T_Item;

END Pop;

SUBPROGRAM IMPLEMENTATION Pop.others

ANNEX Behavior_Specification {**

states

s: initial return state;

transitions

s-[on me.Current > 1]->s {

Item := me.Stack(me.Current);

me.Current := me.Current-1;};

**};

END Pop.others;

THREAD IMPLEMENTATION Prod.others

PROPERTIES

Dispatch_Protocol => Sporadic;

Period => 10 ms;

ANNEX Behavior_Specification {**

state variables

v: T_Item;

states

s: initial complete state;

transitions

s-[]->s {Push!(Buffer,v);};

**};

END Prod.others;

THREAD IMPLEMENTATION Cons.others

PROPERTIES

Dispatch_Protocol => Periodic;

Period => 20 ms;

ANNEX Behavior_Specification {**

state variables

v: T_Item;

states

s: initial complete state;

transitions

s-[]->s {Pop!(Buffer,v);};

**};

END Cons.others;

3.分析

这种模式需要进行可调度性分析,此外,还需要分析内存使用情况,以确保当生产者速率大小消费者速率时不会丢失数据


以上所述就是小编给大家介绍的《AADL的四种经典设计模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员的职业素养

程序员的职业素养

Robert C.Martin / 章显洲、余晟 / 人民邮电出版社 / 2012-9-1 / 49.00元

本书是编程大师Bob 大叔40 余年编程生涯的心得体会, 讲解成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。 本书适合所有程序员,也可供所有想成为具备职业素养的职场人士参考。一起来看看 《程序员的职业素养》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具