调度程序或某些关键内核线程是否可以在可抢占的Linux内核中被抢占?在中断处理程序(上半部分还是下半部分)中怎么办?
任何内核线程或一般来说代码的任何部分都可以被抢占:
所以是的,甚至调度程序也可以被硬件中断抢占。
内核调用__schedule()来进行实际的上下文切换。它总是在禁用抢占的情况下调用它。在调用preempt_disable
之前,您可以搜索呼叫者并注意对__schedule
的调用。所以,它不能被抢先一步。
此外,不能抢占中断处理程序。此处禁用抢占。但是Linux内核是可抢占的,这意味着内核线程和其他代码可以在安全的情况下被抢占。