Spinlock в драйвере устройства

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

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


person manish    schedule 09.11.2010    source источник
comment
en.wikipedia.org/wiki/Spinlock   -  person Johan Kotlinski    schedule 09.11.2010


Ответы (1)


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

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

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

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

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

person Christopher    schedule 09.11.2010