第12章 · 播客 第10集
嵌入式系统设计 · 软件设计模型:FSM六元组到OCTOPUS
🎙️ 本集播客:第10集:嵌入式软件设计的六种计算模型——FSM 六元组 S I O F H S0 逐个字母过,FSMD 加数据路径、HCFSM 加分级并发,数据流模型靠令牌触发,同步数据流不用实时操作系统,并发进程模型使用最广泛,面向对象的隐式与显式并发,诺基亚的 OCTOPUS,最后分清需求与规格说明。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
最后一集了,设计模型这块,原文一口气列了六种计算模型?
雅
小雅
先立总名单:嵌入式系统常用的计算模型有六种——时序计算模型、通信进程模型、状态机模型、数据流模型、面向对象模型、并发进程模型。它们在不同领域各有用武之地:状态机模型特别适合描述以控制为主的系统,数据流模型可以很好地描述数据处理和转换问题;目前使用最广泛的是并发进程模型。「哪个使用最广泛」这个空,答案就是并发进程模型。
明
阿明
状态机模型 FSM,我听说是个六元组,这怎么背?
雅
小雅
有限状态机 FSM 是一个六元组,逐个字母过:S 是一个状态集合;I 是输入集合;O 是输出集合;F 是次态函数或转移函数,将状态和输入映射到状态,也就是 S 乘 I 映射到 S;H 是输出函数,将状态映射到输出,S 映射到 O;S0 是初始状态。口诀「状态、输入、输出、转移、输出函数、初态」——注意 F 和 H 别混,F 管状态怎么走,H 管输出怎么来。
雅
小雅
原文用电梯控制单元当例子:初始空闲态把 up 和 down 设为 0、open 设为 1;所请求楼层大于当前楼层就转移到上升状态并把 up 设为 1,小于就转移到下降状态;楼层相等时转到开门状态并启动计时器,超时后回到空闲态。这个例子告诉你 FSM 怎么用状态和转移描述控制逻辑。
明
阿明
那 FSMD 和 HCFSM 又是什么关系?
雅
小雅
都是 FSM 的扩展。当 FSM 用于嵌入式系统设计时,其输入和输出的数据类型都是布尔类型,对没有数据输入或输出的很多纯控制系统已经足够;如果要处理数据,则将 FSM 扩展为带有数据路径的状态机,FSMD,FSM with Datapath。另外,对状态机模型可以进一步扩展以支持分级和并发,这种模型称为分级并发 FSM,HCFSM,Hierarchical Concurrent FSM。一个加数据路径,一个加分级并发,方向不同。
明
阿明
数据流模型呢,靠什么驱动?
雅
小雅
数据流模型是并发多任务模型派生出的一种模型,将系统的行为描述为一组结点和边:结点表示变换,边表示从一个结点到另一个结点的数据流向。每个结点使用来自其输入边的数据,执行变换并在其输出边上产生数据。关键词是令牌:出现在边上的数据称为令牌,当某个结点的所有输入边都至少有一个令牌时,该结点可触发;结点触发后将使用来自每条输入边的一个令牌,进行数据变换并在输出边上产生一个令牌;结点的触发仅决定于令牌出现的情况。原文的例子是计算 z 等于 a 加 b 括号乘 c 减 d 的数据流模型。
雅
小雅
还有个升级版叫同步数据流模型:在结点的每条输入边和输出边上分别标注每次触发所使用和产生的令牌数。它的优点是在实现时不需要转换为并发多任务模型,而是用静态方式调度结点,产生时序程序模型,可以用时序程序语言如 C 语言来表达,不需要实时操作系统就可以执行,因此执行效率更高。对比着记:普通数据流模型要转换成并发多任务模型,靠实时操作系统映射;同步数据流静态调度,不用实时操作系统。
明
阿明
电梯那个例子我再复述一遍,你看对不对:请求楼层大于当前就上升,小于就下降,到了就开门,计时器超时回空闲。
雅
小雅
复述全对,补一个细节就能应对简答:在初始空闲态将 up 和 down 设置为 0,open 设置为 1;在当前楼层等于所请求的楼层之前,状态机一直留在上升或下降状态,然后转移到开门状态并将 open 设置为 1,同时启动计时器,开门态停留到计时器超时,最后转移到空闲态。答「用状态机模型描述电梯控制」时可以直接套用。
明
阿明
FSM 的输入输出是布尔类型这句有什么用?
雅
小雅
它是 FSMD 的引子:当 FSM 被用于嵌入式系统设计时,其输入和输出的数据类型都是布尔类型,函数是含有布尔运算的布尔函数,这种模型对于没有数据输入或输出的很多纯控制系统而言已经足够。言外之意是要处理数据就不够了,得扩展成 FSMD。判断题「FSM 可以直接处理复数运算」,按原文口径答错,得靠 FSMD。
明
阿明
普通数据流和同步数据流的区别,考试怎么问?
雅
小雅
两条路都要会说。普通数据流模型:已有若干商业化的工具支持用图形化语言表达,可以自动将数据流模型转换为并发多任务模型以便在微处理器上实现,转换方法是每个结点转换为一个任务,每条边转换为一个通道,实现靠实时操作系统对并发任务进行映射。同步数据流模型:标注每次触发使用和产生的令牌数,用静态方式调度结点产生时序程序模型,可用 C 语言表达,不需要实时操作系统就可以执行,执行效率更高。问「哪种模型不需要实时操作系统」,答同步数据流。
明
阿明
计算模型这六种会不会考「哪种适合控制为主的系统」这种配对?
雅
小雅
会,而且原文只给了两对半:状态机模型特别适合描述以控制为主的系统;数据流模型可以很好地描述数据处理和转换问题;目前使用最广泛的是并发进程模型。剩下的时序、通信进程、面向对象没有给专门定位。答案就锁定这三个:控制找状态机,数据处理找数据流,最广泛找并发进程。
明
阿明
并发进程模型怎么运作?
雅
小雅
并发进程模型由一组进程构成,每个进程是一个顺序执行的过程,各进程间可以并发执行;提供创建、终止、暂停、恢复和连接进程的操作;进程在执行中可以相互通信交换数据,进程间通信可以采用两种方式:共享变量和消息传递。信号量、临界区、管程和路径表达式等用来对并发进程的操作进行同步。实时系统可以看成是由许多并发执行的进程构成的系统,很多嵌入式系统本身就是多任务系统,并发进程模型自然地可以由实时操作系统的多任务来实现。
明
阿明
面向对象模型呢?进程和对象怎么结合?
雅
小雅
面向对象模型以一种更加直接的方式刻画客观世界中的活动,模型中存在着潜在的并发执行能力:一个对象向另一个对象发送消息后,若不需要或不立即需要消息的处理结果,前者不必等待后者处理消息,消息发送者和消息接受者可以并发执行。把并发与面向对象相结合,归结起来可分为两条途径:一是在面向对象模型中引进并发机制;二是在传统并发模型中引进面向对象思想。
雅
小雅
面向对象的并发模型分为两种类型。隐式并发模型:特点是推迟并发设计,将对象建模作为建模基础,进入运行阶段之前把对象看成自主单元,外部事件以广播方式传给一些对象,实现时由调度程序最终决定其对象的操作顺序。显式并发模型:特点是首先考虑并发,先把并发概念和对象概念分开,在建立对象以后,用实时操作系统支持的进程概念来表示并发,形成对象和进程两个抽象层次,通过加入锁、监视器、信号量等显式同步机制来保证对象的完整。该模型将进程置于对象之上。
明
阿明
OCTOPUS 这个名字,章鱼,我印象里是诺基亚的?
雅
小雅
没记错,较实用的面向对象的设计方法是诺基亚公司的 OCTOPUS 方法,以 OMT 和融合方法 Fusion Method 为基础,提出了对实时系统响应时间、时间域及并发的处理方法,并具体提出了对并发、同步、通信、中断处理、ASIC、硬件界面、端对端响应时间等方面的处理;将软件开发的主要阶段很好地合并起来,从规格说明到运行模型之间的过渡紧密自然,还支持渐进式开发。OCTOPUS 方法是当前面向对象技术和实时系统相结合的一个典型的设计方法。
明
阿明
OCTOPUS 以 OMT 和融合方法为基础这句,「融合方法」是英文 Fusion Method 吧?这名字会拆开考吗?
雅
小雅
会,问法比如「OCTOPUS 方法以哪两种方法为基础」,答 OMT 和融合方法 Fusion Method。再带一句它提出了对实时系统响应时间、时间域及并发的处理方法,并具体提出对并发、同步、通信、中断处理、ASIC、硬件界面、端对端响应时间等方面的处理——这串清单里藏着多选题的选项池,比如「OCTOPUS 处理了哪些方面」,从这串里挑。
明
阿明
需求分析这边,需求和规格说明是两回事?
雅
小雅
原文专门区分:需求是用户所想要的非形式化的描述,而规格说明是可以用来创建系统架构的更详尽、更精确、更一致的描述。需求有两种类型:功能性需求说明这个系统必须做什么;非功能性需求说明系统的其他属性,如物理尺寸、价格、功耗、设计时间、可靠性等。需求分析阶段最重要的文档输出就是系统的规格说明,规格说明应该是清晰的、无歧义的。业界较为流行的方法是采用 UML 进行规格说明的描述,UML 是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。
雅
小雅
本集必背:六种计算模型是时序、通信进程、状态机、数据流、面向对象、并发进程,状态机适合控制为主的系统、数据流适合数据处理和转换、并发进程使用最广泛;FSM 六元组 S 状态集合、I 输入集合、O 输出集合、F 次态函数、H 输出函数、S0 初始状态;要处理数据扩展成 FSMD,支持分级并发扩展成 HCFSM;
雅
小雅
数据流模型边上出现的数据叫令牌,所有输入边都有令牌结点才触发;同步数据流静态调度、不需要实时操作系统;并发进程通信两方式共享变量和消息传递,信号量、临界区、管程、路径表达式负责同步;面向对象并发模型分隐式和显式,OCTOPUS 是诺基亚的;需求是非形式化描述、规格说明是详尽精确一致的描述,用 UML 建模,需求分功能性和非功能性。
明
阿明
六元组里 F 和 H 的分工我记牢了:F 管状态转移,H 管输出。
雅
小雅
下一集把全章收尾:处理器、操作系统、编程语言的选择标准,Windows CE 为什么是软实时,C 语言凭什么是最广泛,POLIS、COSYMA、PTOLEMY 这些协同设计工具各自的家门,以及测试的三部分、五差别、四集中。