中断处理程序中的Printk或I/O危险



为什么在linux的中断处理程序中禁止printk或(I/O) ?在什么情况下,中断处理程序中的I/O会导致linux系统中的死锁?

对于printk() ,它是侵入性的。例如,您正在调试的问题可能会通过添加printk而消失。根据设置,它可能会输出到控制台,这可能很慢。建议使用ftrace的trace_printk()

对于中断中的I/O,请记住,中断比其他执行线程具有更高的优先级,因此任何延迟-无论是I/O还是其他-都会对系统的其余部分产生连锁反应。

死锁可能由于资源争用而发生。例如,当一个资源(比如互斥锁)已经被运行在进程上下文中的内核线程占用时,中断就会到来。现在,中断服务程序试图获取相同的资源将导致死锁:内核线程无法运行,因为ISR具有更高的优先级,而ISR无法完成,因为它正在等待内核线程持有的资源。

希望它能回答你的问题。

UPDATE:在中断处理程序中调用printk会导致死锁吗?不。例如,下面的makelinux

摘录
printk()的一个特性很快被认为是理所当然的,那就是它的健壮性。printk()函数几乎可以从程序中的任何地方调用内核在任何时候。它可以从中断或进程中调用上下文。它可以在持有锁时调用。它可以被称为同时在多个处理器上运行,但它不需要调用者持有锁

UPDATE2:感谢tc2keats的警告。

然而,如果printk在ISR中,它不太可能是生产代码。可能调试。因此,如果有锁,它应该是显而易见的程序员:)

相关内容

  • 没有找到相关文章

最新更新