【系统分析师之路】系统分析师必知必会(嵌入式系统设计)
嵌入式系统必知必会
一.嵌入式系统的特点
1. 系统专用性强
嵌入式系统是针对具体应用的专门系统。它的个性化很强,软件和硬件结合紧密。
一般要针对硬件进行软件的开发和移植,根据硬件的变化和增减对软件进行修改。
由于嵌入式系统总是用来完成某一特定任务的,整个系统与具体应用有机地结合在一起,升级换代也以更换整个产品的方式进行,因此,嵌入式产品一旦进入市场,一般具有较长的生命周期。
2. 系统实时性强
很多嵌入式系统对外来事件要求在限定的时间内及时做出响应,具有实时性。
根据实时性的强弱,通常将嵌入式系统分为实时嵌入式系统和非实时嵌入式系统,其中大部分为实时嵌入式系统。
3. 软硬件依赖性强
嵌入式系统的专用性决定了其软硬件的互相依赖性很强,两者必须协同设计
以达到共同实现预定功能的目的,并满足性能、成本和可靠性等方面的严格要求。
4. 处理器专用
嵌入式系统的处理器一般是为某一特定目的和应用而专门设计的。
通常具有功耗低、体积小和集成度高等优点
能够将许多在通用计算机上需要由板卡完成的任务和功能集成到芯片内部,从而有利于嵌入式系统的小型化和移动能力的增强。
5. 多种技术紧密结合
嵌入式系统通常是计算机技术、半导体技术、电力电子技术、机械技术与各行业的具体应用相结合的产物。
通用计算机技术也离不开这些技术,但它们相互结合的紧密程度不及嵌入式系统。
6. 系统透明性
嵌入式系统在形态上与通用计算机系统差异甚大。
它的输入设备往往不是常见的鼠标和键盘之类的设备,甚至没有输出装置
用户可能根本感觉不到它所使用的设备中有嵌入式系统的存在,即使知道,也不必关心嵌入式系统的相关情况。
7. 系统资源受限
嵌入式系统为了达到结构紧凑、高可靠性和低成本的目的,其存储容量、I/O 设备的数量和处理器的处理能力都比较有限。
8. 其他特点
系统可靠性高
系统安全性强
系统追求低功耗
系统环境适应性强
易移植性:嵌入式操作系统能运行在不同的微处理器平台上,能针对硬件变化进行结构与功能上的配置。
二.嵌入式系统初始化过程
嵌入式系统初始化过程主要有3个环节,按照自底向上、从硬件到软件的次序依次为片级初始化、板级初始化和系统级初始化。
01 片级初始化
微处理器的初始化
微处理器从上电时的默认状态逐步设置成系统所要求的工作状态
完成嵌入式微处理器的初始化,包括设置嵌入式微处理器的核心寄存器和控制寄存器、嵌入式微处理器核心工作模式和嵌入式微处理器的局部总线模式等。
片级初始化把嵌入式微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。这是一个纯硬件的初始化过程。
02 板级初始化
微处理器以外的其他硬件设备的初始化
为随后的系统级初始化和应用程序的运行建立硬件和软件环境。
完成嵌入式微处理器以外的其他硬件设备的初始化。
另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。
这是一个同时包含软硬件两部分在内的初始化过程。
03 系统初始化
主要进行操作系统的初始化
加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块
BSP将对嵌入式微处理器的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作,包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,如网络系统、文件系统等。
最后,操作系统创建应用程序环境,并将控制权交给应用程序的入口。
三.嵌入式CPU体系结构
CPU体系结构中有以下六种。CPU执行核中包括了:CPU状态,中断逻辑,执行单元,Cache。
1. 单核结构
计算机中仅有一个物理处理器,不支持应用软件的并行执行,因为在任何时间点上,CPU只能执行一个指令流。
2. 多处理器结构
支持真正意义上的并行执行,因为多个线程或进程能够在多个处理器上同时执行。
3. 超线程结构SMT
实际上计算机中只有一个实际的物理处理器,但从软件角度来看,存在多个逻辑处理器,支持操作系统和应用程序将多个线程调度到多个逻辑处理器上,就像多处理器系统一样。
从微体系结构的角度看,逻辑处理器的指令是固定的,并且在共享的执行资源上同时执行。
4. 多核结构
采用单芯片多处理器CMP的设计,此种结构不是重用单个处理器中某些处理器资源,而是在单个处理器芯片内实现两个或更多的”执行核”。
这些执行核心都是相互独立的处理器,并具有自己的执行集合以及体系结构资源。
5. 共享Cache的多核结构
与多核结构工作方式相一致,主要差别在于设计时将这些执行核设计成可共享片上的Cache
6. 采用超线程技术的多核结构
主要是将多核结构与超线程结构相结合,从而将逻辑处理器的数量增加到执行核的两倍
7.多核与多线程的区别
1. 多核
多核是多微处理核的简称,是将两个或更多的独立处理器封装在一起,集成在一个电路中。
多核处理器是单枚芯片(也称硅核),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器。
通过在多个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多的任务。
多核与多CPU相比,可以很好降低系统的功耗和体积。
在多核技术中,计算机可以同时执行多个进程;在操作系统中,多个线程也可以并发执行。
多核操作系统的设计方法不同于单核操作系统,一般要突破核结构、Cache设计、核间通信、任务调度、中断处理、同步互斥等方面的关键技术。
SMP、BMP和MP是多核处理器系统通常采用的三种结构,采用哪种结构与应用场景相关,也需要考虑硬件的组成差异
2. 多线程
多线程是指从软件或者硬件上实现多个线程并发执行的技术。
具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
四. 多核编程技术
有并行计算,共享资源分布式计算,任务分解与调度,Lockfree编程等
多核编程的目的是将多核处理器的性能充分发挥出来。
多线程技术带来的挑战有以下四个方面
1. 同步
是指两个或者多个线程协调其行为的过程。
如一个线程停下来等待另一个线程完成某项任务
2. 通信
是指与线程之间交换数据相关的带宽和时延问题
3. 负载均衡
是指多个线程之间工作量分布的情况。
负载均衡能够使各线程的工作量均衡分配
4. 可伸缩性
是衡量在性能更加强劲的系统上运行软件时能否有效利用更多线程的指标。
例如,如果一个应用程序是面向四核系统编写的,那么当程序在八核系统上运行时,其性能是否能够线性增长(即增加一倍)
1)多核的优点
多核时代编写应用程序为了充分利用多个计算核心,缩短计算时间,或者在相同的时间段内计算更多任务。
例如,在进行游戏编程时,通过多线程的方式把碰撞检测的计算分散到多个CPU内核,就可以大大缩减计算时间,也可以利用多核做更细致的检测计算,从而能够模拟更加真实的碰撞。
多核编程的优势(结合多线程)
线程的创建和切换开销比进程更小。
线程之间通信的方式比较多,而且简单也更有效率。
多线程有很多的基础库支持。
多线程的程序比多进程的程序更容易理解和修改。
2)多核的不足之处
多核处理器虽然带来了强大的计算能力,但如果无法实现程序的并行,那么,大量计算资源将被闲置,造成巨大的浪费。所以在开发中,要注重并行多核编程技术。
五. 线程的并行和并发
1.并行
指两个或多个事件在同一时刻发生。并行源于系统存在多个(套)硬件资源,如多核CPU。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。
2.并发
指两个或多个事件在同一时间间隔内发生。从微观的角度看,还是串行。如单CPU系统。如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统,即系统中同时有多个线程,可以认为是并发的情况。
六. 嵌入式腰型架构
此架构具有较好地支持面向构件的设计方法。
核心服务层提供的服务与域无关,它提供两类服务,核心服务和选择服务。
选择服务可以用于多个域,必要的话,开发者可将选择服务从架构中摘除。
域服务针对某个具体应用领域所提供的一组服务,这组服务建立在核心服务和已经确定的选择服务之上,为应用提供服务。
应用服务层为每个具体应用所提供的服务(含中间件构件),它与具体应用紧密相关。
实现了应用间相对无关性设计,架构的腰部为与领域无关的核心服务。
CS表示领域无关的核心服务、OS表示领域无关的选择性服务、DSC表示领域相关的中心服务、DSO表示领域相关的选择性服务
架构的6个特点
面向构件化
开放式
支持多种安全级别
服务的层次化
确定性核心
内部组合的标准化
七. 可信计算
1. 基本思想
首先在计算机系统中建立一个信任根,再建立一条信任链,从信任根开始,经过硬件平台和操作系统,再到应用,一级测量验证一级,一级信任一级,从而把这种信任扩展到整个计算机系统。
2. 实现技术
可信计算组织的信任链采用了一种链式的信任测量模型,即由RTM(可信测量根)→BIOS→OSLoader→OS构成一个串行链。
由于采用了一种迭代计算哈希值的方式,即将现值与新值相连,再计算哈希值并作为新的完整性度量值存储起来。
3. 链式信任的缺点
信任链越长,信任损失的可能性就越大。
在链中加入或删除一个部件,PCR的值需要重新计算,很麻烦。
信任链中的软件部件可能会更新(如BIOS升级,OS打补丁等),而PCR的值也得重新计算,这样一来使得部件更新工作很麻烦。
4. 可信测量根
可信测量根置入可信平台模块内部NVRAM(Non-VolatileRandom Access Memory,非易失性随机访问存储器),在信任链中增加了数据恢复功能,并将信任链延伸到应用。
5. 星型可信计算特点
与链式信任链相比具有的特点:
可信测量根被保护,安全性更高
具有数据恢复功能,安全性更高;
都是一级测量,没有多级信任传递,信任损失少。
但所有测量都由可信测量根执行,可信测量根通过可信平台模块完成任务,这使得可信平台模块负担加重。
6. 软件的可信性
软件的可信性很大程度上依赖于程序代码的可信性,影响软件可信性的主要因素包括来自软件内部的代码缺陷、代码错误、程序故障以及来自软件外部的病毒、恶意代码等。
因此,从代码角度来保证软件的可信性是实现可信软件的重要途径之一。
7. 可信编译
1)目标
从编译的角度保证软件的可信性
2)两个方面含义
编译器本身可信
必须保证编译器自身是可信的。即必须保证整个编译操作的可信性,保证编译器在编译过程中不会给编译处理对象带来任何安全性问题,防止恶意攻击者通过修改编译器,在编译过程中对代码的原始语义进行篡改,影响程序代码本身的可信性;
编译后可执行代码可信
必须保证编译器编译所得程序可执行代码是可信的,即编译器必须保证,通过其编译生成的程序代码是安全和可靠的。
8. 代码安全性加强机制
代码安全性加强机制
该机制主要用于识别和处理程序中常见的一些安全漏洞。
代码可信性验证
该机制不可能解决所有的代码安全性问题。对于可信性要求较高的程序代码,必须通过形式化方法对其进行可信性验证。
可执行代码保护机制
为了防止攻击者对可信编译器最终生成的可执行代码进行恶意攻击或修改
八.虚拟化技术
1. 虚拟化技术架构
计算机虚拟化是一种新型的计算模式,能够动态组织多种计算资源,隔离硬件体系结构和软件系统之间的依赖关系,实现透明化、可伸缩的计算系统构架,提高计算资源的使用效率和遗产软件的重用
2. 虚拟化技术分类
当前虚拟化的实现技术主要有全虚拟化和半虚拟化两种。
具有虚拟化能力的嵌入式实时操作系统目前仅支持单核处理器,而不支持多核处理器。
因为多核存在共享资源访问,虚拟化后会影响分区化的安全性。
3. 半虚拟化技术
精心修改客户操作系统内核,在只把有限量内核代码替换为相应Hypercall的基础上实现虚拟化。
特点:
1)虚拟化性能高
2)需要修改客户操作系统
3)不受CPU硬件限制
4)使用范围受到制约
4. 全虚拟化技术
能够在硬件虚拟化的支持下,运行任何不需要修改的客户操作系统。
特点:
1)需要硬件支持
2)通用性高,过程简洁
3)虚拟化性能低
4)不需修改客户操作系统
5. 多核中使用虚拟化技术
共享引导逻辑
执行影像的安全性受到潜在威胁;
共享CACHE
潜在的旁路通道遭数据泄漏攻击
共享I/O逻辑
潜在的隐蔽通道攻击和服务拒绝攻击;
结构的复杂性
会存在潜在的故障注入攻击。
九.嵌入式操作系统选择
1. 满足需求
根据系统需要的嵌入式操作系统功能选择操作系统产品,要考虑系统需求是否覆盖了操作系统全部或部分功能。
比如是否支持文件系统和人机界面;选择实时系统还是分时系统
2. 实时性
根据对时间的敏感性分为硬实时操作系统和弱实时操作系统两类,随着处理器计算速度的提升,人们赋予计算机处理事务的能力也在增强,因此,传统的嵌入式操作系统分类方法仍然满足现在需求。
比如有些嵌入式操作系统只能提供弱实时性能,对于需要达到硬实时性性能要求的系统就不适用。
3. 开发效率
选择操作系统的目的是提高嵌入式软件开发效率,将应用软件的开发从与硬件相关分离出来。因此选择操作系统时除了考虑操作系统能力与项目需求相匹配外,还要充分考虑配套开发环境的优劣
比如有些RTOS只支持该系统供应商的开发工具。可以向供应商获取编译器和调试器等,还有系统是否有第三方工具可用。
4. 可移植性
要选择那些可移植性程度高的产品,从而避免嵌入式操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。
5. 可裁剪性和可配置性
应根据项目应用需求分配资源,而不是为操作系统分配资源
有些嵌入式操作系统对内存的要求是与目的相关的,如VxWorks等,开发人员能够按照应用需求分配所需资源,而不是为嵌入式操作系统分配资源
6. 可扩展性
选择操作系统还要考虑对扩展功能的支持能力,可剪裁的组件越丰富,操作系统的适用面就越大
嵌入式操作系统是否包含所需的软件部件,例如网络协议栈、文件系统和各种常用外设的驱动等,也是选择嵌入式操作系统重点关注的。
7. 安全性
操作系统的质量好坏,直接影响嵌入式设备的安全。
十.特殊领域嵌入式特征
1. 安全性
通常根据软件所在设备失效而对系统安全性(Safety)影响的严重程度分为多种安全级别(如:A〜E五级),而不同安全级别的软件开发过程有其不同的要求
普通嵌入式的软件主要用于辅助人们工作与生活,一般不会对生命产生直接影响,它不适用安全级别之分。
2. 实时性
为了提高实时性,宇航等软件设计上要充分考虑与硬件的紧密协同,尽可能地有效发挥硬件特点,在设计上要仔细考虑将实时性能需求分解到每个软件部件中
普通嵌入式软件属于弱实时系统,对时间特性不敏感,达到人们可容忍即可,设计上尽量避免软件与硬件紧耦合。
3. 交互性
宇航软件大多数属于非人机交互系统,关注重点是安全性和可靠性设计
普通嵌入式系统软件设计上重点关注的是人机界面友好性、简洁性,注重用户体现。
4. 编码
宇航软件编码要遵守语言标准,尤其是应按照高级语言的安全子集标准开展编码,对代码函数的语句条数、扇入扇出、圈复杂度等影响代码质量因素都有严格规定
普通嵌入式软件编码虽然也要遵循一定的编码标准,但在安全编码、扇入扇出、圈复杂度等方面没有严格要求。
十一. 节能技术
1. 静态节能技术
静态节能技术主要是利用硬件的能耗特性,将节能方法纳入产品的设计中。此技术能够显著地减少系统局部组件所消耗的能力。
静态节能技术是在编译时刻对代码扫描,找出可以针对目标平台特性优化的部分进行代码重构。
静态节能技术一般采用两种方法:设计低功耗硬件和编译优化。
1. 设计低功耗硬件
硬件电路设计方面可优化的部分已越来越少,且成本大
2. 编译优化
通过使用编译优化技术来生成能量感知的机器代码,这种技术虽然成本小,但是对于降低功耗的潜力不大。
2. 动态节能技术
动态节能技术主要在系统运行过程中根据负载的变化来降低能耗,利用底层硬件提供的特征,从系统运行范围内降低系统总体功耗,从而能够节省大量的能量。
动态节能通常采用三种技术,其一是动态调频调压技术;其二是动态电源管理技术;其三是任务调度技术。
1. 动态调频调压技术
动态调频调压技术(Dynamic Voltage and Frequency Scaling DVFS)依据处理器的功耗与电路的运行电压之间存在的平方关系,在获取处理器的实时使用情况后,调整电路的运行电压、动态升高或降低运行频率,从而减少能量消耗。
2. 动态电源管理技术
动态电源管理技术(Dynamic Power Management)是在系统运行过程,根据系统的运行情况切换系统各个组件的状态,在满足系统正常服务请求的前提下,使得系统组件处于工作状态的时间最短,从而节省能量
3. 任务调度技术
任务调度技术在保证系统中所用任务满足截止期的情况下,充分利用系统的空间和时间,安排系统中各个任务的运行次序和调度关系,减少任务运行时的抢占次数,减少任务上下文切换次数,从而通过调度来降低系统的运行能耗
3. 动静态节能技术选择
如果采用静态节能技术,势必带来严重的经济损失(所有设备硬件要重新替换)
而采用动态节能技术,可在满足应用需求的基础上,缩短时间周期,降低成本。
4. 动态调度节能技术
由于系统中能量消耗的主要来源是系统的各种硬件设备,设备工作与关闭两种状态功耗消费差距很大,为了使系统能够节约更多的能量,应该尽可能晚的唤醒一个设备,即在应用任务使用设备时才打开设备。
在有效调度时刻唤醒设备常常能够节省更多的能量,同时能够及时响应任务的访问请求,保证满足系统的实时性要求。
十二. 多核任务调度算法
多核CPU环境下进程的调度算法一般有全局队列调度和局部队列调度两种
操作系统维护一个任务等待队列属于全局队列调度的特征。
1. 全局队列调度
是指操作系统维护一个全局的任务等待队列,当系统中有一个 CPU 核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。
全局队列调度方法的优点是CPU 核心利用率较高。
2. 局部队列调度
是指操作系统为每个CPU内核维护一个局部的任务等待队列。
当系统中有一个CPU内核空闲时, 便从该核心的任务等待队列中选取恰当的任务执行
这种方法的优点是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率。
十三. 分区化(Partitioning)技术
1. 概念
已被广泛应用于大型嵌入式系统,此项技术重在解决嵌入式系统中多类应用软件共享计算机资源的安全性问题。
同时,也可降低软件开发成本,提高软件的可重用能力。
分区技术重在解决处理器速度极大提升后,嵌入式系统无法充分发挥处理器性能的问题。
这里的分区类似于进程、进程类似于线程,从而可推断出分区一定会具备通常进程的属性,进程一定会具备通常进程的属性,所以说分区具有自己私用空间(时空隔离特征)。
与其他操作系统的最大区别是分区将健康监控能力植入操作系统内核,实现了系统故障监视和统一的故障处理机制
2. 核心思想
采用MMU (存储器管理部件)机制将单个处理器划分成多个虚拟机,使每一虚拟机内的应用程序视为在独享处理器资源。
3. 分区化技术主要特点
1. 互不影响性
应用软件代码和操作系统代码工作在处理器的不同特权级别上,应用软件的失效不会影响操作系统的运行;
2. 相互隔离性
每一个分区有自己私有存储资源,分区所占空间是相互隔离的,
分区内某进程的失效仅仅只影响到进程所在的分区。
3. 可移植性
操作系统可为分区内应用软件提供多种类型的API服务,使原有应用软件可方便地移植到其他分区内运行。
4. 分时性
分区的调度是按预先配置好的时间表进行调度,任何一个分区只能在系统分配给他的时间窗口内运行
任何分区不能,也无法占用其他分区的窗口时间。
5. 故障监测性
具有分区能力的操作系统提供健康监控管理能力,它通过操作系统内的故障检测机制,将发现的应用,分区和系统的错误通过注入机制报告给健康监控系统,由它进行统一的故障处理。
6. 安全性
分区化操作系统允许不同安全等级(A-E)的应用软件共享计算机资源,可实现软件验证的最小化、局部化。