os_switch

所属模块:调度管理 | 类型:核心调度函数

函数简介

os_switch 是 HRTOS 中最核心的调度函数之一,负责完成任务切换(Task Switch)。 在多任务系统中,CPU 需要在不同任务之间快速切换执行,而 os_switch 正是这一过程的执行入口。

该函数主要完成三件关键工作:保存当前任务执行上下文、选择下一可运行任务、恢复目标任务上下文。 这一过程也被称为“上下文切换(Context Switch)”,是实时操作系统实现并发执行的基础。

函数原型

void os_switch(void);

核心流程解析

os_switch 的执行流程可以分为以下几个阶段:

关键实现机制

1. 优先级调度

系统通过扫描任务状态数组,提取优先级字段,并选择最高优先级任务执行。 这种方式实现简单,同时具备较好的实时性。

2. 轻量轮转机制

当多个任务优先级相同时,系统引入简单轮转策略,避免任务长期占用 CPU, 提升整体调度公平性。

3. 上下文保存与恢复

任务切换的本质是 CPU 状态的切换,包括寄存器、栈指针等。 HRTOS 使用栈保存现场,通过汇编指令 POP 恢复寄存器,实现快速切换。

POP DPL POP DPH POP B POP ACC POP PSW

使用场景

void timer0_isr() interrupt 1 { os_switch(); // 周期性调度 }

注意事项

os_switch 通常应在中断或内核控制流程中调用,普通任务不应直接频繁调用, 否则可能破坏调度时序。
任务栈必须正确初始化,否则在恢复寄存器时可能导致系统崩溃。

性能特点

特性说明
切换速度基于寄存器栈恢复,执行效率高
实时性支持优先级调度,响应快速
复杂度实现简洁,适合嵌入式系统

相关推荐