一、任务状态概述

在实时操作系统(RTOS)中,任务通常具有以下几种基本状态:

  • Running(运行态):任务正在 CPU 上实际执行。单核系统中同一时刻最多只有一个任务处于运行态。

  • Ready(就绪态):任务已具备执行条件,等待被调度器选中并获得 CPU 使用权。

  • Blocked(阻塞态):任务因等待外部事件(如延时、信号量、消息等)而无法继续执行,主动让出 CPU。

  • Suspended(挂起态):任务被强制暂停,不参与任何调度,必须显式恢复才能回到就绪态。

二、各状态详解与转换关系

1. Running(运行态)

  • 含义:任务正在 CPU 上执行。

  • 转换条件

    • 由就绪态被调度器选中进入运行态。

    • 可因时间片用完、被更高优先级任务抢占或主动阻塞而离开运行态。

2. Ready(就绪态)

  • 含义:任务已准备好,等待调度器分配 CPU。

  • 转换条件

    • 由阻塞态(事件发生)、挂起态(被恢复)或任务创建时进入。

    • 被调度器选中后进入运行态。

3. Blocked(阻塞态)

  • 含义:任务等待某一事件(如延时、信号量、消息等),期间不占用 CPU。

  • 转换条件

    • 由运行态主动调用阻塞类函数(如 vTaskDelay())进入。

    • 等待的事件发生后回到就绪态。

4. Suspended(挂起态)

  • 含义:任务被强制暂停,不参与调度。

  • 转换条件

    • 由其他任务调用 vTaskSuspend() 进入。

    • 由其他任务调用 vTaskResume() 恢复至就绪态。

三、状态转换流程图示意

text

[任务创建] → [Ready] → [Running] ↓          ↑          ||          |          ↓
[Suspended] ← [Blocked] ← [主动阻塞或事件等待]

四、调度机制详解

1. 调度原则

  • 相同优先级的任务按时间片轮流执行(Round-Robin)。

  • 高优先级任务可抢占低优先级任务。

  • 多个最高优先级任务并存时,它们之间轮流执行。

2. 就绪队列与链表结构

RTOS 使用数组(或链表)管理就绪任务,每个优先级对应一个链表,链表中存储该优先级下所有就绪任务的 TCB(任务控制块)。

  • pxCurrentTCB 指针指向当前正在运行的任务的 TCB。

  • 新创建的任务通过尾插法加入对应优先级的就绪链表。

3. 调度过程

  • 调度器从最高优先级向下查找第一个非空就绪链表。

  • 从该链表中选取下一个任务(如使用时间片轮转则选取下一个节点)。

  • 进行上下文切换,使该任务进入运行态。

4. 阻塞与延时机制

  • 调用 vTaskDelay() 会使任务从运行态进入阻塞态。

  • 任务被移至延迟链表,由 Tick 中断定时检查是否到期。

  • 到期后任务被重新移回就绪链表。

5. 挂起机制

  • 挂起的任务被移至挂起链表,不受 Tick 中断影响。

  • 必须显式调用 vTaskResume() 才能恢复至就绪态。

五、TCB 与任务句柄的关系

1. TCB(Task Control Block)

  • 是内核内部用于描述任务状态的数据结构。

  • 包含栈指针、任务状态、优先级、事件列表、延时信息等。

  • 对用户不可见,由内核维护。

2. 任务句柄(Task Handle)

  • 是指向 TCB 的指针,作为用户与内核交互任务的凭证。

  • 通过 xTaskCreate() 等函数返回,用于后续操作(如挂起、恢复、修改优先级)。

示例代码:

c

TaskHandle_t xHandle;
xTaskCreate(vTask, "Task", 1024, NULL, 1, &xHandle);
// 此后可通过 xHandle 操作该任务

六、使用注意事项与常见误区

1. 避免空循环延时

  • 在 RTOS 中,应使用 vTaskDelay() 而非 while(1) 进行延时。

  • 空循环会持续占用 CPU,导致低优先级任务无法执行,破坏系统实时性。

2. 状态转换需显式调用

  • 阻塞、挂起等状态转换需通过相应 API 实现,不能直接修改 TCB。

3. 优先级设置需合理

  • 过高优先级可能导致低优先级任务饥饿;过低可能无法及时响应。

七、总结

