首页 > 范文大全 > 正文

嵌入式linux的实时分析与改进

开篇:润墨网以专业的文秘视角,为您筛选了一篇嵌入式linux的实时分析与改进范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要 嵌入式linux在工业控制领应用越来越广泛。但是,在针对一些有较强实时性要求的特定工业应用中,仍然暴露出了技术缺陷。本文针对目前Linux实时系统调度算法中仅用进程的价值来确定优先级的思路,提出了综合考虑进程的价值和紧迫度来决定优先级的调度算法。

关键词 嵌入式;Linux实时性;调度;算法;优先级

中图分类号 TB文献标识码 A 文章编号 1674-6708(2010)17-0096-02

0 引言

嵌入式Linux系统是标准Linux在嵌入式领域的延伸,其特点和功能与标准Linux几乎完全相同。Linux系统的稳定性和健壮性已经在真实世界中得到了证明,在工业控制领域也有许多非常成功的应用。但是由于Linux不是真正的实时操作系统,成为工业控制应用中的瓶颈。

1 标准Linux内核制约实时性的因素

1.1 内核不可抢占

Linux 2.6内核并不是真正的RTOS,仅是在内核代码中插入抢占点,从而实现一定程度上的抢占,但是并不是所有的内核代码段都可以通过插入抢占点来实现抢占。

1.2 自旋锁(spinlock)

自旋锁是在可抢占内核和SMP情况下对共享资源的一种同步机制。在Linux 2.6内核中,自旋锁的使用非常普遍。因此造成了抢占延迟,这对实时性要求高的工业控制来说是致命的。

1.3 系统调度算法

在Linux 2.6内核中引入的O(1)调度算法,该算法很好地解决了Linux 2.4以前的版本中SMP性能瓶颈问题。但是该算法主要着眼点在进程的价值,而没有考虑进程的紧迫性。从而导致部分价值相当,而紧迫性高的进程过早的夭折。

2 嵌入式linux的实时进程调度算法改进

2.1 实时调度算法及缺陷

目前,常用的实时性调度算法主要可以分为3大类:基于优先级的调度算法(priority-drivenscheduling,PD)基于时间驱动的调度算法(time-drivenscheduling,TD);基于比例共享的调度算法(share-drivensched2uling,SD)。每一种调度策略都有自己的优越性和不足。基于优先级的调度算法、基于时间驱动的调度算法则侧重于硬件的硬实任务,基于比例共享的调度算法更为适合于软实时任务。

以上3种调度算法在选择最值得运行的进程时,主要依据该进程的价值(priority,由用户决定)决定,而不考虑进程的紧迫度(urgency,由任务的当前截止期限动态决定),这不符合实时性系统设计规范。下面我们通过一个例子,来具体分析一下linux2.6内核调度算法的缺陷。例如:有A、B两个进程,如何确定这两个进程的优先级呢?

满足下列条件之一,A进程的优先级高于的B优先级。

1)A进程的价值大于B进程的价值;

2) A和B进程的价值相同时, 且A进程的紧迫程度高于B进程,A进程的优先级高于B进程。

问题就出来了,如果A和B进程价值相差不大,但是B进程的紧迫程度远大于A进程时,如果还是依照上述调度算法来决定进程的优先级的话,那么对于B进程来说就不公平,甚至可能导致进程过早的夭折。这种调度方式与实时系统的要求是相违背的。

3.2 实时调度算法的改进

通过上述对实时进程调度算法的分析,我们可以清楚的得出:判断一个进程是否是最值得运行,仅仅考虑进程的价值(priority),将不利于系统的实时性改进;而综合考虑进程的价值(priority)和截止(urgencycy)两个值,不仅可以提高系统实时性,而且还可以防止进程在价值相当,但由于紧迫程度过高导致夭折。改进方法如下:

在调度算法在考虑进程的价值为基础,再关注了成进程的紧迫度(即:即:进程的优先级数(Vi)=该进程重要程度(Wi)+其紧迫度(pi/(d-Ti))*系数k)。对于优先级相同的进程,采用FIFO调度策略。同时对于一些价值相差不多,而紧迫度相差较大的进程来说,也同样可以判断出进程优先级高,提高了系统的实时性。例如图1所示。

改进后的调度算法可以用双链表来描述,初始值两个指针指向 “NULL”。执行时一指针指向新到比当前运行进程优先级低的进程。如果CPU选择当前队列中第二个节点的进程来判断,如果进程在规定时间内不能完成,将其放入另一个指针指向的队列中,再选择链表的第3个节点判断,如果在规定时间内能够运行完成则执行它,情况如图2所示。

2.3 试验结果及分析

下面通过2个实验(实验环境:基于Inter (R) Core ( TM) 2 Duo CPU T5670 1. 8GHz,Memory 1G硬件平台,采用Linux 2.16.111 操作系统)来比较调度算法改进前后在系统轻载和超载情况下的性能表现。如图3、图4所示。

实验结果表明,在系统轻载情况下改进前算法和改进后算法具有同样的性能,可以充分地利用系统资源,保证所有进程的截止期限得到满足。在系统超载情况下,每个进程都有机会执行,但改进前的执行性能比较差,任务的大部分截止期限得不到满足。

4 结论

Linux操作系统经过10余年的发展,已经成为当今最成功的操作系统之一。本文从进程的调度算法入手,提出了改善系统实时性能的方法。Linux实时性能的逐步完善,必将大大促进嵌入式Linux在工业控制、后PC时代信息电器等领域的广泛应用,应用的需要也会进一步促进大量新型控制算法的出现。

参考文献

[1]何小庆,比尔・温博格.移动电话挑战嵌入式Linux[J].电子产品世界,2006(12).

[2]Real-Time Linux[R/OL]./real_time_linux.php

[3]赵慧斌,李小群,孙玉芳.改善Linux核心可抢占性方法的研究与实现.计算机学报,2004,27(2):244-251.

[4]李凡,卢杜阶,邱鹏.在嵌入式应用中增强Linux实时性的方法研究.华中科技大学学报,2005,33(2).

[5]D.Hart,J.Stultz,T.Ts’o,Real-time Linux in real time,IBM SYSTEMS JOURNAL,VOL 47.NO.2,2008.