UCOS-II 操作系统内核的改进.pdf
《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 个进程之间,采用局部时间片轮转的任务
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UCOS-II 操作系统内核的改进 UCOS II 操作系统 内核 改进
限制150内