




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章
多任务调度第二章
多任务调度提纲引言任务属性任务控制2提纲引言2引言解决问题什么是实时性?多任务优点任务和任务状态3引言解决问题3实时性概念实时性反应系统响应外部事件的能力。确定性
系统对外部事件响应的最坏时间是可以预知的。延迟事件发生到事件被响应之间的时间间隔4实时性概念4实时性响应性
确定性关心的是系统在识别一个外部事件(通常以中断的形式到达)之前有多少延迟;而响应性关心的是识别外部事件后,系统要花多长时间来服务该事件。响应时间
确定性和响应性结合在一起构成了系统对于外部事件的响应时间。主要包括中断响应时间和任务响应时间。5实时性响应性5实时系统要求能够控制多个外部功能组件独立的功能组件异步执行的功能组件同步执行的功能组件快速执行快速响应低开销确定性操作“Alateanswerisawronganswer”
6实时系统要求能够控制多个外部功能组件6多任务示例机器人控制如何设计一个系统去控制机器人的胳膊?7多任务示例机器人控制如何设计一个系统去控制机器人的胳膊?7单任务实现一个任务循环控制所有的功能arm(){ for(;;) { if(shoulderneedsmoving) moveShoulder(); if(elbowneedsmoving) moveElbow(); if(wristneedsmoving) moveWrist(); . . . }}8单任务实现一个任务循环控制所有的功能8单任务实现优缺点缺点以不同频率控制各个功能较为困难以不同优先级级别控制各个功能较为困难没有抢占能力优点没有任务切换的开销9单任务实现优缺点缺点9多任务实现创建独立的任务,用于操作每个功能点joint(){ for(;;) { waitForMove();/*等待joint移动命令*/ moveJoint(); }}每个任务轮流处于“ready”和“waiting”任务允许等待指定时间间隔的延迟外部事件(如,硬件中断)10多任务实现创建独立的任务,用于操作每个功能点10多任务实现优点对于每个任务使用不同的等待命令,支持每个任务以不同的频率实现相应功能采用基于优先级的调度策略,支持在多个任务同时就绪的情况下,优先地执行最重要的任务采用抢占式调度,当重要的任务就绪时,可以立刻得到执行(通过抢占较低重要程度的任务,优先执行)使得添加新的功能组件更加容易11多任务实现优点对于每个任务使用不同的等待命令,支持每个任务以任务概念概念
具有独立功能的无限循环的程序段的一次运行活动,是实时内核调度的单位特性动态性并行性异步独立性任务内容代码数据堆栈上下文环境12任务概念概念12任务管理与调度任务管理
实时操作系统内核的主要工作,完成任务创建、任务删除、任务调度和改变任务优先级等操作。任务调度
多任务系统中,在同一时刻通常会有多个任务处于活动状态,操作系统需要对资源进行管理,在任务之间实现资源(如CPU、内存、I/O设备等)的共享。CPU作为一种重要的资源,通过操作来确定如何在任务之间共享CPU就被称为任务调度。13任务管理与调度任务管理13任务状态及转换任务状态就绪态-任务等待获取处理器资源运行态-任务获得处理器资源,任务代码在执行阻塞态-任务在等待某种事件发生,包括等待资源、延时、挂起三种类型休眠态-任务被创建,但未被启动任务状态转换14任务状态及转换任务状态14任务控制块任务控制块任务管理通过操作任务控制块(TCB)来实现;每个任务对应一个任务控制块任务控制块主要包括如下两个方面信息:OS控制信息任务名任务标识符任务优先级任务状态其它CPU上下文信息程序指针PC栈指针CPU寄存器FPU寄存器15任务控制块任务控制块15任务队列KernelTCBTCBTCBTCBTCBTCB阻塞态(挂起)阻塞态(等待资源)TCB阻塞态(延迟)TCB就绪态CPU运行态16任务队列KernelTCBTCBTCBTCBTCBTCB阻塞任务队列操作系统内核(kernel)管理各类任务,基于各类操作实现操作系统的状态转换每个独立的阻塞队列可能等待不同的事件。例如,事件可能为释放的特定信号量,或通过指定消息队列到达的消息当任务等待资源并等待指定时间长度,此时任务既在等待资源队列上,也在时间等待队列上就绪队列链不仅仅是简单的双向链表,同时也是采用优先级位表的优先级队列,插入和删除的时间为稳定的当各个队列被操作时,将进入内核状态。在内核中,根据调度规则将检查重调度(上下文切换)是否发生17任务队列操作系统内核(kernel)管理各类任务,基于各类操任务切换当一个任务停止执行且有新任务启动,则上下文切换或重调度将发生为调度新任务执行,内核必须:保存被切换任务(old)执行上下文到TCB中恢复切换到任务(new)保存上下文到CPU等相关资源中系统实现时,必须保证任务切换的速度较快!!18任务切换当一个任务停止执行且有新任务启动,则上下文切换或重调上下文切换类型同步上下文切换发生,当当前执行任务阻塞、延迟,或挂起自身操作引起更高优先级任务就绪运行(发生频率很低)主动降低当前任务自身优先级异步上下文切换一般发生在中断服务程序(ISR)后操作引起更高优先级任务就绪执行当任务阻塞资源、延时或挂起自身时,通常称为阻塞ISR全称为InterruptServiceRoutine,当发生硬件中断时,连接的ISR将被执行。ISR具有最高的优先执行,除非中断被屏蔽。19上下文切换类型同步上下文切换发生,当当前执行任务19优先级调度不同的应用执行时可能有不同的优先顺序,具有高优先顺序的任务应先被执行;优先级调度基于分配给应用的不同优先级级别;最高优先级的任务当处于就绪态(未等待资源、延时或挂起)时,应能够获取CPU资源;优先级调度可能发生如下场景:中断服务程序结束点(如,系统时钟tick)任务因为等待资源而处于等待态任务由其他状态转化为就绪态时20优先级调度不同的应用执行时可能有不同的优先顺序,具有高优先顺优先级调度任务重调度(上下文切换)不会因为任务执行的时间过长而发生(时间片轮转算法在随后讲稿中说明)当由于中断引起重调度时,通常由于中断服务程序调用内核函数。一个特例就是,当系统时钟中断发生时,对于任务的超时处理可能发生重调度任务处理优先顺序更多是由于任务处理时间要求决定的,而不是任务自身的重要程度。然而,任务的重要程度和处理时间要求是模糊的21优先级调度任务重调度(上下文切换)不会因为任务执行的时间过长优先级调度示意图
系统缺省情况下,同等优先级任务不会抢占彼此!高优先级
任务A中等优先级
任务B低优先级
任务C事件事件22优先级调度示意图 系统缺省情况下,同等优先级任务不会抢占彼此优先级调度重调度发生,如果当前执行任务阻塞或延时更高优先级任务变为就绪当更高优先级任务获得CPU控制权,则称为更高优先级任务抢占当前运行任务如果任务B不阻塞或等待资源,那么任务C将不会执行23优先级调度重调度发生,如果23时间片轮转调度(1)1)时间片长度在生成操作系统时配置,系统运行过程中该长度不可改变;2)如果图中任务A在时间片窗口中主动放弃CPU,则任务B直接运行。在任务A再次就绪时,将把时间片中余下的时间长度执行完,并发生任务切换ABCD
时间片长度(固定值,可配置)BCDA24时间片轮转调度(1)1)时间片长度在生成操作系统时配置,系统时间片轮转调度(2)优先级调度优先于时间片轮转调度,时间片轮转仅限于同优先级的任务基于优先级的调度,任务切换可以随时发生;对于时间片轮转调度,任务切换仅发生在每一个时钟TICK到达时时间片轮转调度使得所有同优先级的任务平等地共享CPU25时间片轮转调度(2)优先级调度优先于时间片轮转调度,时间片轮时间片长度允许同优先级任务抢占彼此,时间片轮转必须被打开生成操作系统时,配置时间片长度创建任务时,配置支持时间片轮转调度的选项优先级抢占式调度优先于时间片轮转时间片轮转仅限于拥有同优先级的任务基于优先级抢占式调度能够发生任何时间时间片轮转仅仅发生在指定长度的时间间隔后时间片轮转调度仅适用于配置时间片轮转调度选项的任务26时间片长度允许同优先级任务抢占彼此,时间片轮转必须被打开26空间访问方式所有任务驻留在同一个、公用的地址空间;所有任务都运行在特权级(系统态)。textdatabssRAMfooLibintfooVal;voidfooSet(intx){fooVal=x;}fooSet(4)tTaskAfooSet(99)tTaskB27空间访问方式所有任务驻留在同一个、公用的地址空间;textd多任务工作机制示意InterruptDeviceDeviceNetworkTask1ISRTask2InterruptTask3BufferTask428多任务工作机制示意InterruptDeviceDevice多任务工作机制说明上图描述了ACoreOS多任务机制在单个CPU上,通过任务间通信机制传递消息信号量用于保护任务间共享的、受保护数据定时器和其他中断去触发任务执行I/O系统机制通过read/write访问硬件设备29多任务工作机制说明上图描述了ACoreOS多任务机制29实时性考虑能够控制多个外部组件多任务机制保证系统管理多个任务每个任务可以分配多个独立的功能服务任务通过任务内通信的方式彼此之间相互合作高速运行任务为轻量级调度单位快速的任务切换机制降低系统负载确定性操作抢占式优先级调度保证高优先级任务得到快速运行30实时性考虑能够控制多个外部组件30任务管理任务创建、删除任务控制重启动挂起/解挂延迟任务变量、任务挂钩任务信息
ACoreOS任务管理相关的接口包括两种类型:ACoreOS-API和VxWorks兼容包任务接口。本编程手册详细介绍ACoreOS-API相关管理接口。VxWorks兼容包接口和VxWorks状态基本一致,请参考VxWorks编程手册和程序员手册。31任务管理任务创建、删除 ACoreOS任务管理相关的接口包括提纲引言任务属性任务控制32提纲引言32任务属性任务创建任务名字和标识符任务优先级任务栈任务属性任务删除删除安全资源回收33任务属性任务创建33概述ACoreOS任务创建和操作的服务包括:ACoreOS-API和VxWorks兼容包任务接口ACoreOS任务任务栈(用于存储自动变量和程序参数)任务控制块(用于OS操作和控制任务)注意,不能够混淆可执行的代码和任务两个概念代码是在任务运行前,就被下载目标机若干任务可以执行相同的代码(如,printf())ACoreOS任务类似于进程模型系统中的线程(各个系统对线程的具体实现可能不太一致)34概述ACoreOS任务创建和操作的服务包括:ACoreOS-创建任务taskSpawnACoreOs_task_createfoo(){…}StackTCBentry35创建任务taskSpawnfoo()StackTCB35创建任务任务创建,操作系统完成以下工作:为任务指定栈空间(ACoreOS-API)或系统分配栈空间(VxWorks兼容接口),分配的栈空间应为连续空间初始化栈(VxWorks兼容接口)初始化任务控制块(TCB)(如,存放入口指针在TCB中,初始化栈指针、保存任务创建参数)将任务放置到就绪队列(对于ACoreOS-API接口,需要调用ACoreOs_task_start()服务才能将任务变为就绪态)36创建任务任务创建,操作系统完成以下工作:36创建一个任务ACoreOs_status_codeACoreOs_task_create(name,initial_priority,stack_area,stack_size,attribute_set,delete_hook,id)name任务名字,如果name用户传入为NULL,则系统缺省分配名字,所有任务不允许重名initial_priority任务优先级,范围为1-255,数值越大,优先级越低stack_area任务栈起始,由用户传入stack_size任务栈大小,单位为字节attribute_set任务属性,包括是否抢占、是否采用时间片轮转、是否响应异步信号等
delete_hook删除扩展挂钩,在任务删除时,系统将自动执行该扩展服务id创建成功,系统返回的任务标识符,任务创建成功,返回值为ACOREOS_SUCCESSFUL,不成功,返回错误执行状态37创建一个任务ACoreOs_status_codeACor创建一个任务(VxWorks兼容接口)inttaskSpawn(name,priority,options,stackSize,entryPt,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)name任务名字,如果name用户传入为NULL,则系统缺省分配名字,所有任务不允许重名priority任务优先级,范围为1-255,数值越大,优先级越低options任务属性,如VX_NO_STACK_FILLstackSize任务栈大小,单位为字节entryPt任务执行入口
arg1…arg10传递给任务执行入口的参数,共10个任务创建成功,返回任务标识符ID,不成功则返回ERROR。38创建一个任务(VxWorks兼容接口)inttaskSpa创建一个任务示例voidtaskCreateDemo(){ ACoreOs_status_coderet=ACOREOS_SUCCESSFUL; ACoreOs_idtaskId=0; UINT32*stackArea=NULL; stackArea=malloc(4096); ret=ACoreOs_task_create(“tMytask”,150,stackArea,4096,ACOREOS_TIMESLICE,NULL,&taskId);
if(ret!=ACOREOS_SUCCESSFUL) { printf(“\ntaskcreatestatus:%x\n”,ret); }}39创建一个任务示例voidtaskCreateDemo()3任务标识符创建时由内核统一进行分配系统中数值唯一由32位无符号数组成在任务撤销后,该数值可被创建的新任务使用数值为0时,表示对当前执行任务进行操作任务操作函数中,与标识符相关服务如下ACoreOs_task_get_idtaskIdListGet、taskIdSelf、taskIdVerify(VxWorks兼容接口)40任务标识符创建时由内核统一进行分配40任务名称提供任务名称,便于用户使用通常在系统浏览器中使用,关心指定任务的状态信息在操作系统处理中,统一采用任务标识符用户不指定任务名,系统缺省为任务分配名字系统分配的缺省名字规律为“TSK000x”,其中x为任务创建序号,数值随任务创建不断递增,任务撤销后,其名字可以被新创建任务沿用系统任务名字唯一,创建任务时,如果传入任务名已经存在,则出错返回相关任务名字相关服务:ACoreOs_task_get_nametaskName、taskNameToID(VxWorks兼容接口)41任务名称提供任务名称,便于用户使用41任务优先级优先级范围为1(优先级最高)至255(优先级最低)如何确定不同任务的优先级是很困难的事情,本教程不展开描述,有如下建议:系统对于任务处理时间上的要求,在安排优先级方面比任务重要程度更应该优先考虑存在关于调度理论的指导书相关任务优先级相关服务:ACoreOs_task_get_priority、ACoreOs_task_set_prioritytaskPriorityGet、taskPrioritySet(VxWorks兼容接口)然而上述的服务会更改任务的优先级,使得应用的行为更加难以评估42任务优先级优先级范围为1(优先级最高)至255(优先级最低)任务栈对于ACoreOS-API接口,任务栈由用户传入,用户保证在整个运行空间中该空间不被破坏。对VxWorks兼容接口,系统自动分配栈空间,由系统进行维护运行过程中,超过栈空间大小(栈溢出)会引起系统不确定的行为运行过程中,可通过工具提供的系统浏览器观察任务使用的栈空间情况43任务栈对于ACoreOS-API接口,任务栈由用户传入,用户任务属性任务属性在任务创建时,可通过位或的方式传入:ACOREOS_NO_PREEMPT任务抢占被禁止ACOREOS_TIMESLICE任务允许时间片轮转ACOREOS_NO_ASR 任务禁止响应异步信号ACOREOS_INTERRUPT_LEVEL(n)选择任务执行时,哪些中断使能当任务创建传入属性为0时,则表示该任务可以被抢占、不允许时间片轮转、响应异步信号、对外部中断没有控制操作系统缺省使能浮点,在上下文切换时保存浮点上下文相关任务属性相关服务:ACoreOs_task_get_attribute、ACoreOs_task_set_attributetaskOptionsGet(VxWorks兼容接口)44任务属性任务属性在任务创建时,可通过位或的方式传入:44删除任务 ACoreOs_task_delete(tid)/taskDelete(tid)删除指定任务回收任务控制块(TCB),对VxWorks删除任务接口(taskDelete)还需要回收栈空间
exit(code)用于删除当前执行任务,等同于ACoreOs_task_delete(tid)code在当前系统中,没有使用45删除任务 ACoreOs_task_delete(tid)删除任务通常,调用服务去删除另外的任务存在很大的风险,因为删除者通常不知道这样做是否安全。如,被删除的任务占用某互斥资源的访问锁,就会造成访问锁不被释放,使得系统的运行状态不确定。对于任务删除的安全保护,在后续的章节中进行讨论。46删除任务通常,调用服务去删除另外的任务存在很大的风险,因为删资源回收关注于多任务共同访问的系统资源,可以创建额外的任务,进行资源回收,该处理由应用开发人员进行任务控制块(TCB)和栈(VxWorks兼容包)是系统自动回收的资源应用开发人员,在任务消亡时考虑如下资源的回收:释放应用申请的空间释放占有的共享互斥锁关闭打开的文件在ACoreOS操作系统中,没有像UNIX或其他操作系统实现的“父进程-子进程”的关系存在,因此不需要记录创建指定任务的任务47资源回收关注于多任务共同访问的系统资源,可以创建额外的任务,提纲引言任务属性任务控制48提纲引言48任务控制启动/重启动挂起/解挂延时任务变量和任务挂钩任务信息49任务控制启动/重启动49任务启动 ACoreOs_task_start(id,entry_point,argument)启动ACoreOs_task_create()创建的任务,启动成功后任务状态由休眠态变为就绪态,具备竞争CPU权利通过taskSpawn()创建的任务直接为就绪态,不需要启动taskSpawn()启动任务,可以传递10个任务入口参数,
ACoreOs_task_start()的任务可以传递1个任务入口参数50任务启动 ACoreOs_task_start(id,e任务重启动 ACoreOs_task_restart、taskRestart(VxWorks)任务被结束,重新以原有的参数和标识符被创建通常用于错误恢复对ACoreOs_task_restart可以重新指定任务入口的传递参数如果重启动的任务占有互斥资源的锁(互斥信号量),则重启动失败51任务重启动 ACoreOs_task_restart、ta任务挂起/解挂 ACoreOs_task_suspend、taskSuspend(VxWorks)使任务停止执行,处于阻塞状态通常用于挂起任务自身 ACoreOs_task_resume、taskResume(VxWorks)移除挂起通常挂起和解挂服务被用于调试和开发目的52任务挂起/解挂 ACoreOs_task_suspend、任务延时延时任务指定的时间间隔,单位为系统时钟脉冲(tick) ACoreOs_task_wake_after、ACoreOs_task_wake_when、
taskDelay(VxWorks)例,延时1/6秒:FOREVER{ taskDelay(sysClkRateGet()/6); ……}
当系统时钟脉冲频率为6的整数倍,该延时时间准确。对于不同硬件,可能发生时钟漂移。53任务延时延时任务指定的时间间隔,单位为系统时钟脉冲(tick任务延时可使用sysClkRateSet()更改系统时钟脉冲长度sysClkRateGet()和sysClkRateSet()属于板级支持包(BSP)开发范畴,随着硬件平台的不同,软件实现不一致任务延时服务更改任务状态“就绪态”到“阻塞态”54任务延时可使用sysClkRateSet()更改系统时钟脉冲任务变量如果多个任务访问同一全局或静态变量,会出现资源使用竞争,可能使用混乱通常解决方法在应用软件中仅使用栈变量使用信号量保护公用资源使用任务变量,将公用资源作为私有任务变量为32位的数值,像寄存器一样在上下文切换时被保存警告:任务变量增加上下文切换时间开销任务变量的详细用法见操作系统参考手册55任务变量如果多个任务访问同一全局或静态变量,会出现资源使用竞任务变量由于任务变量会增加上下文切换时间开销,因此尽可能避免使用。对于采用非重入的程序代码,该机制应该被保留任务变量可以在上下文切换时,保存和恢复任意的32位全局、静态数据。当应用采用该机制时,建议:定义该任务使用的所有任务变量在一个数据结构中访问该数据结构通过全局的或静态指针将指针定义为任务变量
每个任务拥有自己数据结构ACoreOS可以为任务增加多个任务变量一些资源,如用于任务间通信的存储区,应该采用信号量进行保护,而不是采用任务变量56任务变量由于任务变量会增加上下文切换时间开销,因此尽可能避免任务扩展用户定义的程序代码在每次任务切换、创建、删除等处进行调用,调用点包括:任务创建任务启动任务重启动任务删除任务上下文切换任务启动任务退出任务出错任务扩展为一个集合,当任务扩展创建成功后,将适用于所有的任务57任务扩展用户定义的程序代码在每次任务切换、创建、删除等处进行任务信息ACoreOs_task_get_info任务信息包括:中断使能级别、允许抢占标志、时间片长度、是否响应异步信号、浮点使能标志、任务保护状态、任务入口、初始优先级、实际优先级、互斥资源占有数目、删除挂钩可以通过工具提供的系统浏览器,浏览所有任务的详细信息58任务信息ACoreOs_task_get_info58第二章
多任务调度第二章
多任务调度提纲引言任务属性任务控制60提纲引言2引言解决问题什么是实时性?多任务优点任务和任务状态61引言解决问题3实时性概念实时性反应系统响应外部事件的能力。确定性
系统对外部事件响应的最坏时间是可以预知的。延迟事件发生到事件被响应之间的时间间隔62实时性概念4实时性响应性
确定性关心的是系统在识别一个外部事件(通常以中断的形式到达)之前有多少延迟;而响应性关心的是识别外部事件后,系统要花多长时间来服务该事件。响应时间
确定性和响应性结合在一起构成了系统对于外部事件的响应时间。主要包括中断响应时间和任务响应时间。63实时性响应性5实时系统要求能够控制多个外部功能组件独立的功能组件异步执行的功能组件同步执行的功能组件快速执行快速响应低开销确定性操作“Alateanswerisawronganswer”
64实时系统要求能够控制多个外部功能组件6多任务示例机器人控制如何设计一个系统去控制机器人的胳膊?65多任务示例机器人控制如何设计一个系统去控制机器人的胳膊?7单任务实现一个任务循环控制所有的功能arm(){ for(;;) { if(shoulderneedsmoving) moveShoulder(); if(elbowneedsmoving) moveElbow(); if(wristneedsmoving) moveWrist(); . . . }}66单任务实现一个任务循环控制所有的功能8单任务实现优缺点缺点以不同频率控制各个功能较为困难以不同优先级级别控制各个功能较为困难没有抢占能力优点没有任务切换的开销67单任务实现优缺点缺点9多任务实现创建独立的任务,用于操作每个功能点joint(){ for(;;) { waitForMove();/*等待joint移动命令*/ moveJoint(); }}每个任务轮流处于“ready”和“waiting”任务允许等待指定时间间隔的延迟外部事件(如,硬件中断)68多任务实现创建独立的任务,用于操作每个功能点10多任务实现优点对于每个任务使用不同的等待命令,支持每个任务以不同的频率实现相应功能采用基于优先级的调度策略,支持在多个任务同时就绪的情况下,优先地执行最重要的任务采用抢占式调度,当重要的任务就绪时,可以立刻得到执行(通过抢占较低重要程度的任务,优先执行)使得添加新的功能组件更加容易69多任务实现优点对于每个任务使用不同的等待命令,支持每个任务以任务概念概念
具有独立功能的无限循环的程序段的一次运行活动,是实时内核调度的单位特性动态性并行性异步独立性任务内容代码数据堆栈上下文环境70任务概念概念12任务管理与调度任务管理
实时操作系统内核的主要工作,完成任务创建、任务删除、任务调度和改变任务优先级等操作。任务调度
多任务系统中,在同一时刻通常会有多个任务处于活动状态,操作系统需要对资源进行管理,在任务之间实现资源(如CPU、内存、I/O设备等)的共享。CPU作为一种重要的资源,通过操作来确定如何在任务之间共享CPU就被称为任务调度。71任务管理与调度任务管理13任务状态及转换任务状态就绪态-任务等待获取处理器资源运行态-任务获得处理器资源,任务代码在执行阻塞态-任务在等待某种事件发生,包括等待资源、延时、挂起三种类型休眠态-任务被创建,但未被启动任务状态转换72任务状态及转换任务状态14任务控制块任务控制块任务管理通过操作任务控制块(TCB)来实现;每个任务对应一个任务控制块任务控制块主要包括如下两个方面信息:OS控制信息任务名任务标识符任务优先级任务状态其它CPU上下文信息程序指针PC栈指针CPU寄存器FPU寄存器73任务控制块任务控制块15任务队列KernelTCBTCBTCBTCBTCBTCB阻塞态(挂起)阻塞态(等待资源)TCB阻塞态(延迟)TCB就绪态CPU运行态74任务队列KernelTCBTCBTCBTCBTCBTCB阻塞任务队列操作系统内核(kernel)管理各类任务,基于各类操作实现操作系统的状态转换每个独立的阻塞队列可能等待不同的事件。例如,事件可能为释放的特定信号量,或通过指定消息队列到达的消息当任务等待资源并等待指定时间长度,此时任务既在等待资源队列上,也在时间等待队列上就绪队列链不仅仅是简单的双向链表,同时也是采用优先级位表的优先级队列,插入和删除的时间为稳定的当各个队列被操作时,将进入内核状态。在内核中,根据调度规则将检查重调度(上下文切换)是否发生75任务队列操作系统内核(kernel)管理各类任务,基于各类操任务切换当一个任务停止执行且有新任务启动,则上下文切换或重调度将发生为调度新任务执行,内核必须:保存被切换任务(old)执行上下文到TCB中恢复切换到任务(new)保存上下文到CPU等相关资源中系统实现时,必须保证任务切换的速度较快!!76任务切换当一个任务停止执行且有新任务启动,则上下文切换或重调上下文切换类型同步上下文切换发生,当当前执行任务阻塞、延迟,或挂起自身操作引起更高优先级任务就绪运行(发生频率很低)主动降低当前任务自身优先级异步上下文切换一般发生在中断服务程序(ISR)后操作引起更高优先级任务就绪执行当任务阻塞资源、延时或挂起自身时,通常称为阻塞ISR全称为InterruptServiceRoutine,当发生硬件中断时,连接的ISR将被执行。ISR具有最高的优先执行,除非中断被屏蔽。77上下文切换类型同步上下文切换发生,当当前执行任务19优先级调度不同的应用执行时可能有不同的优先顺序,具有高优先顺序的任务应先被执行;优先级调度基于分配给应用的不同优先级级别;最高优先级的任务当处于就绪态(未等待资源、延时或挂起)时,应能够获取CPU资源;优先级调度可能发生如下场景:中断服务程序结束点(如,系统时钟tick)任务因为等待资源而处于等待态任务由其他状态转化为就绪态时78优先级调度不同的应用执行时可能有不同的优先顺序,具有高优先顺优先级调度任务重调度(上下文切换)不会因为任务执行的时间过长而发生(时间片轮转算法在随后讲稿中说明)当由于中断引起重调度时,通常由于中断服务程序调用内核函数。一个特例就是,当系统时钟中断发生时,对于任务的超时处理可能发生重调度任务处理优先顺序更多是由于任务处理时间要求决定的,而不是任务自身的重要程度。然而,任务的重要程度和处理时间要求是模糊的79优先级调度任务重调度(上下文切换)不会因为任务执行的时间过长优先级调度示意图
系统缺省情况下,同等优先级任务不会抢占彼此!高优先级
任务A中等优先级
任务B低优先级
任务C事件事件80优先级调度示意图 系统缺省情况下,同等优先级任务不会抢占彼此优先级调度重调度发生,如果当前执行任务阻塞或延时更高优先级任务变为就绪当更高优先级任务获得CPU控制权,则称为更高优先级任务抢占当前运行任务如果任务B不阻塞或等待资源,那么任务C将不会执行81优先级调度重调度发生,如果23时间片轮转调度(1)1)时间片长度在生成操作系统时配置,系统运行过程中该长度不可改变;2)如果图中任务A在时间片窗口中主动放弃CPU,则任务B直接运行。在任务A再次就绪时,将把时间片中余下的时间长度执行完,并发生任务切换ABCD
时间片长度(固定值,可配置)BCDA82时间片轮转调度(1)1)时间片长度在生成操作系统时配置,系统时间片轮转调度(2)优先级调度优先于时间片轮转调度,时间片轮转仅限于同优先级的任务基于优先级的调度,任务切换可以随时发生;对于时间片轮转调度,任务切换仅发生在每一个时钟TICK到达时时间片轮转调度使得所有同优先级的任务平等地共享CPU83时间片轮转调度(2)优先级调度优先于时间片轮转调度,时间片轮时间片长度允许同优先级任务抢占彼此,时间片轮转必须被打开生成操作系统时,配置时间片长度创建任务时,配置支持时间片轮转调度的选项优先级抢占式调度优先于时间片轮转时间片轮转仅限于拥有同优先级的任务基于优先级抢占式调度能够发生任何时间时间片轮转仅仅发生在指定长度的时间间隔后时间片轮转调度仅适用于配置时间片轮转调度选项的任务84时间片长度允许同优先级任务抢占彼此,时间片轮转必须被打开26空间访问方式所有任务驻留在同一个、公用的地址空间;所有任务都运行在特权级(系统态)。textdatabssRAMfooLibintfooVal;voidfooSet(intx){fooVal=x;}fooSet(4)tTaskAfooSet(99)tTaskB85空间访问方式所有任务驻留在同一个、公用的地址空间;textd多任务工作机制示意InterruptDeviceDeviceNetworkTask1ISRTask2InterruptTask3BufferTask486多任务工作机制示意InterruptDeviceDevice多任务工作机制说明上图描述了ACoreOS多任务机制在单个CPU上,通过任务间通信机制传递消息信号量用于保护任务间共享的、受保护数据定时器和其他中断去触发任务执行I/O系统机制通过read/write访问硬件设备87多任务工作机制说明上图描述了ACoreOS多任务机制29实时性考虑能够控制多个外部组件多任务机制保证系统管理多个任务每个任务可以分配多个独立的功能服务任务通过任务内通信的方式彼此之间相互合作高速运行任务为轻量级调度单位快速的任务切换机制降低系统负载确定性操作抢占式优先级调度保证高优先级任务得到快速运行88实时性考虑能够控制多个外部组件30任务管理任务创建、删除任务控制重启动挂起/解挂延迟任务变量、任务挂钩任务信息
ACoreOS任务管理相关的接口包括两种类型:ACoreOS-API和VxWorks兼容包任务接口。本编程手册详细介绍ACoreOS-API相关管理接口。VxWorks兼容包接口和VxWorks状态基本一致,请参考VxWorks编程手册和程序员手册。89任务管理任务创建、删除 ACoreOS任务管理相关的接口包括提纲引言任务属性任务控制90提纲引言32任务属性任务创建任务名字和标识符任务优先级任务栈任务属性任务删除删除安全资源回收91任务属性任务创建33概述ACoreOS任务创建和操作的服务包括:ACoreOS-API和VxWorks兼容包任务接口ACoreOS任务任务栈(用于存储自动变量和程序参数)任务控制块(用于OS操作和控制任务)注意,不能够混淆可执行的代码和任务两个概念代码是在任务运行前,就被下载目标机若干任务可以执行相同的代码(如,printf())ACoreOS任务类似于进程模型系统中的线程(各个系统对线程的具体实现可能不太一致)92概述ACoreOS任务创建和操作的服务包括:ACoreOS-创建任务taskSpawnACoreOs_task_createfoo(){…}StackTCBentry93创建任务taskSpawnfoo()StackTCB35创建任务任务创建,操作系统完成以下工作:为任务指定栈空间(ACoreOS-API)或系统分配栈空间(VxWorks兼容接口),分配的栈空间应为连续空间初始化栈(VxWorks兼容接口)初始化任务控制块(TCB)(如,存放入口指针在TCB中,初始化栈指针、保存任务创建参数)将任务放置到就绪队列(对于ACoreOS-API接口,需要调用ACoreOs_task_start()服务才能将任务变为就绪态)94创建任务任务创建,操作系统完成以下工作:36创建一个任务ACoreOs_status_codeACoreOs_task_create(name,initial_priority,stack_area,stack_size,attribute_set,delete_hook,id)name任务名字,如果name用户传入为NULL,则系统缺省分配名字,所有任务不允许重名initial_priority任务优先级,范围为1-255,数值越大,优先级越低stack_area任务栈起始,由用户传入stack_size任务栈大小,单位为字节attribute_set任务属性,包括是否抢占、是否采用时间片轮转、是否响应异步信号等
delete_hook删除扩展挂钩,在任务删除时,系统将自动执行该扩展服务id创建成功,系统返回的任务标识符,任务创建成功,返回值为ACOREOS_SUCCESSFUL,不成功,返回错误执行状态95创建一个任务ACoreOs_status_codeACor创建一个任务(VxWorks兼容接口)inttaskSpawn(name,priority,options,stackSize,entryPt,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)name任务名字,如果name用户传入为NULL,则系统缺省分配名字,所有任务不允许重名priority任务优先级,范围为1-255,数值越大,优先级越低options任务属性,如VX_NO_STACK_FILLstackSize任务栈大小,单位为字节entryPt任务执行入口
arg1…arg10传递给任务执行入口的参数,共10个任务创建成功,返回任务标识符ID,不成功则返回ERROR。96创建一个任务(VxWorks兼容接口)inttaskSpa创建一个任务示例voidtaskCreateDemo(){ ACoreOs_status_coderet=ACOREOS_SUCCESSFUL; ACoreOs_idtaskId=0; UINT32*stackArea=NULL; stackArea=malloc(4096); ret=ACoreOs_task_create(“tMytask”,150,stackArea,4096,ACOREOS_TIMESLICE,NULL,&taskId);
if(ret!=ACOREOS_SUCCESSFUL) { printf(“\ntaskcreatestatus:%x\n”,ret); }}97创建一个任务示例voidtaskCreateDemo()3任务标识符创建时由内核统一进行分配系统中数值唯一由32位无符号数组成在任务撤销后,该数值可被创建的新任务使用数值为0时,表示对当前执行任务进行操作任务操作函数中,与标识符相关服务如下ACoreOs_task_get_idtaskIdListGet、taskIdSelf、taskIdVerify(VxWorks兼容接口)98任务标识符创建时由内核统一进行分配40任务名称提供任务名称,便于用户使用通常在系统浏览器中使用,关心指定任务的状态信息在操作系统处理中,统一采用任务标识符用户不指定任务名,系统缺省为任务分配名字系统分配的缺省名字规律为“TSK000x”,其中x为任务创建序号,数值随任务创建不断递增,任务撤销后,其名字可以被新创建任务沿用系统任务名字唯一,创建任务时,如果传入任务名已经存在,则出错返回相关任务名字相关服务:ACoreOs_task_get_nametaskName、taskNameToID(VxWorks兼容接口)99任务名称提供任务名称,便于用户使用41任务优先级优先级范围为1(优先级最高)至255(优先级最低)如何确定不同任务的优先级是很困难的事情,本教程不展开描述,有如下建议:系统对于任务处理时间上的要求,在安排优先级方面比任务重要程度更应该优先考虑存在关于调度理论的指导书相关任务优先级相关服务:ACoreOs_task_get_priority、ACoreOs_task_set_prioritytaskPriorityGet、taskPrioritySet(VxWorks兼容接口)然而上述的服务会更改任务的优先级,使得应用的行为更加难以评估100任务优先级优先级范围为1(优先级最高)至255(优先级最低)任务栈对于ACoreOS-API接口,任务栈由用户传入,用户保证在整个运行空间中该空间不被破坏。对VxWorks兼容接口,系统自动分配栈空间,由系统进行维护运行过程中,超过栈空间大小(栈溢出)会引起系统不确定的行为运行过程中,可通过工具提供的系统浏览器观察任务使用的栈空间情况101任务栈对于ACoreOS-API接口,任务栈由用户传入,用户任务属性任务属性在任务创建时,可通过位或的方式传入:ACOREOS_NO_PREEMPT任务抢占被禁止ACOREOS_TIMESLICE任务允许时间片轮转ACOREOS_NO_ASR 任务禁止响应异步信号ACOREOS_INTERRUPT_LEVEL(n)选择任务执行时,哪些中断使能当任务创建传入属性为0时,则表示该任务可以被抢占、不允许时间片轮转、响应异步信号、对外部中断没有控制操作系统缺省使能浮点,在上下文切换时保存浮点上下文相关任务属性相关服务:ACoreOs_task_get_attribute、ACoreOs_task_set_attributetaskOptionsGet(VxWorks兼容接口)102任务属性任务属性在任务创建时,可通过位或的方式传入:44删除任务 ACoreOs_task_delete(tid)/taskDelete(tid)删除指定任务回收任务控制块(TCB),对VxWorks删除任务接口(taskDelete)还需要回收栈空间
exit(code)用于删除当前执行任务,等同于ACoreOs_task_delete(tid)code在当前系统中,没有使用103删除任务 ACoreOs_task_delete(tid)删除任务通常,调用服务去删除另外的任务存在很大的风险,因为删除者通常不知道这样做是否安全。如,被删除的任务占用某互斥资源的访问锁,就会造成访问锁不被释放,使得系统的运行状态不确定。对于任务删除的安全保护,在后续的章节中进行讨论。104删除任务通常,调用服务去删除另外的任务存在很大的风险,因为删资源回收关注于多任务共同访问的系统资源,可以创建额外的任务,进行资源回收,该处理由应用开发人员进行任务控制块(TCB)和栈(VxWorks兼容包)是系统自动回收的资源应用开发人员,在任务消亡时考虑如下资源的回收:释放应用申
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度公司对公司知识产权质押借款协议
- 2025年度公益基金会灾害预防合作框架
- 亿渡数据:中国康复行业短报告
- 2025年度影视作品演员出演合同样本
- 2025年度区块链技术应用增资扩股协议
- 2025年度快递配送与快递网点建设合同
- 2025年度房产过户房地产经纪人服务协议
- 2025年度农村邻居土地界限确权与使用协议书
- 二零二五年度矿山股份合作协议书:矿山生态环境保护与修复
- 2025年度宾馆客房客房服务员培训与劳务服务合同
- 仓库固定资产管理规范
- 企业关停方案
- 【学校必备】普及精神卫生知识-中小学“世界精神卫生日”科普讲座
- 阴道分泌物检验
- 企业安全文化建设导则
- 职业技能等级认定管理制度汇编
- 八年级语文上册第六单元作业设计 品格与志趣
- C++面向对象程序设计双语教程(第3版)课件全套 ch01Introduction-ch08Templates
- 电机与电气控制技术(第2版)全套完整教学课件
- 掘进机液压培训课件
- 2023年vfp表单所有习题参考答案
评论
0/150
提交评论