Task Management · HRTOS

任务状态模型 Task State Model

从任务是否具备运行资格、当前是否占用 CPU,到挂起恢复与退出清理, 理解 HRTOS 的任务状态判定,以及状态模型与任务生命周期、等待机制之间的边界。

Task Control State Transition Scheduling Context
01

状态模型概述

状态描述任务当前所处的位置,不等于任务全部生命周期信息。

任务状态模型用于描述任务当前是否能够参与调度、是否正在执行, 以及是否暂时不能运行。内核根据任务控制信息和当前执行上下文, 决定任务在系统中的运行位置。

阅读状态模型时,需要区分三个相关但不同的概念: 任务生命周期描述任务从创建到退出的过程; 任务状态描述任务当前的管理与执行位置; 等待机制描述任务因时间、事件或资源条件而等待的原因。

就绪状态

READY

任务具备参与调度的条件,但不代表此刻正在占用 CPU。

运行状态

RUNNING

任务当前获得处理器执行。具体运行者由调度器与执行上下文决定。

挂起状态

SUSPENDED

任务暂时不能按正常调度路径运行,需要满足相应恢复条件。

退出与清理

CLEANUP

任务退出或删除后,内核可能还需要完成相关管理信息与资源清理。

阅读提示: 上述名称用于解释任务管理中的概念。它们不意味着 HRTOS 的查询接口一定为每个概念提供一个独立返回值。 实际状态编码与特殊返回值应以当前版本的头文件和实现为准。
02

状态查询与返回值

将 API 的实际返回约定与概念状态分开理解。

HRTOS 的任务状态查询接口可用于检查指定任务的状态。 但在文档中,应明确区分普通任务状态、当前任务识别结果,以及特殊任务或无效任务的处理方式。

Interface Reference
os_task_get_state(id)
需要确认的项目 文档应说明的内容
有效任务 就绪、运行、挂起等状态的实际编码与判定规则。
无效或已删除任务 返回值是否与普通状态共用同一编码空间,以及是否区分删除过程。
当前运行任务 是否由专门的返回值标记,还是通过当前任务编号与任务控制信息判断。
高速任务及特殊执行上下文 是否沿用普通任务的状态编码,以及查询时如何处理特殊运行标志。
版本核对: 旧版文档中出现过 0~4 的返回值解释,其中包括“最近一次被切出的任务”。 在没有重新核对 HRTOS 4.0 的实际实现前,不应将这组映射直接视为通用任务状态枚举。 尤其需要确认历史任务信息是否属于状态查询结果,还是单独的调度记录。
03

状态判定机制

状态来自任务控制信息与当前执行上下文,而非单一变量。

在任务状态判定中,任务是否已注册、当前任务编号、调度过程中的任务记录, 以及高速任务专用控制信息,都可能影响最终的查询结果。 分析这些信息时,应结合具体代码路径理解其用途。

控制信息 分析重点
OS_PROCESS_OK 核对任务注册、有效性或相关控制标志的具体含义。
OS_CURRENT_TASK 核对当前任务编号如何参与运行状态识别。
OS_PREV_TASK 核对其是否记录上一次任务,以及该记录是否参与状态查询。
高速任务控制标志 核对高速任务的执行标志、现场保存和恢复路径,不能直接假定其与普通任务完全一致。
实现边界: 上表中的变量名沿用已有工程资料中的命名,用于帮助定位代码。 各变量的准确语义、有效范围与相互关系,应以 HRTOS 4.0 源码为准; 不应仅凭变量名称推断其全部行为。
04

状态转换与任务生命周期

概念流程用于理解过程,不代表每一步都有独立状态编码。

从概念上看,任务创建后进入可参与调度的阶段,获得处理器后开始执行; 运行过程中可能因挂起、等待、调度切换或退出而改变其运行位置。 删除请求与最终清理也可能不是同一个瞬间完成。

01
创建与注册 建立任务所需的管理信息和运行环境。
02
就绪 任务具备参与调度的条件。
03
运行 任务获得处理器执行,直到发生调度或其他控制事件。
A
挂起或等待 满足恢复条件后,按相应机制重新参与调度。
B
退出或删除 进入相应的结束处理与清理路径。
重要区别: “删除请求 → 清理 → 结束”是描述可能存在的生命周期处理过程; 是否延迟到空闲任务清理、清理哪些对象,以及任务何时不再有效, 均应结合实际删除实现确认。

因此,状态转换图适合帮助理解系统行为,但不能替代生命周期文档中的具体接口约定。 对任务删除、退出和资源回收的完整说明,请结合 任务生命周期 页面阅读。

05

任务状态与等待机制

状态回答任务处于什么位置,等待机制解释任务为何暂时不能继续。

任务可能因延时、同步对象、消息或事件条件而无法继续执行。 这些等待条件属于等待机制的语义;它们对任务运行资格的影响, 则需要结合内核的状态管理与调度规则理解。

层次 主要关注点 阅读方向
Task 任务是否有效、能否参与调度、是否正在执行。 任务状态与生命周期
Wait 等待条件、等待时长,以及条件满足后的处理。 Wait 模块
Scheduler 在符合调度条件的任务中,决定下一步执行对象。 Scheduler 模块
注意: 不应将所有等待原因都直接等同于一个固定的任务状态。 等待对象、任务状态标志与调度资格之间的实际映射,应以当前内核实现为准。
06

相关任务接口

查询、挂起、恢复与退出属于不同的控制操作。

接口 用途 核对重点
os_task_get_state(id) 查询指定任务的状态。 参数、返回值与特殊任务的处理规则。
os_task_suspend(id) 请求挂起指定任务。 允许的目标任务、调用上下文与返回约定。
os_task_resume(id) 请求恢复指定任务。 恢复条件以及任务是否立即运行。
os_task_delete(id) 请求删除指定任务。 删除时机、清理方式和资源生命周期。
os_task_exit() 任务主动退出相关操作。 适用上下文以及退出后的处理路径。
接口使用原则: 表格描述的是接口的预期职责,不是对所有边界行为的保证。 在编写示例代码前,请核对当前版本的公开头文件、函数声明和实现, 特别是无效任务、重复挂起、重复恢复以及删除当前任务等情况。
07

设计与调试要点

将状态模型作为观察内核行为的工具,而不是独立于实现的抽象承诺。

  • 状态表示应尽可能简洁,避免将内部控制过程中的每个步骤都误认为独立状态。
  • 任务有效性、当前运行者与历史调度记录应分别理解,不应混用其语义。
  • 等待条件与任务运行资格相关,但两者属于不同的分析层次。
  • 普通任务与高速任务的状态查询应以各自的实际控制路径为依据。
  • 删除与退出的调试应同时关注任务状态、调度行为和后续清理过程。

调试任务异常时,建议依次检查任务是否成功创建、是否具备运行资格、 调度器是否选择了预期任务、等待条件是否满足,以及退出或删除路径是否按预期完成。 将这些问题分开定位,通常比单独观察一个状态值更容易发现根因。