Почему блокировки используются в обработчиках прерываний

Я хотел бы знать, почему спин-блокировки используются вместо семафоров внутри обработчика прерывания.

3 ответов


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


проблема в том, что обработчики прерываний (IH) запускаются асинхронно и непредсказуемым образом, из области любых других действий, выполняемых в системе. На самом деле, IHs выходят за рамки концепции потоков и планирования вообще. Из-за этого все примитивы взаимного исключения, которые полагаются на планировщик, неприемлемы. Поскольку их использование в IH может значительно увеличить задержки обработки прерываний (в случае IH, запущенного в контексте потока с низким приоритетом) и способен производить взаимоблокировки (в случае IH, запущенного в контексте потока, который удерживает блокировку).

вы можете посмотреть хорошее и подробное описание spinlocks в http://www.makelinux.net/ldd3/chp-5-sect-5.


в чем проблема с семафором и мьютексом. И зачем нужен спинлок ?

  • можем ли мы использовать semaphore или mutex на обработчики прерываний. Ответ да и нет. вы можете использовать игра, но вы не можете использовать вниз и блокировки, поскольку это блокирующие вызовы, которые ставят процесс в sleep и мы не должны спать в обработчиках прерываний.
  • обратите внимание, что семафор не методы systemV IPC, его просто методы синхронизации. И есть три функции для приобретения семафора.

    • вниз() : приобретите семафор и положите в не-прерываемое состояние.

    • down_trylock() : попробуйте, если блокировка доступна , если блокировка недоступна, не спите.

    • up () : - свой полезный для выпускать семафор!--18-->
  • Итак, что, если мы хотим достичь синхронизации в обработчиках прерываний ? Использовать spinlocks.

что spinlocks будет делать ?

  • Spinlock-это замок, который никогда не поддается.

  • подобно мьютексу, он имеет две операции-блокировка и разблокировка.

  • если замок доступен, то процесс приобретет его и будет продолжайте в критическом разделе и разблокировать его, как только его сделали. Это похоже на mutex. Но,что делать, если блокировка недоступна ? вот, приходит интересное различие. С mutex процесс sleep, пока замок не будет доступен. Но,

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

.

  • это вращающаяся часть спинового замка. Он был разработан для многопроцессорных систем. Но с упреждающим ядром даже однопроцессорная система ведет себя как SMP.