2010-11-09 11 views
2

Может кто-нибудь объяснить точное использование спин-блокировки в случае драйвера устройства. Я просто смущен, как и во многих процедурах обработчика прерываний, которые я видел во всплывающих окнах. Поскольку спин-блокировка оживает. он может сделать задержку в других прерываниях. Пожалуйста, по возможности перечислите некоторые сценарии для драйвера устройства, в котором мы можем использовать spinlockSpinlock в драйвере устройства

Я новичок в этом поле. ваша помощь делает для меня начальный толчок.

+0

http://ru.wikipedia.org/wiki/Spinlock –

ответ

4

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

Так, например, если вы хотите заблокировать некоторую структуру данных (вне прерываний), вы приобретаете мьютекс. Когда кто-то другой владеет мьютексом, ваш поток помещается в «ожидающий» список в планировщике до тех пор, пока мьютекс не будет выпущен. Затем он получает право собственности на мьютексы, а все остальные потоки, к которым он обращается, усыпляются, когда они пытаются получить мьютекс.

Когда вы находитесь в прерывании, вы не можете этого сделать. У вас также нет контекста нити, и это прерывание не будет отложено «на неопределенный срок». Но иногда вам необходимо получить доступ к общим данным внутри прерывания. Когда в системе присутствует более одного CPU, несколько прерываний и потоков могут работать одновременно. Поэтому вы должны защищать рабочие очереди, общие объекты и т. Д., Чтобы они не повреждались. Для этого вы используете спинлоки. Поскольку политика заключается в том, чтобы делать как можно меньше вещей внутри секции, защищенной от спин-блокировок, вы можете ожидать, что нет никаких проблем со спиннинг на самом замке всего за пару циклов, пока он не будет освобожден владельцем.

Итак, что взять из этого является то, что при доступе к разделяемым данным из прерывания, вы имеет использовать спинлок, потому что нет никаких других примитивов, которые могут быть использованы.

И как отмечено, всегда держите спин-блокировку только в течение очень небольшого количества времени.