上下文切换(Context Switch)
上下文切换是HRTOS实现多任务运行的基础机制。 系统通过保存当前任务执行现场,并恢复目标任务执行现场, 使多个任务能够在单CPU环境下交替运行。
一、任务上下文概念
每个任务在运行过程中都会产生独立的执行状态,包括程序执行位置、 堆栈位置以及处理器运行环境。 上下文切换的作用就是保存这些状态,使任务能够在之后恢复执行。
HRTOS针对不同类型任务采用不同的上下文管理方式:
标准任务:
OS_TASK_CONTEXT[OS_PROCESS_MAX][OS_JINCHENG_SHENDU]
高速任务:
OS_FAST_CONTEXT[OS_FAST_TASK_MAX][OS_KUAI_SHENDU]
二、标准任务上下文保存
普通任务使用独立任务栈保存运行现场。 任务创建时,系统会为任务分配栈空间,并记录对应的栈指针。
OS_JINCHENG_SP[OS_PROCESS_MAX]
标准任务栈指针记录
任务切换过程中,当前任务的执行现场被保存, 恢复任务时通过保存的栈信息继续执行。
三、高速任务上下文机制
HRTOS提供高速任务机制,用于需要快速响应的执行场景。 高速任务拥有独立工作寄存器组,可以减少部分上下文搬运开销。
OS_KUAI_SP[OS_FAST_TASK_MAX]
高速任务栈指针
OS_FAST_CONTEXT[OS_FAST_TASK_MAX][...]
高速任务上下文区域
由于高速任务使用专用寄存器组, 切换过程中无需像普通任务一样保存和恢复全部R0-R7寄存器, 从而降低切换开销。
四、上下文切换过程
当前任务运行
↓
保存当前执行现场
↓
更新任务运行状态
↓
选择目标任务
↓
恢复目标任务上下文
↓
继续执行目标任务
上下文切换由系统运行状态变化触发,例如任务主动让出CPU、 任务状态变化或系统调度过程。
五、任务上下文设计特点
- 标准任务与高速任务采用不同上下文结构
- 任务拥有独立执行栈,保证任务运行隔离
- 高速任务利用专用寄存器组降低切换成本
- 上下文管理与任务生命周期紧密结合
- 中断上下文机制由Interrupt模块独立管理