Прерывание и спин-блокировка
Я понимаю что мы отключаем interrupts
при приобретении spinlocks
в обработчиках прерываний.
У меня есть сомнения относительно того, что происходит, когда spinlock
проводится в process context
и в этот момент происходит прерывание?
Может ли этот сценарий произойти?
Насколько я понимаю, если так получится, что обработчик тоже пытается получить то же самое lock
удерживается в контексте процесса, он будет продолжать вращаться для этой блокировки.
Так всегда ли мы отключаем прерывания при получении spinlock
?
1 ответ
Спиннинг - это то, для чего нужны спиновые замки.
Когда прерывание происходит на другом процессоре, оно будет вращаться только до тех пор, пока не будет разблокирована блокировка контекста процесса.
Когда прерывание происходит на одном и том же процессоре, оно будет вращаться вечно. Вот почему вы должны отключать прерывания при получении спин-блокировки в контексте процесса, и если такая же блокировка также используется обработчиком прерываний.
(Отключение прерываний при получении спин-блокировки в контексте прерываний обычно не является необходимым, поскольку обработчик прерываний не может быть прерван сам по себе.)