- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
为什么在 linux 的中断处理程序中禁止 printk 或 (I/O)。?在什么情况下中断处理程序中的 I/O 会导致 linux 系统中的死锁?
最佳答案
关于 printk()
,它是侵入性的。例如,您正在调试的问题可能会因添加 printk 而消失。根据设置,它可能会输出到控制台,这可能很慢。 ftrace 的 trace_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/
编辑:澄清一下,我明白为什么这段代码不起作用,我并不是要修复它,而是想了解如果这段代码可以在没有语义错误的情况下编译会有什么危险。 我发现下面的代码会导致静态语义错误。我知道这是因为 std::lis
我想知道 C# 枚举以及重复值会发生什么。我创建了以下小程序来测试: namespace ConsoleTest { enum TestEnum { FirstElem
正如我在另一个 SO 问题中指出的那样,我遇到了 this article .当我通过 MSVC7.1 编译 boost 1.40 时出现了这个问题,并且弹出了几个 C4251 警告。 现在,在阅读上
我有以下弹出窗口代码(客户端请求)。它使用 eval ,我知道这是危险的。有没有办法重写下面的脚本,使其不使用 (eval)? /* exported popup_default , popup_he
NTFS 文件可以有对象 ID。可以使用 FSCTL_SET_OBJECT_ID 设置这些 ID .然而,msdn article说: Modifying an object identifier c
我一直在学习命令行参数解析。关于这个已经有很长的线索了,我不想在这里挑起一个: Using getopts in bash shell script to get long and short com
这个问题在这里已经有了答案: How to configure ContextMenu buttons for delete and disabled in SwiftUI? (4 个回答) 4 个月
为什么在 linux 的中断处理程序中禁止 printk 或 (I/O)。?在什么情况下中断处理程序中的 I/O 会导致 linux 系统中的死锁? 最佳答案 关于 printk(),它是侵入性的。例
不是 Invoking virtual function and pure-virtual function from a constructor 的重复项: 以前的问题与 C++ 03 相关,而不是
我正在使用 lateinit 属性以避免使用 ?运算符(operator)。我有很多 View 属性是第一次在 getViews() 函数中分配的。如果该功能不存在,我的应用程序将与来自 Kotlin
我最近在使用 fputs 时遇到了问题:当使用 fputs 在文本文件中打印一些字符串时,我碰巧得到了除 A-Z、a-z、0-9 之外的其他字符(不属于字符串的字符) .我绝对确保所有字符串都以空字符
在仅包含字节数组的结构上使用 #pragma pack(1) 是否危险/有风险?例如。这个: #pragma pack(1) struct RpcMessage { uint8_t proto
我是一名优秀的程序员,十分优秀!