kai*_*kai 15 linux interrupt linux-kernel softirq
我知道有进程上下文和中断上下文但我不明白在执行softirq或tasklet时,它在哪个上下文中运行.
我看到有些人使用术语"下半部分",如果有这样的术语,与其他人相比有什么不同.
softirq和tasklet的另一个问题是为什么在执行期间不允许睡眠?
谁能帮我识别这些问题,谢谢!!
小智 16
softirq和tasklet都是下半部分机制.不允许睡眠,因为它们在中断上下文而不是进程上下文中运行.如果允许sleep,则linux无法安排它们,最终导致内核崩溃并出现dequeue_task错误.中断上下文甚至没有描述寄存器信息的数据结构,因此它们永远不会被linux调度.如果它被设计成具有该结构并且可以被调度,则将实现中断处理过程的性能.
kai*_*wan 12
@kai:你的qs reg哪个上下文执行的上下文?
从技术上讲,softirq 确实在中断上下文中运行 - "softirq"上下文; 它只是它不是"hard-irq"上下文(这是发生硬件中断时的上下文).
因此,在softirq处理程序中,就Linux提供的"查找"宏而言:
in_interrupt:是的 in_irq:没有| in_softirq:是的 in_serving_softirq:是的
但请注意(请注意!!! :):"适用于中断处理程序的所有限制也适用于下半部分.因此,下半部分无法休眠,无法访问用户空间,也无法调用调度程序." - LDD3.
杰梅因回答了你的其余问题.
[更新]此外,我想指出一个人可以定义简单而优雅的宏,以帮助在需要时打印调试信息.多年来,我已将这些宏和便利例程放入头文件中; 你可以看看它并在这里下载:"方便的标题".
有以下宏/函数:
哇:-)
我同意接受的答案和凯万的答案,但他们没有提到ksoftirqd.如果CPU负载很多softirqs和/或tasklet,它会调度其ksfotirqd线程,该线程处理进程上下文中引发的softirqs和tasklet.
所以我猜OP的问题的答案是:softirqs可以在中断或进程上下文中运行.
| 归档时间: |
|
| 查看次数: |
11408 次 |
| 最近记录: |