最近在看Linux Kernel Development,有几个关于禁用抢占的问题。
在第 7 章的“中断控制”部分,它说:
此外,禁用中断也会禁用内核抢占。
我还从书中读到内核抢占可能发生在以下情况:
当中断处理程序退出时,在返回内核空间之前。
当内核代码再次变得可抢占时。
如果内核中的任务显式调用 schedule()
如果内核中的任务阻塞(这导致调用 schedule())但我无法将禁用中断与这些情况联系起来。
据我所知,自旋锁会使用preempt_disable()函数禁用抢占。
帖子究竟什么是“自旋锁”? 说:
在单核机器上,自旋锁只是“禁用中断”或“提高 IRQL”,它完全阻止线程调度。
preempt_disable()是否通过禁用中断来禁用抢占?