2014-11-26 11 views
0

Я понимаю, что мы отключили interrupts при приобретении spinlocks в обработчиках прерываний.Прерывание и прямая блокировка

У меня есть сомнение относительно того, что происходит, когда spinlock хранится в process context и в этот момент происходит прерывание?

Может ли этот сценарий произойти?

В соответствии с моим пониманием, если обработчик также пытается получить тот же самый lock, который хранится в контексте процесса, он будет продолжать вращаться для этой блокировки.

Так мы всегда отключим прерывания при покупке spinlock?

ответ

-1

Спиннинг - это то, для чего предназначены спиновые замки.

Когда прерывание происходит на другом CPU, оно будет вращаться только до тех пор, пока блокировка процесса и контекста не будет разблокирована.

Когда прерывание происходит на одном CPU, оно будет вращаться навсегда. Вот почему вы должны отключить прерывания при блокировке вращения в контексте процесса, и если одна и та же блокировка также используется обработчиком прерываний.

(Отключение прерывания при приеме спина-блокировке в контексте прерывания, как правило, не требуется, поскольку обработчик прерываний не может быть прерван по себе.)

+0

Может случиться так, что выше прерывание приоритета может наступить, когда прерывание имеет спин-блокировку , и этот запрос с приоритетным прерыванием, который блокирует. Так всегда лучше отключить прерывания при покупке спин-блокировки? – user3351750

+0

Вы можете избежать отключения прерываний только в том случае, если вы можете доказать, что нет (другого) прерывания принимает тот же замок. –

+0

Прерывания могут вытеснять друг друга. – Martin