关于linux内核中断处理和内核抢占的两个说明
2010-02-09 21:19
357 查看
中断处理不能睡眠和切换:原因随处可以找到,总结起来就是:1.增加了当前任务的不确定性,实时性能得不到保障,毕竟中断上下文是任意进程上下文,这样对那个被中断的进程不公平,我在邮件列表中的原话是:“中断处理占用当前进程的内核栈,因此中断中如果切换了还是可以切换回来的,切换回来时就会到了这个中断发生时的当前进程,但是这样对这个进程不公平,相当于由于特殊原因占据了别人一间屋子,可是你却把门反锁,在里面睡觉而不干正事。当然还会遇到一系列锁的问题。一般的,中断处理函数要尽可能快的完成,因为它是异步的,行为不确定的,本来就没有给它安排执行时间。在中断处理完毕了以后,马上要返回用户空间或者内核空间了,这时一切就确定了,因此必要时就可以切换了”;2.和中断共享中断号的中断会受到影响, 现在的内核设置了INPROGRESS标志. 来了一个同样的中断回有问题;3.中断一旦睡眠,就会以被中断的借用进程的“名义”睡眠,那么它要是直接切换了而没有睡眠在一个队列,何时切换回来就会受到被中断进程的属性的控制,比如该进程是一个很低优先级的进程,那将是噩梦,如果它睡眠了,那么何时唤醒呢?在哪里唤醒呢?这都是问题,睡眠是有原因的,那么条件满足时就会被唤醒,如果无故睡眠,那就别指望总会被唤醒。
关于中断不能睡眠和切换另一个要注意的就是用独立中断栈的情况,系统的同一个cpu都会用同一个中断栈,如果一个中断处理程序睡在了中断栈上,那么它被唤醒切换回来的时候会找不到原来被中断的进程,其实它可能回不来了,中断栈的共享会导致压栈的数据被破坏掉。
内核抢占:注意以下代码:
need_resched:
本文出自 “我来,我看,我征服” 博客,请务必保留此出处http://dog250.blog.51cto.com/2466061/1273934
关于中断不能睡眠和切换另一个要注意的就是用独立中断栈的情况,系统的同一个cpu都会用同一个中断栈,如果一个中断处理程序睡在了中断栈上,那么它被唤醒切换回来的时候会找不到原来被中断的进程,其实它可能回不来了,中断栈的共享会导致压栈的数据被破坏掉。
内核抢占:注意以下代码:
need_resched:
本文出自 “我来,我看,我征服” 博客,请务必保留此出处http://dog250.blog.51cto.com/2466061/1273934
相关文章推荐
- 关于linux内核中断处理和内核抢占的两个说明
- Linux0.11内核--系统中断处理程序int 0x80实现原理
- Linux的中断处理的一些说明
- Linux内核中断休眠说明
- 把握linux内核设计思想(二):硬中断及中断处理
- Linux内核---44.关于中断号与中断引脚
- Linux内核分析课程5_system_call中断处理过程
- linux0.11内核中断处理
- 关于LINUX中的中断处理
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.6 中断和异常处理
- Linux的中断和内核抢占
- 32 linux内核里的中断处理
- Linux内核学习7:中断与中断处理(1)
- Linux内核学习笔记五——中断推后处理机制
- 关于linux 的内核抢占
- Linux内核锁与中断处理
- 中断处理中的延迟调度和内核抢占
- 【深入剖析Linux内核】Linux内核之旅——(二)内核抢占与中断返回
- Linux系统内核分析实验——system_call中断处理过程
- Linux内核分析5:分析system_call中断处理过程