初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议

嵌入式系统的进程

上下文切换
使CPU从一个正在执行的进程转向另一个进程的机制称为上下文切换(又称文境切换)。文境切换必须是没有任何缺陷的,并且文境切换在CPU内能非常迅速地执行。
文境切换的形式主要有两种:

  • 协作多任务处理
    采用协作多任务处理的系统中,正在执行的进程将主动地放弃CPU等资源,让给另一个进程。协作多任务处理的系统中,每个进程中包含一个对文境切换函数的调用,该函数调用并不启动一个新的进程执行,只是在另一个进程中进行状态复制。
  • 抢先多任务处理
    抢先多任务处理的文境切换模式中,采用了中断机制来实现文境切换,强制旧进程把控制权交给新进程。抢先多任务处理的基本硬件配置需要一个定时器部件周期性地产生CPU中断信号。在定时器的中断服务程序中,保存旧的进程状态信息,并选择下一个需要执行的进程,切换进程的文境。

芯片选型原则

  • 1、ARM微处理器内核的选择
  • 2、系统工作频率的选择
  • 3、芯片内存储器容量的选择
  • 4、片内外围电路的选择

嵌入式软件体系结构

系统设计计划:

是一个结构性计划,用于描述系统由哪些元素组成、元素之间如何相互适应、协同工作以完成系统的需求目标。
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第1张图片

其特点:

  • 1、是一个高层次的抽象,涉及组成系统的元素、元素之间的交互、元素合成的模型以及对模型的限制,不关心具体实现
  • 2、必须满足系统规格说明定义的所有需求,包括功能性和非功能性需求。
  • 3、在设计体系结构时,除了必须考虑系统的实时性、系统环境的局限性外,还要考虑系统的安全性和可靠性、系统今后的扩展性和伸缩性以及与现存系统的兼容性等

通用软件体系结构各家特点

  • 1、整体结构
    (1)系统中每个函数有唯一定义好的接口——参数和返回值,函数间调用不受限制
    (2)软件开发是设计、函数编码/调试、链接成系统的反复过程,所有函数相互可见,不存在信息隐藏
    (3)函数调用可以简单分类,如核心调用、系统调用、用户调用等,用来简化编程
    (4)系统有唯一的主程序入口(如C程序的main函数)
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第2张图片
  • 2、层次结构
    (1)可以在现有抽象层基础上增加新的抽象层,便于简化复杂问题的实现
    (2)对每层的功能、接口的改变,最多影响上下两层
    (3)每层的接口都是抽象的,内部实现不受限制,支持软件重用
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第3张图片
  • 3、客户机/服务器结构
    (1)将一个软件系统划分为服务器端和客户端两部分
    (2)客户端根据软件功能的实际需要,向服务器端发出请求,要求服务器端选择适当的策略、算法和信息进行处理,接收返还的信息并提交给终端用户
    (3)服务器端统一存放系统中将使用的各种实现策略、算法和信息,根据客户端的请求完成相应的工作,并将结果信息发还给客户端,提供所谓的服务
    (4)一个服务器端可以同时接收多个客户端的请求并完成相应的服务
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第4张图片初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第5张图片

轮询系统(Polling Systems)

简单循环控制系统,一种最简单的嵌入式实时软件体系结构模型。系统功能由多个函数完成,这些函数被循环调用执行,即它们按照一定的执行顺序构成一定单向的有序环,一次占用CPU,每个函数访问完成后,才将CPU移交给下一个函数使用

轮询过程

初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第6张图片

  • 1、优先级调度
    克服了原先的缺点(所有函数必须顺序执行,不区分各自的重要程度),允许优先级高的函数被多次重复调度,如下图:
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第7张图片
    下图是通过一个指针表查询实现
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第8张图片
    非抢占式调度算法常用于那些任务需要按照预先确定的顺序进行执行,且只有当任务主动放弃CPU资源后(通过中断的方式),其他任务才能得到执行的情况。常用的非抢占式调度算法是时间片轮转调度算法
  • 2、子轮询
    当某些函数执行时间相对较长时,可以将其分解成若干子函数,这些子函数也构成一个轮询,称为子轮询。
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第9张图片