状态是否消耗 CPU是否参与调度进入原因离开条件
Running不适用被调度器选中时间片到/被抢占/主动阻塞
Ready事件发生/被恢复/任务创建被调度器选中
Blocked主动等待事件事件发生
Suspended被其他任务挂起被其他任务恢复

理解任务状态及其转换机制是掌握 RTOS 多任务调度和资源管理的基础。合理使用阻塞、挂起等功能,能显著提升系统效率和实时性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/923642.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/923642.shtml
英文地址,请注明出处:http://en.pswp.cn/news/923642.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TDengine 特殊选择函数 UNIQUE 用户手册

UNIQUE 函数用户手册 函数定义 UNIQUE(expr)功能说明 UNIQUE() 函数返回指定列去重后的值,功能类似于 SQL 中的 DISTINCT 关键字。对于相同的数据值,UNIQUE 函数会返回时间戳最小的那一条记录。该函数会跳过 NULL 值。 版本要求 最低版本: v3.0.0.0…

新零售第一阶段传统零售商的困境突破与二次增长路径:基于定制开发开源AI智能名片S2B2C商城小程序的实践探索

摘要:新零售第一阶段,传统零售商面临同质化竞争、用户消费意愿低迷、线上电商分流等核心困境。本文以定制开发开源AI智能名片S2B2C商城小程序为切入点,结合阿里巴巴、某知名连锁零售企业等实践案例,分析其通过“AI智能推荐供应链协…

Spark SQL 之 Join Reorder

参考链接 https://www.cnblogs.com/fxjwind/p/14768975.html join Reorder src/main/scala/org/apache/spark/sql/catalyst/optimizer/CostBasedJoinReorder.scala private def reorder(plan: LogicalPlan, output: Seq[Attribute]): LogicalPlan = {<

牛客周赛 Round 109

比赛链接&#xff1a;牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A-小红的直角三角形_牛客周赛 Round 109 签到题&#xff1a;用勾股定理即可通过此题&#xff08;需要注意对共线情况的判断&#xff09; 代码&#xff1a; // Problem: 小红的直角三角…

[deepseek]LNK2001错误即单独编译汇编并链接

方案一&#xff1a;使用预编译的 .obj 文件&#xff08;最简单&#xff09; 如果汇编代码不常改动&#xff0c;这是最省事的方法。手动编译一次&#xff1a; 打开命令行&#xff0c;切换到 spoof.asm 所在目录。使用你已有的汇编器&#xff08;或者下载一个单独的 MASM 版本&am…

php学习 (第六天)

虚拟主机 一.什么是虚拟主机&#xff1f; 1.1 概念虚拟主机&#xff08;Web Hosting&#xff09;英文&#xff1a;Web Hosting / Shared Hosting核心概念&#xff1a; 一台服务器被切分给多个用户&#xff0c;每个人只使用服务器的一部分资源&#xff08;CPU、内存、带宽、存储…

AcousticsML声学机器学习翻译教程二(特征提取Feature Etraction)

源自&#xff1a;https://github.com/RAMshades/AcousticsM 特征提取 特征是可测量的属性&#xff0c;作为系统的输入。这些输入与特定数据样本相关&#xff0c;机器学习模型可通过解读这些特征来提供预测。特征通常具有独立性&#xff0c;并能提供样本的具体细节。音频特征示例…

【论文阅读】Beyond Text: Frozen Large Language Models in Visual Signal Comprehension

本论文研究了能否利用一个“冻结”的LLM&#xff0c;直接理解视觉信号&#xff08;即图片&#xff09;&#xff0c;而不用在多模态数据集上进行微调。核心思想是把图片看作一种“语言实体”&#xff0c;把图片转换成一组离散词汇&#xff0c;这些词汇来自LLM自己的词表。为此&a…

The Oxford-IIIT宠物图像识别数据集(753M)

0、引言博主研究生期间做的是人工智能领域相关的深度学习模型研究&#xff0c;早期还没定题的时候调研了大量方向。众所周知&#xff0c;模型性能的好坏很大程度上依赖于数据集&#xff0c;因此我当时也接触了大量数据集&#xff0c;这阵子将这些数据集汇总整理了一下&#xff…

jdbc DAO封装及BaseDAO工具类

DAO概念 DAO&#xff1a;Data Access Object&#xff0c;数据访问对象。 Java是面向对象语言&#xff0c;数据在Java中通常以对象的形式存在。一张表对应一个实体类&#xff0c;一张表的操作对应一个DAO对象&#xff01; 在Java操作数据库时&#xff0c;我们会将对同一张表的增…

大模型应用开发2-SpringAI实战

SpringAI整合了大多数大模型&#xff0c;而且对于大模型开发的三种技术架构都有比较好的封装和支持&#xff0c;开发起来非常方便。不同的模型能够接收的输入类型、输出类型不一定相同。SpringAI根据模型的输入和输出类型不同对模型进行了分类&#xff1a; 大模型应用开发大多…

TDengine 时序函数 DIFF 用户手册

DIFF 函数用户手册 函数概述 DIFF 函数用于计算数据列中相邻两行数据的差值&#xff0c;通常用于分析数据的变化趋势和增量。该函数特别适用于监控智能电表数据的变化模式。 语法 SELECT DIFF(column_name [, ignore_negative]) FROM table_name;参数说明 column_name: 数…

清除gradle缓存的某个依赖

要清除 Gradle 缓存中的某个特定依赖&#xff0c;可以按照以下步骤操作&#xff1a;找到依赖在缓存中的路径 Gradle 缓存的默认位置&#xff1a; Windows: C:\Users\<用户名>\.gradle\caches\modules-2\files-2.1 macOS/Linux: ~/.gradle/caches/modules-2/files-2.1 路径…

机器人控制器开发(驱动层——伺服驱动canopen的sdo和pdo)

文章总览 一、核心区别&#xff1a;一句话概括 • ​​SDO&#xff08;服务数据对象&#xff09;​​&#xff1a;像 ​​“问询/设置”​​。用于​​点对点、非周期​​的参数配置和读取。例如&#xff0c;设置电机增益、读取当前位置等。​​速度慢&#xff0c;但确保数据准…

返利APP排行榜数据实时更新:基于 WebSocket 与 Redis 的高并发数据推送技术

返利APP排行榜数据实时更新&#xff1a;基于 WebSocket 与 Redis 的高并发数据推送技术 大家好&#xff0c;我是阿可&#xff0c;微赚淘客系统及省赚客APP创始人&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在返利APP运营中&#xff0c;用户对排…

[论文阅读] 人工智能 + 软件工程 | 告别冗余HTML与高算力消耗:EfficientUICoder如何破解UI2Code的token难题

告别冗余HTML与高算力消耗&#xff1a;EfficientUICoder如何破解UI2Code的token难题 论文信息信息类别具体内容论文原标题EfficientUICoder: A Dual-Modal Token Compression Framework for UI-to-Code Generation with Multimodal Large Language Models论文链接https://arxiv…

【STM32项目开源】STM32单片机智能语音风扇控制系统

目录 一、设计背景和意义 1.1设计背景&#xff1a; 1.2设计意义&#xff1a; 二、实物展示 三、硬件功能介绍 2.1 硬件清单&#xff1a; 2.2 功能介绍&#xff1a; 四、软件设计流程图 五、硬件PCB展示 六、软件主函序展示 七、单片机实物资料 资料获取 查看主页介…

git clone vllm

这个错误不是 vLLM 本身的问题&#xff0c;而是 pip 在 clone GitHub 仓库时失败了&#xff1a; error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush after ref listing根因通常是&#xff1a; 网络问题&#xff08;访问 GitHub 被中断 / 代理…

光谱相机的新兴领域应用

光谱相机在‌新兴领域‌的应用正快速拓展&#xff0c;结合‌AI、纳米技术、量子传感‌等前沿科技&#xff0c;突破传统检测极限。以下是六大最具潜力的新兴应用方向及技术突破点&#xff1a;‌1. 元宇宙与数字孪生‌‌应用场景‌&#xff1a;‌虚拟材质建模‌&#xff1a;通过高…

深入理解数据结构之复杂度

文章目录1.数据结构前言1.1 数据结构1.2 算法2.算法效率2.1 复杂度的概念2.2 复杂度的重要性3.1 大O的渐进表式法3.2 时间复杂度计算示例3.2.1 示例13.2.2 示例23.2.3 示例33.2.4 示例43.2.5 示例53.2.6 示例63.2.7 示例74.空间复杂度4.1 空间复杂度计算示例4.1.1 示例14.1.2 示…