μcos- ⅱ内核任务调度的实现

μcos- ⅱ内核任务调度的实现

ID:10662150

大小:179.50 KB

页数:6页

时间:2018-07-07

μcos- ⅱ内核任务调度的实现_第1页
μcos- ⅱ内核任务调度的实现_第2页
μcos- ⅱ内核任务调度的实现_第3页
μcos- ⅱ内核任务调度的实现_第4页
μcos- ⅱ内核任务调度的实现_第5页
资源描述:

《μcos- ⅱ内核任务调度的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、http://www.paper.edu.cnµC/OS-Ⅱ内核任务调度的实现赵二涛,杨春金武汉理工大学信息工程学院,武汉(430063)E-mail:logo10497@163.com摘要:任务调度是一个实时操作系统的核心功能,关系到整个操作系统的性能。µC/OS-Ⅱ内核采用占先式调度方式,保证最高优先级任务一旦进入就绪态,就能立刻得到CPU的使用权。本文结合µC/OS-Ⅱ内核源代码深入研究就绪态中最高优先级查找算法和任务调度原理并给出实例加以分析。关键词:嵌入式实时操作系统,µC/OS-Ⅱ,任务调度,就绪表,优先级中图分类号:TP316.21.引言µC/O

2、S-Ⅱ是一个完整的,可移植、可固化、可剪裁的嵌入式实时操作系统。它采用占先式调度方式,即最高优先级的任务一旦就绪,总能立刻得到CPU的使用权,从而保证系统的实时性。在任务调度的过程中,µC/OS-Ⅱ内核能快速、准确的从众多的就绪态任务中找出优先级最高的任务,减少系统的响应时间,保证系统的实时性。本文首先介绍与任务有关的概念和有关任务调度重要的域,接着详细分析µC/OS-Ⅱ的最高优先级查找算法和任务调度原理并结合实例加以说明。在分析最高优先级查找算法时首先分析将任务置于就绪态的过程,这样更易于理解内核的查找算法。2.µC/OS-Ⅱ的任务调度2.1µC/OS-Ⅱ的

3、任务2.1.1任务及任务状态任务,也称线程,是一个简单的应用程序。每个任务都被赋予一定的优先级,并有自己的一套CPU寄存器和栈空间[1]。实时应用程序的设计过程是如何把问题分割成多个任务。每个任务都是一个无限的循环,都处在以下五种状态之一,即休眠态、就绪态、运行态、挂起态和被中断态。1)休眠态:相当于任务驻留在内存中,但并不能被多任务内核所调度;2)就绪态:意味着任务已经准备好,可以运行,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行;3)运行态:指任务掌握了CPU的使用权,正在运行中;4)挂起态:指任务在等待,等待某一事件的发生;5)被中断态

4、:指发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了中断态。2.1.2任务控制块(OS_TCB)任务控制块是一个和任务息息相关的重要的结构体。当任务的CPU使用权被剥夺时,µC/OS-Ⅱ用它来保存该任务的状态。当任务重新获得CPU的使用权时,任务控制块能确保任务从被中断的那一点丝毫不差的继续执行[2]。每个任务都拥有自己独立的任务控制块,一旦任务建立,与之相对应的任务控制块就被赋值。任务控制块结构体在uCOS_II.H中定义,以下代码是节选OS_TCB中对本文分析相关的进构体成员。//File:uCOS_II.H-1-http://

5、www.paper.edu.cntypedefstructos_tcb{OS_STK*OSTCBStkPtr;…/*当前任务的栈顶指针*/INT8UINT8UINT8UINT8UINT8UOSTCBPrio;OSTCBX;OSTCBY;OSTCBBitX;OSTCBBitY;…}OS_TCB;OSTCBStkPtr是当前任务的栈顶指针,每个任务都有自己的堆栈和指向栈顶指针。在上下文切换时,对于优先级低的任务,要将任务当前状态保存于任务堆栈中(以便以后再次调度到此任务继续执行),然后OSTCBStkPtr指向栈顶;对于优先级高的任务,通过OSTCBStkPt

6、r找到任务的上次被切换时的状态,把保存的状态恢复到CPU,这样任务就毫无差错的继续执行。OSTCBPrio是任务的优先级号。OSTCBX,OSTCBBitX,OSTCBY,OSTCBBitY用于加速任务进入就绪态的过程或等待事件发生状态的过程,这些值在任务建立时调用OS_TCBInit()进行赋值。2.2µC/OS-Ⅱ最高优先级查找算法在µC/OS-Ⅱ中,每个就绪的任务都放在就绪表(readylist)中,内核通过就绪表找到就绪态最高优先级的任务让其占用CPU,进入运行态[3]。µC/OS-Ⅱ中最多运行的任务是64个,内核把任务优先级分组,八个为一组[1],如

7、图1所示。任务优先级号中Y是所属组部分,X是所在组部分,在就绪表中有2个变量OSRdyGrp和OSRdyTbl[],OSRdyGrp表示所属组,每一位代表一个组内是否有进入就绪态的任务,OSRdyTbl[]表示所在组,一组八个任务,即一位代表一个任务是否进入就绪态。当任务进入就绪态时,就绪表OSRdyGrp和OSRdyTbl[]相应位置1。OSRdyGrp和OSRdyTbl[]之间的关系见图1,OSRdyGrp的第n位对应OSRdyTbl[n],即OSRdyTbl[n]中任何一位是1时,OSRdyGrp的第n位要置1。OSRdyGrp任务优先级号765

8、4321000YYY

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。