• 实践分享丨物联网操作系统中的任务管理


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

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

    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:删除指定的任务

    五、任务间通信

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

    消息队列

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

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

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

     

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

  • 相关阅读:
    VS中,如何将存在于解决方案里,但是没有显示出来的文件(或文件夹)显示到项目中。
    (转)分布式系统编程,你到哪一级了?
    领域驱动架构学习总结
    Java多线程总结
    MySQL更新优化
    MySQL查询优化
    MySQL索引
    MySQL优化
    MySQL联接操作
    MySQL架构
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/13745517.html
Copyright © 2020-2023  润新知