Linux kernel 处理微线程时何时保存状态?
我正在阅读Linux内核开发,在tasklets一章(第143页)中感到困惑。Linux kernel 处理微线程时何时保存状态?,linux-kernel,interrupt-handling,tasklet,Linux Kernel,Interrupt Handling,Tasklet,我正在阅读Linux内核开发,在tasklets一章(第143页)中感到困惑。 在tasklet_调度功能中,中断状态保存,而在taslet_操作中则不保存。作者解释说,由于函数知道总是启用中断,因此上下文不会保存在taslet_操作中。我无法理解中断集是如何影响保存上下文的?谢谢大家! 作者声明,可以在禁用或启用中断的情况下调用tasklet_调度。由于它希望禁用它们,因此需要保存它们是否已禁用。然后在工作完成后,它知道是否启用它们(如果在调用之前启用了它们,则启用它们;如果在调用之前禁用了它
在tasklet_调度功能中,中断状态保存,而在taslet_操作中则不保存。作者解释说,由于函数知道总是启用中断,因此上下文不会保存在taslet_操作中。我无法理解中断集是如何影响保存上下文的?谢谢大家! 作者声明,可以在禁用或启用中断的情况下调用tasklet_调度。由于它希望禁用它们,因此需要保存它们是否已禁用。然后在工作完成后,它知道是否启用它们(如果在调用之前启用了它们,则启用它们;如果在调用之前禁用了它们,则保持禁用状态)。相反,tasklet_操作仅在启用中断的情况下调用,因此没有必要检查它们的状态。它们总是在返回时被禁用和启用。对于tasklet\u计划: 当我们计划一个tasklet时,我们不希望中断打扰我们,所以我们必须禁用它。但我们也知道,当我们完成了对tasklet的调度后,我们希望回到调用schedule tasklet之前的IRQ状态。为了实现这一点,我们在做任何事情之前保存IRQ寄存器的状态,然后根据我们的要求禁用IRQ,执行调度,现在在返回之前恢复IRQ的状态,然后从函数返回 现在让我们来看看复杂的部分,为什么我们不需要在执行tasklet时保存IRQ,即当处理程序调用tasklet函数时? 要理解这一点,我们需要看两个不同的段落: 第141页: softirq处理程序在启用中断的情况下运行,并且无法 sleep。当处理程序运行时,当前处理器上的softirq将被删除 已禁用。但是,另一个处理器可以执行其他软件。如果 在执行时再次引发相同的softirq,另一个 处理器可以同时运行它 因此,这声明中断总是启用的 现在转到第143页: