应用中的嵌入式Linux实时优化技巧
时间:05-16
来源:EDN
点击:
3.3 内核线程
中断服务程序(ISR)是不能被抢占的。一旦CPU 开始执行ISR,除非程序结束,否则不可能转而执行其他的任务。Linux用自旋锁(Spinlock)来实现ISR对CPU的独占。采用了自旋锁的ISR是不能进入休眠的,而且此时系统的中断也被完全禁止。内核线程是由内核创建和撤销的,用来执行一个指定的函数。内核线程具有自己的内核堆栈,能够被单独调用。我们用内核线程代替ISR,并且用互斥量(Mutex)替换自旋锁。内核线程能够进入休眠,而且执行时是不禁用外部中断的。系统接到中断信号后,唤醒相应的内核线程,内核线程代替原来的ISR执行完任务后继续进入休眠状态。这样中断廷时就是可预测的,并且占用时间也很少。
根据LynuxWorks公司的测试数据,在Pentium III 1GHz的PC上,Linux 2.4内核的平均任务响应时间为1133us,平均中断响应时间为252us;而Linux 2.6内核的平均响应时间为132us,平均中断响应时间仅为14us,比Linux 2.4内核提高了一个数量级。在此基础上,采用这种方法能够针对具体的系统进一步加快特定中断的响应时间,提高应用系统的实时性能。
4 总结与展望
本文以Linux 2.6为基础探讨了提高Linux实时性的方法。引入了在实时系统中,只有当进入临界区的进程能在下一个实时任务开始之前结束时才被允许执行的机制,保证实时任务总是优先得到执行;采用了优先级置顶的方法避免了出现优先级倒置的情况;用内核线程代替中断服务程序,改变了了一般中断服务程序执行中不能进入休眠状态的情况,并且执行时不禁用外部中断,使系统的中断廷时变得短小和可预测。本文所述方法的缺点在于,提高系统时钟中断频率带会增大系统开销问题。为了在实时性能提升和系统开销增大之间找到一个平衡点,开发者不得不对具体系统做大量测试,具体问题具体分析,使得该方法在适用性上打了折扣。Linux因其免费、性能强大、工具众多的特点,必将在嵌入式系统领域得到大量的应用。我们应该及时跟踪国内外Linux发展动态,同时积累在此领域的开发经验,走出自己的路来。
中断服务程序(ISR)是不能被抢占的。一旦CPU 开始执行ISR,除非程序结束,否则不可能转而执行其他的任务。Linux用自旋锁(Spinlock)来实现ISR对CPU的独占。采用了自旋锁的ISR是不能进入休眠的,而且此时系统的中断也被完全禁止。内核线程是由内核创建和撤销的,用来执行一个指定的函数。内核线程具有自己的内核堆栈,能够被单独调用。我们用内核线程代替ISR,并且用互斥量(Mutex)替换自旋锁。内核线程能够进入休眠,而且执行时是不禁用外部中断的。系统接到中断信号后,唤醒相应的内核线程,内核线程代替原来的ISR执行完任务后继续进入休眠状态。这样中断廷时就是可预测的,并且占用时间也很少。
根据LynuxWorks公司的测试数据,在Pentium III 1GHz的PC上,Linux 2.4内核的平均任务响应时间为1133us,平均中断响应时间为252us;而Linux 2.6内核的平均响应时间为132us,平均中断响应时间仅为14us,比Linux 2.4内核提高了一个数量级。在此基础上,采用这种方法能够针对具体的系统进一步加快特定中断的响应时间,提高应用系统的实时性能。
4 总结与展望
本文以Linux 2.6为基础探讨了提高Linux实时性的方法。引入了在实时系统中,只有当进入临界区的进程能在下一个实时任务开始之前结束时才被允许执行的机制,保证实时任务总是优先得到执行;采用了优先级置顶的方法避免了出现优先级倒置的情况;用内核线程代替中断服务程序,改变了了一般中断服务程序执行中不能进入休眠状态的情况,并且执行时不禁用外部中断,使系统的中断廷时变得短小和可预测。本文所述方法的缺点在于,提高系统时钟中断频率带会增大系统开销问题。为了在实时性能提升和系统开销增大之间找到一个平衡点,开发者不得不对具体系统做大量测试,具体问题具体分析,使得该方法在适用性上打了折扣。Linux因其免费、性能强大、工具众多的特点,必将在嵌入式系统领域得到大量的应用。我们应该及时跟踪国内外Linux发展动态,同时积累在此领域的开发经验,走出自己的路来。
- 网络处理器IP2022及其在嵌入式牌照识别系统中的应用设计(05-16)
- 嵌入式系统电源的设计与调试详解(05-18)
- 如何构造嵌入式Linux系统(05-23)
- 嵌入式同步时钟系统的设计与实现详解(05-19)
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)