今天,我们分享的内容主要是物联网操作系统中的任务管理。

在开始正式的阅读分享帖之前,按惯例,我们需要思考几个问题:

1.进程和线程,你是否了解其区别与联系?

2.什么是任务?

3.物联网操作系统中的任务管理主要包含那几个方面?

如果你认真的思考了上面的问题,那么请你阅读下面的分享,也希望你能Get到属于自己的盲点知识!

一、任务管理基本概念

进程:正在运行程序的一个实例

线程:进程中的一个实体,是被系**立调度和分派的基本单位

进程与线程的区别

线程是程序执行的最小单位,进程是操作系统分配资源的最小单位

一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

进程之间相互独立,同一进程下的各个线程共享程序的内存空间

任务概念

从系统的角度看,任务是竞争系统资源的最小运行单元;任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行

Huawei LiteOS的任务模块可以给用户提供多个任务,实现了任务之间的切换和通信,帮助用户管理业务程序流程

Huawei LiteOS是一个支持多任务的操作系统,在LiteOS中一个任务表示一个线程

Huawei LiteOS中的任务是抢占式调度机制,同时支持时间片轮转调度方式

二、任务管理原理

任务:由一组元素组成的实体

元素(用于管理每一个任务)

标识符:和任务相关的唯一标识符

任务名:任务名称

任务状态:用于表示当前任务正在执行或等待

优先级:代表任务执行的优先顺序

上下文栈指针:任务即将被执行的下一条指令地址

任务控制块(TCB:Task Control Block)

任务状态

用于描述任务所表现出的行为

就绪态(Ready):该任务在就绪列表中,就绪的任务已经具备执行的能力,只等待调度器进行调度,新创建的任务会初始化为就绪态

运行态(Running):该状态表明任务正在执行,此时它占用处理器,LiteOS调度器选择运行的永远是处于最高优先级的就绪态任务,当任务被运行的一刻,它的任务状态就变成了运行态

阻塞态(Blocked):如果任务当前正在等待某个时序或外部中断,我们就说这个任务处于阻塞状态,该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队列或者等待读写事件等

退出态(Dead):该任务运行结束,等待系统回收资源

任务状态间的迁移

就绪—>运行态

任务创建后进入就绪态,发生任务切换时,就绪列表中最高优先级的任务被执行,从而进入运行态,但此刻该任务依旧在就绪列表中

运行—>阻塞态

正在运行的任务发生阻塞(挂起、延时、获取互斥锁、读消息、读信号量等待等)时,该任务会从就绪列表中删除,任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪列表中剩余最高优先级任务

阻塞—>就绪态

阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),被恢复的任务会被加入就绪列表,从而由阻塞态变成就绪态;如果被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,将该任务由就绪态变成运行态

就绪—>阻塞态

任务也有可能在就绪态时被阻塞(挂起),此时任务状态会由就绪态转变为阻塞态,该任务从就绪列表中删除,不会参与任务调度,直到该任务被恢复

运行—>就绪态

有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪列表中最高优先级任务变为运行态,那么原先运行的任务由运行态变为就绪态,依然在就绪列表中

运行—>退出态

运行中的任务运行结束,内核自动将此任务删除,任务状态由运行态变为退出态

阻塞—>退出态

阻塞的任务调用删除接口,任务状态由阻塞态变为退出态

任务栈

任务栈的大小按8字节对齐

作用

任务切断或响应中断时,任务栈用于保存CPU寄存器的内容

任务运行时,任务栈用于保存一些局部变量、函数参数等

任务优先级

优先级表示任务执行的优先顺序

任务的优先级决定了在发生任务切换时即将要执行的任务

在就绪列表中的最高优先级的任务将得到执行

高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度

Huawei LiteOS的任务一共有32个优先级(0-31),最高优先级为0,最低优先级为31

三、任务调度

任务上下文

Huawei LiteOS在任务挂起的时候会将本任务的任务上下文信息,保存在自己的任务栈里面,以便任务恢复后,从栈空间中恢复挂起时的上下文信息,从而继续执行被挂起时被打断的代码

任务切换

任务切换包含获取就绪列表中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作

调度算法

抢占式调度机制

时间片轮转调度机制

四、任务运行

创建任务

LOS_TaskCreateOnly:创建任务进入suspend态,不进行任务调度

LOS_TaskCreate:创建任务进入就绪态,进行任务调度

终止任务

LOS_TaskDelete:删除指定的任务

五、任务间通信

任务之间通过消息队列进行信息传输,实现任务间的通信

消息队列

用于任务间通信的数据结构

用于接收来自任务或中断的非固定长度消息

可根据不同的接口选择消息是否存放在自己的空间中

