电子科技大学 - 嵌入式系统及应用期末复习提纲
带 ** 的标题为重点知识点!!!
教材:嵌入式系统及应用,中国工信出版集团
1 嵌入式系统导论
**1.1 什么是嵌入式系统?
注意:对比通用计算机(形式、组成、开发方式、二次开发性)
**1.2 嵌入式系统的构成?
(一体化软件)
- 嵌入式系统一般由嵌入式硬件和软件组成;
- 硬件以包含微处理器的SoC为核心集成存储器和系统专用的输入/输出设备;
- 软件包括:初始化代码及驱动、嵌入式操作系统和应用程序等,这些软件有机地结合在一起,形成系统特定地一体化软件。
1.3 嵌入式系统的发展阶段和兴起于哪个时代?
(1965-1970)
- 出现:20世纪60年代以晶体管、磁芯存储为基础地计算机开始用于航空等军用领域;
- 兴起:在1965~1970年,当时计算机已开始采用集成电路,即第三代计算机。在军事、航空航天领域、工业控制的需求推动下;
- 走向繁荣:微处理器问世后;
- 走向纵深:进入20世纪90年代,在分布控制、柔性制造、数字化通信和数字化家电等巨大需求的牵引下,嵌入式系统的硬件、软件技术进一步加速发展、应用领域进一步扩大;
1.4 知名的嵌入式操作系统和开发工具有哪些?
操作系统: µC/OS-II、嵌入式Linux、Android、iOS、塞班、VRTX、VxWorks、TinyOS
开发工具:???
1.5 嵌入式系统有哪些特点?如何理解某个特点?
- 形式多样、面向特定应用
- 得到多种类型的处理器和处理器体系结构的支持
- 极其关注成本
- 有实时性和可靠性的要求
- 使用的操作系统一般是适应多种处理器、可裁剪、轻量型、实时可靠、可固化的嵌入式操作系统
- 开发需要专门工具和特殊方法
**1.6 嵌入式系统的分类方法?
- 按速度分类包含几类嵌入式系统?
- 强实时
- 一般实时
- 弱实时
- 按确定性(实时性)分类?
- 硬实时
- 软实时
- 非实时
- 按处理器位数?
- 4位
- 8位
- 16位
- 32位
- 64位
- 按应用分类?
- 信息家电类
- 移动终端类
- 汽车电子类
- 工业控制类
- 通信类
- 按软件结构分类?
- 循环轮询系统
- 前后台系统
- 单处理器多任务系统
- 多处理器多任务系统
- 紧耦合系统
- 松耦合系统
**1.7 嵌入式系统、实时系统、嵌入式实时系统三者关系
1.8 SoC(片上系统)与处理器的关系?
SoC = 处理器 + SoC片内外设;
2 嵌入式软件系统基础
2.1 嵌入式软件系统特点?
- 规模小、开发难度大
- 程序一体化
- 两个平台
- 快速启动、直接运行
- 实时性和可靠性要求高
2.2 嵌入式软件分类?
- 系统软件:控制、管理计算机系统的资源
- 嵌入式操作系统
- 嵌入式中间件(CORBA、Java)
- …
- 支撑软件:辅助软件开发的工具
- 系统分析设计工具
- 仿真开发工具
- 交叉开发工具
- 测试工具
- 配置管理工具
- 维护工具
- …
- 应用软件:面向应用领域
- 手机软件
- 路由器软件
- 交换机软件
- 飞控软件
- …
2.3 嵌入式系统体系结构?
- 硬件层
- 驱动层:板级初始化、flash驱动、RTC/定时器驱动、串口驱动、以太网驱动、LCD驱动、键盘驱动以及其他驱动等;
- 操作系统层:TCP/IP网络系统、文件系统、内核、电源管理和嵌入式GUI等;
- 中间件层:嵌入式CORBA、嵌入式Java、嵌入式DCOM、面向应用领域的中间件等;
- 应用层:应用任务1、应用任务2、应用任务3…
**2.4 嵌入式软件运行流程?
分为5个阶段,分别为:
- 板级初始化阶段:
- CPU中堆栈指针寄存器的初始化;
- BSS段的初始化;
- CPU芯片级的初始化:中断控制器、内存等的初始化。
- 系统引导/升级阶段:
- 将系统软件从NOR Flash中读取出来加载到RAM中运行;
- 进入系统升级阶段后系统可通过网络进行远程升级或通过串口进行本地升级;远程升级一般支持TFTP、FTP、HTTP等方式;本地升级可通过Console口使用超级终端或特定的升级软件进行;
- 系统初始化阶段:在该阶段进行操作系统等系统软件各功能部分必需的初始化工作,如根据系统配置初始化数据空间、初始化系统所需的接口和外设等;
- 应用初始化阶段:在该阶段进行应用任务的创建,信号量、消息队列的创建和与应用相关的其它初始化工作;
- 多任务应用运行阶段:各种初始化工作完成后,系统进入多任务状态,操作系统按照已确定的算法进行任务的调度,各应用任务分别完成特定的功能。
2.5 嵌入式操作系统的特点?演变的几个阶段?
- 可固化
- 可配置、可剪裁
- 独立的板级支持包,可修改
- 不同的CPU有不同的版本
- 应用的开发需要有集成的交叉开发工具
阶段:
- 无操作系统阶段
- 简单操作系统阶段
- 实时操作系统阶段
- 面向Internet的阶段
**2.6 嵌入式操作系统体系结构设计方式及其优势和问题
-
宏内核(单块结构)
- 操作系统由多个模块构成
- 模块之间可相互调用
- 用户态和核心态两种工作模式
- 两种执行权限和执行空间
- 典型代表:Android
-
层次结构
- 上层不能修改下层的数据
- N - 1 层为 N 层提供服务
- 提高操作系统的安全性
-
微内核(C/S模型)结构
- 微内核只完成任务管理、任务调度、通信等基本功能
- 其它功能实现为系统任务或进程,运行于用户模式
- 用户任务通过系统调用发出请求,服务器响应请求,微内核负责完成通信、同步、任务调度等基本功能
- 优势:
- 提供一致的接口
- 可扩展性:扩展对新的软件/硬件支持
- 灵活性:可伸缩
- 可移植性
- 支持分布式计算
- 适用于面向对象操作系统环境
- 性能问题:
- 通过微内核构造和发生信息、接受应答并解码所花费的时间比进行一次系统调用的时间多
- 很大程度取决于微内核的大小和功能
**2.7 嵌入式操作系统与通用操作系统相比,有哪些特点?嵌入式操作系统的构成?
- 可固化
- 可配置、可剪裁
- 独立的板级支持包,可修改
- 不同的CPU有不同的版本
- 应用的开发需要有集成的交叉开发工具
- 内核不同:
- 调度策略不同
- 内存管理不同
- 嵌入式需解决优先级反转问题
- 嵌入式实时OS的时间管理可配置、时间精度更高
嵌入式系统的构成:内核、网络、文件…
2.8 嵌入式内核的主要模块有哪些?嵌入式TCP/IP的特点?
- 任务管理:采用基于静态优先级的可抢占调度。
- 内存管理:不采用虚拟存储管理,而采用静态内存分配和动态内存分配(固定大小和可变大小)相结合。有些内核利用MMU机制提供内存保护。
- 通信同步和互斥机制:提供任务间、任务与中断处理程序间的通信、同步和互斥。需解决优先级反转问题。
- 中断管理
- 时间管理
- 任务扩展功能
嵌入式TCP/IP特点:
- 可裁剪
- 采用“零拷贝”技术,提高实时性
- 采用静态分配技术
2.9 嵌入式开发工具的哪两个特性影响嵌入式系统的开发效率?
- 集成度
- 可用性
2.10 嵌入式软件开发工具的分类?主要的开发工具产品有哪些?
- 需求分析工具
- 软件设计工具
- 编码、调试工具
- 测试工具
- 配置管理工具、维护工具
**2.11 交叉开发环境?宿主机、目标机如何连接?
交叉开发环境一般包括:
- 文本编辑器
- 交叉编译器
- 交叉调试器
- 仿真器
- 下载器
交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接
2.12 嵌入式软件的开发过程?
- 软件的生成
- 源代码程序的编写
- 编译成各个目标模块
- 链接成可供下载调试或固化的目标程序
- 调试
- 固化运行
**2.13 交叉调式方式?与非交叉调试比较,各种方式的调试过程和优缺点?
-
Crash and Burn:最早的嵌入式应用软件调试方法
-
Rom Monitor
ROM Monitor是被固化且运行在目标机上的一段程序,负责监控目标机上被调试程序的运行,与宿主机端的调试器一起完成对应用程序的调试。
ROM Monitor能配合调试器完成:
- 应用程序映像下载
- 对目标机系统内存的读写
- 对寄存器的读写
- 设置和清除不同类型的断点
- 单步执行指令
- 复位系统
调试过程:
- 启动目标机,监控器掌握对目标机的控制,等待和调试器建立连接;
- 启动调试器,并和监控器建立起通信连接;
- 使用调试器将应用程序下载到目标机上的RAM空间中;
- 使用调试器进行调试,发出各种调试命令,监控器解释并执行这些命令,通过目标机上的各种异常来获取对目标机的控制,将命令执行结果回传给调试器;
- 如果程序有问题,在调试器的帮助下定位错误;修改之后再重新编译链接并下载程序,开始新的调试,如此反复直至程序正确运行为止;
优点:
- 提高调试程序的效率,缩短开发周期,降低成本
- 简单、方便
- 可扩展性强,可支持许多高级调试功能
- 成本低廉,不需专门的调试硬件支持
- 几乎所有的交叉调试器都支持这种方式
缺点:
- Debug Monitor需要用Crash and Burn方法开发
- 当ROM Monitor占用CPU时,应用程序不响应外部的中断,因此不便调试有时间特性的程序
- 某些调试功能依赖于CPU硬件的支持
- ROM Monitor要占用目标机一定数量的资源,如CPU、RAM、ROM和通信设备等资源
- 调试环境不同于实际目标环境
-
Rom Emulator
-
Rom Emulator
-
In Circuit Emulator
-
On Chip Debugging
OCD是CPU芯片提供的一种调试功能(片上调试),可以认为是一种廉价的ICE功能:OCD的价格只有ICE的20%,但提供了ICE 80%的功能。
调试方法:
- 将CPU的模式分为一般模式和调试模式
- 一般模式下,CPU从内存读取指令执行
- 调试模式下,CPU首先从调试端口读取指令,通过调试端口可以控制CPU进入和退出调试模式;Host端的调试器可以直接向目标机发送要执行的指令,读写目标机的内存和各种寄存器,控制目标程序的运行以及完成各种复杂的调试功能。
优点:
- 不占用目标机资源
- 调试环境和最终的程序运行环境基本一致
- 支持软硬断点、Trace功能
- 精确计量程序的执行时间
- 提供时序分析功能
缺点:
- 调试的实时性不如ICE
- 不支持非干扰调试查询
- CPU必需具有OCD功能
主流的实现有 JTAG !!!
2.14 常用的嵌入式软件测试工具包括哪些?
- 内存分析工具
- 性能分析工具
- 覆盖分析工具
- 缺陷跟踪工具
- …
3 任务管理与调度
3.1 嵌入式系统中任务与进程/线程的关系?
任务通常为进程和线程的统称
3.2 进程/线程模型?典型操作系统、嵌入式实时内核采用哪种模型?
- 单进程/单线程模型
- 单进程/多线程模型:嵌入式实时内核所采用的!
- 多进程/单线程模型
- 多进程/多线程模型:一些嵌入式实时操作系统所采用的!
3.3 嵌入式系统中任务的定义?有哪些特性?任务的内容?任务的上下文环境?
定义:一个具有独立功能的无限循环的程序段的一次运行活动,是实时内核调度的单位。
特性:
- 动态性:任务状态是不断变化的
- 并发/并行性
- 异步独立性
内容:
- 代码:一段可执行的程序
- 数据:程序所需要的相关数据
- 堆栈
- 程序执行的上下文环境
**3.4 任务的分类?任务的参数?TCB
根据到达情况的可预测性,任务分为:
- 周期任务:每隔一个固定的时间间隔就会执行一次
- 非周期任务:不固定
根据重要程度,任务分为:
- 关键任务
- 非关键任务
任务的参数:
- 优先级
- 静态优先级
- 动态优先级
- 周期
- 计算时间:任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(execution time)
- 就绪时间
- 截止时间:意味着任务需要在该时间到来之前被执行完成;
- 强截止时间
- 弱截至时间
3.5 任务包含哪些基本状态?任务状态变迁图,UCOS任务状态变迁图?
基本状态:
- 等待:任务在等待某个事件的发生
- 就绪:任务等待获得处理器资源
- 执行:任务获得处理器资源,所包含的代码内容正在被执行
3.6 空闲任务?用途?
- 就绪队列中没有任务运行时就运行空闲任务
- 空闲任务总是最低优先级
- 空闲任务不会被删除
- 由操作系统创建
3.7 任务切换的基本步骤?什么时候发生任务切换?(任务调度)
- 保存任务上下文环境
- 更新当前运行任务的控制块内容,将其状态改为就绪或等待状态
- 将任务控制块移到相应队列(就绪队列或等待队列)
- 选择另一个任务进行执行(调度)
- 改变需投入运行任务的控制块内容,将其状态变为运行状态
- 恢复需投入运行任务的上下文环境
3.8 就绪的任务的管理?采用队列方式管理TCB对确定最高优先级任务有什么问题?
对于就绪任务,如果采用队列方式进行管理,在基于优先级的调度处理中,要获得当前具有最高优先级的就绪任务:
- 方式一:任务就绪时,把就绪任务的任务控制块放在就绪队列的末尾;
- 方式二:就绪队列按照优先级从高到低的顺序排列。
在这两种处理方式中,所花费的时间与任务数量有密切的关系,具有不确定性。(为提高实时内核的确定性,可采用一种被称为优先级位图的就绪任务处理算法)
**3.9 ucos的优先级位图定义与算法?
定义:???
PPT中例题:
解:
- 8的二进制表示为 00 001 000,其中 001 对应OSRdyGrp的第1位(注意从0位开始),则当前OSRdyGrp的值由0b0000 0000 变为 0b0000 0010;000 对应OSRdyTbl[1]的第0位(注意从0位开始),则当前OSRdyTbl[1]的值由0b0000 0000 变为 0b0000 0001;
- 27的二进制表示为00 011 011,其中 011 对应OSRdyGrp的第3位(注意从0位开始),则当前OSRdyGrp的值由0b0000 0010 变为 0b0000 1010;011 对应OSRdyTbl[3]的第3位(注意从0位开始),则当前OSRdyTbl[3]的值由0b0000 0000 变为 0b0000 1000;
- 20的二进制表示为00 010 100,其中 010 对应OSRdyGrp的第2位(注意从0位开始),则当前OSRdyGrp的值由0b0000 1010 变为 0b0000 1110;100 对应OSRdyTbl[2]的第4位(注意从0位开始),则当前OSRdyTbl[2]的值由0b0000 0000 变为 0b0001 0000;
3.10 任务管理提供哪些功能?(API)
- 创建任务:分配任务控制块
- 删除任务:把任务从系统中去掉,释放对应的任务控制块
- 挂起任务:把任务变为等待状态,可通过唤醒任务操作把任务转换为就绪状态
- 唤醒任务:同上
- 设置任务属性:设置任务的抢占、时间片等特性
- 改变任务优先级
- 获取任务信息:获得任务的当前优先级、任务的属性、任务的名字、任务的上下文、任务的状态等内容,便于用户进行决策
**3.11 任务调度解决哪三个问题?调度点的位置?调度的作用?操作系统如何实现调度?
三个问题:
- WHAT:按什么原则分配CPU
- WHEN:何时分配CPU
- HOW: 如何分配CPU
调度点通常处于以下位置:
- 中断服务程序的结束位置;
- 任务因等待资源而处于等待状态;
- 任务处于就绪状态时等。
调度的作用:???
OS如何实现调度:???
3.12 实时内核的调度强调什么?
简单
3.13 设计调度程序需要考虑的因素?
- 截止时间
- 响应时间
- CPU的使用率
- 输入/输出设备的吞吐率
- 公平性
- 确定性
3.14 第一篇关于实时调度算法的研究论文发表于什么时间?
1973年
3.15 离线调度 vs 在线调度?
根据获得调度信息的时机:
- 离线调度:运行过程中使用的调度信息在系统运行之前就确定了,如时间驱动的调度;缺乏灵活性
- 在线调度:调度信息在系统运行过程中动态获得,如优先级驱动的调度(如EDF等);灵活
3.16 抢占式调度 vs 非抢占式调度?可抢占内核 vs 不可抢占内核?
抢占式调度和非抢占式调度:任务在运行过程中能否被抢占的处理情况;
实时内核大都采用了抢占式调度算法,使关键任务能够打断非关键任务的执行,确保关键任务的截止时间能够得到满足。
内核可抢占与不可抢占:执行内核提供的系统调用的过程中,是否可以被中断打断;
**3.17 RMS调度?可调度的充分条件?EDF调度?可调度的充要条件?
**RMS调度:**比率单调调度
- 静态的固定优先级算法;
- 任务的优先级与任务的周期表现为单调函数关系,即任务周期越短,任务优先级越高;任务周期越长,任务优先级越低。
**注意:**Ci / Pi == CPU使用率
例题1:
执行顺序:
例题2:
执行顺序:
习题1:
习题2:
**EDF调度:**最早截止时间优先调度
- 动态调度的,具有更高CPU使用率的算法
- 任务的优先级根据任务的截止时间来确定,即任务的截止时间越近,任务优先级越高;任务的截止时间越远,任务优先级越低。
例题:
执行顺序:
**3.18 什么是优先级反转?怎么产生的?
优先级反转(priority inversion):高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象
**3.19 优先级继承协议的基本思想?优先级天花板协议的基本思想?两种协议在执行效率以及对任务执行流程的对比?
优先级继承协议的基本思想:
- 当一个任务阻塞了一个或多个高优先级任务时,该任务将不使用其原来的优先级,而使用被该任务所阻塞的所有任务的最高优先级作为其执行临界区的优先级;
- 当该任务退出临界区时,又恢复到其最初的优先级。
优先级天花板协议的基本思想:
- 对于控制临界区的信号量,设置信号量的优先级天花板为可能申请该信号量的所有任务中具有最高优先级任务的优先级;
- 如果任务成功获得信号量,任务的优先级将被抬升为信号量的优先级天花板;
- 任务执行完临界区,释放信号量后,其优先级恢复到其最初的优先级。
执行效率对比:
- 优先级继承协议可能多次改变占有某临界资源的任务的优先级,而优先级天花板协议只需改变一次;
- 从这个角度看,优先级天花板协议的效率高,因为若干次改变占有资源的任务的优先级会引入更多的额外开销,导致任务执行临界区的时间增加。
任务执行流程的对比:
- 优先级天花板协议的特点是一旦任务获得某临界资源,其优先级就被抬升到可能的最高程度,不管此后在它使用该资源的时间内是否真的有高优先级任务申请该资源,这样就有可能影响某些中间优先级任务的完成时间;
- 但在优先级继承协议中,只有当高优先级任务申请已被低优先级任务占有的临界资源这一事实发生时,才抬升低优先级任务的优先级,因此优先级继承协议对任务执行流程的影响相对要较小。
4 同步、互斥与通信
4.1 多任务环境下,任务之间和任务与ISR之间的可能关系?
- 相互独立:仅竞争CPU资源
- 互斥:竞争除CPU外的其他资源
- 同步:协调彼此运行的步调,保证协同运行的各个任务具有正确的执行次序
- 通信:彼此间传递数据或信息,以协同完成某项工作
4.2 任务与ISR之间的同步关系?
- **单向同步或通信:**一个任务与另一个任务或一个ISR同步或通信;
- **双向同步或通信:**两个任务相互同步或通信。双向同步不能在任务与ISR之间进行,因为ISR不能等待。
**4.3 嵌入式操作系统内核提供哪些同步、互斥和通信机制?
- 互斥:互斥信号量(mutex)
- 同步:信号量(semaphore)、事件(组)(Flag\event group)、异步信号(asynchronous signal)
- 消息通信:邮箱(mailbox)、消息队列(message queue)
- 非结构化数据交换和同步 :管道(pipe)
4.4 信号量的用途和种类?
用途:信号量用于实现任务与任务之间、任务与中断处理程序之间的同步与互斥。
种类:
- 互斥信号量:用于解决互斥问题。它比较特殊,可能会引起优先级反转问题
- 二值信号量:用于解决同步问题
- 计数信号量:用于解决资源计数问题
**4.5 互斥机制有哪些?各种互斥机制的比较?
4.6 信号量机制的主要数据结构?典型信号量的操作
典型操作:
- 创建信号量
- 获取(申请)信号量
- 释放信号量
- 删除信号量
- 清除信号量的任务等待列表
- 获取有关信号量的各种信息
4.7 任务间的通信方式?
- 直接通信
- 通信双方必须明确知道彼此
- 每对任务之间仅存在一个链接,链接可以是单向,也可以是双向
- 间接通信
- 通信双方不需要指出消息的来源或去向,通过中间机制通信
- 只有当任务共享一个公共邮箱时链接才建立
- 一个链接可以与多个任务相联系
- 每个任务可以使用几个通信链接
4.8 消息的定义?邮箱与消息队列机制的异同?
定义:内存空间中一段长度可变的缓冲区,其长度和内容均可以由用户定义,其内容可以是实际的数据、数据块的指针或空。
异同:
- 邮箱仅能存放单条消息,它提供了一种低开销的机制来传送信息。每个邮箱可以保存一条大小为若干个字节的消息。
- 消息队列可存放若干消息,提供了一种任务间缓冲通信的方法。
4.9 消息队列机制的主要数据结构?
4.10 典型消息队列的操作?
- 创建消息队列
- 发送普通消息
- 发送紧急消息
- 发送广播消息
- 接收消息
- 删除消息队列
- 获取有关消息队列的各种信息
4.11 事件机制的定义、特点、意义?
定义:在嵌入式实时内核中,事件是指一种表明预先定义的系统事件已经发生的机制。
特点:
- 可实现一对多的同步(主要特点)
- 事件间相互独立
- 事件仅用于同步,不提供数据传输功能
- 事件无队列,即多次发送同一事件,在未经过任何处理的情况下,其效果等同于只发送一次
意义:
- 当某任务要与多个任务或中断服务同步时,就需要使用事件机制;
- 若任务需要与一组事件中的任意一个发生同步,可称为独立型同步(逻辑“或”关系);
- 任务也可以等待若干事件都发生时才同步,称为关联型同步(逻辑“与”关系)。
4.12 事件机制的实现方式?
4.13 典型事件操作?
- 创建事件集:申请空闲事件集控制块,设置事件集属性,初始化控制块中的域,分配ID号
- 删除事件集
- 发送事件(集)
- 接收事件(集)
- 获取有关事件集的各种信息
4.14 异步信号的用途?
用于任务与任务之间、任务与ISR之间的异步操作,它被任务(或ISR)用来通知其它任务某个事件的出现
4.15 异步信号机制与中断机制的比较?
- 相同点
- 具有中断性。对中断的处理和对异步信号的处理都要先暂时地中断当前任务的运行。
- 有相应的服务程序
- 根据中断向量,有一段与中断信号对应的服务程序,称为ISR(Interrupt Service Routine)
- 根据异步信号的编号,有一段与之对应的服务程序,称为ASR(Asynchronious Service Routine)
- 可以屏蔽其响应
- 外部硬件中断可以通过相应的寄存器操作被屏蔽
- 任务也可屏蔽对异步信号的响应
- 不同点
- 实质不同
- 中断由硬件或者特定的指令产生,不受任务调度的控制
- 异步信号由系统调用(使用发送异步信号功能)产生,受到任务调度的控制
- 处理时机(或响应时间)不同
- 中断触发后,硬件根据中断向量找到相应的服务程序执行。在退出中断服务程序之前会进行重调度,所以中断结束后运行的任务不一定是先前被中断的任务。
- 异步信号通过发送异步信号的系统调用触发,但是系统不一定马上开始对它的处理:
- 如果接收异步信号的不是当前任务,则ASR要等到接收任务被调度、完成上下文切换后才能执行,之后再执行任务自身的代码。
- 任务也可以给自己发送异步信号,在这种情况下,其ASR将马上执行。
- 执行的环境不同
- 一般地,ISR在独立的上下文中运行,操作系统为之提供专门的堆栈空间。
- ASR在相关任务的上下文中运行,所以ASR也是任务的一个组成部分。
- 实质不同
4.16 异步信号机制与事件机制的比较?
同样是标志着某个事件的发生,事件机制的使用是同步的,而异步信号机制是异步的。
对一个任务来说,什么时候会接收事件是已知的,因为接收事件的功能是它自己在运行过程中调用的。
任务不能预知何时会收到一个异步信号,并且一旦接收到了异步信号,在允许响应的情况下,它会中断正在运行的代码而去执行异步信号处理程序。
5 中断、时间、内存管理
5.1 广义中断包含的中断类型?
- 中断:异步事件,又称为硬件中断
- 自陷:同步事件,显式的事件,通过处理器所拥有的软件指令、可预期地使处理器正在执行的程序的执行流程发生变化,以执行特定的程序
- 异常:同步事件,为CPU自动产生的自陷,以处理异常事件
5.2 中断的分类?
- 根据硬件中断是否可以被屏蔽
- 可屏蔽中断
- 不可屏蔽中断 :如掉电中断
- 根据中断源
- 硬件中断
- 软件中断:同步中断或是自陷,通过软件指令来实现
- 根据中断信号的产生
- 边缘触发中断
- 电平触发中断
- 根据中断服务程序的调用方式
- 向量中断:通过中断向量来调用中断服务程序
- 直接中断:中断对应的中断服务程序的入口地址是一个固定值,当中断发生的时候,程序执行流程将直接跳转到中断服务程序的入口地址,执行中断服务程序;
- 间接中断:中断服务程序的入口地址由寄存器提供
5.3 中断的相关知识点
-
中断的处理过程
- 中断检测:在每条指令结束时进行,检测是否有中断请求或是否满足异常条件
- 中断响应:由处理器内部硬件完成的中断序列,而不是由程序执行的
- 保存当前程序执行位置和执行状态
- 屏蔽中断
- 跳转到ISR
- 中断处理:执行中断服务程序
-
系统何时进行中断检测?
在每条指令结束时进行
-
中断响应应由谁完成?
处理器内部硬件
-
中断服务程序的主要内容
- 保存上下文:保存中断服务程序将要使用的所有寄存器的内容,以便于在退出中断服务程序之前进行恢复;
- 如果中断向量被多个设备所共享,为了确定产生该中断信号的设备,需要轮询这些设备的中断状态寄存器;
- 获取中断相关的其他信息;
- 对中断进行具体的处理;
- 恢复保存的上下文;
- 执行中断返回指令,使CPU的控制返回到被中断的程序继续执行。
5.4 非嵌套中断处理与嵌套处理的区别?
非嵌套中断处理:处理中断时,将屏蔽所有其他的中断请求
嵌套中断处理:定义中断优先级,允许高优先级的中断打断低优先级的中断的处理过程;发生中断嵌套时,如果需要进行任务调度,任务的调度将延迟到最外层中断处理结束时才能发生
**5.5 实时内核的中断服务程序包含哪些部分?用户中断服务程序编写需要注意哪些事项?
实时内核的中断服务程序通常包括三个方面的内容:
注意事项:
- 如果处理器或实时内核允许中断嵌套,要求中断服务程序是可重入的
- 中断服务程序应该尽可能比较短
- 用来配合中断服务程序的另外的任务通常被称为DSR(deferred service routine)
- 中断服务程序使用内核接口的特殊性
- 中断服务程序与任务的主要交互机制包括
- 共享内存
- 信号量
- 消息队列
- 管道
- 异步信号
5.6 中断时序图?中断延迟时间与响应时间的关系?
中断延迟时间:从中断发生到系统获知中断,并且开始执行中断服务程序所需要的最大滞后时间
中断响应时间:从中断发生到开始执行用户中断服务程序的第一条指令之间的时间
中断延迟时间 = 最大关中断时间+硬件开始处理中断到开始执行ISR第一条指令之间的时间
中断延迟时间与中断响应时间的区别:前者指到中断服务程序的第一条指令;而后者指到用户的中断服务程序的第一条指令
5.7 抢占式和非抢占式调度内核的中断时序图有何不同?
5.8 实时内核提供哪些时间管理功能?
- 设置系统时间:使应用能够设置当前系统的日期和时间
- 获得系统时间:实时内核可以把相对时间转换为以秒或是毫秒为单位的其它时间格式,并可根据实时时钟(Real Time Clock, RTC)获得日历时间
- 维护系统时基(ticks)、处理定时事件:通过时钟中断,维持系统日志时间、任务延迟时间、超时、时间片轮转调度等
**5.9 嵌入式系统的时钟源?实时时钟与系统时钟的概念?两者的关系?
时钟源:
- 定时时钟(real time clock,RTC)
- 定时器 / 计数器
实时时钟:是硬件时钟,独立于操作系统
系统时钟:并不是本质意义上的时钟,而是一个定时器/计数器,只有当系统运行起来以后才有效,并且由实时内核完全控制
两者的关系:一般,实时时钟是系统时钟的时间基准,实时内核通过读取实时时钟初始化系统时钟,此后两者保持同步运行,共同维系系统时间
5.10 实时内核的时间管理以系统时钟为基础,系统时钟如何定义?如何实现?
系统时钟是由定时器/计数器产生的输出脉冲触发中断而产生的,系统时钟的值一般定义为整数或长整数
**5.11 tick 的定义?tick的时间长度是固定值吗?
时基(ticks):每次定时器/计数器输出脉冲都触发一个时钟中断,一次中断表示一个tick,也被称做一个“时钟滴答”;
tick所对应的具体时间长度是可以调整的(初始化定时器时设定);
5.12 实时内核提供哪些时间管理相关的功能?
- 维持相对时间(时间单位为tick)和日历时间;
- 任务有限等待的计时;
- 定时功能;
- 时间片轮转调度的计时。
5.13 tick处理程序与时间中断处理程序的关系?tick处理程序需要处理哪些事务?
关系:定时器发生中断后,执行系统时钟中断处理程序,并在中断处理程序中调用tick处理程序,实现系统中与时间和定时相关的操作;
tick处理程序:
- 相对时间处理
- 任务时间片处理
- 时间等待链处理
- 软件定时器处理
- 日历时间处理
- 任务调度处理
**5.14 时间等待链(差分时间链)的定义与组织方式?采用差分时间链的优点?
定义:
组织方式:单链表形式
优点:一种有效的时间等待对象的组织方式,能有效降低时间等待对象的管理开销;
**5.15 嵌入式实时内核内存管理的特点?
- 快速而确定的内存管理
- 小型的嵌入式系统中不使用内存管理
- 通常的操作系统都至少具有基本的内存管理方法
- 不使用虚拟存储技术:以避免页面置换所带来的开销
- 内存保护
5.16 内存的分配方式?静态与动态分配的定义?两种方式的优缺点?
两种分配方式:静态分配和动态分配。
- 静态分配:发生在编译和链接时,全局变量和静态变量;开始运行就分配,运行结束才释放。
- 动态分配:发生在程序调入和执行时,局部变量和返回值等;需要时分配,使用完就可以释放。
优缺点:静态分配简单,但必须事先预知分配的数量(代码大小、数据大小),且缺乏灵活性;动态分配灵活,但会消耗额外的时间和内存开销,可能产生内存碎片。
5.17 常用内存管理方式?固定大小存储区、可变大小存储区,各自的管理方式和优缺点
常用内存管理方式:固定大小存储区、可变大小存储区
- 固定大小存储区:
- 管理方式:如果内存块处于空闲状态,将使用内存块中的几个字节作为控制结构,用来存放用于双向链接的前向指针和后向指针
- 优点:
- 系统开销对用户的影响为零
- 由于内存块的大小固定,不存在外碎片的问题
- 缺点:存在内碎片的问题
- 可变大小存储区:
- 管理方式:基于堆的(与传统堆操作不同),空闲段通过双向链表链接起来,形成一个空闲段链
- 优点:
- 缺点:
5.18 ucos ii的内存管理方式?
固定大小存储区,对一个分区块而言,分区大小是固定的;支持多个分区,每个分区大小可以不一样
5.19 如何实现内存保护?
- 防止地址越界(通过限长寄存器)
- 防止操作越权(根据内存页面的特权信息)
**5.20 MMU的全称?MMU的功能?
全称:内存管理单元(memory management unit)
功能:
- 内存映射;
- 检查逻辑地址是否在限定的地址范围内,防止页面地址越界;
- 检查对内存页面的访问是否违背特权信息,防止越权操作内存页面;
- 在必要的时候(页面地址越界或是页面操作越权)产生异常。
**5.21 MMU有几级使用方式?每级使用方式的特点?每级使用方式的应用情况?
4级。
-
0级,内存的平面使用模式
- 采用该模式的系统比较简单、性能也比较高,适合于程序简单、代码量小和实时性要求比较高的领域
- 大多数传统的嵌入式操作系统都采用该模式
-
1级,处理具有MMU和内存缓存的嵌入式处理器
- 通常只是打开MMU,并通过创建一个域的方式来使用内存,并对每次内存访问执行一些必要的地址转换操作
- 该模式仍然只是拥有MMU打开特性的平面内存模式
-
2级,内存保护模式
- MMU被打开,且创建了静态的域以保护应用和操作系统在指针试图访问其他程序的地址空间时不会被非法操作
- 通常使用消息传送机制实现数据在被MMU保护起来的各个域之间的移动
-
3级,虚拟内存使用模式
- 通过操作系统使用CPU提供的内存映射机制,内存页被动态地分配、释放或是重新分配
- 从内存映射到基于磁盘的虚拟内存页的过程是透明的
应用情况:
- 0级:大多数传统嵌入式实时操作系统的使用模式,不能实现内存的保护功能
- 1级:不能实现内存的保护功能
- 2级:目前大多数嵌入式实时操作系统所采用的内存管理模式,既能实现内存保护功能,又能通过静态域的使用方式保证系统的实时特性
- 3级:适合于应用比较复杂、程序量比较大,并不要求实时性的应用领域
5.22 MMU提供哪些措施实现内存保护?
- 防止地址越界(通过限长寄存器)
一样
5.19 如何实现内存保护?
- 防止地址越界(通过限长寄存器)
- 防止操作越权(根据内存页面的特权信息)
**5.20 MMU的全称?MMU的功能?
全称:内存管理单元(memory management unit)
功能:
- 内存映射;
- 检查逻辑地址是否在限定的地址范围内,防止页面地址越界;
- 检查对内存页面的访问是否违背特权信息,防止越权操作内存页面;
- 在必要的时候(页面地址越界或是页面操作越权)产生异常。
**5.21 MMU有几级使用方式?每级使用方式的特点?每级使用方式的应用情况?
4级。
-
0级,内存的平面使用模式
- 采用该模式的系统比较简单、性能也比较高,适合于程序简单、代码量小和实时性要求比较高的领域
- 大多数传统的嵌入式操作系统都采用该模式
-
1级,处理具有MMU和内存缓存的嵌入式处理器
- 通常只是打开MMU,并通过创建一个域的方式来使用内存,并对每次内存访问执行一些必要的地址转换操作
- 该模式仍然只是拥有MMU打开特性的平面内存模式
-
2级,内存保护模式
- MMU被打开,且创建了静态的域以保护应用和操作系统在指针试图访问其他程序的地址空间时不会被非法操作
- 通常使用消息传送机制实现数据在被MMU保护起来的各个域之间的移动
-
3级,虚拟内存使用模式
- 通过操作系统使用CPU提供的内存映射机制,内存页被动态地分配、释放或是重新分配
- 从内存映射到基于磁盘的虚拟内存页的过程是透明的
应用情况:
- 0级:大多数传统嵌入式实时操作系统的使用模式,不能实现内存的保护功能
- 1级:不能实现内存的保护功能
- 2级:目前大多数嵌入式实时操作系统所采用的内存管理模式,既能实现内存保护功能,又能通过静态域的使用方式保证系统的实时特性
- 3级:适合于应用比较复杂、程序量比较大,并不要求实时性的应用领域
5.22 MMU提供哪些措施实现内存保护?
- 防止地址越界(通过限长寄存器)
- 防止操作越权(根据内存页面的特权信息)