gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:27 33 4
gpt4 key购买 nike

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

最佳答案

关于 printk(),它是侵入性的。例如,您正在调试的问题可能会因添加 printk 而消失。根据设置,它可能会输出到控制台,这可能很慢。 ftracetrace_printk()建议改为。

至于中断内的 I/O,请记住中断的运行优先级高于其他执行线程,因此任何延迟 - 无论是 I/O 还是其他 - 都会产生链式 react 在系统的其余部分。

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

希望它能回答您的问题。

更新:在中断处理程序中调用 printk 会导致死锁吗?编号 例如 this extract from makelinux

One property of printk() quickly taken for granted is its robustness. The printk() function is callable from just about anywhere in the kernel at any time. It can be called from interrupt or process context. It can be called while a lock is held. It can be called simultaneously on multiple processors, yet it does not require the caller to hold a lock.

更新 2:Word of caution感谢 tc2keats。

但是,如果 printk 在 ISR 中,则它不太可能是生产代码。应该是调试吧因此,如果存在锁定,程序员应该会很清楚 :)

关于linux - 中断处理程序中的 Printk 或 I/O 危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40089135/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com