概述
上下文切换指CPU从一个任务切换到另一个任务时, 保存当前任务寄存器状态并恢复目标任务状态的过程。
工作原理
当发生调度事件(如时间片结束、任务阻塞或高优先级任务就绪)时, 内核触发上下文切换流程。
切换开销直接影响系统实时性,因此必须尽可能优化保存与恢复路径。
切换触发条件
HRTOS在以下情况下会触发上下文切换:
1. 时间片耗尽(Tick Expire)
2. 当前任务主动让出CPU(Yield)
3. 任务进入阻塞状态
4. 更高优先级任务就绪
5. 中断退出后触发调度
高优先级任务抢占是实时系统响应能力的重要保障。
执行路径
中断触发 / 主动让出CPU
↓
进入调度器
↓
保存当前任务上下文
↓
更新就绪队列
↓
选择最高优先级任务
↓
恢复目标任务上下文
↓
返回任务继续执行
上下文切换本质上是任务状态保存与恢复流程, 同时伴随调度器重新选择最高优先级可运行任务。
关键接口 / 结构
os_schedule()
os_context_switch()
struct context {
uint32_t sp;
uint32_t pc;
uint32_t regs[16];
};
struct task_control_block {
struct context ctx;
};
寄存器保存与恢复
切换过程中,CPU需要将当前任务寄存器状态保存到任务控制块(TCB), 并恢复下一个任务的寄存器上下文。
R0 - R12
SP
LR
PC
xPSR
保存寄存器数量越多,上下文切换开销越高。
运行流程
触发调度 → 保存当前任务上下文 → 选择下一个任务 → 恢复目标任务上下文 → 返回用户态继续执行。
性能影响因素
上下文切换延迟受以下因素影响:
1. CPU寄存器数量
2. 调度器复杂度
3. 中断嵌套深度
4. 栈保存开销
5. Cache影响
HRTOS通过精简调度路径与优化寄存器保存策略降低切换延迟。
扩展说明
HRTOS支持硬件中断触发切换与软件调度切换两种模式, 并针对不同架构优化寄存器保存策略。