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

发布于: 2020 年 09 月 28 日

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



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



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



五、任务间通信



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



消息队列



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



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



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





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



发布于: 2020 年 09 月 28 日 阅读数: 294
用户头像

传送门:https://bbs.huaweicloud.com/ 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算!

评论

发布
暂无评论
实践分享丨物联网操作系统中的任务管理