APP下载

Linux在嵌入式实时系统的研究与改进

2011-02-19韩大鹏

制造业自动化 2011年3期
关键词:内核中断进程

张 帆,求 伟,韩大鹏

ZHANG Fan1,QIU Wei1,HAN Da-peng2

(1.武警杭州指挥学院 信息技术教研室,杭州 310023;2.浙江省女子监狱 信息技术科,杭州 310012)

0 引言

实时系统是指系统能够在限定的响应时间内提供所需水平的服务。一般的说,实时系统是能及时响应外部发生的随机事件,并以足够快的速度完成对事件处理的计算机应用系统。一个实时系统计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。实时系统有反应式和嵌入式两种类型。反应式实时系统会与环境发生连续的互作用,而嵌入式实时系统主要用于控制大型系统中安装的特殊硬件。

1 衡量实时性的指标

一般来讲,性能是一个软件系统或组件对时间要求满足程度的一种指示。这里的时间指标可以用响应时间和吞吐量来衡量,该时间值是指响应某种要求所需的时间,而吞吐量用以指示系统在特定时间间隔内能够处理的请求数量。实时操作系统与一般商用多任务操作系统如Unix、Windows有共同的特点,也有不同的特点。对于商用多任务操作系统,其目的是方便用户管理计算机资源,追求吞吐量;而实时操作系统要求在限定的响应时间内提供所需水平的服务,追求实时性、可确定性、可靠性。

评价一个实时操作系统一般可以从任务调度、内存管理、任务通讯、内存开销、任务切换时间、最大中断禁止时间等几个方面来衡量。其中最大中断禁止时间和任务切换时间是评价一个实时操作系统实时性的最重要的两个技术指标。

2 标准Linux制约实时性的因素

由于Linux系统本身是一个面向桌面的系统,其主要设计标准的是方便用户管理计算机资源,追求系统资源最大利用率,而不是有确定可预测的实时性能。所以将它应用于实时应用中时存在响应时间不可预测、时钟粒度粗糙等问题。

2.1 响应时间

响应时间是指从系统接到即时处理程序的中断(interrupt)请求,到开始执行该处理程序间的时间差,如图1所示。

图1 响应时间

影响系统响应时间的因素包括:中断延迟(interrupt Latency)、中断服务例程运行时间(Interrupt handler duration)、调度延迟(Scheduler Latency)和调度程序运行时间(Scheduling duration)。

2.1.1 中断延迟

中断延迟即中断响应时间,是指从产生中断请求到相应中断服务程序的第一条指令被执行之间的这段时间。由于中断具备有优先级而且可以嵌套产生,因此可以测知优先级最高的中断在执行时的延迟时间。然而产生中断延迟的原因除了处理器响应时间外,更重要的是操作系统往往会大大增加中断被延迟的时间。在操作系统运行过程中,存在着一些关键的操作,这些操作在执行时,操作系统会禁止在其间插入任何中断。因此如果一个中断请求在操作系统禁止中断的这段时间里产生,那么对它的处理就会始终保持在挂起状态,直到操作系统重新允许中断插入。最终,中断延迟在最坏情况下的数值是和操作系统关键操作中的指令序列在中断请求产生后继续执行的时间紧密相关,实时系统就是要确保系统中的关键事件能够在限定的时间段内被处理。

2.1.2 调度延迟

较长时间的调度延迟有许多原因。其一是驱动在入口处或中断服务例程进行了许多操作;其二是由于缺乏调度点,内核长时间执行一部分代码,这些都导致了内核长时间内没有得到机会去进行调度运算。简单的解决方法是使调度程序运行得更加频繁。但实际上这个问题并不那么简单。首先,如果调度程序运行过于频繁,将引发频繁的进程切换,导致过多的CPU和内存资源的浪费;其次会影响中断服务时机的选择和服务的质量,再次影响进程IPC。引发过多的资源协调问题,从而导致系统性能的降低。因此让调度器保持一个有规律的运行节拍,但是又不能过于频繁的运行很重要。正确的解决方法是,让调度器在需要的时候尽快运行,例如:中断发生以后,需要重新调度,从就绪队列中选择下一个进程。

2.2 时钟问题

