ISR计划之后,tasklet是否正确运行?

我写了我的ISR,我的tasklet立即运行。 但是 ,我看到有人说,只有在CPU受到关注时才运行它。 这是一个非常通用的CPU注意事项,所以我为这些响应者背诵。 我的意思是确切的时刻CPU注意去执行任务和CPU的状态发生了什么?

其次,如果假设我继续进行硬中断,那么tasklet何时有机会运行? tasklet可能没有机会运行吗? 内核如何处理这些事情?


TL; DR:Tasklet由Scheduler处理的ksoftirq线程运行。


Tasklet只是softirq的一种形式(它由TASKLET_SOFTIRQ优先级处理),所以运行tasklet时的规则适用于它们。 在这里,他们根据Robert Love的书“Linux Kernel Development”:

  • 在从硬件中断代码路径返回
  • ksoftirq内核线程中
  • 在任何明确检查并执行未决softirq的代码中,如网络子系统
  • 如果threadirqs=true (内核引导参数)是默认值,那么情况(1)似乎不起作用。


    UPD :关于与Scheduler的ksoftirq关系的一些说明。

    这似乎发生了:

  • 在hardirq处理程序中,唤醒ksoftirq (由于tasklet_schedule()
  • 因此, wake_up_process()检查ksoftirq是否可以抢占当前线程
  • 如果(2)为真,则设置TIF_NEED_RESCHED标志
  • 在从hardirq返回( ret_from_intr - 在x86中)时检查TIF_NEED_RESCHED标志
  • 如果(4)为真,调用schedule()试图选择下一个要执行的线程。
  • ksoftirq很有可能在(2-3)中被认为是抢先候选者,而在(5)中被选中,但如果有竞争者, ksoftirq必须等到下一个schedule()循环 - 当前线程投降(即睡眠),时钟滴答发生,系统调用或新的中断。

    链接地址: http://www.djcxy.com/p/84801.html

    上一篇: Exactly when tasklet runs after it is schedule by ISR?

    下一篇: How the tasklets are scheduled on linux?