UCOS-II 操作系统内核的改进.pdf

上传人:qwe****56 文档编号:74651916 上传时间:2023-02-27 格式:PDF 页数:4 大小:38.63KB
返回 下载 相关 举报
UCOS-II 操作系统内核的改进.pdf_第1页
第1页 / 共4页
UCOS-II 操作系统内核的改进.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《UCOS-II 操作系统内核的改进.pdf》由会员分享,可在线阅读,更多相关《UCOS-II 操作系统内核的改进.pdf(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Jun.2006,Volume 3,No.6(Serial No.19)通讯和计算机 Journal of Communication and Computer,ISSN1548-7709,USA 52 UC/OS-II 操作系统内核的改进 成后发1,杨春金2(1,2 武汉理工大学信息工程学院,武汉 430063)摘 要:UC/OS-II 是一种针对嵌入式设计的实时多任务操作系统,采用基于优先级的占先式任务调度算法,虽然效率高但比较单调。在实现 TCP/IP 协议中,这种内核调度方法对 Internet 服务进程显得不适应。本文分析了 UC/OS-II 和 Linux 操作系统内核任务调度算法

2、,在此基础上提出了一种改进 UC/OS-II 内核的方法,使其更适合于在嵌入式中实现 Internet 服务。关键词:UC/OS-II;任务调度;RTOS;TCP/IP;实时内核*1 成后发(1981-),男,硕士研究生;研究方向:3 S 技术应用研究。2 杨春金(1953-),男,副教授;研究方向:3 S 技术应用研究。1.引 言 UC/OS-II 是源码开放的实时嵌入式操作系统,其主要特点如下:源码开放,系统透明化,容易将操作系统移植到其他平台。可移植性,源码大多数由 ANSI C 编写,底层与硬件相关由汇编编写,便于其移植到其它硬件平台。可固化,只要开发者有固化手段,就能嵌入到操作系统上

3、。可剪裁,用户可以自定制所需要的系统服务。占先式,UC/OS-II 采用的是占先式实时内核,意味着UC/OS-II 总是运行就绪条件下优先级最高的任务,这种模式使得系统任务及响应时间得以优化。最高优先级任务一旦就绪,总能得到 CPU 控制权。如果是一个中断得到一个优先级高的任务就绪,那么在中断程序完成时,优先级高的任务得以运行。多任务,UC/OS-II 可以运行 64 个任务,8 个系统任务和 56 个应用程序任务。UC/OS-II 不支持时间片轮转调度法,所以每个任务的优先级必须不同。多任务结构使应用程序模块化,CPU 利用率得到最大的发挥。服务时间可确定,所有 UC/OS-II 服务的时间

4、是确定的,UC/OS-II 的运行时间不依赖于应用任务的多少。任务堆栈,每个任务都有属于自己的不同栈空间,使用 UC/OS-II 的栈空间检验函数,可以确定每个任务所需要的栈空间大小1。2.Linux 内核任务调度算法分析 在 Linux 操作系统中,内核调度时机主要有以下几种2:?进程状态转换时刻,进程中止、进程睡眠时;?可运行队列中增加一个进程时;?当前进程的时间片用完时(Current-Counter=0);?进程从系统调用返回到用户状态时;?内核处理完中断后,进程返回到用户状态时。在 Linux 的每个进程控制块中有以下几项:policy、priority、counter、rt_pri

5、ority 作为调度程序选择进程的依据。其中 policy 是进程的调度策略,用来区分两种进程实时和普通;priority 是进程(实时和普通)的优先级;counter 是进程剩余的时间片,它的大小完全由 priority 决定;rt_priority 是实时优先级,这是实时进程所特有的,用于实时进程的选择。首先,Linux 根据 policy 从整体上区分实时进程和普通进程,因为实时进程和普通进程的调度是不同的,实时进程应该先于普通进程运行,然后,对于同一类型的不同进程,采用不同的标准来进行UC/OS-II 操作系统内核的改进 53 选择进程。对于普通进程,Linux 采用动态优先调度,选择

6、依据就是进程 counter 的数字大小。进程创建时,优先级 priority 被赋予一个初值,这个数字同时也是计数器 counter 的初值,即进程创建时二者相等。在进程运行中,counter 不断减小,而priority 保持不变,以便在 counter 变成“0”时(该进程时间片已经用完)对 counter 进行重新赋值,这个普通进程才有了被再次调度的机会。这说明,在普通进程运行过程中,counter 值的减小给了其他进程得以运行的机会,这就相当于优先级在动态的变化,所以我们称之为动态优先级调度。3.问题的提出 在网络服务环境下,时间片轮转任务调度算法比较适合基于 Internet 的服

7、务进程,鉴于 Internet服务进程的特点,每个普通的服务进程对时间的要求不高,并且它们之间没有优先级的高低之分,故适合采用时间片轮转调度算法,对每个进程分配一定的时间片,并以此作为任务调度的依据,各个进程轮流得到调度。然而在实时系统(RTOS)中,对每个任务分配不同的优先权是实现实时调度的基本条件,如果一个实时的嵌入式操作系统既要处理某些实时的任务,又要提供一定的 Internet 服务,对于实时任务,需要按照优先级不同顺序完成,对于非实时的服务进程,则希望他们轮流执行。因此,指定相应的调度策略就显得比较重要。以上提出的实时系统(RTOS)中任务调度算法与 Internet 服务进程特点之

8、间的不适应性,是本文研究的主要问题。以下将对 UC/OS 操作系统内核做出一定的修改以使其更适合基于 Internet 服务的应用。4.UC/OS-II内核任务调度的改进 UC/OS-II 操作系统中,主要有以下几个进程调度时机3:?进程状态转换时刻,进程终止、睡眠时;?可运行队列中增加一个进程时;?内核处理完中断后,由中断返回时。前两种情况下,系统通过函数 OSSched()实现进程调度,而在中断返回时,系统通过调用函数OSIntExit()实现进程调度。而这两个函数在选择当前优先权最高的进程中采用了非常相似的方式。根据以上特点,并结合 Linux 内核中时间片轮转调度算法,对 UC/OS-

9、II 内核做了改进,改进方法如下:(1)取出 8 个(1 组)优先级为 Internet 服务进程专用,设立时间片;(2)TCB控制块中增加一项 counter 作为任务调度的权值;(3)修改 OSSched 函数和 OSIntExit 函数中取得当前最高优先级的算法;(4)时钟中断处理函数中,将当前运行任务的counter 减 1(如果该任务属于 Internet 服务进程专用的任务)。首先判断当前就绪队列中优先级最高的进程,如果不属于 Internet 专用进程,则直接将其取出运行,执行运行环境切换。如果属于 Internet 专用的 8个进程之一,则顺序遍历所有就绪的 Internet

10、专用进程,计算时间片 counter 的值,取出时间片量最大的进程运行,遇到时间片大小相同的进程,则取出优先级大的进程运行。如果在遍历中发现所有的Internet专用任务的时间片都已经归0,则仿照Linux的方法,再将他们赋予一定的初值,并取出优先级最大的投入 CPU 运行。相比原来的调度程序,这里多添加了几个临时变量进行辅助计算,而代码的增加量比较小。4.1 OSSched()与 OSIntExit()函数的修改 在这里,将 OSRdyTbl 中第 4 组(定义OS_PRIO_INTERNET 为3)的8个进程设为Internet进程专用的进程,在这 8 个进程之间,采用局部时间片轮转的任务

11、调度算法,如果就绪队列中有优先级比这 8 个进程高的任务,则无条件让出 CPU 控制权,如果当前就绪队列中优先级最高的进程在第4 组中,则逐次判断 8 个任务中就绪任务的时间片,将时间片最大的任务取出放到 CPU 上运行。在程序实现中结合了 Linux 的任务调度算法,其中OSSched()与 OSIntExit()函数的代码实现如下:/*OSRdyTbl3的 8 个进程为 Internet 专用*/#define OS_PRIO_INTERNET 3#define SO_COUNTER 20 UC/OS-II 操作系统内核的改进 54 Void OSSched(void)INT8U X,Y,

12、Z;INT8U C;OS_ENTER_CRITICAL();If(OSLockNesting|OSIntNesting)=0)Y=OSUnMapTblOSRdyGrp;X=OSUnMapTblOSRdyTbly;If(Y!=OS_PRIO_INTERNET)OSPrioHighRdy=(INT8U)(Y3)+X);Else C=0;Z=OSRdyTblY;While(Z)If(OSTCBPrioTbl(INT8U)(Y3)+Z?counter?C)C=OSTCBPrioTbl(INT8U)(Y3)+Z)?counter;OSPrioHighRdy=(INT8U)(Y3)+Z);Z-=OSUnM