前后台系统(Foreground-Background Systems)

前后台系统又称中断驱动系统

前台中断后台轮询:后台,任务按照轮询方式访问CPU;前台,当有实时任务到达时首先提出中断,然后将任务转交给后台

前后台系统与多任务系统存在本质差异:
前后台系统中,中断事务由外部事件触发,多任务系统中任务是通过某种任务调度策略与机制来调度执行的,不直接由事件触发调度

前后台系统应用:计算机与单用户交互、实时I/O设备控制
不适合的场景:
1、高速信号处理,用轮询方式好
2、多设备或多用户请求CPU服务,应采用多任务系统
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第10张图片
衡量前后台系统性能的一个重要指标是响应时间
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第11张图片
中断延迟时间产生的主要原因:

  • 1、被中断任务有指令正在执行
  • 2、后台任务正在访问某一临界资源,中断被禁止
  • 3、有更高优先级的中断正在执行
  • 4、某一时刻,多个任务同时提出相同的中断请求,系统需要额外的开销决定中断响应的优先次序

前后台交互

1、同步信号
2、数据交互(互斥)

多处理器系统(Multi-Processor System)

由多个CPU协同工作的系统。

与多任务系统的区别:
在单处理器系统中,多个任务在宏观上是并发的,在微观上是顺序执行的。
在多处理器系统中,多个任务是并行运行在不同的微处理器中的,在宏观上是并发的,微观上也是并发的。
所以,前者是伪并发,后者是真并发

多处理器系统的分类:

  • 1、紧耦合(Tight Coupling)
    通过高速总线AHB实现多个微处理器之间的互连,共享存储器和I/O设备资源,并要求将主存储器划分为若干个能独立访问的存储模块
  • 2、松耦合(Loose Coupling)
    每个处理器都有自己的存储器、I/O设备,并配置了OS进行资源管理
  • 3、协处理器系统(Coprocessor Coupling)
    两个或多个CPU并发执行某一指令流的多处理器系统
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第12张图片

嵌入式实时操作系统(Embedded Real-Time Operating System,ERTOS)

ERTOS引入的好处

  • 1、ERTOS有一套标准化任务管理机制,提高了开发管理水平和开发人员素质
  • 2、ERTOS有一套较完整的应用编程接口API,简化编程,提高系统可靠性
  • 3、ERTOS使应用软件与下层硬件环境无关,提高嵌入式软件系统可移植性
  • 4、ERTOS中可以使用许多的应用编程中间件,既增强了嵌入式软件复用能力,又节约成本缩短开发周期
  • 5、多任务管理机制,提高了应用程序的软实时性

RTOS的特点

  • 1、及时性
    硬实时、软实时、严格实时
  • 2、可确定性
    重要指标:截止时间Deadline
  • 3、并发性
  • 4、高可信性
    可靠性:系统在一定时期内不发生故障的概率
    鲁棒性:容错处理和出错自动恢复
    防危性:研究系统是否会导致灾难发生
  • 5、安全性
  • 6、可嵌入性
  • 7、可裁剪性
  • 8、可扩展性

优先级逆转

又称优先级反转,用信号量来控制资源共享和互斥,会出现高优先级任务被低优先级任务阻塞,并等待低优先级任务执行的现象。这种现象也会由于中断的使用而产生。

由于任务间资源共享,信号量及中断的引入,往往会导致高优先级任务被低优先级任务长时间阻塞(pend)或阻塞一段不确定时间的现象,即所谓的优先级反转(Priority Inversion)。优先级反转会造成任务调度的不确定性,严重时可能导致系统崩溃。

假设有两个任务分别为T1、T2:
(1)T1的优先级高于T2的优先级
(2)临界资源S为T1和T2的共享资源
(3)T2先执行,并占用资源S。若T1到达,则按优先级调度约定将抢占CPU,一直执行直到请求到临界资源S,由于T2没有放弃临界资源S,造成T1请求S失败,导致死锁产生,如下图所示
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第13张图片

