论文部分内容阅读
实时操作系统已广泛应用于国防、工业自动控制、通信等嵌入式领域。与通用的操作系统相比,实时操作系统的主要任务是对事件进行及时的处理,当随机事件发生时必须能够在严格的时限内做出响应,即使系统处于高负荷的情况也是如此,否则就会导致严重的后果。Linux 2.6内核在2003年底发布以来,已经被证明是一个高效稳定的内核。相比2.4内核,虽然2.6采用了一些新技术使得实时性有了很大提高,如可抢占式内核、新的O(1)调度算法等,但是内核中仍有大量的不可抢占区域影响着系统的实时性能。另外,2.6内核采用的是基于优先级抢占的O(1)调度器,而优先级抢占必然会导致优先级反转(Priority Inversion)问题,造成任务调度的不确定性,严重的影响着系统的实时性能。因此,为了满足嵌入式系统对实时性的苛刻要求,针对Linux 2.6内核的实时优化就成为迫切需要解决的问题。本文在对Linux2 .6内核进行深入研究的基础上,借鉴Ingo Molnar的实时改造思想,采用直接修改内核的方式,对Linux2.6内核进行了修改。由于在Linux2.6内核中大量地使用了自旋锁spinlock,致使有大量的临界区存在,它们将严重地影响着系统的实时性。将mutex互拆锁引入到spinlock自旋锁中使自旋锁可抢占,巧妙地实现了新的锁机制,提高了Linux2.6的实时性能。针对Linux 2.6内核的中断不可抢占引发的实时问题,采用中断线程化的方法。中断线程化之后,中断将作为内核线程运行而且赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级,这样,实时任务就可以作为最高优先级的执行单元来运行,即使在严重负载下仍有实时性保证。针对Linux2.6的O(1)调度器所带来的优先级反转问题,为了保证系统的实时性,本文提出了用优先级继承协议和优先级置顶协议两种方法来解决,并具体分析了优先级继承协议在Linux2.6内核上的实现方法。最后,使用LMbench测试软件对系统上下文切换时间进行测试,结果表明,改进后的Linux2.6内核在实时性能上较原Linux2.6和Linux2.4内核有了进一步的提高,更加适用于嵌入式实时应用。