如果在用户进程的执行中,被硬中断打断了,而不希望硬中断执行完了还执行软中断,希望还能回来继续执行用户程序,那么就要加上local_irq_disable了
时间: 2023-10-07 15:14:11 浏览: 42
是的,当硬中断被触发时,内核会暂停用户进程的执行,转而执行硬中断处理程序。如果此时还有软中断需要处理,内核会在硬中断处理程序执行完毕后立即开始执行软中断处理程序。如果你不希望软中断处理程序立即执行,可以在硬中断处理程序中使用local_irq_disable()函数来禁用本地中断,以防止软中断处理程序的执行。这样,当硬中断处理程序返回时,用户进程可以继续执行,而软中断处理程序则会在稍后的某个时间点被调度执行。需要注意的是,在硬中断处理程序中禁用本地中断可能会影响系统的响应性和实时性,因此应该谨慎使用。
相关问题
tasklet能被软中断打断为啥不能被硬中断打断
我之前的回答有误,非常抱歉。Tasklet在中断上下文中执行,它不能被硬中断所打断,但是可以被软中断所打断。
当 Tasklet 正在执行时,如果一个软中断被触发并且它的优先级高于 Tasklet,那么 Tasklet 的执行将会被打断。此时,Tasklet 的处理函数会被标记为“需要再次调度”,并在软中断处理完毕后再次执行。
需要注意的是,软中断和 Tasklet 之间有优先级关系。软中断的优先级高于 Tasklet,因此在编写中断处理程序时需要考虑这个优先级关系,以确保中断处理程序的正确执行。
至于为什么 Tasklet 不能被硬中断所打断,这是因为硬中断是一种高优先级的中断,它会在中断上下文中执行,并且不能被其他中断打断。在硬中断执行期间,内核会禁止其他硬件中断的响应,因此 Tasklet 也不能在硬中断执行期间被打断。
那你为啥说Tasklet 也不能在硬中断执行期间被打断
非常抱歉,我刚才的回答有误。事实上,在 Linux 内核中,tasklet 是可以在硬件中断处理程序中执行的,并且可以被更高优先级的硬件中断打断。当 tasklet 正在执行时,如果一个更高优先级的硬件中断发生,它会立即打断正在运行的 tasklet,保存上下文并执行硬件中断处理程序,处理完毕后再恢复 tasklet 的执行。因此,在编写使用 tasklet 的代码时,必须考虑到它可能会被硬件中断打断,并且需要使用适当的同步机制来保护共享数据。非常感谢你的指正,让我及时纠正了错误的回答。