首页 UCOS-II_操作系统内核的改进

UCOS-II_操作系统内核的改进

举报
开通vip

UCOS-II_操作系统内核的改进 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...

UCOS-II_操作系统内核的改进
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 是一种针对嵌入式 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的实时多任务操作系统,采用基于优先级的占先式任务调度 算法,虽然效率高但比较单调。在实现 TCP/IP 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 中,这种内核调度方法对 Internet服务进程显得不适应。 本文 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 了 UC/OS-II 和 Linux操作系统内核任务调度算法,在此基础上提出了一种改进 UC/OS-II 内核的 方法,使其更适合于在嵌入式中实现 Internet服务。 关键词:UC/OS-II;任务调度;RTOS;TCP/IP;实时内核* 1 成后发(1981-),男,硕士研究生;研究方向:3S技术应用研究。 2 杨春金(1953-),男,副教授;研究方向:3S技术应用研究。 1. 引 言 UC/OS-II 是源码开放的实时嵌入式操作系统, 其主要特点如下:源码开放,系统透明化,容易将 操作系统移植到其他平台。① 可移植性,源码大 多数由 ANSI C编写,底层与硬件相关由汇编编写, 便于其移植到其它硬件平台。② 可固化,只要开 发者有固化手段,就能嵌入到操作系统上。③ 可 剪裁,用户可以自定制所需要的系统服务。④ 占 先式,UC/OS-II 采用的是占先式实时内核,意味着 UC/OS-II 总是运行就绪条件下优先级最高的任务, 这种模式使得系统任务及响应时间得以优化。最高 优先级任务一旦就绪,总能得到 CPU 控制权。如 果是一个中断得到一个优先级高的任务就绪,那么 在中断程序完成时,优先级高的任务得以运行。⑤ 多任务,UC/OS-II 可以运行 64 个任务,8 个系统 任务和 56 个应用程序任务。UC/OS-II 不支持时间 片轮转调度法,所以每个任务的优先级必须不同。 多任务结构使应用程序模块化,CPU利用率得到最 大的发挥。⑥ 服务时间可确定,所有 UC/OS-II 服 务的时间是确定的,UC/OS-II 的运行时间不依赖于 应用任务的多少。⑦ 任务堆栈,每个任务都有属 于自己的不同栈空间,使用 UC/OS-II 的栈空间检 验函数,可以确定每个任务所需要的栈空间大小[1]。 2. Linux内核任务调度算法分析 在 Linux操作系统中,内核调度时机主要有以 下几种[2]: l 进程状态转换时刻,进程中止、进程睡眠 时; l 可运行队列中增加一个进程时; l 当前进程的时间片用完时(Current -> Counter=0); l 进程从系统调用返回到用户状态时; l 内核处理完中断后,进程返回到用户状态 时。 在 Linux 的每个进程控制块中有以下几项: policy、priority、counter、rt_priority 作为调度程序 选择进程的依据。其中 policy是进程的调度策略, 用来区分两种进程——实时和普通;priority是进程 (实时和普通)的优先级;counter 是进程剩余的时 间片,它的大小完全由 priority决定;rt_priority是 实时优先级,这是实时进程所特有的,用于实时进 程的选择。 首先,Linux 根据 policy 从整体上区分实时进 程和普通进程,因为实时进程和普通进程的调度是 不同的,实时进程应该先于普通进程运行,然后, 对于同一类型的不同进程,采用不同的标准来进行 UC/OS-II操作系统内核的改进 53 选择进程。对于普通进程,Linux 采用动态优先调 度,选择依据就是进程 counter 的数字大小。进程 创建时,优先级 priority 被赋予一个初值,这个数 字同时也是计数器 counter 的初值,即进程创建时 二者相等。在进程运行中,counter 不断减小,而 priority保持不变,以便在 counter 变成“0”时(该 进程时间片已经用完)对 counter 进行重新赋值, 这个普通进程才有了被再次调度的机会。这说明, 在普通进程运行过程中,counter 值的减小给了其他 进程得以运行的机会,这就相当于优先级在动态的 变化,所以我们称之为动态优先级调度。 3. 问题的提出 在网络服务环境下,时间片轮转任务调度算法 比较适合基于 Internet 的服务进程,鉴于 Internet 服务进程的特点,每个普通的服务进程对时间的要 求不高,并且它们之间没有优先级的高低之分,故 适合采用时间片轮转调度算法,对每个进程分配一 定的时间片,并以此作为任务调度的依据,各个进 程轮流得到调度。然而在实时系统(RTOS)中, 对每个任务分配不同的优先权是实现实时调度的 基本条件,如果一个实时的嵌入式操作系统既要处 理某些实时的任务,又要提供一定的 Internet 服务, 对于实时任务,需要按照优先级不同顺序完成,对 于非实时的服务进程,则希望他们轮流执行。因此, 指定相应的调度策略就显得比较重要。 以上提出的实时系统(RTOS)中任务调度算 法与 Internet 服务进程特点之间的不适应性,是本 文研究的主要问题。以下将对 UC/OS 操作系统内 核做出一定的修改以使其更适合基于 Internet 服务 的应用。 4. UC/OS-II内核任务调度的改进 UC/OS-II 操作系统中,主要有以下几个进程调 度时机[3]: l 进程状态转换时刻,进程终止、睡眠时; l 可运行队列中增加一个进程时; l 内核处理完中断后,由中断返回时。 前两种情况下,系统通过函数 OSSched( )实现 进程调度,而在中断返回时,系统通过调用函数 OSIntExit( )实现进程调度。而这两个函数在选择当 前优先权最高的进程中采用了非常相似的方式。 根据以上特点,并结合 Linux内核中时间片轮 转调度算法,对 UC/OS-II 内核做了改进,改进方 法如下: (1) 取出 8个(1组)优先级为 Internet 服务进 程专用,设立时间片; (2) TCB控制块中增加一项 counter作为任务调 度的权值; (3) 修改 OSSched 函数和 OSIntExit 函数中取 得当前最高优先级的算法; (4) 时钟中断处理函数中,将当前运行任务的 counter 减 1(如果该任务属于 Internet 服务进程专 用的任务)。 首先判断当前就绪队列中优先级最高的进程, 如果不属于 Internet 专用进程,则直接将其取出运 行,执行运行环境切换。如果属于 Internet专用的 8 个进程之一,则顺序遍历所有就绪的 Internet 专用 进程,计算时间片 counter 的值,取出时间片量最 大的进程运行,遇到时间片大小相同的进程,则取 出优先级大的进程运行。如果在遍历中发现所有的 Internet专用任务的时间片都已经归0,则仿照Linux 的方法,再将他们赋予一定的初值,并取出优先级 最大的投入 CPU 运行。相比原来的调度程序,这 里多添加了几个临时变量进行辅助计算,而代码的 增加量比较小。 4.1 OSSched( )与 OSIntExit( )函数的修改 在这里,将 OSRdyTbl[ ]中第 4 组(定义 OS_PRIO_INTERNET为3)的8个进程设为 Internet 进程专用的进程,在这 8个进程之间,采用局部时 间片轮转的任务调度算法,如果就绪队列中有优先 级比这 8 个进程高的任务,则无条件让出 CPU控 制权,如果当前就绪队列中优先级最高的进程在第 4组中,则逐次判断 8个任务中就绪任务的时间片, 将时间片最大的任务取出放到 CPU 上运行。在程 序实现中结合了 Linux 的任务调度算法,其中 OSSched( )与 OSIntExit( )函数的代码实现如下: /* OSRdyTbl[3]的 8个进程为 Internet 专用*/ #define OS_PRIO_INTERNET 3 #define SO_COUNTER 20 UC/OS-II操作系统内核的改进 54 Void OSSched (void) { INT8U X,Y,Z; INT8U C; OS_ENTER_CRITICAL(); If ((OSLockNesting | OSIntNesting) ==0) { Y = OSUnMapTbl[OSRdyGrp]; X = OSUnMapTbl[OSRdyTbl[y]]; If (Y != OS_PRIO_INTERNET ) OSPrioHighRdy = (INT8U) ((Y<<3) + X); Else { C = 0; Z = OSRdyTbl[Y]; While (Z) { If (OSTCBPrioTbl[(INT8U) (Y<<3) + Z] àcounteràC) C = OSTCBPrioTbl [(INT8U) ((Y<<3) + Z)] àcounter; OSPrioHighRdy = (INT8U) ((Y<<3) + Z); Z -= OSUnMapTbl[Z]; } } /*如果可运行 Interner 进程的时间片用完了,则给他们 的 counter重新赋值*/ If (C == 0){ Z = OSRdyTbl[Y]; While (Z) { OSTCBPrioTbl[((Y<<3) + Z)] àcounter = OS_COUNTER; Z -= OSUnMapTbl[Z]; } OSPrioHighRdy = (INT8U) ((Y<<3) + X); } If (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; OSCtxSwCtr++; OS_TASK_SW(); } } OS_EXIT_CRITICAL(); } /*OSRdyTbl[3]的 8个进程为 Internet 专用*/ #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 = OSUnMapTbl[OSRdyGrp]; Y = OSUnMapTbl[OSRdyGrp]; X = OSUnMapTbl[OSRdyTbl[Y]]; If (Y != OS_PRIO_INTERNET ) OSPrioHighRdy = (INT8U) ((OSIntExitY<<3) + X); Else { C = 0; Z = OSRdyTbl[Y]; While(Z){ If (OSTCBPrioTbl[(INT8U)((OSIntExitY<<3) + Z)]àcounter >C) C = OSTCBPrioTbl[(INT8U) ((Y<<3) + Z )]àcounter; OSPrioHighRdy = (INT8U) ((Y<<3) + Z); Z -= OSUnMapTbl[Z]; } } /*如果可运行 Internet 进程的时间片都用完了,则给他 们的 counter重新赋值*/ If (C == 0){ Z = OSRdyTbl[Y]; While (Z) { OSTCBPrioTbl[((Y<<3) + Z )]àcounter = OS_COUNTER; Z -= OSUnMapTbl[Z]; } OSPrioHighRdy = (INT8U) ((OSIntExitY<<3) +X ); } If (OSPrioHighRdy != OSPrioCur){ OSTCBHighRdy=OSTCBPrioTbl[OSPrioHighRdy]; OSCtxSwCtr++; OSIntCtxSW(); } } OS_EXIT_CRITICAL(); } 4.2 OSTickISR( )与 OSTimeTick( )函数的修 改 在 TCB控制块中增加一项 counter作为任务调 度的权值以后,需要修改操作系统内核的时钟中断 服务函数,如果当前运行的任务属于 Internet 服务 UC/OS-II操作系统内核的改进 55 进程专用任务,即采用局部时间片轮转的任务调度 算法,则在时钟中断处理函数中,将当前运行任务 的 counter 减 1。在时钟中断返回的时候,再调用 OSIntExit( )对任务进行重新调度。其中修改后的时 钟节拍中断服务程序示意代码如下所示: /* 时钟节拍中断服务子程序示意代码 */ Void OSTickISR(void) { 保存处理器寄存器的值; 调用 OSIntEnter()或者是将 OSIntNesting加 1; 调用 OSTimeTick(); 调用 OSIntExit(); 恢复处理器寄存器的值; 执行中断返回指令; } /*时钟节拍函数的一个节拍服务*/ Void OSTimeTick(void) { ⋯⋯ /*将当前正在执行的任务的计数器 counter减 1*/ OSTCBPrioTbl[OSPrioCur]àcounter --; ⋯⋯ } 5. 结束语 本文在分析UC/OS-II与Linux任务调度内核的 基础上,针对 UC/OS-II 任务调度内核在 Internet 服 务上的不适应性,提出了一种改进方法。该方法涉 及任务控制块、任务调度函数的修改,充分考虑了 Internet服务在时间上要求不苛刻,在优先级上不进 行区分的特点,并结合了 Linux任务调度算法。同 时,文中还给出了 OSSched( )与 OSIntExit( )函数的 具体改进代码,以及 OSTickISR( )与 OSTimeTick( ) 函数的示意代码,以便更清楚地阐明设计思路。 参考文献: [1] Jean J. Labrosse编著, 绍贝贝译, 《UC/OS-II源码开放 的实时嵌入式系统》, 北京: 中国电力出版社, 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-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 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)
本文档为【UCOS-II_操作系统内核的改进】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_634198
暂无简介~
格式:pdf
大小:38KB
软件:PDF阅读器
页数:4
分类:互联网
上传时间:2010-10-28
浏览量:47