Почему linux отключает вытеснение ядра после того, как код ядра содержит спин-блокировку?
Я новичок в Linux и читаю книгу драйверов для Linux от Rubini & Корбет. Я запутался в одном утверждении, связанном сspinlocks
; в книге говорится
Если бы непревзойденная однопроцессорная система когда-либо вращалась на замке, она вращалась бы вечно; никакой другой поток не сможет получить процессор, чтобы снять блокировку. По этой причине операции спин-блокировки в однопроцессорных системах без включенного вытеснения оптимизированы, чтобы ничего не делать, за исключением тех, которые изменяют статус маскирования IRQ.
Далее в книге говорится
Случай вытеснения ядра обрабатывается самим кодом спин-блокировки. Каждый раз, когда код ядра удерживает спин-блокировку, вытеснение отключается на соответствующем процессоре. Даже однопроцессорные системы должны отключать вытеснение таким образом, чтобы избежать состояния гонки.
Вопрос: Если в однопроцессорной системе приоритетное отключение ядра отключается всякий раз, когда код ядра (выполняющийся от имени пользовательского процесса) удерживает спин-блокировку, то как может другой процесс получить возможность запуска и, следовательно, попытаться получить спин-блокировку? Почему ядро Linux отключает вытеснение ядра всякий раз, когда код ядра содержит спин-блокировку?