zoukankan      html  css  js  c++  java
  • AADL的四种经典设计模式

      在之前一篇博文《基于AADL的嵌入式软件的开发方法》中,大体提到了AADL的应用背景,并在《体系结构分析与设计语言AADL基础》中对AADL基本知识进行了整理,本文在此基础上,为了增强建模工具和验证工具Cheddar之间的互操作性,引入了AADL的四种经典通信设计模式:同步数据流模式、互斥模式、黑板模式和排队缓冲模式

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

    1.描述

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

    2.举例

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

    图1 同步数据流模式

    3.分析

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

    二、互斥(Mutex)模式

    1.描述

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

    2.举例

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

    图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。

    图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所示。

    图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.分析

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

    四、参考文献

    [1]. P, D., et al., AADL Design-Patterns and Tools for Modelling and Performance Analysis of Real-Time systems. 2010.

    [2]. P, D. and S. F. Stood and Cheddar: AADL as a pivot language for analysing performances of real time architectures. in Proceedings of the European Real Time System conference. 2008. Toulouse, France.

  • 相关阅读:
    面向对象1 继承与接口
    简易版爬虫(豆瓣)
    调用模块与包
    正则表达式2 以及configparser模块,subprocess模块简单介绍
    正则表达式(re模块)
    sys,logging,json模块
    常用模块(time,os,random,hashlib)
    内置函数与匿名函数
    day 19 yeild的表达式 面向过程 内置函数
    mysql中写存储过程加定时任务
  • 原文地址:https://www.cnblogs.com/jpcflyer/p/2420145.html
Copyright © 2011-2022 走看看