改善Linux核心可抢占性方法的研究与实现

2013-09-30 06:39周山
中国信息化·学术版 2013年6期

周山

[摘要]Linux的出现,更激发了人们对计算机科学技术探索研究的热情。Linux通过它独有的特点,慢慢的进入了嵌入式Linux研究的时代但在系统的实时性能方面,Linux表现出很多不足的地方,这直接影响了Linux在嵌入式系统方面的研究。而影响Linux实时性的原因主要就是由于Linux内核具有的不可抢占性。因此,我们还要通过计算机的相关科学技术改善Linux的实时性能,这不仅为Linux的发展提供广阔的前景,对嵌入式应用程序的研究也有重要意义。

[关键词]Linux内核;可抢占性;实时性能

[中图分类号]F224-39 [文献标识码]A [文章编号]1672-5158(2013)06-0034-01

在对Linux系统的应用逐渐普及的今天,大家仍然在不断寻找改进Linux实时性能的方法,使Linmx充分利用它的优势在嵌入式系统的开发中发挥它的潜力。随着Linux不断被引入实时领域,很大程度上吸引了计算机技术研发人员的眼球。而在Linux的设计中,它的内核是不可抢占的,虽然这对Linux的核心数据比较容易维护并且拥有良好的稳定性,但也影响了Linux的实时性能。因此,要想改善Linux的实时性,就要先改善Linux内核的可抢占性。

一、关于Linux实时性的研究分析

在Linux刚刚出现的时候,是被作为分时操作系统而设计实现的,所以Linux并不适应实时操作系统的要求。主要表现在这样几点上:第一,Linux系统的内核设计为不可抢占。所谓不可抢占就是核心作业具有任务的最高级,只有当它完成后,系统才会调度其它进程。因此在进程请求系统调用的过程中,可能会造成进程阻塞,无法有效的调用实时进程。第二,Linux设计中具有很多缓冲机制,这让一些实时任务不能被及时执行,影响了系统实时的效率。第三,Linmx的同步策略也是导致进程阻塞的一个重要原因,它使实时进程无法使用系统的临界资源。因此,Linmx并不符合实时系统的要求。第四,在中断处理机制中,实时任务往往不能得到及时的处理,从而没有办法保证系统的确定性以及可预测性。

二、实现Linux内核的实时支持的方法——可抢占式内核

为了实现Linux内核的实时性,就要将Linux内核设计为可抢占性,这样能够使系统充分响应实时进程的请求,使实时进程得到及时的处理。所谓抢占就是指正在执行的实时任务,随时都有可能被中断,并通过系统的进程调度策略,执行其它优先级高的任务。可抢占式的内核设计,保证了系统正确的实现实时调度算法。Linux内核的可抢占性,并不代表实时任务在任何情况下都可以被优先调度。例如,当任务正在利用系统的调用来访问系统中的共享数据时,就不能被其它可能使用这个数据的任务所抢占。在实现内核可抢占的方法中,必须对内核的临界段加以保护,来防止进程的重大问题。

那么我们可以通过这样几种方法来实现Linmx抢占式内核。(1)设置抢占点,确保内核在这样安全和固定的点上实现抢占。在改善Linux内核的非抢占内核时,最简单的方法之一就是在一定的时间间隔处设置抢占点,并对在抢占点执行的过程进行检查。对于抢占点的设置需要要注意的是:抢占点必须在稳定的内核数据结构中设置,而且内核将要开始一个长时间并且大量的运算。(2)实现完全抢占,使内核在任何时间里都能够被其它进程抢占。虽然我们刚刚描述过有一种情况内核是不允许被抢占的,但我们还是可以通过操作系统所提供的互斥机制来实现内核的完全抢占。其一,不在临界段的执行中设置中断;其二,通过信号量,在获得锁后再进入临界段,当离开临界段的时候再释放锁。其三,在内核的临界段设置抢占锁。

三、改善Linux核心可抢占性的方法研究

在改善Linmx核心可抢占性方面的研究,要从两个方向着手:一方面是中断管理的改进,另一方面是互斥锁的改进。它们之间不仅有着密切的联系,而且还相互影响。

(一)对中断管理进程化的研究

在系统设计中,实现中断管理的高效和可靠是设计的关键。如果在中断管理的设计上存在缺陷,不仅会造成进程不必要的等待,还会让系统的整个任务都出现处理延滞,降低了系统的效率。Linux系统设计中采用了宏内核,所以Linux操作系统表现出易于实现的优势,这在目前仍然是计算机科学技术研究的一个重要方向。但宏内核也有不足的地方,缺少了对系统分层的概念,不容易约束用户程序编写,从而导致一些不合理的中断等待的现象。因此,要改善Linux的中断处理。Linux通过kernel_thread函数来创建系统的核心进程,利用核心进程里所具有的task_Mstruct描述以及核心堆栈,通过它们的共同参与来对系统的进程进行调度,使其具有更高的执行效率。

(二)对互斥锁的研究

Linux中的互斥锁是采用硬件锁方式实现的,互斥锁利用了存在于Linux核心的二元信号量(关于Linux核心的二元信号量的定义,在include/asm-i386/semaphore.h中有明确的说明)。在Linmx内核信号量的具体实现中,内核例程down()和up()与P()操作和V()操作是相对应的。因此也可以通过直接利用内核例程down()和up()来实现互斥锁。通过二元信号量对互斥锁机制进行的改进设计,实现了互斥锁机制的高效性。与此同时,基于二元信号量的互斥设计更容易实现较为复杂的关于互斥锁的协议。在某种意义上互斥锁的实现和进程的调度密切相关。

结束语:本文通过对如何改进Linmx核心可抢占性的方法研究,改善了Linux核心的可抢占性,并且使Linux在实时性能上得到改善。相信通过系统的研发人员的共同努力,一定会在改善Linux核心可抢占性的方法上有所突破,逐渐完善Linux。

参考文献

[1]张立,王茜竹,王朝霞,练有品,Linux内核的进程调度原理及改进算法研究[J],后勤工程学院学报,2006(05)

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

[5]杨中良,蒋朝根,Linux内核的可抢占性分析和研究[J]成都信息工程学院学报,2008(10)

[4]杜旭,胥海鹏,Linux操作系统调度器实时性能的研究与改进[J],计算机工程,2005(10)