一个优先级反转的小例子

初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第14张图片
如图,假设3个任务task1、task2、task3的优先级分别为P1、P2、P3,且P1 > P2 > P3。假定task1、task2和task3通过互斥信号量mutex共享一个数据结构,并且在时刻T0,task3获得mutex,开始执行临界区代码;

在时刻T1,task3申请成功mutex并开始执行临界区代码;

在时刻T2,task1已经处于就绪状态,由于P1 > P3,抢占task3而获得MCU资源开始执行,并在时刻T3试图访问共享数据,但共享数据已被task3通过mutex加锁。task1申请mutex失败而处于等待状态;此刻,task3重新获得MCU继续执行。

在时刻T4,task2就绪,由于P2>P3,task2抢占MCU开始执行,task3处于等待状态,表现为较低优先级任务task2先于较高优先级任务task1执行。

在时刻T5,task2申请mutex失败而阻塞,task3获得MCU继续执行。

在时刻T6,tsak3退出临界区后释放mutex,具有最高优先级的task1才获得mutex而执行临界区代码。

在时刻T7,tsak1执行完毕并释放资源。task2开始执行临界区代码。在此过程中,如果具有多个类似P2的中等优先级的任务就绪,task1被延迟执行的时间将是无法确定的,极有可能超过其截止时间。例如,控制执行器的信息如果没有成功地传送到或超过时延限制,则可能使系统性能恶化或使系统不稳定,甚至造成事故。这就是优先级反转问题

解决优先级反转问题的常用协议有优先级继承协议(Priority Inheritance Protocol)和优先级天花板协议(Priority Ceiling Protocol)。

优先级继承协议(Priority Inheritance Protocol)

优先级继承协议的基本思想是:当一个任务阻塞了一个或多个高优先级任务时,该任务将不使用其原来的优先级,而使用被该任务所阻塞的所有任务的最高优先级作为其执行临界区的优先级。当该任务退出临界区时,又恢复到其最初的优先级。

例如,当任务T获得了MCU资源后首先以初始分配的优先级开始执行,在T进入其临界区Z之前,申请控制该资源的信号量S。若S已被其他任务上锁,则任务T在S上阻塞而挂起等待;否则,执行pend加1操作,进入临界区Z中执行,退出Z时,执行post减1操作。
如果T申请到了S资源并进入临界区Z,此时,如果有更多高优先级任务申请S,由于S已被任务T上锁,高优先级任务将被阻塞,而任务T将继承被其阻塞的高优先级任务中优先级最高的任务的优先级继续在临界区Z中执行,直到退出Z之后,释放S,同时恢复其初始优先级,并唤醒被其阻塞的具有最高优先级的任务。在此情况下,优先级反转的问题得以缓解;更重要的是,高优先级任务被延迟的时间可以确定,从而控制任务的执行时间,提高系统的稳定性和可靠性。

优先级继承协议的不足之处在于如果中间优先级任务比较多,优先级继承协议可能多次改变占有某临界资源的任务的优先级,会引起更多的额外开销,导致任务执行临界区的时间增加(即一个高优先级任务所需多个临界资源分别被不同的低优先级任务占有,则阻塞可能相当长)。

此外,当有多个临界资源被需要时,优先级继承协议还会引起死锁。因此,从程序执行的效率方面考虑,优先级继承协议的效率比较低。
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第15张图片
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第16张图片

优先级天花板协议(Priority Ceiling Protocol)

由于优先级继承协议会产生死锁和阻塞链,因此使用优先级天花板协议的目的在于解决优先级继承协议中存在的死锁和阻塞链问题。

