上下文切换(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模块独立管理