admin 管理员组文章数量: 887021
2024年1月14日发(作者:合理的目标要遵循smart原则)
第22卷 第5期 V()1.22 NO.5 电子设计工程 Electronic Design Engineering 2014年3月 Mat.2014 Linux实时性能优化算法分析与研究 李梅 (西安欧亚学院陕西西安710065) 摘要:Linux以其内核精悍、功能强大、源代码公开、支持多种硬件平台以及支持丰富的开发工具等特点广泛应用 在嵌入式系统领域。作为嵌入式产品的操作系统平台,实时性是一个很重要的目标。基于这个目标提出了一种提高 Linux2.6实时性的o(1)算法,该算法设置了新的数据结构及进程调度过程,通过分析Linux 2.6的0(1)算法的时 间复杂度,可以得知运用该算法可以极大提高系统的实时性能。 关键词:嵌入式;实时操作系统;o(1);进程调度 中图分类号:TP316.2 文献标识码:A 文章编号:1674—6236(2014)05—0056-03 Analysis and research on algorithm for real-time performance optimization of Linux LI Mei (Xi'an Eurasia University,Yi'an 710065,China) Abstract:Linux with the kernel small,powerful,open source code,support multiple hardware platforms and support a rich development tools are widely used in the embedded system field.As an embedded operating system platform,real- time performance is an important goa1.Based on this target presents a method to improve the Linux2.6 real-time O(1) algorithm,the algorithm of data structure and process scheduling process,through the analysis of Linux 2.6 O(1)time complexity of the algorithm,that using this algorithm can greatly improve the real—time performance of the system. Key words:the embedded system;real-time operating system;0(1);process scheduling Linux是一源代码公开、功能强大、内核模块化,裁剪方便。 Linux支持多种体系结构,适合在嵌入式领域应用。作为嵌入 式产品的操作系统平台,实时性是一个很重要的目标。但随 着Linux逐渐应用到嵌入式领域,其实时性不够强而一直受 到批评。文中提出了一种提高Linux2.6实时性能的o(1)算法。 间进行处理。实时操作系统性能优劣可以从调度策略、内存 管理、任务切换时间和中断禁止时间等多方面衡量[4-51o 2 Linux用于实时性操作系统的缺点 1)Linux中有大量不可抢占的区域 1实时系统基本概念 实时操作系统(RealTime Operation System,RTOS)是指 能够接受外部数据发生并以足够快的速度进行处理,其处理 的结果又能在规定的时间之内来控制生产过程或对处理系统 在Linux2.6中,内核己经可以抢占,因而实时性得到 了加强”但是内核中仍有大量的不可抢占区域,如由自旋锁 (SPinlock)保护的临界区。 21时钟粒度粗糙 Linux2.6内核虽然把时钟频率提高到1 000赫兹,定时精 度达到了1 ms,但远不能满足实时系统要求的微秒级定时精 做出快速响应,并控制所有时间协调运行的操作系统…。在 实时操作系统中,进程的执行结果的正确与否不仅与逻辑运 算或数学计算结果的正确性相关,还与进程运行结束得出结 果的时间有关,也就是说,如果一个进程的运算结果是正确 的,但是由于它完成时间已经超出了系统给定的最后期限, 在实时系统中,这个结果就是毫无意义的。所以RTOS的核 度,如数控系统要求50 s的定时精度。 31关闭中断 系统调用和中断服务程序中,为了保护临界区资源,Linux 会长时间关闭中断”有些系统调用和中断服务程序的时间还 很长,这样会加大中断延迟时间。 心是必须在规定的时间内完成系统的指定操作,否则将引起 系统性能急剧下降甚至系统崩溃口】。实时操作系统有“软实时” 和“硬实时”之分 】。软实时需要系统尽可能快地完成操作, 4)缺乏有效的实时任务调度机制和调度算法 Linux系统是按照分时系统的目标设计的,以达到系统较 好的平均性能,强调平衡各进程之间的响应时间来保证公平 的CPU时间占用。通常采用固定时间片的分时调度算法,内 核不能抢占,而实时系统的行为更多的取决于复杂的不可预 系统整体吞吐量达或者响应时间快,但特殊的任务在规定时 间内不一定完成;硬实时则要求系统务必在规定时间内对时 收稿日期:2013—06—28 稿件编号:201306201 知的情况。这些原则不能满足实时系统短的响应时间和确定 作者简介:李梅(1975—),女,陕西西安人,硕士,讲师。研究方向:计算机应用。 .56.
李梅Linux实时性能优化算法分析与研究 的执行行为的要求。 5)优先级反转的问题 当一个低优先级的进程占用了某种资源,导致同样需要 这个资源的高级进程无法运行,并且此时有一个优先级在他 们之间的就绪进程获得了CPU的控制权,这样就使得高级别 的任务需要等待比他优先级别低的任务,这种现象就叫做优 先级反转。在Linux中,由于资源是不可抢占的,并且不支 持优先级继承等策略,所以优先级反转现象可能会发生,这 影响了系统的实时性能。 3 Linux 2.60(1)调度算法的设计 在Linux2,6开始以后,其进程调度程序被重新改写,以 适应嵌入式领域的发展。2.6版本的Linux内核使用了新的调 度器算法,称为0(1)算法,它在高负载的情况下执行得相当 出色,并且当有很多处理器时也可以很好地扩展。O(n)表示 算法时间复杂度,括号里的数字代表最坏情况下算法效率的 上限取决于算法涉及到的元素的个数,o(1)说明是一个常数, 在这种情况下,每次调度的效率是一样的,与涉及的元素 的多少没有关系,O(n)表示算法效率取决于算法涉及元素的 个数。 3.1 Linux2.6新的数据结构 Linux 2.4内核中,就绪进程队列是一个全局的双向链表, 整个队列由一个读/写自旋锁保护着,调度器对它的所有操 作都会因全局自旋锁而导致系统各个处理机之间相互等待, 使得就绪队列成为一个明显的瓶颈。而在Linux 2.6中,就 绪队列被定义为一个复杂得多的数据结构runqueue,并且每 个CPU都将维护一个自己的就绪队列,这将大大减小竞争。 Linux2.6的0(1)算法就是以这个数据结构为基础进行调度 的[6-71。 Linux2.6为每个CPU定义了一个runqueue.。下面给出 runqueue中关键的部分 typedef struct f unsigned long nr_running; task_t current. idle; priorarray active, expired,array[2]; / other members… / }runQueue; 此结构中最关键的是active和expired指针变量。其中 active指针指向时间片没用完、当前可被调度的就绪进程, 即活跃进程的优先级数组,而expired指向时间片已用完的就 绪进程,即过期进程的优先级数组。当一个进程时间片用完 并且没有被立刻激活时,只需重新计算时间片,并且将它移 入expired指向的优先级数组即可。在active指向的数组为空 时,只要将两个指针交换,由于expired指向的数组中的时间 片都已计算好,只要放到active的位置立刻可以执行,此时 的active指向的数组则恰好充当新的expired数组。 active和expired两者结构相同,均是prio—array类型, prio—array其定义如下: typedef struct { int nractive; unsigned long bitmap【BITMAP—SIZE]; struct list——head queue[MAX——PRIOR]; }priorarray; 其中,nr_active表示当前中active中的进程数量;queue 是一个list_head类型的数组;数组的每个元素都指向具有 某一类优先级的进程。因为在每个进程控制块中,都有一个 run—list属性,它是list—head类型数组,queue中的元素与具 有某一类优先级的进程,以及具有同一类优先级的进程,都 是通过run_list属性链接起来的,比如说:queue[138】表示优 先级为139的哪一类进程,这类进程通过各自进程控制中的 runl—ist属性链接在一起。当某个进程进入任务队列时,通过 一个名为list~add—tail的函数,将此进程挂到queue[R]所指向 的队列中。当要得到某个具体进程的进程控制块时,先是通 过queue[R]找到具有这类优先级的进程链表,然后得到某个 具体进程的run_list属性,再由函数list—entry通过run—list返 回整个进程控制块的结构。Bitmap是位图数组,该数组中的 每个元素都表示优先级在某一范围内的进程。如:bitmap[0] 对应的是优先级范围为0 ̄31的那些进程,bitmap[1】对应的 是优先级范围在32~63的那些进程,以此类推。正是因为在 位图数组与就绪任务队列建立了一种映射关系,才使得Linux 在高负载情况下,其进程调度的效率也是非常高的。 3.2 Linux2.6 o(1)调度程序的构成 整个调度程序的实现由两部分组成:将进程加人到就绪 队列和检索优先级最高的进程。 11将进程加入到就绪队列 ①用enqueue_task()将新进程加入到queue[n]所指向 的链表中,其中n表示某类优先级。 ②调用函数一set—bit计算出该进程的优先级值,并将该 进程优先级值与该进程所对应的bitmap中的值相加。 2)检索优先级最高的进程 ①获取当前处理器运行的任务队列 runqueue rq; rq=thisrq0; array=rq一>active; ②调用函数sched find first_bit0对任务队列中的进程进 行检索。并返回具有最高优先级的那个进程在renqueue中的 位置。idx:sched—find first_bit(array一>bitmap); schedfind—first—bit()函数定义如下: static inline int sched—find—first—bit(const unsigned long arr) { if(unlikely(array[0])) return—fs(array[O]); if(unlikely(array[1])) .57.
《电子设计工程》2014年第5期 returnffs(array[1[+32); 最高优先级检索算法是整个Linux2.6进程调度算法的重 要组成部分,它的时间复杂度为0(1),这为整个Linux2.6 进程调度算法的时间复杂度为O(1)做出了很大贡献,从而提 高了Linux2.6作为内核的嵌入式操作系统的实时响应能力。 参考文献: …1龙飞.嵌入式Linux系统内核实时性研究[D].沈阳:沈阳工 if(unlikely(arr[2])) returnffs(array[2]+64); if(unlike1y(array[3])) returnreturn—ffs(array[3]+96); ffs(array[4]+128); } 业大学,2012. 【2】Williams C.Linux Scheduler Lateney[C]//RedHatIne,March 2002. 其中参数amy为位图数组,array[O】表示优先级为0-31 的那类进程。函数一ffs()作用是根据数组array中各元素值找 出优先级最高的进程。 ・ [3]代玲莉.Linux内核分析与实例应用【M】.北京:国防工业出 版社.2002. ③调用函数list—entry得到最高优先级进程的进程控制块。 queue:array一>queue+idx; next=listentry(queue->next,task—t,run—list); [4]毛佳.实时系统调度算法的优化设计们.计算机工程与应用, 2003.39(15):112—1l5. MAO Jia.Optimization design of real-time scheduling algorithm[J]. Computer Engineering and Applications,2003,39(15):1 12—1 15. ④将此进程的next交给处理器执行 4结束语 在2-4版的内核里,查找优先级最高的就绪进程的过程 是在调度器schedule()中进行的,每一次调度都要进行一次, 这种查找过程与当前就绪进程的个数相关,因此,查找所耗 [5】刘磊,Linux内核进程调度算法的分析、研究与改进【D1.黑 龙江:黑龙江大学,2011. [6】张永选,姚远耀.Linux2.6内核o(1)调度算法剖析[J1.韶关 学院学报:自然科学版,2009,30(6):5—9. ZHANG Yong—xuan,YAO Yuan-yao.Linux2.6 The kernel 0(1) scheduling algorithm[J].Journal of Shaognan University:Natural 费的时间是O(n)级的,可见调度动作的执行时间和当前系统 负载相关,这与嵌入式系统实时性的要求相违背。 Science,2009,30(6):5-9. 为了加速搜索就绪进程链表中优先级最高的进程,2.6版 本用一个位图数组来对应每一个优先级链表,如果该优先级 链表非空,则对应位为1,否则为0。而且还构造了sched— ind_fifrstbit()函数来执行这一搜索操作,快速定位第一个非 _[7】张同光.Linux2.6内核分析一对进程调度机制的分析[J].长 春工业大学学报:自然科学版,2006,27(4):333—337. ZHANH Tong-guang.Linux2.6 Kernel analysis—Analysis of the process of scheduling mechanism[J].Journal of Changehun University 空的就绪进程链表。将检索优先级最高的进程过程分解为 步,每一步所耗费的时间都是0(11量级的。 of Technology:Natural Science,2006,27(4):333—337. (上接第55页) development of online resources of state nenchmark eourses:a 【j】.中国电化教育,2006(10):31—35. PENG Wen-hui,YANG Yu-kai,HUANG Ke—bin.Analysis and content abaktsis【J].Distance Education in China,2008(12):52-57. 【4]罗双兰,李文华.国家精品课程与麻省理工学院开放课程的 比较与思考【J1.现代远程教育研究,2006,80(2):41—44. LUO Shuang-lan,LI Wen-hua.Comparisons and consideration model research of online learning behavior[J].China Educational Technology,2006(1 o):31-35. [7】柳礼泉.论精品课程的特征叽.高等教育研究,2oo92o(3): 82-86. on china’s advanced courses and massachusetts institute of technology open courses[J].Modem Distance Education Research, 2006,80(2):41-44. LIU Li-quan.On the character of quality curriculum[J].Journal of Higher Education,2009,30(3):82-86. 【5]李珊,陈潮填.思维树模型及系统思维的培养【刀.价值工程, 201 1(31):245-247. LI Shan,CHEN Chao—tian.Models of thinking tree and fostering of [8】谢幼如,张伟,姜淑杰.面向远程教育的精品课程特征分析 【JJ.中国电化教育,2008(10):60—63. XIE You-m,ZHANG Wei,JIANG Shu-jie.Characteristic analysis of elaborate courses for distance leanirng[J].China Educational Technology,2008(10):60—63. systematic thinking[J].Value Engineering,201 1(31):245-247. 【6]彭文辉,杨宇凯,黄克斌.网络学习行为分析及其模型研究 .58一
版权声明:本文标题:Linux实时性能优化算法分析与研究 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705191834h476303.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论