【IoT美学】《物联网操作系统原理(LiteOS)》——任务管理

举报
Devin 发表于 2020/08/11 22:42:10 2020/08/11
【摘要】 今天,我们分享的内容主要是物联网操作系统中的任务管理。在开始正式的阅读分享帖之前,按惯例,我们需要思考几个问题:进程和线程,你是否了解其区别与联系?什么是任务?物联网操作系统中的任务管理主要包含那几个方面?如果你认真的思考了上面的问题,那么请你阅读下面的分享,也希望你能Get到属于自己的盲点知识!一、任务管理基本概念 进程:正在运行程序的一个实例 线程:进程中的一个实体,是被系*...

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

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

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

  2. 什么是任务?

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

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



一、任务管理基本概念

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

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

进程与线程的区别

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

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

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

任务概念

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

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

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

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

二、任务管理原理

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

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

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

    任务名:任务名称

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

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

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

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

任务状态

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

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

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

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

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

任务状态间的迁移

image.png

就绪—>运行态

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

运行—>阻塞态

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

阻塞—>就绪态

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

就绪—>阻塞态

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

运行—>就绪态

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

运行—>退出态

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

阻塞—>退出态

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

任务栈

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

    作用

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

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

任务优先级

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

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

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

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

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

三、任务调度

任务上下文

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

任务切换

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

调度算法

    抢占式调度机制

    时间片轮转调度机制

四、任务运行

创建任务

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

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

终止任务

    LOS_TaskDelete:删除指定的任务

五、任务间通信

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

消息队列

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

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

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




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。