do_softirq为什么不允许软中断嵌套
时间: 2023-08-09 21:06:12 浏览: 110
在 Linux 内核中,软中断是一种异步机制,用于处理一些延迟敏感的任务,例如网络数据包的接收和处理、磁盘 I/O 等。软中断由内核中的硬件中断触发,但是它们不会立即执行,而是在稍后的时间点被调度执行。
当一个软中断正在执行时,如果又有一个相同的软中断被触发了,那么这个新的软中断会被加入到软中断队列中等待执行,而不是立即执行。这是因为软中断的执行可能会涉及到共享的资源,例如内核数据结构、锁等,如果多个软中断同时操作这些资源,就会导致竞争和不一致的问题。
因此,为了保证软中断的正确执行,Linux 内核不允许软中断嵌套,即当一个软中断正在执行时,不允许其他软中断被触发和执行。这是通过在内核中维护一个软中断嵌套计数器来实现的。当一个软中断开始执行时,计数器加 1,当软中断执行完毕时,计数器减 1。如果计数器不为 0,说明当前正在执行的软中断被另一个软中断打断了,这时候需要等待上一个软中断执行完毕后再继续执行当前软中断。
总之,不允许软中断嵌套是为了保证软中断的正确性和可靠性,避免竞争和不一致的问题。
阅读全文