首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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

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

五、任务间通信

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

消息队列

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

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

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

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/09430c329ea884fb8a2bc5351
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券