免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 671 | 回复: 0
打印 上一主题 下一主题

标准Linux实时性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-02 17:44 |只看该作者 |倒序浏览

标准Linux有几个机制严重地影响了实时性。
1.内核不可抢占
在Linux
2.4和以前的版本,内核是不可抢占的,也就是说,如果当前任务运行在内核态,即使当前有更紧急的任务需要运行,当前任务也不能被抢占。因此那个紧急任务
必须等到当前任务执行完内核态的操作返回用户态后或当前任务因需要等待某些条件满足而主动让出CPU才能被考虑执行,这很明显严重影响抢占延迟。
在Linux 2.6中,内核已经可以抢占,因而实时性得到了加强。但是内核中仍有大量的不可抢占区域, 如由自旋锁 (spinlock)保护的临界区,以及一些显式使用preempt_disable失效抢占的临界区。
2.中断关闭
Linux在一些同步操作中使用了中断关闭指令,中断关闭将增大中断延迟,降低系统的实时性。
3.自旋锁(spinlock)
自旋锁是在可抢占内核和SMP情况下对共享资源的一种同步机制,一般地一个任务对共享资源的访问是非常短暂的,如果两个任务竞争一个共享的资源时,
没有得到资源的任务将自旋以等待另一个任务使用完该共享资源。这种锁机制是非常高效的,但是在保持自旋锁期间将失效抢占,这意味着抢占延迟将增加。在
2.6内核中,自旋锁的使用非常普遍,有的甚至对整个一个数组或链表的便历过程都使用自旋锁。因此抢占延迟非常不确定。
4.大内核锁
由于历史原因,内核一直保留有几个大内核锁,大内核锁实质上也是一种自旋锁,但是它与一般的自旋锁的区别是,它是用于同步整个内核的,而且一般该锁的保持时间较长,也即抢占失效时间长,因此它的使用将严重地影响抢占延迟。
5.中断总是最高优先级的
在Linux中,中断(包括软中断)是最高优先级的,不论在任何时刻,只要产生中断事件,内核将立即执行相应的中断处理函数以及软中断,等到所有挂
起的中断和软中断处理完毕有才执行正常的任务。因此在标准的Linux系统上,实时任务根本不可能得到实时性保证。例如,假设在一个标准Linux系统上
运行了一个实时任务(即使用了SCHED_FIFO调度策略并且设定了最高的实时优先级),但是该系统有非常繁重的网络负载和I/O负载,那么系统可能一
直处在中断处理状态而没有机会运行任何任务,这样实时任务将永远无法运行,抢占延迟将是无穷大。因此,如果这种机制不改,实时Linux将永远无法实现。
6.调度算法和调度点
在Linux 2.4和以前的版本,调度器的时间复杂度是O(n)的,而且在SMP的情况下性能低,因为所有的CPU共享一个任务链表,任何时刻只能有一个调度器运行。因此,抢占延迟很大程度上以来于当前系统的任务数,具有非常大的不确定性和不可预测性。
在2.6内核中引入的O(1)调度器很好地解决了这些问题。
此外,即使内核是可抢占的,也不是在任何地方可以发生调度,例如在中断上下文,一个中断处理函数可能唤醒了某一高优先级进程,但是该进程并不能立即
运行,因为在中断上下文不能发生调度,中断处理完了之后内核还要执行挂起的软中断,等它们处理完之后才有机会调度刚才唤醒的进程。在标准Linux内核
中,调度点(有意安排的执行任务调度的点)并不多,对2.4和2.6内核测试的结果表明,缺乏调度点是影响Linux实时性的一个因素。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1421/showart_149843.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP