我写了我的ISR,我的tasklet立即运行。 但是,我看到有人说只有在受到CPU关注时才会运行tasklet。这是一个非常通用的术语 CPU注意力所以我背诵那些响应者。我的意思是cpu关注到tasklet执行的那个时刻以及CPU的状态会发生什么?
其次,如果假设我继续获得硬中断,那么tasklet何时会有机会运行? Tasklet可能无法运行吗?内核如何处理这些事情?
答案 0 :(得分:4)
TL; DR:Tasklet由调度程序处理的 ksoftirq 线程运行。
Tasklet 只是 softirq 的一种形式(由TASKLET_SOFTIRQ
优先级处理它们),因此运行tasklet时的规则适用于它们。根据Robert Love的书“Linux Kernel”,他们在这里
发展“:
- 从硬件中断代码路径返回
- 在 ksoftirq 内核线程
中- 在任何明确检查并执行挂起的softirq的代码中,例如网络子系统
醇>
如果threadirqs=true
(内核引导参数)是默认值,则情况(1)似乎不起作用。
UPD :与调度程序 ksoftirq 关系的一些注释。
这似乎发生了什么:
tasklet_schedule()
)wake_up_process()
会检查 ksoftirq 是否可以取代当前主题TIF_NEED_RESCHED
标志ret_from_intr
- 在x86中)TIF_NEED_RESCHED
标志已被选中schedule()
试图选择要执行的下一个线程。 ksoftirq 很有可能被视为(2-3)中的抢先候选人,并且会在(5)中被选中,但如果有竞争对手, ksoftirq 必须等到下一个schedule()
周期 - 当前线程退出(即休眠),发生时钟滴答,系统调用或新中断。