13、apTblZ;/*如果可运行 Interner 进程的时间片用完了,则给他们的 counter 重新赋值*/If(C=0)Z=OSRdyTblY;While(Z)OSTCBPrioTbl(Y3)+Z)?counter=OS_COUNTER;Z-=OSUnMapTblZ;OSPrioHighRdy=(INT8U)(Y3)+X);If(OSPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OS_TASK_SW();OS_EXIT_CRITICAL();/*OSRdyTbl3的 8 个进程为 Inter

14、net 专用*/#define OS_PRIO_INTERNET 3#define SO_COUNTER 20 Void OSIntExit(void)INT8U X,Y,Z;INT8U C;OS_ENTER_CRITICAL();If(-OSLockNesting|OSIntNesting)=0)OSIntExitY=OSUnMapTblOSRdyGrp;Y=OSUnMapTblOSRdyGrp;X=OSUnMapTblOSRdyTblY;If(Y!=OS_PRIO_INTERNET)OSPrioHighRdy=(INT8U)(OSIntExitY3)+X);Else C=0;Z=OSRdy

15、TblY;While(Z)If(OSTCBPrioTbl(INT8U)(OSIntExitYC)C=OSTCBPrioTbl(INT8U)(Y3)+Z)?counter;OSPrioHighRdy=(INT8U)(Y3)+Z);Z-=OSUnMapTblZ;/*如果可运行 Internet 进程的时间片都用完了,则给他们的 counter 重新赋值*/If(C=0)Z=OSRdyTblY;While(Z)OSTCBPrioTbl(Y3)+Z)?counter=OS_COUNTER;Z-=OSUnMapTblZ;OSPrioHighRdy=(INT8U)(OSIntExitY3)+X);If(O

16、SPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OSIntCtxSW();OS_EXIT_CRITICAL();4.2 OSTickISR()与 OSTimeTick()函数的修改 在 TCB控制块中增加一项counter 作为任务调度的权值以后,需要修改操作系统内核的时钟中断服务函数,如果当前运行的任务属于 Internet 服务UC/OS-II 操作系统内核的改进 55 进程专用任务,即采用局部时间片轮转的任务调度算法,则在时钟中断处理函数中,将当前运行任务的 counter 减 1。在时

17、钟中断返回的时候,再调用OSIntExit()对任务进行重新调度。其中修改后的时钟节拍中断服务程序示意代码如下所示:/*时钟节拍中断服务子程序示意代码*/Void OSTickISR(void)保存处理器寄存器的值;调用 OSIntEnter()或者是将 OSIntNesting加 1;调用 OSTimeTick();调用 OSIntExit();恢复处理器寄存器的值;执行中断返回指令;/*时钟节拍函数的一个节拍服务*/Void OSTimeTick(void)/*将当前正在执行的任务的计数器 counter 减 1*/OSTCBPrioTblOSPrioCur?counter-;5.结束语

18、本文在分析UC/OS-II与Linux任务调度内核的基础上,针对 UC/OS-II 任务调度内核在 Internet 服务上的不适应性,提出了一种改进方法。该方法涉及任务控制块、任务调度函数的修改,充分考虑了Internet 服务在时间上要求不苛刻,在优先级上不进行区分的特点,并结合了 Linux 任务调度算法。同时,文中还给出了 OSSched()与 OSIntExit()函数的具体改进代码,以及 OSTickISR()与 OSTimeTick()函数的示意代码,以便更清楚地阐明设计思路。参考文献:1 Jean J.Labrosse编著,绍贝贝译,UC/OS-II 源码开放的实时嵌入式系统,

19、北京:中国电力出版社,2003:pp.10-300.2 陈莉君编著,Linux 操作系统内核分析,北京:人民邮电出版社,2000 年 3 月.3 绍贝贝,嵌入式实时操作系统 UC/OS-II 的应用与发展,2003:pp.1-2.An Improvement of the UC/OS-II Operating System Kernel Houfa Cheng1,Chunjin Yang2 (1,2 School of Information Engineering,Wuhan University of Technology,Wuhan 430063,China)Abstract:UC/OS

20、-II is a kind of operating system,designed for embedded real-time multi-task operating systems.The algorithm of task scheduling is a preemptive task scheduling algorithm based on PRI,with high efficiency but duller.In the precession of realizing TCP/IP protocol,this algorithm of task scheduling does

21、 not suit for the Internet service processes.This paper analyzes the task scheduling algorithm of UC/OS-II and Linux operating system kernel,and based on it proposes an improved method of the UC/OS-II system kernel to make it more suitable for realizing embedded Internet service.Key words:UC/OS-II;Task Scheduling;RTOS;TCP/IP;Real-Time Kernel (责任编辑:Sabrina,Julia,Francis)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com