点击关注,第一时间了解华为云新鲜技术~

实践分享丨物联网操作系统中的任务管理相关推荐

  1. 分享在Windows操作系统中独立安装微软MS Access 2019数据库的实用方法

    文章首发于 码友网 – <分享在Windows操作系统中独立安装微软MS Access 2019数据库的实用方法> 本文为大家分享在Windows操作系统中独立安装微软MS Access ...

  2. shell | LiteOS 物联网操作系统中的 shell 组件使用分享

    1. 为什么使用shell组件 2. LiteOS中的shell组件 2.1. 源码 LiteOS中的shell组件源码如图: 这三个C文件是shell组件的实现文件,使用时只需要包含头文件<s ...

  3. 实践分享丨构建云上私有池(虚拟IDC)的5种方案详解

    简介: 云上私有池系列终篇终于来了,本文将重点介绍构建云上的私有池(虚拟IDC)的多种方案和各自的优缺点,并给出相关的性价比优化建议. 本文作者:阿里云技术专家李雨前 摘要 围绕私有池(虚拟IDC)的 ...

  4. 运营商视角的物联网商业模式-物联网操作系统篇

    本文站在移动运营商(比如国内的中国移动.中国联通等)的角度上,分析一下应该采取什么样的商业模式切入物联网领域.众所周知,物联网的预测市场空间是巨大的,说是仅仅在通信领域,就至少有500亿个网络连接的需 ...

  5. 物联网操作系统再思考-Hello China操作系统的运营商网络协同机制

    Hello China定位为物联网操作系统,在我们以前关于物联网操作系统的系列描述文章中,已经总结出物联网操作系统区别于其它操作系统的两大核心机制:物联网相关的特性支持和运营商网络的紧密协同.所谓物联 ...

  6. 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统

    剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...

  7. 华为云物联网高级攻城狮的4年配置中心实践分享

    本文分享自华为云社区<华为云物联网高级攻城狮的4年配置中心实践分享>,作者:华为云IoT高级工程师 贺张俭. 自 17 年入职华为之后,一直在使用配置中心,4年期间经历了自研配置中心到 A ...

  8. 基于MDK开发的TencentOS-Tiny软件包,快速移植物联网操作系统到Keil中!

    基于MDK开发的TencentOS-Tiny Software Pack 2021腾讯犀牛鸟开源人才培养计划 2021/9/24 项目导师:TencentOS tiny核心架构师 汪礼超 项目学员:东 ...

  9. 物联网操作系统Zephyr(蓝牙篇)之6.0 zephyr os中的bt stack概述

    Zephyr物联网操作系统专栏汇总 Zephyr os中的蓝牙协议栈还有完整的BLE和部分 经典蓝牙的host. 1.支持的蓝牙features 1.1.Zephyr 中的蓝牙协议栈兼容蓝牙5.0. ...

最新文章

  1. 听说数据标注行业缺“中立”平台,京东金融竖起了大旗
  2. C++学习笔记13-类继承
  3. Microsoft Build 2016 Day 1 记录
  4. 「Codeforces」598E (区间dp)
  5. DE标识DellUtility磁盘手动创建
  6. Scrum 冲刺 第一日
  7. Linux卸载JDK的方法
  8. HSF框架日常问题记录1
  9. ce修改器我的世界服务器,ce修改器怎么修改金钱?ce修改器无限金钱图文教程
  10. vue项目如何做到每30秒刷新1次接口?
  11. 蘑菇战争2显示没有连接服务器,蘑菇战争2新手怎么玩?四步带你解决新手难关[多图]...
  12. 期货十三篇 第九篇 心态篇
  13. Intel® oneAPI Base Toolkit+Intel® oneAPI HPC Toolkit安装教程
  14. thymeleaf内嵌变量
  15. linux中test命令详解
  16. (NLP)文本预处理
  17. 基于UML的需求分析和系统设计(完整案例和UML图形演示)
  18. Qno技术:支持网吧业务目标持续推进——FVR9000系列网吧解决方案(转)
  19. 企业中台最佳实践--什么是中台(一)
  20. kill word fore out

热门文章

  1. 计算机d盘的权限怎么解决,D盘没权限,不能删除更改任何文件解决方法
  2. linux oracle semopm,Linux 内核参数设置于详解 --Oracle 安装
  3. 类的别名java,类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:typeAliases typeAlias ali...
  4. C语言基础--字符串
  5. Core DES加、解密
  6. CodeForces-748D 贪心
  7. 【转】pthread_cond_signal 虚假唤醒问题
  8. MongoDB 插入文档
  9. 为view设置虚线边框
  10. 每日一测5(关于继承)