- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有以下配置的系统;
当 SOFTIRQ 1 运行时,中断 B 到来,然后 ISR B 启动。当 irq_exit() 发生在 ISR B 时,它将调用软中断。因此,它将调度 SOFTIRQ 2(不考虑被中断的 SOFTIRQ 1)。
这种说法正确吗?
另一个问题。此时,如果SOFTIRQ 1禁用了“bottom_half”,我们在哪里检测bottom half被禁用并跳过SOFTIRQ 2的执行?提前致谢!
最佳答案
也许您对 SOFTIRQ 和 HARDIRQ 感到困惑。 Linux内核中的Softirq是IRQ处理中的“bottom_half”,由任务调度器调度执行,以处理延迟的IRQ处理。在此处理过程中,它可能会处理多个延迟 IRQ 处理,例如您的情况下的 IRQ A 和 IRQ B。
但是如果有任何IRQ进入系统,就会触发ISR处理程序,并且不会立即触发任何SOFTIRQ,只是安排稍后处理,而不是像你的措辞那样“调用”说。 (即,所有硬件 IRQ 处理程序不应调用 raise_softirq(),而是安排一个处理程序进行 IRQ 处理)
总而言之,对于您的场景:
ISR B 结束后,它可能会提交 SOFTIRQ B 供以后处理 - 但它不会调用 raise_softirq()。但由于 SOFTIRQ A 已被中途拦截,任何硬件中断后,它都会继续之前的最后任务,因此 SOFTIRQ A 将执行完成。
详细说明raise_softirq()内部,它调用raise_softirq_irqoff():
inline void raise_softirq_irqoff(unsigned int nr)
{
__raise_softirq_irqoff(nr);
/*
* If we're in an interrupt or softirq, we're done
* (this also catches softirq-disabled code). We will
* actually run the softirq once we return from
* the irq or softirq.
*
* Otherwise we wake up ksoftirqd to make sure we
* schedule the softirq soon.
*/
if (!in_interrupt())
wakeup_softirqd();
}
正如评论所说,如果您在软中断 A 内且 IRQ B 进入,则 IRQ B 处理将结束 - 在完成当前的 SOFTIRQ A 后重新运行。
为了强调所有硬件都不会调用“raise_softirq()”,对 Linux 内核的搜索会产生以下结果(没有一个来自硬件,来自“drivers”分支):
在网络 IRQ 处理程序中 - 调用 napi_schedule()。 (通常在所有驱动程序 IRQ 处理程序中搜索“sched”)。以下来自 drivers/net/usb/r8152.c:
关于linux-kernel - SOFTIRQ 上下文中的抢占,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766649/
我写了一段代码,其中有一个数据: unsigned char buf[4096]; // data in chunks of size 4k unsigned counter[256]; 我将每 3
这个问题已经有答案了: Ajax too slow - Recursion (1 个回答) 已关闭 5 年前。 所以这件事在我脑海里思考了很长时间,是否 AJAx 中给出的计时器在它必须发送另一个请求
据我所知,在 Linux 中有许多机制可以实现 bottom-halves: 软中断 任务 工作队列 线程中断 ( request_threaded_irq() ) 它们在可调度性方面都有自己的特点。
根据这个问题here使用 pthread_spin_lock 锁定关键部分是危险的,因为线程可能会被调度程序中断,而其他线程可能会在该资源上保持旋转状态。 假设我决定从 pthread_spin_lo
从SLF4J页面我明白了这一点 The purpose of slf4j-log4j12 module is to delegate or redirect calls made to an SLF4
我在我的项目中使用了 xuggle library 将视频从 mp4 转码为 flv。我也使用 slf4j 库 来支持日志结束。 import com.xuggle.mediatool.IMediaR
我是一名优秀的程序员,十分优秀!