Могут ли аппаратные прерывания вытеснить процесс, удерживая спин-блокировку (вытеснение отключено)?

Кто-то задает аналогичный вопрос:

Как ядро ​​обрабатывает блокировку в контексте процесса при возникновении прерывания?

Но все же неясно, когда прерывание приходит на один ЦП, а процесс выполняется на том же ЦП с удерживаемой спин-блокировкой. может прервать вытеснение процесса, удерживая спин-блокировку. ? Должно быть, потому что у нас есть spin_lock_irq для отключения прерываний.

это означает, что, когда приоритет ядра отключен и приходит прерывание, прерывание может прервать процесс и начать выполнение, верно?

Кто-нибудь может это прояснить. Я думаю, что мне здесь не хватает точки.

Спасибо, Гурурадж


person Gururaja B O    schedule 29.10.2016    source источник
comment
Когда прерывания отключены, ЦП сохраняет прерывания для последующей обработки. Однако NMI все равно будет обработан.   -  person Paul Stelian    schedule 29.10.2016
comment
Если вы не укажете ОС, ответы могут отличаться ...   -  person tofro    schedule 29.10.2016
comment
@tofro Я имею в виду операционную систему Linux. случай, когда Spinlock удерживается, означает, что приоритетное прерывание отключено и IRQ не отключены. В этом случае прерывание приведет к вытеснению процесса, удерживающего спин-блокировку.   -  person Gururaja B O    schedule 29.10.2016
comment
Прерывание обычно вытесняет что-либо, если прерывания не отключены - это аппаратно. ЦП не заботится о спин-блокировках и механизмах ОС.   -  person tofro    schedule 30.10.2016


Ответы (1)


Да, прерывания вытеснят ваш код удержания блокировки.

Аппаратное обеспечение ЦП, которое обрабатывает прерывание и переходит к вектору прерывания в IDT, не знает и не заботится о том, какой код выполняется или какие у вас блокировки. Он вытеснит все, даже другие обработчики прерываний.

person Matviy Kotoniy    schedule 15.09.2020