您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 11 任务管理与调度
第11章任务管理与调度主要内容•任务•任务管理•任务调度•优先级反转HighPriorityTaskLowPriorityTaskTaskTaskTaskTaskTaskTaskEventEventEachTaskInfiniteLoopImportanceSplittinganapplicationintoTasksintmain(void){//InitializeuCOS-II.OSInit();//CreatethefirsttaskOSTaskCreate(TestTask1,(void*)11,&TestTaskStk1[TASK_STK_SIZE],11);//Startmultitasking.OSStart();return0;}voidTestTask1(void*pdata){printf(%4u:*****TestTask1Firstcall*****\n,OSTime);//Create3othertasksOSTaskCreate(TestTask2,(void*)22,&TestTaskStk2[TASK_STK_SIZE],22);OSTaskCreate(TestTask3,(void*)33,&TestTaskStk3[TASK_STK_SIZE],33);OSTaskCreate(TestTask4,(void*)10,&TestTaskStk3[TASK_STK_SIZE],10);while(1){printf(%4u:*****TestTask11*****\n,OSTime);OSTimeDly(1);}}TaskdemobasedonuCOSvoidTestTask2(void*pdata){while(1){printf(%4u:*****TestTask22*****\n,OSTime);OSTimeDly(1);}}voidTestTask3(void*pdata){while(1){printf(%4u:*****TestTask33*****\n,OSTime);OSTimeDly(1);}}voidTestTask4(void*pdata){while(1){printf(%4u:+++++TestTask10+++++\n,OSTime);OSTaskSuspend(10);//Suspendyourself}}程序运行结果采用多任务的好处:–任务的规模较小•每个任务更容易编码和调试,其质量也更容易得到保证–不少应用本身就是由多个任务构成的•如一个应用可能需要进行以下任务的处理:计算、从网络获取数据和刷新显示屏幕•采用多任务的处理方式是应用问题的一个非常自然的解决方式–任务之间具有较高的独立性,耦合性小•通过增加新的任务就能方便的扩充系统功能–实时性强•保证紧急事件得到优先处理成为可能•在嵌入式实时系统中–任务(task)通常为进程(process)和线程(thread)的统称–任务是调度的基本单位•进程最初由Multics的设计者在60年代提出来的,主要包括以下内容:–一个正在执行的程序;–计算机中正在运行的程序的一个实例;–可以分配给处理器,并由处理器执行的一个实体;–由一个顺序的执行线程、一个当前状态和一组相关的系统资源所刻画的活动单元。•进程由代码、数据、堆栈和进程控制块构成。–进程控制块包含了操作系统用来控制进程所需要的信息:•进程状态•CPU寄存器•调度信息•内存管理信息•I/O状态信息等•早期的进程,包含了以下两个方面的内容:–资源。进程是资源分配的基本单位,一个进程包括一个保存进程映像的虚拟地址空间、主存、I/O设备和文件等资源。–调度执行。进程作为操作系统的调度实体,是调度的基本单位。•随着操作系统的发展,进程所包含的两个方面的内容逐渐被分开:–轻量级进程或线程:调度执行的单位–进程:资源分配的单位–线程是进程内部一个相对独立的控制流,由线程上下文和需要执行的一段程序指令构成–在进程中,所有线程共享该进程的状态和资源,可以访问相同的数据•使用线程的优势:–创建:在一个已有进程中创建一个新线程比创建一个全新的进程所需的时间开销少;–终止:终止一个线程比终止一个进程所花费的时间少;–切换:线程切换比进程切换所花费的时间少;–通信:使同一进程内部不同线程之间的通信效率得到显著提高。•在大多数操作系统中,不同进程之间的通信需要内核的干预,而同一进程内部不同线程之间则可直接通信。•引入线程的概念后,可把进程和线程的使用分为以下几种模型:–单进程/单线程模型(如MS-DOS):整个系统只有一个进程、一个线程–单进程/多线程模型:在单进程/多线程模型中,整个系统有一个进程、多个线程–多进程/单线程模型(如传统的UNIX):在多进程/单线程模型中,整个系统有多个进程,每个进程只有一个线程–多进程/多线程模型(如WindowsNT、Solaris、Mach等):在多进程/多线程模型中,系统有多个进程,每个进程又可包含多个线程单进程/单线程模型单进程/多线程模型多进程/多线程模型多进程/单线程模型•大多数嵌入式实时内核:单进程/多线程模型,或简单地称为任务模型–把整个应用当作一个没有定义的进程来对待;–应用则被划分为多个任务的形式来进行处理。–适用于实时性要求较高的、相对简单的应用•也有一些嵌入式实时操作系统采用了多进程/多线程模型:–系统中包含多个进程,每个进程对应又包含多个线程–适合于处理复杂的应用第一节任务任务的定义及其主要特性任务的内容任务的分类任务参数任务的定义及其主要特性•任务是一个具有独立功能的无限循环的程序段的一次运行活动,是实时内核调度的单位,具有以下特性:–动态性:任务状态是不断变化的。•一般分为就绪态、运行态和等待态。•在多任务系统中,任务的状态将随着系统的需要不断进行变化。–并行性:•系统中同时存在多个任务,这些任务在宏观上是同时运行的。–异步独立性:•每个任务各自按相互独立的不可预知的速度运行,走走停停。多任务运行情况任务的内容•任务主要包含以下内容:–代码:一段可执行的程序–数据:程序所需要的相关数据(变量、工作空间、缓冲区等)–堆栈–程序执行的上下文环境任务的内容•任务通常包含一个具有无限循环的程序/*ioTaskimplementsdataobtainingandhandlingcontinuously*/voidioTask(void){intdata;initial();/*Thefollowingsentencesgetdataandhandledatacontinuously*/while(TRUE){data=getData();handleData(data);}}voidYourTask(void*pdata){for(;;){/*USERCODE*/CalloneofuC/OS-II’sservices:OSFlagPend();OSMboxPend();OSMutexPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/*USERCODE*/}}voidYourTask(void*pdata){/*USERCODE*/OSTaskDel(OS_PRIO_SELF);}voidTestTask2(void*pdata){while(1){printf(%4u:*****TestTask22*****\n,OSTime);OSTimeDly(1);}}voidTestTask3(void*pdata){while(1){printf(%4u:*****TestTask33*****\n,OSTime);OSTimeDly(1);}}voidTestTask4(void*pdata){while(1){printf(%4u:+++++TestTask10+++++\n,OSTime);OSTaskSuspend(10);//Suspendyourself}}任务的内容•任务与程序的区别:–任务能真实地描述工作内容的并发性,而程序不能;–程序是任务的组成部分•除程序外,任务还包括数据、堆栈及其上下文环境等内容;–程序是静态的,任务是动态的;–任务有生命周期,有诞生、有消亡,是短暂的;而程序是相对长久的;–一个程序可对应多个任务,反之亦然;–任务具有创建其他任务的功能,而程序没有。任务的内容•任务上下文环境(context)–包括了实时内核管理任务、以及处理器执行任务所需要的所有信息。•任务优先级•任务的状态等实时内核所需要的信息•以及处理器的各种寄存器的内容(hardwarecontext):程序计数器、堆栈指针、通用寄存器等的内容–任务的上下文环境通过任务控制块(TaskControlBlock,TCB)来体现。任务1任务2任务3内核内核代码内核数据栈数据任务控制块代码栈数据任务控制块代码栈数据任务控制块代码任务1任务2任务3多任务系统示意图任务的分类•按照到达情况的可预测性,任务可以划分为:–周期任务(periodictask)–非周期任务•按照重要程度,可分为:–关键任务(criticaltask)–非关键任务(noncriticaltask)任务的分类•周期任务与非周期任务–周期任务每隔一个固定的时间间隔就会执行一次。•举例:飞行器可能需要每隔100ms获得一次关于飞行器的速度、高度和姿态数据,控制传感器获取这些数据就需要通过周期任务来进行。–非周期任务执行的间隔时间则为不确定的。•举例:移动通信设备中的通信任务,该任务只有在需要进行通信的情况下才会得到执行。•非周期任务分为:–sporadictask:有最小到达间隔时间限制–aperiodictask:没有到达时间限制任务的分类•关键任务与非关键任务–关键任务:•为需要得到及时执行的任务,否则将出现灾难性的后果–举例:飞行器中用于处理生命支持系统和稳定性控制系统的任务–非关键任务:•如果没有得到及时执行,则不会产生严重后果任务参数•任务参数:–优先级(priority)–周期(period)–计算时间(computationtime)–就绪时间(readytime)–截止时间(deadline)任务参数•任务的优先级–表示任务对应工作内容在处理上的优先程度–优先级越高,表明任务越需要得到优先处理•飞行器中处理稳定性控制的任务,就需要具有较高的优先级,一旦执行条件得到满足,应及时得到执行–任务的优先级分为静态优先级和动态优先级。•静态优先级:任务的优先级被确定后,在系统运行过程中将不再发生变化;•动态优先级:系统运行过程中,任务的优先级是可以动态变化的。返回任务参数•周期–周期任务所具有的参数,表示任务周期性执行的间隔时间•任务的计算时间–任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(executiontime)。–由于任务每次执行的软件环境的差异性,导致任务在各次具体执行过程中的计算时间各有不同。–通常用最坏情况下的执行时间(worstcasetime)或是需要的最长执行时间来表示,也可用统计时间(statisticaltime)来表示。返回任务参数•任务的就绪时间任务具备了在处理器上被执行所需要条件时的时间。•任务的截止时间•意味着任务需要在该时间到来之前被执行完成。•截止时间可以通过绝对截止时间(absolutedeadline)和相对截止时间(relativetime)两种方式来表示–相对截止时间为任务的绝对截止时间减去任务的就绪时间。•截止时间可以分为强截止时间(harddeadline)和弱截止时间(softdeadline)两种情况:–具有强截止时间的任务即为关键任务,如果截止时间不能得到满足,就会出现严重的后果。–拥有关键任务的实时系统又被称为强实时(hardreal-time)系统,否则称为弱实时(softreal-time)系统。第二节任务管理
本文标题:11 任务管理与调度
链接地址:https://www.777doc.com/doc-3282526 .html