《天脉(ACoreOS)操作系统培训第二章:多任务调度.ppt》由会员分享,可在线阅读,更多相关《天脉(ACoreOS)操作系统培训第二章:多任务调度.ppt(58页珍藏版)》请在三一办公上搜索。
1、第二章多任务调度,提纲,引言任务属性任务控制,2,引言,解决问题什么是实时性?多任务优点任务和任务状态,3,实时性,概念实时性反应系统响应外部事件的能力。确定性系统对外部事件响应的最坏时间是可以预知的。延迟事件发生到事件被响应之间的时间间隔,4,实时性,响应性确定性关心的是系统在识别一个外部事件(通常以中断的形式到达)之前有多少延迟;而响应性关心的是识别外部事件后,系统要花多长时间来服务该事件。响应时间确定性和响应性结合在一起构成了系统对于外部事件的响应时间。主要包括中断响应时间和任务响应时间。,5,实时系统要求,能够控制多个外部功能组件独立的功能组件异步执行的功能组件同步执行的功能组件快速执
2、行快速响应低开销确定性操作“A late answer is a wrong answer”,6,多任务示例,机器人控制,7,如何设计一个系统去控制机器人的胳膊?,单任务实现,一个任务循环控制所有的功能 arm()for(;)if(shoulder needs moving)moveShoulder();if(elbow needs moving)moveElbow();if(wrist needs moving)moveWrist();.,8,单任务实现优缺点,缺点以不同频率控制各个功能较为困难以不同优先级级别控制各个功能较为困难没有抢占能力优点没有任务切换的开销,9,多任务实现,创建独立的
3、任务,用于操作每个功能点joint()for(;)waitForMove();/*等待joint移动命令*/moveJoint();每个任务轮流处于“ready”和“waiting”任务允许等待指定时间间隔的延迟外部事件(如,硬件中断),10,多任务实现优点,对于每个任务使用不同的等待命令,支持每个任务以不同的频率实现相应功能采用基于优先级的调度策略,支持在多个任务同时就绪的情况下,优先地执行最重要的任务采用抢占式调度,当重要的任务就绪时,可以立刻得到执行(通过抢占较低重要程度的任务,优先执行)使得添加新的功能组件更加容易,11,任务概念,概念具有独立功能的无限循环的程序段的一次运行活动,是实
4、时内核调度的单位特性动态性并行性异步独立性任务内容代码数据堆栈上下文环境,12,任务管理与调度,任务管理实时操作系统内核的主要工作,完成任务创建、任务删除、任务调度和改变任务优先级等操作。任务调度多任务系统中,在同一时刻通常会有多个任务处于活动状态,操作系统需要对资源进行管理,在任务之间实现资源(如CPU、内存、I/O设备等)的共享。CPU作为一种重要的资源,通过操作来确定如何在任务之间共享CPU就被称为任务调度。,13,任务状态及转换,任务状态就绪态-任务等待获取处理器资源运行态-任务获得处理器资源,任务代码在执行阻塞态-任务在等待某种事件发生,包括等待资源、延时、挂起三种类型休眠态-任务被
5、创建,但未被启动任务状态转换,14,任务控制块,任务控制块任务管理通过操作任务控制块(TCB)来实现;每个任务对应一个任务控制块任务控制块主要包括如下两个方面信息:OS 控制信息任务名任务标识符任务优先级任务状态其它CPU上下文信息程序指针PC栈指针CPU寄存器FPU寄存器,15,任务队列,16,Kernel,TCB,TCB,TCB,阻塞态(挂起),阻塞态(等待资源),阻塞态(延迟),就绪态,CPU,运行态,任务队列,操作系统内核(kernel)管理各类任务,基于各类操作实现操作系统的状态转换每个独立的阻塞队列可能等待不同的事件。例如,事件可能为释放的特定信号量,或通过指定消息队列到达的消息当
6、任务等待资源并等待指定时间长度,此时任务既在等待资源队列上,也在时间等待队列上就绪队列链不仅仅是简单的双向链表,同时也是采用优先级位表的优先级队列,插入和删除的时间为稳定的当各个队列被操作时,将进入内核状态。在内核中,根据调度规则将检查重调度(上下文切换)是否发生,17,任务切换,当一个任务停止执行且有新任务启动,则上下文切换或重调度将发生为调度新任务执行,内核必须:,18,保存被切换任务(old)执行上下文到TCB中恢复切换到任务(new)保存上下文到CPU等相关资源中,系统实现时,必须保证任务切换的速度较快!,上下文切换类型,同步上下文切换发生,当当前执行任务阻塞、延迟,或挂起自身操作引起
7、更高优先级任务就绪运行(发生频率很低)主动降低当前任务自身优先级异步上下文切换一般发生在中断服务程序(ISR)后操作引起更高优先级任务就绪执行当任务阻塞资源、延时或挂起自身时,通常称为阻塞ISR全称为Interrupt Service Routine,当发生硬件中断时,连接的ISR将被执行。ISR 具有最高的优先执行,除非中断被屏蔽。,19,优先级调度,不同的应用执行时可能有不同的优先顺序,具有高优先顺序的任务应先被执行;优先级调度基于分配给应用的不同优先级级别;最高优先级的任务当处于就绪态(未等待资源、延时或挂起)时,应能够获取CPU资源;优先级调度可能发生如下场景:中断服务程序结束点(如,
8、系统时钟tick)任务因为等待资源而处于等待态任务由其他状态转化为就绪态时,20,优先级调度,任务重调度(上下文切换)不会因为任务执行的时间过长而发生(时间片轮转算法在随后讲稿中说明)当由于中断引起重调度时,通常由于中断服务程序调用内核函数。一个特例就是,当系统时钟中断发生时,对于任务的超时处理可能发生重调度任务处理优先顺序更多是由于任务处理时间要求决定的,而不是任务自身的重要程度。然而,任务的重要程度和处理时间要求是模糊的,21,优先级调度示意图,系统缺省情况下,同等优先级任务不会抢占彼此!,22,高优先级 任务A,中等优先级 任务B,低优先级任务 C,事件,事件,优先级调度,重调度发生,如
9、果当前执行任务阻塞或延时更高优先级任务变为就绪当更高优先级任务获得CPU控制权,则称为更高优先级任务抢占当前运行任务如果任务B不阻塞或等待资源,那么任务C将不会执行,23,时间片轮转调度(1),1)时间片长度在生成操作系统时配置,系统运行过程中该长度不可改变;2)如果图中任务A在时间片窗口中主动放弃CPU,则任务B直接运行。在任务A再次就绪时,将把时间片中余下的时间长度执行完,并发生任务切换,24,时间片长度(固定值,可配置),时间片轮转调度(2),优先级调度优先于时间片轮转调度,时间片轮转仅限于同优先级的任务基于优先级的调度,任务切换可以随时发生;对于时间片轮转调度,任务切换仅发生在每一个时
10、钟TICK到达时时间片轮转调度使得所有同优先级的任务平等地共享CPU,25,时间片长度,允许同优先级任务抢占彼此,时间片轮转必须被打开生成操作系统时,配置时间片长度创建任务时,配置支持时间片轮转调度的选项优先级抢占式调度优先于时间片轮转时间片轮转仅限于拥有同优先级的任务基于优先级抢占式调度能够发生任何时间时间片轮转仅仅发生在指定长度的时间间隔后时间片轮转调度仅适用于配置时间片轮转调度选项的任务,26,空间访问方式,所有任务驻留在同一个、公用的地址空间;所有任务都运行在特权级(系统态)。,27,text,data,bss,RAM,fooLib,int fooVal;void fooSet(int
11、 x)fooVal=x;,fooSet(4),tTaskA,fooSet(99),tTaskB,多任务工作机制示意,28,Interrupt,Device,Device,Network,Task1,ISR,Task2,Interrupt,Task3,Buffer,Task4,多任务工作机制说明,上图描述了ACoreOS多任务机制在单个CPU上,通过任务间通信机制传递消息信号量用于保护任务间共享的、受保护数据定时器和其他中断去触发任务执行I/O系统机制通过read/write访问硬件设备,29,实时性考虑,能够控制多个外部组件多任务机制保证系统管理多个任务每个任务可以分配多个独立的功能服务任务通
12、过任务内通信的方式彼此之间相互合作高速运行任务为轻量级调度单位快速的任务切换机制降低系统负载确定性操作抢占式优先级调度保证高优先级任务得到快速运行,30,任务管理,任务创建、删除任务控制重启动挂起/解挂延迟任务变量、任务挂钩任务信息,31,ACoreOS任务管理相关的接口包括两种类型:ACoreOS-API和VxWorks兼容包任务接口。本编程手册详细介绍ACoreOS-API相关管理接口。VxWorks兼容包接口和VxWorks状态基本一致,请参考VxWorks编程手册和程序员手册。,提纲,引言任务属性任务控制,32,任务属性,任务创建任务名字和标识符任务优先级任务栈任务属性任务删除删除安全
13、资源回收,33,概述,ACoreOS任务创建和操作的服务包括:ACoreOS-API和VxWorks兼容包任务接口ACoreOS任务任务栈(用于存储自动变量和程序参数)任务控制块(用于OS操作和控制任务)注意,不能够混淆可执行的代码和任务两个概念代码是在任务运行前,就被下载目标机若干任务可以执行相同的代码(如,printf())ACoreOS任务类似于进程模型系统中的线程(各个系统对线程的具体实现可能不太一致),34,创建任务,35,taskSpawnACoreOs_task_create,foo(),Stack,TCBentry,创建任务,任务创建,操作系统完成以下工作:为任务指定栈空间(A
14、CoreOS-API)或系统分配栈空间(VxWorks兼容接口),分配的栈空间应为连续空间初始化栈(VxWorks兼容接口)初始化任务控制块(TCB)(如,存放入口指针在TCB中,初始化栈指针、保存任务创建参数)将任务放置到就绪队列(对于ACoreOS-API接口,需要调用ACoreOs_task_start()服务才能将任务变为就绪态),36,创建一个任务,ACoreOs_status_code ACoreOs_task_create(name,initial_priority,stack_area,stack_size,attribute_set,delete_hook,id),37,,任
15、务创建成功,返回值为ACOREOS_SUCCESSFUL,不成功,返回错误执行状态,创建一个任务(VxWorks兼容接口),int taskSpawn(name,priority,options,stackSize,entryPt,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10),38,任务创建成功,返回任务标识符ID,不成功则返回ERROR。,创建一个任务示例,void taskCreateDemo()ACoreOs_status_code ret=ACOREOS_SUCCESSFUL;ACoreOs_id taskId=0;UINT32
16、*stackArea=NULL;stackArea=malloc(4096);ret=ACoreOs_task_create(“tMytask”,150,stackArea,4096,ACOREOS_TIMESLICE,NULL,39,任务标识符,创建时由内核统一进行分配系统中数值唯一由32位无符号数组成在任务撤销后,该数值可被创建的新任务使用数值为0时,表示对当前执行任务进行操作任务操作函数中,与标识符相关服务如下ACoreOs_task_get_idtaskIdListGet、taskIdSelf、taskIdVerify(VxWorks兼容接口),40,任务名称,提供任务名称,便于用户使
17、用通常在系统浏览器中使用,关心指定任务的状态信息在操作系统处理中,统一采用任务标识符用户不指定任务名,系统缺省为任务分配名字系统分配的缺省名字规律为“TSK000 x”,其中x为任务创建序号,数值随任务创建不断递增,任务撤销后,其名字可以被新创建任务沿用系统任务名字唯一,创建任务时,如果传入任务名已经存在,则出错返回相关任务名字相关服务:ACoreOs_task_get_nametaskName、taskNameToID(VxWorks兼容接口),41,任务优先级,优先级范围为1(优先级最高)至255(优先级最低)如何确定不同任务的优先级是很困难的事情,本教程不展开描述,有如下建议:系统对于任
18、务处理时间上的要求,在安排优先级方面比任务重要程度更应该优先考虑存在关于调度理论的指导书相关任务优先级相关服务:ACoreOs_task_get_priority、ACoreOs_task_set_prioritytaskPriorityGet、taskPrioritySet(VxWorks兼容接口)然而上述的服务会更改任务的优先级,使得应用的行为更加难以评估,42,任务栈,对于ACoreOS-API接口,任务栈由用户传入,用户保证在整个运行空间中该空间不被破坏。对VxWorks兼容接口,系统自动分配栈空间,由系统进行维护运行过程中,超过栈空间大小(栈溢出)会引起系统不确定的行为运行过程中,可
19、通过工具提供的系统浏览器观察任务使用的栈空间情况,43,任务属性,任务属性在任务创建时,可通过位或的方式传入:ACOREOS_NO_PREEMPT 任务抢占被禁止ACOREOS_TIMESLICE 任务允许时间片轮转ACOREOS_NO_ASR 任务禁止响应异步信号ACOREOS_INTERRUPT_LEVEL(n)选择任务执行时,哪些中断使能当任务创建传入属性为0时,则表示该任务可以被抢占、不允许时间片轮转、响应异步信号、对外部中断没有控制操作系统缺省使能浮点,在上下文切换时保存浮点上下文相关任务属性相关服务:ACoreOs_task_get_attribute、ACoreOs_task_s
20、et_attributetaskOptionsGet(VxWorks兼容接口),44,删除任务,ACoreOs_task_delete(tid)/taskDelete(tid)删除指定任务回收任务控制块(TCB),对VxWorks删除任务接口(taskDelete)还需要回收栈空间exit(code)用于删除当前执行任务,等同于ACoreOs_task_delete(tid)code在当前系统中,没有使用,45,删除任务,通常,调用服务去删除另外的任务存在很大的风险,因为删除者通常不知道这样做是否安全。如,被删除的任务占用某互斥资源的访问锁,就会造成访问锁不被释放,使得系统的运行状态不确定。对
21、于任务删除的安全保护,在后续的章节中进行讨论。,46,资源回收,关注于多任务共同访问的系统资源,可以创建额外的任务,进行资源回收,该处理由应用开发人员进行任务控制块(TCB)和栈(VxWorks兼容包)是系统自动回收的资源应用开发人员,在任务消亡时考虑如下资源的回收:释放应用申请的空间释放占有的共享互斥锁关闭打开的文件在ACoreOS操作系统中,没有像UNIX或其他操作系统实现的“父进程-子进程”的关系存在,因此不需要记录创建指定任务的任务,47,提纲,引言任务属性任务控制,48,任务控制,启动/重启动挂起/解挂延时任务变量和任务挂钩任务信息,49,任务启动,ACoreOs_task_star
22、t(id,entry_point,argument)启动ACoreOs_task_create()创建的任务,启动成功后任务状态由休眠态变为就绪态,具备竞争CPU权利通过taskSpawn()创建的任务直接为就绪态,不需要启动taskSpawn()启动任务,可以传递10个任务入口参数,ACoreOs_task_start()的任务可以传递1个任务入口参数,50,任务重启动,ACoreOs_task_restart、taskRestart(VxWorks)任务被结束,重新以原有的参数和标识符被创建通常用于错误恢复对ACoreOs_task_restart可以重新指定任务入口的传递参数如果重启动的
23、任务占有互斥资源的锁(互斥信号量),则重启动失败,51,任务挂起/解挂,ACoreOs_task_suspend、taskSuspend(VxWorks)使任务停止执行,处于阻塞状态通常用于挂起任务自身ACoreOs_task_resume、taskResume(VxWorks)移除挂起通常挂起和解挂服务被用于调试和开发目的,52,任务延时,延时任务指定的时间间隔,单位为系统时钟脉冲(tick)ACoreOs_task_wake_after、ACoreOs_task_wake_when、taskDelay(VxWorks)例,延时1/6秒:FOREVERtaskDelay(sysClkRate
24、Get()/6);当系统时钟脉冲频率为6的整数倍,该延时时间准确。对于不同硬件,可能发生时钟漂移。,53,任务延时,可使用sysClkRateSet()更改系统时钟脉冲长度sysClkRateGet()和sysClkRateSet()属于板级支持包(BSP)开发范畴,随着硬件平台的不同,软件实现不一致任务延时服务更改任务状态“就绪态”到“阻塞态”,54,任务变量,如果多个任务访问同一全局或静态变量,会出现资源使用竞争,可能使用混乱通常解决方法在应用软件中仅使用栈变量使用信号量保护公用资源使用任务变量,将公用资源作为私有任务变量为32位的数值,像寄存器一样在上下文切换时被保存警告:任务变量增加上
25、下文切换时间开销任务变量的详细用法见操作系统参考手册,55,任务变量,由于任务变量会增加上下文切换时间开销,因此尽可能避免使用。对于采用非重入的程序代码,该机制应该被保留任务变量可以在上下文切换时,保存和恢复任意的32位全局、静态数据。当应用采用该机制时,建议:定义该任务使用的所有任务变量在一个数据结构中访问该数据结构通过全局的或静态指针将指针定义为任务变量每个任务拥有自己数据结构ACoreOS可以为任务增加多个任务变量一些资源,如用于任务间通信的存储区,应该采用信号量进行保护,而不是采用任务变量,56,任务扩展,用户定义的程序代码在每次任务切换、创建、删除等处进行调用,调用点包括:任务创建任务启动任务重启动任务删除任务上下文切换任务启动任务退出任务出错任务扩展为一个集合,当任务扩展创建成功后,将适用于所有的任务,57,任务信息,ACoreOs_task_get_info任务信息包括:中断使能级别、允许抢占标志、时间片长度、是否响应异步信号、浮点使能标志、任务保护状态、任务入口、初始优先级、实际优先级、互斥资源占有数目、删除挂钩可以通过工具提供的系统浏览器,浏览所有任务的详细信息,58,
链接地址:https://www.31ppt.com/p-2901904.html