操作系统环境建立之后,任务的执行和中止在很多情况下都是由时钟直接或间接唤起的,时钟也是操作系统活动的基准。为了提高系统的平均吞吐率,Linux 2.6将时钟中断的最小间隔设置为1毫秒,虽然相比2.4内核的10毫秒有了很大的提高,但是实时应用一般都需要微秒级的响应精度,1ms的时钟粒度显然不能满足实时应用的需求。如果要把时钟的间隔缩小以满足周期性的实时任务的需要,但是Linux的进程切换比较费时,时钟中断越频繁,而花在中断处理上的时间就越多,系统的大部分时间是调用进程调度程序进行进程调度而不能进行正常的处理。

3 嵌入式Linux实时化改进措施

3.1 增加kernel可抢占性。

一般内核的不可抢占性使实时任务无法提供任务的调度权,可以通过修改源码,将系统调用的过程细分,缩小禁止中断、内核加锁的范围。增加调度器运行的时机。

3.2 对中断进行软件模拟

采用软件对中断模拟,在Linux内核下增加一个软件层,来控制中断和处理器关键操作。对cli(关中断)和sti(开中断)命令进行封装,在调用cli或者sti时,只是更改中断的标记位,并不真正的去开、关中断。例如:RT-Linux,由两个子内核构成,一个用于Linux环境,一个用于实时环境,可以有效改善系统中断延迟时间的问题。

3.3 采用高精度定时器

一般内核无法提供高精度时钟,也即无法高精度分辨实时任务的到来。采用高精度定时器,为系统提供更多的剥夺点。通过系统硬件提供的高精度时钟,可以解决时钟粒度过大的问题。

3.4 改进调度算法

虽然Linux进程调度也支持实时优先级,但缺乏有效的实时任务的调度机制和调度算法,无法满足HRT、QoS等的任务需求,可以通过向调度器增加hook或改造调度器来改善。目前有很多新颖的操作系统调度框架和调度算法都有Linux实现,比如RED-Linux所定义的一个通用的实时调度框架;QLinux所采用的分层式的CPU调度框架,及新颖的调度算法如H-SFQ,以及Cello磁盘调度算法等;SILK所使用的将对一个包的网络处理抽象成PATH,然后在PATH之间进行调度。

3.5 采用微内核结构

微内核结构的设计有很大的好处。调试用户进程要比调试内核进程要容易许多,用户进程在独立的地址空间运行,不同模块间的内存管理错误不会互相影响,驱动程序可以充分利用内核提供的多线程机制。另一好处是系统的可扩展性,既可以小到100K,可以放入ROM,也可以大到足以适应多机系统的需要。移植及维护微内核结构的系统都很方便。切换上下文速度快,由于内核很小,可以方便的计算出最差的时间参数,如中断响应时间。微内核的一个弱点是性能不好,因为内核需要大量的进程通信和上下文切换。只能提供简单的服务,相同的任务微内核系统要调用较多的系统调用。

4 结论

随着应用的复杂化和硬件的发展,一个嵌入式控制器系统可能要同时控制和监视很多外设,要求有实时响应,有很多处理任务,各个任务之间有多种信息传递,因此嵌入式操作系统在嵌入式系统中将会发挥更大的作用,实时性是绝大多数嵌入式系统的需求,研究嵌入式操作系统内核的实时化技术及其在典型嵌入式实时系统中的应用技术具有重要的意义。Linux以其诸多的优势不但在桌面操作系统中获得了巨大的成功,通过对其实时性能等方面的改造,必将在嵌入式领域发挥巨大的作用。

[1]邹思轶.嵌入式Linux设计与应用.清华大学出版社,2002.

[2]Daniel P.Bovet,Marco Cesati.深入理解LINUX内核.第二版[M].中国电力出版社,2004.

[3]李小群,赵慧斌.Linux 实时调度方案的设计与实现[J].计算机研究与发展,2003,5.

[4]赵慧斌,李小群.改善Linux 核心可抢占性方法的研究与实现[J].计算机学报,2004,2.

猜你喜欢

内核中断进程
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
债券市场对外开放的进程与展望
改革开放进程中的国际收支统计
Linux内核mmap保护机制研究
基于FPGA的中断控制器设计*
Linux中断线程化分析及中断延时测试
跟踪导练(二)(5)
千里移防,卫勤保障不中断