论文摘要
近年来实时操作系统在国防、工业控制、通讯等领域得到了广泛的应用,也是一个研究的热点和重点。但是商用的实时操作系统由于其价格昂贵、源代码不开放等,使其在应用中受到了很大的限制。Linux自发布以来,因为其源代码开放等特点,得到了快速地发展和广泛地应用。Linux2.6通过采用抢占式内核、O(1)调度算法等提高了对实时任务的处理能力。但是,它仍不是一个实时内核。因此需要对Linux2.6进行实时化改进,提高其实时性能以满足各种实时环境下的应用。细化系统时钟粒度、改善内核调度器的调度性能、增强内核抢占性能是Linux实时化的主要方法。本文在深入研究Linux2.6内核代码的基础上,着重对Linux的时钟机制和调度机制进行了详细分析和总结,并对其在实时应用上的不足加以改进。在细化时钟粒度方面,借鉴了KURT-Linux的UTIME机制,将单次触发时钟模式(one-shot)引入到2.6内核中,实现了一种混合时钟模式,达到了微秒级的定时精度,较好地解决了时钟精度问题。Linux2.6对实时进程的调度算法简单,不能满足实时任务的时限要求。本文结合不同调度算法在不同的系统负载情况下的性能表现,提出了基于阈值的分级调度算法(CSBOT),在系统轻载时采用基于阈值的LSF调度算法,系统超载时使用关键度/紧急度优先调度算法,兼顾了轻载时的系统利用率和超载时重要任务的执行。最后的测试表明,修改后的内核能得到微秒级的定时精度。基于阈值的分级调度算法在轻载时具有和经典EDF算法相同的系统利用率,在超载时能保证重要任务的执行,实现性能的优雅降级,有效地增强了Linux系统的实时调度能力。