# RTOS/HRTOS 调度基础(硬核精简版,适配硬实时体系)
## 一、调度核心本质
CPU同一时间只能执行一段代码,**调度就是分配CPU使用权的规则**;
调度器是这套规则的执行载体,中断系统是调度时机的唯一来源。
## 二、任务基础(调度的最小单元)
### 1. 任务TCB三要素
- 优先级:决定抢占权(硬实时核心)
- 私有栈:保存任务上下文,切换时现场存放
- 状态机:决定是否参与调度
### 2. 标准5种任务状态
1. **运行态**:当前占用CPU
2. **就绪态**:具备运行条件,等待调度分配CPU
3. **阻塞态**:主动放弃CPU(等待信号量/延时/消息)
4. **挂起态**:手动冻结,不参与调度
5. **延时态**:等待滴答时钟到期,到期转入就绪
### 3. 任务切换:上下文切换
切换时自动保存/恢复:通用寄存器、PC程序计数器、SP栈指针、状态寄存器;
切换耗时是硬实时核心指标,HRTOS会极致压缩切换周期。
## 三、三大基础调度算法
### 1. 抢占式优先级调度(HRTOS唯一标准)
1. 规则:CPU***执行**就绪队列里优先级最高**的任务;
2. 抢占触发:高优先级任务一旦就绪,立刻打断低优先级任务,无等待;
3. 优势:时序可预测、满足硬实时截止时间;
4. 痛点:存在**优先级反转**,必须配套互斥锁协议(PIP/PCPP)解决。
### 2. 同优先级时间片轮转
同一优先级下多个任务平分CPU,固定时间片到期后切换;
同优先级不会互相抢占,仅适用于低实时后台业务。
### 3. 协作式调度(裸机/老式RTOS,硬实时禁用)
任务主动调用释放CPU函数才会切换,高优任务无法抢占;
执行延迟无上限,不能用于工业/车载控制。
## 四、调度触发的两类时机(全部依赖中断)
### 1. 滴答定时器中断(周期调度源)
系统Tick心跳,处理延时任务、周期任务,中断退出时触发调度判断。
### 2. 外部硬件中断(异步抢占源)
传感器、AI加速器、急停等中断唤醒高优任务,中断返回前执行抢占切换;
是硬实时“事件即时响应”的基础。
### 补充:任务主动阻塞触发调度
任务调用`delay()`、`sem_wait()`主动放弃CPU,同步触发调度。
## 五、同步互斥:调度的配套约束(解决资源冲突)
### 1. 信号量
- 二值信号量:中断与任务同步;
- 计数信号量:缓冲资源计数。
### 2. 消息队列
跨任务传递传感器、AI图像数据,解耦生产者/消费者。
### 3. 互斥锁(解决优先级反转)
- 优先级继承PIP:低优先级临时抬升自身优先级;
- 优先级天花板PCPP:锁预设最高优先级,彻底杜绝无界阻塞。
### 4. 事件组
多事件条件触发任务唤醒。
## 六、硬实时调度核心约束(系统正确性的底层保障)
1. 全静态内存:禁止`malloc`,杜绝内存碎片带来随机抖动;
2. 最小关中断区间:关中断会阻塞所有抢占,必须缩到最短;
3. ISR极简原则:中断内只缓存数据,复杂运算放到任务;
4. 最坏执行时间可量化:切换延迟、中断响应、阻塞时长存在固定上限。
## 七、调度完整执行链路(最简流程)
硬件中断 → 修改任务状态(就绪) → 退出中断触发调度器 → 查找最高优先级就绪任务 → 上下文切换 → 高优任务获得CPU执行
## 八、通俗分层总结
1. **任务**:要跑的业务代码块;
2. **状态**:任务能不能抢CPU;
3. **优先级**:谁优先跑的规则;
4. **调度器**:执行这套规则的工具;
5. **中断**:触发调度、驱动整套时序模型的入口;
6. **同步组件**:保证多任务共享资源不乱序、不阻塞。 |
|