任务与进程

任务

任务是在构建应用时逻辑上进行划分的最小单位。任务按照性质被划分为重要任务、次要任务与系统任务。

  • 重要任务
    指对时间敏感的任务。(亦可理解为原叙述中的"为完成某个该任务而进行的系统设计")

  • 次要任务
    指对时间不敏感的任务。(亦可理解为原叙述中的"为完成重要任务而执行的辅助任务")

  • 系统任务
    系统为维持自身功能正常而必须进行的任务。

进程

因为 STM32 多为单核心,因此只使用进程进行描述。在每个进程可以完成逻辑上的一个或多个任务,但注意进程是系统调度中的最小单位。

进程管理器系列 API 职能:完成进程的创建/删除,启动/停止,信息收集与管理;调度器系列 API 职能:对进程进行调度。
在语法上有一个明显区别:即进程管理器必须指定目标对象;调度器不需要指定对象。

与任务一一对应,处理重要任务的进程被称为重要进程,处理次要任务的进程被称为次要进程,处理系统任务的进程被称为系统进程。

进程的调度行为

重要进程的调度由任务管理器生成的静态调度表进行规划,属于硬实时调度。
次要进程的调度由优先级决定,属于软实时调度。
系统进程会强制填充所有时间空隙(即空闲时间),如果处理器满负荷时,系统进程会挤占次要进程的运行时间。

进程的退出

进程的退出(CPU 时间持有的释放)存在两种情况:

  1. 因系统内部调度而被动释放
  2. 主动释放

换言之,在周期性任务编写时,当任务结束时必须显式调用异步阻塞函数,将该进程释放。
对任务来说存在几种可能的主动阻塞情况:

  1. 延时请求
  2. 同步请求