ucosii实时操作系统分析-任务管理及调度.ppt_第1页
ucosii实时操作系统分析-任务管理及调度.ppt_第2页
ucosii实时操作系统分析-任务管理及调度.ppt_第3页
ucosii实时操作系统分析-任务管理及调度.ppt_第4页
ucosii实时操作系统分析-任务管理及调度.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C/OS-II操作系统中进程调度模块分析,背景,1、课程任务:分析C/OS-II操作系统中的进程调度模块的源代码2、任务说明:结合课堂上讲授的进程的定义、进程控制块、进程的创建以及处理机调度算法等知识点,分析C/OS-II操作系统中的进程调度模块的源码实现。进而理解进程控制块的结构,理解进程运行的并发性,掌握进程调度的方法。3、任务要求:(1)熟悉相关的理论知识;(2)分析C/OS-II操作系统中的进程调度模块的代码实现,并辅以图表的形式描述实现流程;(3)对核心代码作注释说明。(4)按照模板撰写分析报告,以小组为单位参加答辩。,1、uC/OS的任务控制块-0.8(25页2.3)2、任务就绪表的结构-0.9(29页2.4.1)3、对任务就绪表的操作(将就绪任务状态填入就绪表)-0.9(31页2.4.2)4、根据就绪表确定最高优先级(采用查表法确定高优先级任务)-1(31页2.4.2)5、任务调度器实现流程图表述-1(43页2.4.3)6、任务调度器实现及源代码分析-1(43页2.4.3)7、任务切换的过程描述-0.8(可选)(43页2.4.3)8、用户任务的实现(编写一个示例程序验证调度算法)-1(43页例2-7)9、任务状态切换(挂起和恢复任务)示例程序演示-0.9(可选)(48页例2-8)10、用信号量实现任务间同步和互斥示例程序演示-0.9(可选)(119页例4-4,122页例4-5)11、用消息邮箱实现任务间通信示例程序演示-0.9(可选)(136页例4-8),任务,实时操作系统C/OS-II,1,3,2,C/OS-II概述,任务概念,任务调度核心问题分析,C/OS简介,美国人JeanLabrosse1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等1998年C/OS-II,目前的版本C/OS-IIV2.61,2.722000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中网站www.ucos-II.com(),数据类型,typedefunsignedcharINT8U;typedefsignedcharINT8S;typedefunsignedintINT16U;typedefsignedintINT16S;typedefunsignedlongINT32U;typedefsignedlongINT32S;typedeffloatFP32;typedefdoubleFP64;,实时操作系统C/OS-II,1,3,2,C/OS-II概述,任务概念,任务调度核心问题分析,任务调度概念,任务控制块任务代码结构任务优先级一个任务的实现,任务控制块TCB,一旦任务建立,一个任务控制块OS_TCB就被赋值。任务控制块是一个数据结构,保存该任务的相关参数,包括任务堆栈指针,任务的当前状态,任务的优先级等。任务CPU使用权被剥夺时,TCB保存该时刻任务状态;任务重新得到CPU控制权时,TCB确保任务从当时被中断的那一点丝毫不差地继续执行。OS_TCB全部驻留在RAM中。,任务控制块就相当于一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理的。,PCB:标识符、父进程标识符、程序计数器、栈指针、进程状态、优先级,任务控制块TCBuCOS_II.H第370行,typedefstructos_tcbOS_STK*OSTCBStkPtr;/指向任务堆栈栈顶的指针structos_tcb*OSTCBNext;/指向后一个任务控制块的指针structos_tcb*OSTCBPrev;/指向前一个任务控制块的指针INT16UOSTCBDly;/任务等待的时限(节拍数)INT8UOSTCBStat;/任务的当前状态标志INT8UOSTCBPrio;/任务的优先级别OS_TCB;,任务控制块链表,空任务块链表,OSTCBTbl0,OSTCBTbl1,OSTCBTblOS_MAX_TASKS+OS_N_SYS_TASK_-2,OSTCBTblOS_MAX_TASKS+OS_N_SYS_TASK_-1,OSTCBFreeList,系统在调用函数OSInit()对uC/OS-II系统进行初始化时,先在RAM中建立一个OS_TCB结构类型的数组OSTCBTbl,每个数组元素就是一个任务控制块,然后把这些控制块链接成一个如图所示的链表。由于链表中的这些控制块还没有与具体任务相关联,因此这个链表叫做空任务块链表。每当应用程序调用系统函数OSTaskCreate()创建一个任务时,系统就会将任务控制块链表头指针OSTCBFreeList指向的任务控制块分配给该任务。在给任务控制块中的各成员赋值后,就按任务控制块链表的头指针OSTCBList将其加入到任务控制块链表中。,uC/OS的任务,uC/OS-II的任务有两种:用户任务和系统任务。由应用程序设计者编写的任务叫做用户任务,由系统提供的任务叫做系统任务。用户任务是为解决应用问题而编写的,系统任务是为应用程序来提供某种服务的。,目前,uC/OS-II最多可以对64个任务(包括用户任务和系统任务)进行管理。,空闲任务和统计任务,内核总是创建一个空闲任务OSTaskIdle();总是设置为最低优先级,OS_LOWEST_PRIOR;当所有其他任务都未在执行时,空闲任务开始执行;应用程序不能删除该任务;空闲任务的工作就是把32位计数器OSIdleCtr加1,该计数器被统计任务所使用;统计任务OSTaskStat(),提供运行时间统计。每秒钟运行一次,计算当前的CPU利用率。其优先级是OS_LOWEST_PRIOR-1,可选。,任务的优先级,uC/OS-II分为64个优先级别,每一个级别都用一个数字表示。数字0的级别最高,数字越大优先级别越低。通常,一个应用程序的任务数小于64,用户可根据应用程序的需要,在OS_CFG.H中设置OS_LOWEST_PRIO,即定义了可供使用的优先级别共OS_LOWEST_PRIO+1个。固定地,系统总是把最低优先级别自动赋给空闲任务,如果系统中还有统计任务,则其优先级别为OS_LOWEST_PRIO-1。,任务的优先级同样也是它的标识号ID。,问题1:如果创建2个相同优先级的任务会怎么执行?,任务的实现,创建任务的系统服务OSTaskCreate()INT8UOSTaskCreate(void(*task)(void*pd),/任务代码指针void*pdata,/任务参数指针OS_STK*ptos,/任务栈的栈顶指针INT8Uprio/任务的优先级);,用户任务代码的一般结构,voidMyTask(void*pdata)for(;)可以被中断的任务代码;OS_ENTER_CRITICAL();/进入临界段(关中断)不可以被中断的任务代码;OS_EXIT_CRITICAL();/退出临界段(开中断)可以被中断的任务代码;OSTimeDly(10);,根据嵌入式系统任务的工作特点,任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构也叫超循环结构。,为了有效的对中断进行控制,在任务的代码里可使用UC/OS-II定义的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来控制何时响应中断,何时屏蔽中断。在运行这两个宏之间的代码时是不会响应中断的,这种受保护的代码段叫临界段。,用户应用程序一般结构(续),voidTask1(void*pdata)/定义用户任务1for(;)voidTask2(void*pdata)/定义用户任务2for(;)voidmain()OSInit();/初始化uC/OS-IIOSTaskCreate(Task1,);/创建用户任务1OSTaskCreate(Task2,);/创建用户任务2OSStart();/启动任务,是一个任务。因此它不是被主函数或其它函数调用的,主函数main()只负责创建和启动它们,而由操作系统负责来调度运行它们。使用函数OSStart()启动任务之后,任务就交由操作系统管理和调度了。,一个具体的应用任务实例代码,实时操作系统C/OS-II,1,3,2,C/OS-II概述,任务概念,任务调度核心问题分析,多任务操作系统的核心:任务调度。调度定义:就是通过一个算法在多个任务中确定哪个任务来运行。做这项工作的就是调度器。调度器的主要工作:一是在任务就绪表中查找具有最高优先级别的就绪任务;二是实现任务的切换。调度算法:可抢占的高优先级调度算法调度条件:它在系统或用户任务调用系统函数及执行中断服务程序结束时来调用调度器,以确定该运行的任务并运行它。uC/OS-II进行任务调度的依据:任务就绪表。,就绪任务表及任务调度,为了能使系统清楚地知道系统中哪些任务已经就绪,哪些还没有就绪,UC/OS-II在RAM中设立了一个记录表,系统中的每个任务都在这个表占据一个位置,并用这个位置的状态(1或者0)来表示任务是否处于就绪状态。这个表就叫做任务就绪表。,C/OS任务调度器实现及源代码分析,voidOSSched(void)INT8Uy;OS_ENTER_CRITICAL();if(OSLockNesting|OSIntNesting)=0)y=OSUnMapTblOSRdyGrp;OSPrioHighRdy=(INT8U)(y3;OSRdyTblprio3|=OSMapTblprio,其中,OSMapTbl是uC/OS-II为加快运算速度定义的一个数组,各元素为:,OSMapTbl0=00000001BOSMapTbl1=00000010BOSMapTbl2=00000100BOSMapTbl3=00001000BOSMapTbl4=00010000BOSMapTbl5=00100000BOSMapTbl6=01000000BOSMapTbl7=10000000B,如果要使一个优先级为prio的任务脱离就绪态,则可使用如下代码:,If(OSRdyTblprio3,脱离就绪态:将任务就绪表OSRdyTblprio3相应元素的相应位清零,而且当OSRdyTblprio3中的所有位都为零时,即全组任务中没有一个进入就绪态时,OSRdyGrp的相应位才为零。,对任务就绪表的操作(续),例:欲使优先级为12的任务进入就绪态,设置就绪表。答:优先级为12,即00001100B。,OSRdyGrp|=OSMapTblprio3;(OSMapTbl1=00000010)OSRdyTbl1|=OSMapTblprio/获得优先级别的D5、D4、D3位X=OSUnMapTblOSRdyTblY;/获得优先级别的D2、D1、D0位Prio=(Y3)+X;/获得就绪任务的优先级别,其中,OSUnMapTbl同样是uC/OS-II为加快运算速度定义的一个数组,共有256个元素:,INT8UconstOSUnMapTbl16*16=0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0;,举例:如已知OSRdyGrp的值为01101000B,即104,则查得OSUnMapTblOSRdyGrp的值是3。如已知OSRdyTbl3的值是11100100B,即228,则查OSUnMapTblOSRdyTbl3的值是2。则进入就绪态的最高任务优先级。Prio=(33)+2=26,UC/OS-II经常使用类似于就绪表的形式来记录任务的某种状态,因此一定要熟悉这种表的结构以及对这种表的基本操作。,源代码中使用了查表法,查表法具有确定的时间,增加了系统的可预测性,uC/OS中所有的系统调用时间都是确定的以空间换时间Y=OSUnMapTblOSRdyGrp;X=OSUnMapTblOSRdyTblY;Prio=(YOSTCBStkPtr;用出栈指令把R1、R2.弹入CPU的通用寄存器;,2.任务切换宏OS_TASK_SW()-续,任务的调度(续),任务切换过程,获得待运行任务的任务控制块,如何获得待运行任务的任务控制块?,根据就绪表获得待运行任务的任务控制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论