优先级天花板协议是指系统把每一个共享资源与一个天花板优先级相联系。任意资源的天花板优先级是所有请求该资源的任务的最高优先级。当一个任务获得了信号量而进入临界区执行时,系统便把这个天花板优先级传递给这个任务,使这个任务的优先级最高。当这个任务退出临界区后,系统立即把它的优先级恢复正常,从而保证系统不会出现优先级反转的情况。

优先级天花板协议的缺点是一旦任务获得某临界资源,其优先级就被提升到可能的最高程度,而不管此后在它使用该资源的时间里是否真的有高优先级任务申请该资源。这样就有可能影响某些中间优先级任务的完成时间。因此,在对任务执行流程的干扰方面,优先级天花板协议的破坏力比较大。
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第17张图片
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第18张图片

对比两种协议:

  • 1、就执行效率而言:
    优先级继承协议可能多次改变占有临界资源的任务的优先级,而优先级天花板协议只改变一次
  • 2、对程序运行过程影响程度的比较:
    优先级天花板协议的特点是一旦任务获得某临界资源,其优先级就被抬升到可能的最高程度,不管此后在它使用该资源的时间内是否真的有更高优先级任务申请该资源,这样就有可能影响某些中间优先级任务的完成时间。但在优先级继承协议中,只有当高优先级任务申请已被低优先级任务占有的临界资源这一事实发生时,才抬升低优先级任务的优先级,因此优先级继承协议对任务执行流程的影响相对较小。

流媒体支持

流媒体概念

在Internet/Intranet中使用流式传输技术的连续时基媒体(时基媒体是指与绝对时间或时间顺序密切相关的媒体,如音频、视频、多媒体文件)在播放前并不下载整个文件,只将开始部分内容存入内存,其他的数据流随时传送随时播放,只是在开始播放有延迟。

  • 顺序流式传输(Progressive Streaming)
    又称为HTTP流式传输,质量高,点播技术
  • 实时流式传输(Realtime Streaming)
    需专用流媒体服务器与传输协议,视频质量差,可在传输期间根据用户连接的速度做调整

流媒体的播放:

  • 1、单播
    在客户端与媒体服务器之间建立一个单独的数据通道,使一台服务器只将数据传给一个客户机
  • 2、点播
    点播连接是客户端与服务器端之间的主动连接
  • 3、广播
    用户被动接收流,数据包的一个拷贝将发送给网络上所有用户,不管是否需要,浪费大量网络带宽
  • 4、组播
    媒体服务器只需发送一个信息包,复制到多个通道,达到一对多的效果,保证多媒体占用网络最小带宽

流媒体播放基本原理

流式传输的实现需要缓存。因为Internet以包传输为基础进行断续的异步传输,对一个实时A/V源或存储的A/V文件,在传输中它们要被分解为许多包,由于网络是动态变化的,各个包选择的路由可能不尽相同,故到达客户端的时间延迟也就不等,甚至先发的数据包还有可能后到。为此,使用缓存系统来弥补延迟和抖动的影响,并保证数据包的顺序正确,从而使媒体数据能连续输出,而不会因为网络暂时拥塞使播放出现停顿。

流式传输的实现需要合适的传输协议。由于TCP需要较多的开销,故不太适合传输实时数据。在流式传输的实现方案中,一般采用RTCP/TCP来传输控制信息,而用RTP/UDP来传输实时声音数据。
初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第19张图片

功耗管理

DPM技术(Dynamic Power Management)

在系统运行过程中动态调整功率可管理部件(Power Manageable Component,PMC)工作状态,以优化部件空闲时间功耗的一种功耗管理技术。
按照采用的控制策略不同,DPM可分为:

  • 1、超时策略DPM
  • 2、预测策略DPM
  • 3、随机策略DPM

DVS技术(Dynamic Voltage Scaling)

动态电压调整,系统运行时可以通过设置可编程频率寄存器控制微处理器的工作频率。
利用DVS技术,在系统负荷较高时将微处理器设置为最高执行速度,保证系统计算能力;
在系统负荷较轻时动态降低微处理器的工作频率,降低微处理器的执行功耗。

