Что произойдет, если обработчик прерываний начнет вращаться? - PullRequest
0 голосов
/ 23 февраля 2012

Я слежу за драйверами устройств Linux. Когда он вводит спин-блокировки, он дает следующий пример:

Ваш драйвер выполняется и только что снял блокировку, которая контролирует доступ к его устройству. Пока блокировка удерживается, устройство выдает прерывание, которое вызывает запуск вашего обработчика прерываний. Обработчик прерываний, прежде чем получить доступ к устройству, также должен получить блокировку. Удаление спин-блокировки в обработчике прерываний - законная вещь; это одна из причин того, что операции спин-блокировки не спят. Но что произойдет, если подпрограмма прерывания выполняется в том же процессоре, что и код, который первоначально снял блокировку? Пока обработчик прерываний вращается, непрерывный код не сможет быть запущен, чтобы снять блокировку . Этот процессор будет вращаться вечно.

Я не понимаю, почему, если обработчик прерываний вращается, код без прерываний не может быть выполнен.

Это потому, что подпрограмма в обработчике прерываний не может быть прервана? Если это так, значит ли это, что процедура прерывания должна быть атомарной?

1 Ответ

2 голосов
/ 23 февраля 2012

Это потому, что подпрограмма в обработчике прерываний не может быть прервана?

Не по коду контекста процесса.

Если так, значит ли это, что процедура прерывания должна быть атомарной?

Может быть прервано прерыванием с более высоким приоритетом или NMI (или SMM).

...