调度与上下文切换
任务优先级
- 抢占式调度里,数值越大优先级越高。
- 同优先级任务在开启时间片轮转时会轮流运行。
- 更高优先级任务一旦就绪,低优先级运行任务可能立即被抢占。
空闲任务
- 调度器启动后会自动创建一个空闲任务。
- 它通常负责回收被删除任务的内存,也承担低功耗空转入口。
任务为什么会离开运行态
- 更高优先级任务就绪。
- 自己主动进入延时或等待。
- 在等队列、信号量、事件组等资源。
任务为什么会重新获得运行机会
- 延时到点。
- 资源到了。
- 中断把它唤醒了。
- 更高优先级任务让出 CPU 或再次阻塞。
上下文切换
- 上下文切换就是:保存当前任务的 CPU 现场到它自己的栈里,再从另一个任务的栈里恢复现场。
- 在 Cortex-M 里,
PendSV经常承担“搬运上下文”的角色。 SysTick常常提供系统节拍,让调度器有固定时间基准。
这一篇要盯住什么
- 阻塞唤醒比死循环轮询更高效。
- 切换有开销,所以任务切得不是越碎越好。
- 调度器不是“神秘模块”,本质就是围绕任务状态转移在做决定。