您的位置:首页 > 其它

嵌入式系统 - 任务管理

2017-12-18 20:16 204 查看
教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社

任务管理与调度
任务管理
任务状态与变迁

任务控制块

任务切换
任务切换基本步骤

任务切换的时机

任务队列
就绪队列

等待队列

任务管理机制

任务管理与调度

任务管理

任务管理是实时内核的主要工作,完成任务创建、任务删除、任务调度、改变任务优先级等工作

任务状态与变迁

等待(waiting):任务在等待某个事件的发生

就绪(ready): 任务等待获得处理器资源

执行(running):任务获得处理器资源,所包含的代码内容正在被执行

任务会在不同的状态之间进行转换,即任务状态的变迁



调度程序本身也需要占用一定的处理时间

任务控制块

任务管理是通过对任务控制块(Task Control Block,TCB)的操作来实现的

任务控制块是包含了任务执行过程中所需要的所有信息的数据结构

任务控制块大都包括这些信息:任务的名字、任务执行的起始地址、任务的优先级、任务的状态、任务的硬件上下文(堆栈指针、PC和寄存器等)、任务的队列指针等内容

为节约内存,任务数量通常需要进行预先配置

按照配置的任务数量初始化任务控制块,形成一个空闲任务控制块链

在任务创建时,实时内核从空闲任务控制块链中为任务分配一个任务控制块

对任务的操作,都是基于对应的任务控制块来进行的

任务切换

任务切换是保存当前任务的上下文,并恢复需要执行的任务的上下文的过程

当发生任务切换时

当前正在运行的任务的上下文就需要通过该任务的任务控制块保存起来

把需要投入运行的任务的上下文从对应的任务控制块中恢复出来

任务切换将导致任务状态发生变化

任务切换基本步骤

保存任务上下文环境

更新当前运行任务的控制块内容,将其状态改为就绪或等待状态

将任务控制块移到相应队列(就绪队列或等待队列)

选择另一个任务进行执行(调度)

改变需投入运行任务的控制块内容,将其状态变为运行状态

恢复需投入运行任务的上下文环境

任务切换的时机

中断、自陷

运行任务因缺乏资源而被阻塞

时间片轮转调度时

高优先级任务处于就绪时

任务队列

任务队列通过任务控制块实现对系统中所有任务的管理

队列由任务控制块构成



就绪队列

在基于优先级的调度处理中,要获得当前具有最高优先级的就绪任务

方式一:任务就绪时,把就绪任务的任务控制块放在就绪队列的末尾

调度程序需要从就绪队列的头部到尾部进行一次遍历,才能获得就绪队列中具有最高优先级的任务

方式二:就绪队列按照优先级从高到低的顺序排列

新的就绪任务到达时,需要插入到就绪队列的合适位置,确保就绪队列保持优先级从高到低排列的顺序性

在这两种处理方式中,所花费的时间与任务数量有密切的关系,具有不确定性

为提高实时内核的确定性,可采用一种被称为优先级位图的就绪任务处理算法

等待队列

单等待队列

资源对应的事件发生时,实时内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定的策略选取任务,把任务的任务控制块放置到就绪队列

如果系统的资源和任务比较多,搜索等待该资源的任务所需要的时间就比较长,会影响整个系统的实时性

多等待队列

资源对应的事件发生时,能够在较短的时间内确立等待该资源的任务等待队列

单就绪队列和单等待队列



单就绪队列和多等待队列



任务管理机制

任务管理用来实现对任务状态的直接控制和访问

内核的任务管理是通过系统调用来体现,主要包括任务创建、任务删除、任务挂起、任务唤醒、设置任务属性等内容

创建任务的过程即为分配任务控制块的过程

在创建任务时,通常需要确定任务的名字和任务的优先级等内容,确立任务所能使用的堆栈区域

任务创建成功后,通常会为用户返回一个标识该任务的ID,以实现对任务的引用管理

删除任务把任务从系统中去掉,释放对应的任务控制块

挂起/唤醒任务把任务变为等待状态,可通过唤醒任务操作把任务转换为就绪状态

设置任务属性可以用来设置任务的抢占、时间片等特性,以确定是否允许任务在执行过程中被抢占或是对同优先级任务采用时间片轮转方式运行等

改变任务优先级用来根据需要改变任务的当前优先级

获取任务信息获得任务的当前优先级、任务的属性、任务的名字、任务的上下文、任务的状态等内容,便于用户进行决策
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息