16. 嵌入式系统架构设计理论与实践
1 嵌入式系统概述
嵌入式系统 (Embedded System) 是为了特定应用而专门构建的计算机系统,其架构是随着嵌入式系统的逐步应用而发展形成的。本章先从嵌入式系统体系结构入手,逐步展开对嵌入式软件架构原理进行剖析,并分别对几类典型的嵌入式基础软件架构进行介绍。
1.1 嵌入式系统发展历程
嵌入式系统(Embedded System)的发展大致经历了五个阶段:
- 单片微型计算机 (SCM) 阶段,即单片机时代。
- 硬件是单片机,软件停留在无操作系统阶段,采用汇编语言实现系统的功能。
- 特点:系统结构和功能相对单一,处理效率低、存储容量也十分有限,几乎没有用户接口。
- 微控制器 (MUC) 阶段。主要的技术发展方向是:不断扩展对象系统要求的各种外围电路和接口电路,突显其对象的智能化控制能力。这一阶段主要以嵌入式微处理器为基础,以简单操作系统为核心。
- 主要特点是硬件使用嵌入式微处理器、微处理器的种类繁多,通用性比较弱,系统开销小,效率高。
- 片上系统 (SoC)。
- 主要特点是:嵌入式系统能够运行于各种不同类型的微处理器上,兼容性好,操作系统的内核小,效率高。
- 以 Internet 为基础的嵌入式系统。嵌入式网络化主要表现在两个方面,一方面是嵌入式处理器集成了网络接口,另一方是嵌入式设备应用于网络环境中。
- 在智能化、云技术推动下的嵌入式系统。
- 特点是低能耗、高速度、高集成、高可信、适用环境广等。
- 此时的嵌入式系统向两个方向发展:一个是面向端-端系统微型传感器设备,一个是面向智能服务的设备。
1.2 嵌入式系统硬件体系结构
从传统意义上讲,按嵌入式系统主要由嵌入式微处理器(控制器 (Micro Control Unit,MCU))、 存储器 (RAM/ROM)、 内(外)总线逻辑、定时/计数器 (Time)、 看门狗电路、 I/O 接口(串口、网络、 USB、JTAG 等)和外部设备 (UART、LED等)等部件组成。
1.2.1 嵌入式微处理器
- 处理器按工作环境温度分级:
- 民用级 0 ~ 70 °C
- 工业级 -40 ~ 85 °C
- 军用级 -55 ~ 150 °C
- 其他因素:湿度、震动、加速度
处理器类型
- 微处理器 (Micro Processor Unit,MPU):通用 CPU+外设板,代表 ARM、MIPS、PowerPC
- 微控制器 (Micro Control Unit,MCU):单片化,高集成,代表 8051、C166、ARM-Cortex-M
- 信号处理器 (Digital Signal Processor,DSP):哈佛结构,专于算法,代表 TI C2000/C5000/C6000、Freescale 56000
- 图形处理器 (Graphics Processing Unit,GPU):专于 3D 渲染,硬件 T&L,可 offload CPU
- 片上系统 (System on Chip,SoC):处理器核+外设+存储单芯片,用 VHDL/Verilog 快速集成
1.2.2 存储器分类
按存储器的使用类型可分为只读存储器 (ROM) 和随机存储器 (RAM)。可编程只读存储器 (PROM) 属于可变ROM, 可以将其暴露在一个外部电器设备或光学器件中来改变。
1.2.3 内(外)总线逻辑
总线是计算机各种功能部件之间传输信息的公共通信干线,它是由导电组成的传输线束。
- 按照计算机所传输的信息种类
- 数据总线:用于在 CPU 与 RAM 之间来回传送需要处理或者需要存储的数据
- 地址总线:用于指定在 RAM 之中存储的数据的地址;
- 控制总线:将微处理器控制单元的信号传送到周边设备。
- 根据拓扑结构不同
- 星形
- 树状
- 环形
- 总线型
- 交叉开关型
- 按连接部件分类
- 片内总线: CPU 芯片内部总线,用于连接芯片内部各个元件(如 ALU 寄存器、指令部件)
- 系统总线:计算机内部总线,它是连接计算机系统的主要组件。
- 局部总线:计算机内部总线,通常是指在少数组件之间交换数据的总线,如 CPU 到北桥的总线,内存到北桥的总线,局部总线的协议一般由设备制造商定义。在体系结构较简单的计算机系统中,局部总线和系统总线为同一条总线。
- 通信总线:嵌入式系统主机外部总线,用于连接外部输入输出设备或者其他不同的计算机系统。通信总线又称外部总线或外设总线。
1.2.4 看门狗电路
- 是嵌入式系统必须具备的一种系统恢复能力。
- 基本功能:在系统发生软件问题和程序跑飞后使系统重新启动。
- 其基本原理是看门狗计数器正常工作时自动计数,程序流程定期将其复位,如果系统在某处卡死或者跑飞,该定时器将溢出,并将进入中断处理,在设定时间间隔内,系统可保留关键数据,然后系统复位重启。
1.2.5 I/O接口
I/O 接口是计算机与被控对象进行信息交流的纽带,处理器通过I/O接口与外部设备进行数据交换。大部分I/O接口电路都是可编程的。常用的接口有:
- 串行接口;
- 并行接口;
- 直接数据传送接口;
- 中断控制接口;
- 定时器/计数器接口;
- 离散量接口;
- 数字/模拟接口等。
1.2.6 外部设备
外部设备是指计算机系统中输入、输出设备、外部存储器以及系统调试用的接口的统称。
外部设备包含计算机以外的所有设备,这些外部设备都与计算机相连以辅助计算机完成相关操作。常见的计算机设备包括键盘、鼠标、显示器、笔输入设备、扫描仪、打印机、移动存储器、 JTAG 调试设备等。
1.3 嵌入式软件架构概述
嵌入式系统的软件架构是随着嵌入式系统发展而发展起来的。
在早期的单片机时代(20 世纪 80 年代中期),由于嵌入式系统仅仅用于简单控制类系统,当时软件规模很小(一般是几十“KB”), 软件开发人员使用汇编语言进行编程,调试手段是一种称之为监控程序 (Monitor) 的软件,基本没有嵌入式软件架构之说,要说架构也只能说是分为两层,即监控程序和应用软件;
到了20世纪90年代,嵌入式系统开始走向各个领域,人们发现仅仅靠编制汇编语言已不能满足日益发展的需要,并且由于计算机主频不断升级,处理器仅仅处理简单业务已不能完全发挥计算机能力,因此,后期嵌入式系统开始大量采用嵌入式操作系统,实现计算机资源的统一管理,应用软件开发开始使用高级语言,而软件的开发采用了与嵌入式操作系统配套的开发环境,这样,使得嵌入式软件架构逐步形成。
由于嵌入式系统的专用性,其架构和目标系统是紧密结合的,通常没有统一的架构,要根据嵌入式系统的应用目标的需求,在根据系统的复杂程度、功能大小,来采用不同架构设计方法。目前,比较典型的嵌入式软件架构有两种:层次化模式架构和递归模式架构。
2 嵌入式系统软件架构原理与特征
2.1 两种典型嵌入式架构模式
2.1.1 层次化模式架构
- 高层抽象依赖低层具体实现,形成概念层次栈。
- 封闭型:只能调用同层或相邻下一层,封装好、可移植性强。
- 开放型:可调用任意低层,性能高但破坏封装,移植性差。
2.1.2 递归模式架构
- 用“整体-部分”包含关系持续分解复杂系统,支持逐层求精与实时验证。
- 工作流程:
- 自顶向下:从系统级开始划分子系统,保证需求不偏离。
- 自底向上:先识别域内关键类/关系,再向上汇聚到子系统级。
2.2 嵌入式操作系统
2.2.1 嵌入式操作系统的定义及特点
定义:嵌入式操作系统 (Embedded Operating System,EOS)负责嵌入式系统全部软、硬件资源分配、任务调度、协调并行活动,并集成驱动、协议、图形界面等组件。
主要特点
- 可剪裁性:按需配置,支持开放、可伸缩架构
- 可移植性:跨处理器、跨开发板运行
- 强实时性:满足硬实时控制需求
- 强紧凑性:代码精炼,无冗余
- 高质量代码:用于安全攸关场景,缺陷率低
- 强定制性:按目标系统需求专业化定制
- 标准接口:统一驱动接口,简化开发
- 强稳定性、弱交互性:运行后无需用户干预,通过系统调用提供服务
- 强确定性:任务与资源在规定时间内完成,不超时、不枯竭
- 操作简洁:提供 GUI,易学易用
- 较强硬件适应性:代码可移植;可充分发挥硬件性能
- 可固化性:系统与应用程序常固化于 ROM,运行时调入内存
2.2.2 嵌入式操作系统的分类
- 面向控制、通信等领域的嵌入式实时操作系统:如 WindRiver 公司的 VxWorks、ATI 公司的 Nucleus 等。
- 面向消费电子的非实时嵌入式操作系统:包括移动电话、机顶盒、电子书等,操作系统包括 Google 公司的 Android、Apple 公司的 iOS,以及 Microsoft 公司的 WinCE 等。
2.2.3 嵌入式操作系统的一般架构
- 嵌入式操作系统由硬件驱动程序、调试代理、操作系统内核、文件系统和可配置组件等组成,为应用软件提供标准的 API 应用服务。
- 主要结构:整体结构、层次结构、客户/服务器结构和面向对象结构。
- 整体结构(模块结构、无序结构):基于结构化程序设计。
2.2.4 嵌入式操作系统的基本功能
2.2.4.1 操作系统内核架构
内核是操作系统的核心部分,它管理着系统的各种资源。内核可以看成连接应用程序和硬件的一座桥梁,是直接运行在硬件上的最基础的软件实体。目前从内核架构来划分,可分为宏内核 (Monolithic Kernel) 和微内核 (Micro Kernel)。
- 宏内核架构
- 宏内核:用户服务和内核服务在同一空间中实现。
- 内核可以代表内核进程运行代码,也可以代表用户进程运行代码。
- 宏内核代码耦合度非常高,功能组件代码可以互相调用。
- 微内核架构
- 微内核:内核管理着所有的系统资源,在微内核中用户服务和内核服务在不同的地址空间中实现。
- 微内核架构的一个缺点是微内核中的执行速度相对较慢。
- 微内核系统结构相当清晰,有利于协作开发;微内核有良好的移植性,代码量非常少;微内核有相当好的伸缩性、扩展性。
- 缺点是性能偏低。
2.2.4.2 任务管理
2.2.4.2.1 任务状态
任务一旦被加载到计算机内存后,通常会处于不同的工作状态,这种状态可随着计算机运行而转换。在嵌入式操作系统中,任务的工作状态最简单的可分为三种:执行态、就绪态和阻塞态。
- 执行态:当任务已获得处理机,其程序正在处理机上执行,此时的任务状态称为执行状态。
- 就绪态:当任务已分配到除 CPU 以外的所有必要的资源,只要获得处理机便可立即执行,此时的任务状态称为就绪状态。
- 阻塞态:正在执行的任务,由于等待某个事件的发生而无法执行时,便放弃处理机而处于阻塞状态。
2.2.4.2.2 调度算法
调度算法是嵌入式操作系统最基本功能之一,它是指嵌入式操作系统调度任务的最小单位,类似于操作系统进程的概念。任务是运行中的一个程序,加载到内存后就变成了任务。
- 离线调度和在线调度
- 离线调度:调度获得执行的时机,调度算法可以分离线和在线调度两类。对于离线调度算法,运行过程中使用的调度信息在系统运行之前就确定了,如时间驱动的调度。
- 在线调度:在线调度信息则在系统运行过程中动态获得,如优先级驱动的调度(EDF、RMS)等。
- 抢占和非抢占调度
- 抢占式调度:根据任务在运行过程中能否被打断的处理情况。调度算法分为抢占式调度和非抢占式调度两类。在抢占式调度方法中,正在运行的任务可能被其他任务打断。
- 非抢占式调度:一旦任务开始运行,该任务只有在运行完成后才释放 CPU 资源。
- 静态和动态调度
- 静态调度:根据任务的优先级在设计时已经确定下来,且在运行过程中不会发生变化的算法(如 RMS)。在静态调度算法中,任务的优先级则在运行过程中确定,并可能发生变化(如 EDF)。
- 动态调度:适用于可剥夺的实时特性的情况。静态调度比较简单,但缺乏灵活性;而动态调度有足够的灵活性来处理变化的系统情况,但需要消耗更多的系统资源。
下面介绍几种典型强实时调度算法:
- 最早截止时间优先 (Earliest Deadline First,EDF) 算法。
- 该算法是根据任务的开始截止时间来确定任务的优先级。
- 最早截止时间优先算法既可用于剥夺式调度,也可用于非剥夺式调度方式中。
- 最低松弛度优先 (Least Laxity First,LLF) 算法。
- 该算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。
- 单调速率调度算法 (Rate Monotonic Scheduling,RMS)。
- RMS 是一种静态优先级调度算法,是经典的周期性任务调度算法。
2.2.4.3 存储管理
存储管理是嵌入式操作系统的基本功能之一。其管理的对象是主存,也称内存。它的主要任务是为多道程序的运行提供支持。
2.2.4.3.1 分区存储
分区存储管理有三种不同的方式:静态分区、可变分区、可重定位分区。
- 静态分区存储管理是预先把可分配的主存物理空间分割成若干个连续区域,每个区域的大小可以相同,也可以不同。
- 可变分区方式是将作业的大小来划分分区。
- 可重定位分区是一种动态分区方法。
2.2.4.3.2 分页存储
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页,并为各页加以编号,从 0 开始,如第 0 页、第 1 页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框(frame),也同样为它们加以编号,如 0 号块、1 号块等。
2.2.4.3.3 分段存储
核心是将一个程序按照逻辑单元分成多个程序段,每一个段使用自己单独的虚拟地址空间。如编译器,可以将一个程序分成 5 个虚拟空间,即符号表、代码段、常数段、词法数和调用栈
2.2.4.3.4 段页存储
段页式系统的基本原理,是基本分段存储管理方式和基本分页存储管理方式原理的结合,即先将用户空间划分为若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。
2.2.4.3.5 虚拟存储
- 当程序的存储空间要求大于实际的内存空间时,就使得程序难以运行了。虚拟存储技术就是利用实际内存空间和相对大得多的外部存储器存储空间相结合而成一个远远大于实际内存空间的虚拟存储空间,程序就运行在这个虚拟存储空间中。
- 共享虚拟内存允许进程有其独立的虚拟地址空间,但有时也需要在进程之间共享内存。
2.2.4.4 任务间通信
任务间通信概述
任务间通信管理是嵌入式操作系统的关键功能之一。它主要为操作系统内的应用程序提供多种类型的数据传输、任务同步/异步操作等手段。由于嵌入式操作系统是为应用提供管理、硬件支持、协调任务和中断处理程序等功能,具备着多任务能力,那么操作系统任务之间一般存在以下关系:
- 相互独立:任务之间仅仅存在竞争 CPU 的资源,再无其他关联。
- 竞争:任务之间存在对除 CPU 外的其他资源的竞争(即互斥机制)。
- 同步:协调彼此运行的步调。
- 通信:彼此间传递数据和信息,以协调完成某项工作。
要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,常用的通信方式包括:
- 共享内存:数据的简单共享。
- 是任务间最直接的、最明显的通信方法,也是访问共享的数据结构,即不同的任务可以访问同一地址空间。
- 信号量:基本的互斥和同步。
- 信号量是提供任务间通信、同步和互斥的最优选择,它提供任务间的最快通信。也是提供任务同步和互斥的主要手段。
- 消息队列:同一 CPU 内多任务间消息传递。
- 是一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上)的消息。
- 消息队列是一个类似于缓冲区的对象,通过它,任务和 ISR 发送接收消息,实现带数据的通信和同步。
- 消息队列像一个管道,它暂时保持来自一个发送者的消息,直到有准备的接收者准备读取这些消息。
- 管道(pipeline)是消息队列的一种,是 UNIX 操作系统中传统的进程通信技术,又分无名管道和命名管道,以 I/O 系统调用方式进行读写。
- Socket 和远程调用:任务间透明的网络通信。
- Socket 和远程调用是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用程序实现进程在网络中的通信。
- Signals (信号):用于异常处理。
2.2.5 典型嵌入式操作系统
- VxWorks:美国 WindRiver 公司开发的实时操作系统,支持多种处理器架构,广泛应用于航空航天、国防等领域。
- LynxOS:Lynx Real-Time Systems 开发的实时操作系统,支持分布式架构,适用于高可靠性和实时性要求的应用。
- Nucleus:ATI 开发的实时操作系统,特点是小体积、高可靠性,适用于资源受限的嵌入式系统。
- QNX:QNX Software Systems 开发的实时操作系统,采用微内核架构,支持多种处理器,广泛应用于汽车电子和网络设备。
- Android:Google 开发的开源操作系统,基于 Linux 内核,主要用于智能手机和平板电脑。
- iOS:苹果公司开发的操作系统,基于 Unix,主要用于 iPhone、iPad 和其他苹果设备。
- ROS:机器人操作系统,提供一系列工具和库,用于机器人软件的开发和测试。
此外,物联网操作系统 (IoTOS) 也成为嵌入式操作系统的一个
核心分支。
随着我国国力的增强,在国家大力支持下,国产嵌入式操作系统如雨后春笋蓬勃发展。推出了多款嵌入式操作系统,如:天脉 (AcoreOS)、 瑞华 (ReWoks)、 麒麟 (Kirin)、 鸿蒙(HarmonyOS) 等,并已被广泛应用。
2.3 嵌入式数据库
2.3.1 嵌入式数据库的定义及特点
嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。
嵌入式数据库用途广泛,如可用于消费电子产品、移动计算设备、企业实时管理应用、网络存储与管理以及各种专用设备。
特点
- 嵌入式:嵌入式数据库是嵌入式数据库的基本特性。嵌入式数据库不仅可以嵌入到其他的软件当中,也可以嵌入到硬件设备当中。
- 实时性:实时性和嵌入式是分不开的。只有具有了实时性的数据库才能够第一时间得到系统的资源,对系统的请求在第一时间内做出响应。
- 移动性:移动性是指在国内被提及比较多的一个说法,这和目前移动设备的大规模应用有关。
- 伸缩性:伸缩性在嵌入式场合显得尤其重要。首先嵌入式场合硬件和软件的组合都是千差万别的。
2.3.2 嵌入式数据库的分类
嵌入式数据库分类方法很多,可以按照嵌入对象的不同可分为软件嵌入式数据库、设备嵌入式数据库、内存嵌入式数据库等。
按照系统结构不同可分类嵌入数据库、移动数据库、小型 C/S(客户机/服务器)结构数据库等。
按照数据库存储位置的不同而进行分类是目前广泛采用的分类方法,它可以划分为基于内存方式、基于文件方式和基于网络方式三类。
- 基于内存的数据库系统 (Main Memory Database System,MMDB)
- 实时事务要求系统能准确地预测事务的运行时间。
- 由于磁盘存取、内外存数据传递、缓冲区管理、排队等待及锁的延迟等,使得事务实际平均执行时间与估算的最优情况执行时间相差很大。
- 基于文件的数据库 (File Database,FDB)
- 以文件方式存储数据库数据。
- 这种数据库的访问方式是被动式的,只要了解其文件格式,任何程序都可以直接读取。
- 基于网络的数据库
- 嵌入式网络数据库主要由三部分组成:客户端、通信协议和远程服务器。
- 嵌入式网络数据库系统的特点:无需解析 SQL 语句;支持更多的 SQL 操作;客户端小、无须支持可剪裁性;有利于代码重用。
2.3.3 嵌入式数据库的一般架构
- 基于内存的数据库系统
- 基于内存的 eXtremeDB 嵌入式数据库,2013 年 3 月推出 5.0 版,采用内存数据结构,基于对象模型,并直接与应用结合,不属于客户端/服务器架构。
- 基于文件的嵌入式数据库系统
- 基于文件的嵌入式数据库系统是以文件方式存储数据库数据。如 SQLite。
- 基于网络的数据库系统
- 以远程数据库为存储载体的,客户端通过移动网访问服务器上的远程数据库。
2.3.4 嵌入式数据库的主要功能
- 足够高效的数据存储机制
- 嵌入式数据库系统由于采用了内存缓冲的技术,必然要涉及嵌入式操作系统的内存管理。
- 数据安全控制(锁机制)
- 嵌入式数据库系统在设计时必须考虑数据的安全性。
- 实时事务管理机制
- 嵌入式数据库系统必须支持实时事务。
- 数据库恢复机制(历史数据存储)
- 嵌入式数据库可划分成数据库运行处理、数据库存取、数据库管理、数据库维护和数据库定义等功能。
这样,一般嵌入式数据库可划分成数据库运行处理、数据库存取、数据管理、数据库维护和数据库定义等功能。
2.3.5 典型嵌入式数据库系统
2.3.5.1 SQLite
- 轻量级,无需安装配置
- 支持 ACID 事务
- 跨平台,文件共享
- 数据库大小支持至 2TB
2.3.5.2 Berkeley DB
- 嵌入式,无需安装配置
- 支持多种编程语言 API
- 高并发,支持大规模数据库
- 轻便灵活,可伸缩
2.3.5.3 Firebird 嵌入式服务器版(Embedded Server)
- 与网络版数据库文件兼容
- 支持 SQL-92 标准
- 丰富的开发工具支持
- 支持事务、存储过程、触发器
2.3.5.4 eXtremeDB
- 内存数据库,实时性强
- 支持持久化存储
- 极小的代码体积和堆空间
- 提供对动态数据结构的本地支持
2.4 嵌入式中间件
2.4.1 嵌入式中间件的定义及特点
- 定义:中间件是一种独立的系统软件或服务程序,分布式应用程序借助这种软件在不同的技术之间共享资源。
- 特点:
- 通用性:满足大量应用的需要
- 异构性:运行于多种硬件和操作系统平台
- 分布性:支持分布式计算,提供跨网络、硬件和操作系统平台的透明应用服务的交互功能
- 协议规范性:支持各种标准的协议
- 接口规范性:提供标准的接口
2.4.2 嵌入式中间件的分类
- 根据 IDG 在 1998 年对中间件进行的分类,把中间件分为终端仿真/屏幕转换中间件、数据库访问中间件、远程过程调用中间件、消息中间件、交易中间件和对象请求代理中间件六类。
- 但是,如今所保留下来的只有消息中间件和交易中间件,其他的类型已经被逐步融合到其他产品中。
从现代中间件观点看,通用中间件大致存在以下几类:
- 企业服务总线中间件 (Enterprise Service Bus,ESB):ESB 是一种开放的、基于标准的分布式同步/异步信息传递中间件。通过 XML、Web 服务接口以及标准化基于规则的路由选择文档支持, ESB为企业应用程序提供安全互用性。
- 事务处理 (Transaction Processing,TP) 监控器:为发生在对象间的事务处理提供监控功能,以保证操作成功。
- 分布式计算环境 (Distributed Computing Environment): 指创建运行在不同平台上的分布式应用程序所需的一组技术服务。
- 远程过程调用 (Remote Procedure Call): 指客户机向服务器发送关于运行某程序的请求时所需的标准。
- 对象请求代理 (Object Request Broker,ORB): 为用户提供与其他分布式网络环境中对象通信的接口。
- 数据库访问中间件 (Database Access Middleware): 支持用户访问各种操作系统或应用程序中的数据库。
- 消息传递 (Message passing): 电子邮件系统是该类中间件的其中之一。
- 基于 XML 的中间件 (XML-Based Middleware):XML 允许开发人员为实现 Internet 中交
换结构化信息而创建文档。
2.4.3 嵌入式中间件的一般架构
2.4.3.1 消息中间件
消息中间件是消息传输过程中保存消息的一种容器。它将消息从它的源中继到它的目标时充当中间人的作用。
消息中间件具有两个基本特点:
- 采用异步处理模式:消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列)上,消息接收者则订阅或是监听该通道。一条消息可能最终转发给一个或多个消息接收者,这些接收者都无须对消息发送者做出同步回应。整个过程是异步的。比如用户消息注册,注册完毕后过段时间发送邮件或者短信。
- 应用程序和应用程序调用关系为松耦合关系:发送者和接收者不必了解对方、只需要确认消息,发送者和接收者不必同时在线。比如在线交易系统为了保证数据的最终一致,在支付系统处理完成后会把支付结果放到消息中间件里通过订单系统修改订单支付状态。两个系统通过消息中间件解耦。
消息传递服务模型有点对点模型 (PTP) 和发布-订阅模型 (Pub/Sub) 之分。
2.4.3.2 分布式对象中间件
分布式对象中间件是为了解决分布式计算和软件复用过程中存在的异构问题而提出的。它的核心是对象请求代理(ORB)。
目前,市场上比较著名的分布式对象中间件技术有:
- OMG (对象管理组织)的公共对象请求代理结构 (CORBA): 规定了分布式对象之间如何实现互操作;
- Microsoft 公司的分布式组件对象模型 (DCOM): 主要是为不同网络环境中的分布式对象提供交互标准;
- Java 商业应用组件技术 EJB: 采用一种面向服务器端分布式构件的技术。
2.4.4 嵌入式中间件的主要功能
嵌入式中间件的主要作用是对嵌入式应用屏蔽底层操作系统的异构性。其常用功能有网络通信、存储管理和数据处理等。
- 网络通信:嵌入式系统的网络通信中间件是实现整个系统的框架结构和基本的通信接口功能。
- 存储管理:嵌入式系统的存储管理中间件是实现整个系统数据库平台、跨介质的存储接口功能。
- 数据处理:嵌入式系统的数据处理中间件实现了整个分布式系统框架结构和事务与基本互操作的接口功能。
2.4.5 典型嵌入式中间件系统
当前,嵌入式系统使用最为广泛的中间件有两个产品,分别是公共对象请求代理结构(CORBA) 和数据分发服务 (Data Distribution Service,DDS)。
- CORBA 是一种标准的中间件技术规范,具有以下特点:
- 完整的作为事务代理的中间件。
- 客户端与服务器端可完全分离。
- 提供软件总线机制,支持多环境、多语种的分布式集成。
- 完整的对象内部细节的封装。
- 实时性强。
- DDS 是一种轻量级的、能够提供实时信息传送的中间件技术,具有以下特点:
- 灵活的发布/订阅模式。
- 完整的 QoS 服务质量策略。
- 已扩展的 QoS 服务质量策略。
- 互操作;
- 强实时;
- 跨平台。
- 支持多种底层物理通信协议。
- 支持仿真、测试和安装的全生命周期服务。
2.5 嵌入式系统软件开发环境
2.5.1 定义及特点
- 嵌入式系统软件开发环境是帮助用户开发嵌入式软件的一组工具的集合。
- 主要特点:
- 集成开发环境(IDE):提供代码编辑器、编译器、调试器等。
- 交叉开发(Cross Development):在通用计算机上开发,目标机上运行。
- 开放式体系结构:符合相关标准,支持多种编程语言。
- 可扩展性:根据需要进行工具能力的扩充。
- 良好的可操作性:支持自动信息功能。
- 可移植性:基于高级语言实现。
- 可配置性:根据需要进行代码裁剪。
- 代码的实时性:生成高效代码。
- 可维护性:支持代码优化和升级。
2.5.2 分类
- 嵌入式系统软件开发环境通常由编译器、调试器、版本控制等组成。
- 调试方法:模拟器方法、在线仿真器方法、监控器方法、 JTAG仿真器等。
- 根据嵌入式应用软件的开发类型的不同,可分为无操作系统的软件开发和基于操作系统的
软件开发两种。
2.5.3 一般架构
Eclipse 框架是当前嵌入式系统软件开发环境被普遍公认的一种基础环境框架。目前大多数嵌入式软件开发环境都是建立在 Eclipse 框架之上的层次化架构,具备开放式、构件化、即插即用等特征。
通常,嵌入式软件开发环境按功能可划分为宿主层、基本工具层、应用工具层和驻留层。
宿主层、基本工具层和应用工具层运行在宿主机上,为用户提供嵌入式软件开发所需要的能力
工具;驻留层作为一种可剪裁组件,运行在目标机上,为其他层工具运行提供宿主机与目标机
间的通信和代理服务。
2.5.4 嵌入式系统软件开发环境的主要功能
- 工程管理功能:工程管理支持将嵌入式软件中的各类资源(源代码、目标码、数据文件、配置文件和脚本文件等)以工程项目的方式组织管理,提供规范的项目向导、预定义项目模板以及资源管理能力,同时为其他工具提供操作入口。
- 编辑器功能:为嵌入式软件开发人员提供对源文件、配置文件、脚本文件等资源进行编辑的工具。
- 构建管理功能:构建(Make)是指将一个工程中的文件在若干个目录中、不同类型的多个源文件进行智能批处理的工具。
- 编译/汇编器功能:编译(汇编)器是在宿主机上运行,能够编译出在嵌入式设备上运行的可执行代码的工具。
- 配置功能是面向嵌入式系统的资源管理功能,根据目标系统需求,为系统进行定制化管理的工具。
- 调试器功能:调试是嵌入式软件开发不可或缺的一个环境,是开发环境最为关键的一项功能。
- 目标机管理功能:主要功能是负责开发环境对连接的多个目标机进行管理和数据交换,为其他工具提供稳定、可靠的宿主机与目标机间的通信服务。
- 仿真器功能:仿真器功能主要是解决嵌入式软件的软硬件并行设计问题。
2.5.5 典型嵌入式开发环境
2.5.5.1 基于 GCC 开源工具的软件开发环境
GNU 编译器套件主要包括编译器(GCC)、汇编器(AS)、连接器(LD)、库管理器(AR)、Make 以及其他使用程序。
2.5.5.2 Workbench 软件开发环境
Workbench 是由美国 WindRiver 公司研制的一款嵌入式软件开发环境,是面向本公司 VxWorks 操作系统产品配套的开发环境。
2.5.5.3 MULTI 集成开发环境
MULTI 是美国 GreenHills 公司研制的一款具有调试、编译器和代码编程工具的嵌入式集成开发环境(IDE)。
3 嵌入式系统软件架构设计方法
3.1 基于架构的软件开发方法的应用
- 嵌入式系统是为某特定对象、特定目标而设计的一种系统,设计通常具备目标明确、用途单一、质量、可靠性要求高等。
- 基于架构的软件设计 (Architecture-Based Software Design,ABSD)可适应于嵌入式系统的软件设计方法。
3.2 属性驱动的软件设计方法
- 嵌入式系统的最大不同点就是高质量属性始终贯穿于整个产品的全生命周期中。
- 属性驱动的软件设计(Attribute-Driven Design, ADD)是把一组质量属性场景作为输入,利用对质量属性实现与架构设计之间的关系的了解(如体系结构风格)来设计软件架构。
3.2.1 ADD 开发方法的质量属性
质量属性
- 质量属性是指反映软件产品某一方面质量的特征或特征,如:可靠性、安全性、易用性等。
- 软件的质量属性可列举很多,在不同应用领域,也有各种不同的分类法和不可描述。
质量场景
- 质量场景是描述质量属性需求的一种规范,是一种面向特定的质量属性的需求。
- 质量场景通常由刺激源、刺激、环境、制品、响应和响应度量等 6 个部分组成。
3.2.2 ADD 开发过程
- 采用 ADD 方法进行软件开发时,需要经历评审、选择驱动因子、选择系统元素、选择设计概念、具体化元素和定义接口、草拟视图和分析评价等七个阶段。
- 软件质量模型是描述质量场景的最有效的方法。
3.3 实时系统设计方法
3.3.1 DARTS 开发方法的基本概念
DARTS 方法是针对实时系统设计的一种方法,主要将实时系统分解为多个并发任务,并定义这些任务之间的接口。
3.3.1.1 RTSAD 方法
- RTSAD 方法是对传统结构化分析和设计方法的补充扩展,专门用于开发实时系统。
- 任务结构化标准可以为设计人员将实时系统分解为并发任务的时候提供帮助。
- 信息隐藏作为封装数据存储的标准来使用。
- RTSAD 设计方法使用任务架构图来显示系统分解为并发任务的过程,以及采用消息、事件
和信息隐藏模块形式的任务间接口。
3.3.1.2 DARTS 开发过程
- 用实时结构化分析方法(RTSA)开发系统规范。
- 将系统划分为多个并发任务。
- 定义任务间接口。
- 设计每个任务。
- 设计过程的成果包括 RTSA 规范、任务结构规范和任务分解。
3.3.1.3 DARTS 开发方法的评价
- 强调把系统分解成并发的任务,并提供确认这些任务的标准。
- 提供了详细的定义任务间接口的指南。
- 强调了用任务架构图(STD)的重要性。
- 提供了从 RTSA 规格到实时设计的转换。
4 嵌入式系统软件架构案例分析
4.1 鸿蒙操作系统案例分析
- 鸿蒙操作系统(HarmonyOS)采用分层的层次化设计,从下向上依次为:内核层、系统服务层、框架层和应用层。
- 系统功能按照“系统”、“子系统”、“功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。
4.1.1 鸿蒙的层次化分析
- 内核层:由内核子系统和驱动子系统组成,支持不同资源受限设备选用适合的 OS 内核抽象层。
- 系统服务层:为核心能力子系统集,提供分布式软总线、分布式数据管理等基础能力。
- 框架层:为应用层提供 Java/C/C++/JS 等多语言的用户程序框架和组件框架。
- 应用层:包括系统应用和第三方非系统应用。
4.1.2 鸿蒙操作系统的架构分析
鸿蒙操作系统架构具有 4 个技术特性:
- 分布式软总线:实现跨终端无缝协同体验。
- 确定时延引擎和高性能 IPC 技术:解决系统性能问题。
- 基于微内核:提供高安全和低时延等特性。
- 通过统一 IDE 支撑一次开发,多端部署,实现跨终端生态共享。
4.2 面向安全攸关系统的跨领域 GENESYS 系统架构案例分析
GENESYS 框架概述
- GENESYS(Generic Embedded System) 是一种跨领域的通用嵌入式系统架构平台,由欧洲 ARTEMIS 专家小组提出。
- GENESYS 架构的建立,主要解决了当时嵌入式系统所面临的三个主要挑战:
- 复杂性管理的挑战
- 系统健壮性的挑战
- 能量有效使用的挑战
GENESYS 架构主要提供了三组服务,即领域无关服务、领域专用服务和应用专用服务(包括中间件)。
GENESYS 架构将构件归为四类:硬件构件和软件构件、系统构件和应用构件。
GENESYS 架构的重要思想是分离计算与通信,将计算构件和通信设施作为独立构件进行设计。
GENESYS 架构特征
- 分布式架构
- 确定时延引擎和高性能 IPC 技术
- 基于微内核架构
- 通过统一 IDE 支持一次开发,多端部署
GENESYS 架构的组件接口
基于 GENESYS 架构的四类基于消息的构件接口:
- 链接接口 (LIF):提供了构件之间基于消息的操作服务,是构件的综合接口。
- 局部接口 (LI):LI 是构件连接到外部环境(如 I/O、 其他系统)的接口。
- 技术无关接口 (TII):用于系统运行需要的配置或管理类型的接口。
- 技术相关的接口 (TDI):用于查看构件内部、观察构件的内部变量的接口。
GENESYS 架构的主要特征及优势
- 明确的构件接口:易于理解并符合逻辑关系。
- 跨领域重用:可以跨领域重用。
- 规模经济性:提升工业产品的规模经济性。
- 健壮性:独立构件可被复位、重启、重连。
- 可扩展性:通过标准化技术进行技术升级。
- 可集成性:不同供应商生产的构件可以通过标准化技术进行集成。
- 可升级性:不受构件环境影响进行技术升级。
- 遗产系统的集成:使用特殊网关构件集成遗产系统。
- 降低成本:标准化的开放式接口降低成本。
- 三级绑定:定义了三级网络绑定。
4.3 物联网操作系统架构案例分析
物联网操作系统架构概述
物联网(IoT)是通过信息传感设备,按约定的协议,将任何物体与网络相连接,物体通过信息传感媒介进行信息交换和通信,以实现智能化识别、定位、跟踪、监管等功能。在物联网应用中有三项关键,分别是感知层、网络传输层和应用层。
FreeRTOS 软件架构
- FreeRTOS 是一款开源的实时操作系统,是世界上最受欢迎的 RTOS,目前由亚马逊、reeRTOS 系统主要由 BSP 驱动、内核和组件库等组成。
- 操作系统内核包含了传统操作系统的最基本功能,如多任务调度、内存管理、任务间通信等,它为上层组件提供相应的标准接口。
物联网操作系统的主要特征
- 内核尺寸伸缩性以及整体架构的可扩展性。
- 内核的实时性。
- 高可靠性。
- 低功耗。