调度与上下文切换

← 返回 MOC | ← 相关原理 | ← 主页


任务优先级

  • 抢占式调度里,数值越大优先级越高。
  • 同优先级任务在开启时间片轮转时会轮流运行。
  • 更高优先级任务一旦就绪,低优先级运行任务可能立即被抢占。

空闲任务

  • 调度器启动后会自动创建一个空闲任务。
  • 它通常负责回收被删除任务的内存,也承担低功耗空转入口。

任务为什么会离开运行态

  • 更高优先级任务就绪。
  • 自己主动进入延时或等待。
  • 在等队列、信号量、事件组等资源。

任务为什么会重新获得运行机会

  • 延时到点。
  • 资源到了。
  • 中断把它唤醒了。
  • 更高优先级任务让出 CPU 或再次阻塞。

上下文切换

  • 上下文切换就是:保存当前任务的 CPU 现场到它自己的栈里,再从另一个任务的栈里恢复现场。
  • 在 Cortex-M 里,PendSV 经常承担“搬运上下文”的角色。
  • SysTick 常常提供系统节拍,让调度器有固定时间基准。

这一篇要盯住什么

  • 阻塞唤醒比死循环轮询更高效。
  • 切换有开销,所以任务切得不是越碎越好。
  • 调度器不是“神秘模块”,本质就是围绕任务状态转移在做决定。