Por que o linux desativa a preempção do kernel depois que o código do kernel contém um spinlock?

Eu sou novo no Linux e estou lendo o livro de drivers de dispositivos Linux da Rubini & Corbet. Estou confuso em uma declaração relacionada aspinlocks; o livro afirma

Se um sistema uniprocessador não-preemptivo girasse, ele giraria para sempre; nenhum outro segmento jamais conseguiria obter a CPU para liberar o bloqueio. Por esse motivo, as operações de spinlock em sistemas de uniprocessador sem preempção ativada são otimizadas para não fazer nada, com exceção daquelas que alteram o status de mascaramento de IRQ.

Além disso, os estados do livro

O caso de preempção do kernel é tratado pelo próprio código de spinlock. Sempre que o código do kernel mantiver um spinlock, a preempção é desativada no processador relevante. Mesmo os sistemas de uniprocessador devem desativar a preempção dessa maneira para evitar condições de corrida.

Pergunta: Em um sistema de uniprocessador, se a preempção do kernel estiver desabilitada sempre que um código do kernel (executado em nome do processo do usuário) contiver o spinlock, como poderia outro processo ter uma chance de ser executado e tentar resolver o spinlock? Por que o Kernel do Linux desabilita a preempção do kernel sempre que o código do kernel contém um spinlock?

questionAnswers(1)

yourAnswerToTheQuestion