动态频率调整(Dynamic Frequency Scaling,DFS)是指微处理器的时钟频率可在运行时动态调整的技术,DFS与DVS统称DVS

嵌入式软件运行过程

  • 1、上电复位/板级初始化阶段
    CPU中堆栈指针寄存器初始化、BSS段的初始化等
  • 2、系统引导/升级系统阶段
    系统引导:系统软件从Nor Flash读取出来加载到RAM中运行等步骤
    升级系统:通过网络进行远程升级或串口进行本地升级
  • 3、系统初始化阶段
    根据系统配置初始化数据空间、所需接口、外设等
  • 4、应用初始化阶段
    进行应用任务的创建,信号量、消息队列的创建
  • 5、多任务应用阶段
    各种初始化工作完成后,系统进入多任务状态,各应用任务分别完成特定的功能
    初学者须知的嵌入式基础知识(三)附轮询系统、前后台系统、优先级继承协议和优先级天花板协议_第20张图片

板级支持包(Board Support Packet,BSP)

BSP是嵌入式系统的基础部分,也是实现系统可移植性的关键。它负责上电时硬件初始化、启动RTOS或应用程序模块、提供底层硬件驱动,为上层软件提供访问底层硬件的手段

BSP中的驱动程序

驱动程序概念:
是连接操作系统内核和硬件设备的桥梁,屏蔽了硬件的细节,在应用程序看来硬件设备只是一个特殊的文件。

驱动程序的基本功能:

  • 1、对设备进行管理
  • 2、对设备进行初始化和释放
  • 3、读取应用程序发送给设备文件的数据,并回送应用程序请求的数据
  • 4、检测和处理设备出现的错误

RTOS引导模式

操作系统引导概念:将操作系统装入内存并开始执行的过程

在嵌入式系统的应用过程中,针对不同的应用环境,对时间效率和空间效率有不同的要求。时间限制主要包括:系统要求快速启动和系统启动后程序高速执行;空间效率主要包括:Flash等非易失性存储空间的限制和RAM等易失性空间有限

需要Boot Loader的引导模式:RAM空间有一定限制
不需要Boot Loader的引导模式:对于时间效率要求较高的系统,通常要求系统能快速启动

Bootloader及其移植

简单地说,Bootloader就是在操作系统内核运行之前运行的一段小程序,相当于PC机主板上的BIOS,是最底层的引导软件。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
Bootloader(引导加载程序)是系统加电后运行的第一段代码。一般它只在系统启动时运行非常短的时间,但对于嵌入式系统来说,这是一个非常重要的系统组成部分。当我们使用单片机或者像μC/OS这样的操作系统时,一般只需要在初始化CPU和其他硬件设备后,直接加载程序即可,不需要单独构建一个引导加载程序。但构建或移植一个Bootloader,从某种意义上来说,对所有的Linux系统都是一个必不可少的任务。

Bootloader在嵌入式系统的重要性

一般情况下,计算机操作系统的启动都需要一个引导加载程序。其主要的原因在于现在计算机系统多采用“易失性”的半导体存储器作为内存,如PC系统中采用的EDO DRAM,SDRAM,DDR SDRAM等,一旦断电,内存中的操作系统映像就消失了,因此只能将操作系统存储在非易失性的存储介质上,在系统加电的时候才能将其中的操作系统映像装入内存中运行。

Bootloader的相关概念

通常,Bootloader是严重地依赖于硬件而实现的,特别是在嵌入式系统中。因此,在嵌入式世界里建立一个通用的Bootloader几乎是不可能的。尽管如此,仍然可以对Bootloader归纳出一些通用的概念来,以指导用户特定的Bootloader设计与实现:

  • Bootloader所支持的CPU和嵌入式系统板
  • Bootloader的安装媒介
  • 用来控制Bootloader的设备或机制
  • Bootloader的操作模式
  • Bootloader与主机之间进行文件传输所用的通信设备及协议
  • Bootloader的启动过程

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

你可能感兴趣的:(嵌入式,操作系统,程序人生)