Chapter 2 - 嵌入式操作系统中的基本概念
Created by : Mr Dk.
2019 / 11 / 06 21:50
Nanjing, Jiangsu, China
2.1 前后台系统
指无 OS 支撑的计算机系统
- 后台指一个无限循环的应用程序
- 前台是中断服务程序
中断服务提供的信息不能马上得到处理,要等到后台程序运行到相应任务时才能处理。处理信息的及时性较差,最坏情况取决于整个循环的执行时间。
2.2 调度
2.3 临界区
任何时候都只允许一个任务访问的资源成为临界资源。
2.4 进程与线程
2.5 任务与多任务
大多数嵌入式系统不具备面向进程操作系统的内存开销,绝大多数嵌入式 RTOS 都采用线程模式。多任务 OS 的核心是系统调度器,使用 任务控制块 (Task Control Block, TCB) 管理任务调度,需要保存:
- 任务当前状态
- 优先级
- 等待的事件或资源
- 任务程序代码的起始地址
- 初始堆栈指针
当任务 CPU 使用权被剥夺时,TCB 用于保存任务状态;反之,用于恢复状态。TCB 全部驻留在内存中。
2.6 任务切换
任务切换模拟一次中断过程,从而实现 CPU 使用权的转移。任务切换所需要的时间成为 任务切换时间——取决于 CPU 有多少寄存器要进出堆栈。
2.7 死锁
在嵌入式系统中不易出现
2.8 不可剥夺型内核
运行中的任务占有 CPU 的绝对使用权。若不自我放弃,准备就绪的高优先级任务不能抢占 CPU 使用权。正在运行的任务允许被中断打断,但中断返回后还是回到原来的任务中,直到任务主动释放 CPU。不可剥夺型内核的最大缺陷在于响应时间慢,当前运行任务的 CPU 使用时间无法确定,任务响应时间仍然不可知。商业软件几乎没有不可剥夺型内核。
2.9 可剥夺型内核
一旦有更高优先级的任务准备就绪,当前正在运行的低优先级任务的 CPU 使用权立即被剥夺,准备就绪的最高优先级任务总能得到 CPU 的使用权。若高优先级的任务不自我挂起,低优先级的任务永远没有运行的机会。可剥夺型内核的 CPU 使用权是可预测和可确定的,任务级响应得以优化。μC/OS-II 以及绝大多数商业实时内核都是可剥夺型内核。
2.10 可重入型
可以被多个任务并发使用,数据不会遭到破坏。若想使函数具有可重入性:
- 使用局部变量
- 调用前关中断,调用后开中断
- 调用过程中,使用信号量独占该函数
2.11 优先级反转
- 静态优先级:任务在创建时就确定优先级。运行过程中不再动态改变优先级,各任务的时间约束在编译时已知
- 动态优先级:任务优先级根据需要而改变
优先级反转:低优先级任务抢占了高优先级任务的资源,中优先级任务抢占了低优先级任务的 CPU 使用权,中优先级任务与高优先级任务的优先级反转。
防止发生优先级反转的方法:
- 优先级继承算法
- 优先级天花板算法
μC/OS-II 不支持这两种算法。
2.12 事件
- 信号量
- 消息邮箱
- 消息队列
- 事件标志组
2.13 互斥
- 关中断:CPU 不响应任何中断,保证任务不会切换
- 禁止调度(禁止抢占):中断依旧开放,中断返回原任务继续执行
- 信号量:信号量的请求和释放开销相当大
- 测试并置位:Test and Set
2.14 同步
中断不能与任务同步。
2.15 通信
任务与任务 或 任务与中断服务 之间的信息传递。手段:
- 全局变量
- 信号量
- 消息邮箱
- 消息队列
- 事件标志组
- 内存块
中断服务子程序保证独占的唯一方法:关中断。
任务与中断服务子程序通信的唯一方法:全局变量。
2.16 对存储器的要求
去死吧!
Summary
大部分概念在操作系统课上已经学过