我是 Linux 新手,正在阅读 Rubini & Corbet 的 Linux 设备驱动程序书。我对与以下内容相关的一项声明感到困惑spinlocks
;这本书说
如果一个非抢占式单处理器系统曾经在锁上自旋,它将永远自旋;没有其他线程能够获得 CPU 来释放锁。出于这个原因,没有启用抢占的单处理器系统上的自旋锁操作被优化为什么都不做,除了那些改变 IRQ 屏蔽状态的操作。
书中进一步指出
内核抢占情况由自旋锁代码本身处理。每当内核代码持有自旋锁时,相关处理器上的抢占都将被禁用。甚至单处理器系统也必须以这种方式禁用抢占以避免竞争条件。
问题:在单处理器系统上,如果内核抢占在内核代码(代表用户进程执行)持有自旋锁时被禁用,那么另一个进程如何有机会运行并因此尝试获取自旋锁?当内核代码持有自旋锁时,为什么 Linux 内核会禁用内核抢占?