您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 4.2.RTOS内核-任务管理
HDU12:58RTOS内核之任务管理邬惠峰whf@hdu.edu.cnHDU12:58任务管理优先级反转内容安排什么是任务任务调度HDU12:58高优先级任务低优先级任务TaskTaskTaskTaskTaskTaskEventEvent无限循环重要性把一个应用分割为多个任务HDU12:58采用多任务的好处:任务的规模较小•每个任务更容易编码和调试,其质量也更容易得到保证不少应用本身就是由多个任务构成的•如一个应用可能需要进行以下任务的处理:计算、从网络获取数据和刷新显示屏幕•采用多任务的处理方式是应用问题的一个非常自然的解决方式任务之间具有较高的独立性,耦合性小•通过增加新的任务就能方便的扩充系统功能实时性强•保证紧急事件得到优先处理成为可能HDU12:58在嵌入式实时系统中任务(task)通常为进程(process)和线程(thread)的统称任务是调度的基本单位进程最初由Multics的设计者在60年代提出来的,主要包括以下内容:一个正在执行的程序;计算机中正在运行的程序的一个实例;可以分配给处理器,并由处理器执行的一个实体;由一个顺序的执行线程、一个当前状态和一组相关的系统资源所刻画的活动单元。HDU12:58任务内容安排任务的定义及其主要特性任务的内容任务的分类任务参数HDU12:58任务的定义及其主要特性任务是一个具有独立功能的无限循环的程序段的一次运行活动,是实时内核调度的单位,具有以下特性:动态性:任务状态是不断变化的。•一般分为就绪态、运行态和等待态。•在多任务系统中,任务的状态将随着系统的需要不断进行变化。并行性:•系统中同时存在多个任务,这些任务在宏观上是同时运行的。异步独立性:•每个任务各自按相互独立的不可预知的速度运行,走走停停。HDU12:58任务的内容任务主要包含以下内容:代码:一段可执行的程序数据:程序所需要的相关数据(变量、工作空间、缓冲区等)堆栈程序执行的上下文环境HDU12:58任务的内容任务通常包含一个具有无限循环的程序/*ioTaskimplementsdataobtainingandhandlingcontinuously*/voidioTask(void){intdata;initial();/*Thefollowingsentencesgetdataandhandledatacontinuously*/while(TRUE){data=getData();handleData(data);}}HDU12:58任务的内容任务与程序的区别:任务能真实地描述工作内容的并发性,而程序不能;程序是任务的组成部分•除程序外,任务还包括数据、堆栈及其上下文环境等内容;程序是静态的,任务是动态的;任务有生命周期,有诞生、有消亡,是短暂的;而程序是相对长久的;一个程序可对应多个任务,反之亦然;任务具有创建其他任务的功能,而程序没有。HDU12:58任务的内容任务上下文环境(context)包括了实时内核管理任务、以及处理器执行任务所需要的所有信息。•任务优先级•任务的状态等实时内核所需要的信息•以及处理器的各种寄存器的内容(hardwarecontext):程序计数器、堆栈指针、通用寄存器等的内容任务的上下文环境通过任务控制块(TaskControlBlock,TCB)来体现。HDU12:58任务1任务2任务3内核内核代码内核数据栈数据任务控制块代码栈数据任务控制块代码栈数据任务控制块代码任务1任务2任务3多任务系统示意图HDU12:58任务的分类按照到达情况的可预测性,任务可以划分为:周期任务(periodictask)非周期任务按照重要程度,可分为:关键任务(criticaltask)非关键任务(noncriticaltask)HDU12:58任务的分类周期任务与非周期任务周期任务每隔一个固定的时间间隔就会执行一次。•举例:飞行器可能需要每隔100ms获得一次关于飞行器的速度、高度和姿态数据,控制传感器获取这些数据就需要通过周期任务来进行。非周期任务执行的间隔时间则为不确定的。•举例:移动通信设备中的通信任务,该任务只有在需要进行通信的情况下才会得到执行。•非周期任务分为:–sporadictask:有最小到达间隔时间限制–aperiodictask:没有到达时间限制HDU12:58任务的分类关键任务与非关键任务关键任务:•为需要得到及时执行的任务,否则将出现灾难性的后果–举例:飞行器中用于处理生命支持系统和稳定性控制系统的任务非关键任务:•如果没有得到及时执行,则不会产生严重后果HDU12:58任务参数任务参数:优先级(priority)周期(period)计算时间(computationtime)就绪时间(readytime)截止时间(deadline)HDU12:58任务参数任务的优先级表示任务对应工作内容在处理上的优先程度优先级越高,表明任务越需要得到优先处理•飞行器中处理稳定性控制的任务,就需要具有较高的优先级,一旦执行条件得到满足,应及时得到执行任务的优先级分为静态优先级和动态优先级。•静态优先级:任务的优先级被确定后,在系统运行过程中将不再发生变化;•动态优先级:系统运行过程中,任务的优先级是可以动态变化的。HDU12:58任务参数周期周期任务所具有的参数,表示任务周期性执行的间隔时间任务的计算时间任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(executiontime)。由于任务每次执行的软件环境的差异性,导致任务在各次具体执行过程中的计算时间各有不同。通常用最坏情况下的执行时间(worstcasetime)或是需要的最长执行时间来表示,也可用统计时间(statisticaltime)来表示。HDU12:58任务参数任务的就绪时间任务具备了在处理器上被执行所需要条件时的时间。任务的截止时间•意味着任务需要在该时间到来之前被执行完成。•截止时间可以通过绝对截止时间(absolutedeadline)和相对截止时间(relativetime)两种方式来表示–相对截止时间为任务的绝对截止时间减去任务的就绪时间。•截止时间可以分为强截止时间(harddeadline)和弱截止时间(softdeadline)两种情况:–具有强截止时间的任务即为关键任务,如果截止时间不能得到满足,就会出现严重的后果。–拥有关键任务的实时系统又被称为强实时(hardreal-time)系统,否则称为弱实时(softreal-time)系统。HDU12:58任务管理优先级反转内容安排什么是任务任务调度HDU12:58内容安排任务状态与变迁空闲任务任务控制块任务切换任务队列优先级位图算法任务管理机制HDU12:58任务状态与变迁任务拥有的资源情况是不断变化的,导致任务状态也表现出不断变化的特性。不同的实时内核实现方式对任务状态的定义不尽相同,但是都可以概括为三种基本的状态:等待(waiting):任务在等待某个事件的发生;就绪(ready):任务等待获得处理器资源;执行(running):任务获得处理器资源,所包含的代码内容正在被执行。HDU12:58任务状态与变迁在单处理器系统中:任何时候都只有一个任务在CPU中执行•如果没有任何事情可做,就运行空闲任务执行空操作任何一个可以执行的任务都必须处于就绪状态•调度程序从任务的就绪队列中选择下一个需要执行的任务。•处于就绪状态的任务拥有除CPU以外的其他所有需要的资源。任务还可能处于等待状态•如果任务在需要等待I/O设备或其他任务提供的数据,而数据又还没有到达该任务的情况下,就处于等待状态HDU12:58任务状态与变迁任务会在不同的状态之间进行转换,即任务状态的变迁就绪态运行态等待态获得CPU被高优先级任务抢占或超时获得资源需要资源任务状态变迁HDU12:58任务1任务2任务3调度程序05101520253035404550运行等待就绪三个任务进行状态转换的过程包含三个任务和一个调度程序。调度程序用来确定下一个需要投入运行的任务,因此调度程序本身也需要占用一定的处理时间。HDU12:58空闲任务当没有其他任务准备运行时将开始运行的任务空闲任务具有最低优先级空闲任务由OS创建永远无法被应用软件删除HDU12:58任务控制块任务管理是通过对任务控制块(TaskControlBlock,TCB)的操作来实现的。任务控制块是包含任务相关信息的数据结构包含了任务执行过程中所需要的所有信息。任务控制块大都包括以下信息:任务的名字任务执行的起始地址任务的优先级任务的状态任务的硬件上下文(堆栈指针、PC和寄存器等)任务的队列指针等内容HDU12:58tasknametaskIDtaskstatustaskprioritytaskcontext(registersandflagsofCPU)……任务控制块示意图HDU12:58任务控制块为节约内存,任务数量通常需要进行预先配置按照配置的任务数量初始化任务控制块,一个任务对应一个初始的任务控制块,形成一个空闲任务控制块链。在任务创建时,实时内核从空闲任务控制块链中为任务分配一个任务控制块。随后对任务的操作,都是基于对应的任务控制块来进行的。当任务被删除后,对应的任务控制块又会被实时内核回收到空闲任务控制块链。HDU12:58任务切换任务切换(contextswitching)保存当前任务的上下文,并恢复需要执行的任务的上下文的过程。当发生任务切换时:当前正在运行的任务的上下文就需要通过该任务的任务控制块保存起来;把需要投入运行的任务的上下文从对应的任务控制块中恢复出来。HDU12:58任务1任务2任务3调度程序05101520253035404550运行等待就绪在时刻8即发生了任务切换,任务1的上下文需要保存到任务1的任务控制块中去。经过调度程序的处理,在时刻10任务2投入运行,需要把任务2的任务控制块中关于上下文的内容恢复到CPU的寄存器中。HDU12:58任务切换任务切换将导致任务状态发生变化:当前正在运行的任务将由运行状态变为就绪或是等待状态;需要投入运行的任务则由就绪状态变为运行状态。HDU12:58任务切换步骤1保存任务上下文环境2更新当前运行任务的控制块内容,将其状态改为就绪或等待状态3将任务控制块移到相应队列(就绪队列或等待队列)4选择另一个任务进行执行(调度)5改变需投入运行任务的控制块内容,将其状态变为运行状态6恢复需投入运行任务的上下文环境HDU12:58任务切换任务切换时机中断、自陷运行任务因缺乏资源而被阻塞时间片轮转调度时高优先级任务处于就绪时HDU12:58任务切换中断、自陷•如当I/O中断发生的时候–如果I/O活动是一个或多个任务正在等待的事件,内核将把相应的处于等待状态的任务转换为就绪状态–同时,内核还将确定是否继续执行当前处于运行状态的任务,或是用高优先级的就绪任务抢占该任务•自陷–由于执行任务中当前指令所引起,将导致实时内核处理相应的错误或异常事件,并根据事件类型,确定是否进行任务的切换HDU12:58任务切换运行任务因缺乏资源而被阻塞•如,任务执行过程中进行I/O操作时(如打开文件),如果此前该文件已被其他任务打开,将导致当前任务处于等待状态,而不能继续执行HDU12:58任务切换时间片轮转调度时•内核将在时钟中断处理程序中确定当前正在运行的任务的执行时间是否已经超过了设定的时间片;•如果超过了时间片,实时内核将停止当前任务的运行,把当前任务的状态变为就绪状态,并把另一个任务投入运行HDU12:58任务切换高优先级任务处于就绪时如果采用基于优先级的抢占式调度算法,将导致当前任务停止运行,使更高优先级的任务处于运行状态HDU12:58任务队列任务队列通过任务控制块实现对系统中所有任务的管理。新任务CPU就绪队列等待队列超时调度等待资源
本文标题:4.2.RTOS内核-任务管理
链接地址:https://www.777doc.com/doc-6457425 .html