windows driver programming

Dec 16, 2010 02:22

А прокоментируйте плиз нижеследующее ( Read more... )

win32 driver development, windows, programming

Leave a comment

Comments 24

eas7 December 20 2010, 17:26:57 UTC
ненужно ибо драйвер

Reply


viem77 December 20 2010, 18:03:02 UTC
Алиса права. Функция драйвера под виндой с разных точек одновременно не вызовется. Более того, насколько я помню, как правило даже ядро системы не вылазит за пределы одного процессорного ядра, во всяком случае до XP включительно. Если разные функции - тут понятно, но так как она одна и та же, то смысла оборачивать не вижу.

Reply

keltur December 20 2010, 18:20:58 UTC
ересь пишите,
функции драйвера могт вызываться паралелльно,
мультипроцессорное ядро есть начиная с самого начала (NT 3.0) - файл ntoskrnlmp

Reply

viem77 December 20 2010, 20:31:44 UTC
здрасьте, приплыли. функциИ - да. функциЯ одна и та же - просю пруфкод, на котором обвалится из-за доступа к глобальной переменной.

Reply


keltur December 20 2010, 18:18:38 UTC
Простой контрпример:
два приложения вызвают драйвер (явно или косвенно непринципииально),
две нити этих приложений выполняются на двух процессорах,
каждая нить сейчас обрабатывает в ядре соответствующий IRP,
следовательно функция-обработчик драйвера исполняется параллельно на двух процессорах,
следоватательно нужна синхронизация

если вы работаете с глобальной переменной только из одной функции, то у вас на выбор:
а) синхронизация данных на мьютексе/ресурсах
б) синхронизация кода (но критические секции в ядре недокументированы насколько я помню)
в) использовать атомарные (InterlockedXxx) операции

Reply

viem77 December 20 2010, 20:43:25 UTC
> каждая нить сейчас обрабатывает в ядре соответствующий IRP,
> следовательно функция-обработчик драйвера исполняется параллельно на двух процессорах,
не вижу причинно-следственной связи между этими утверждениями.

Reply

keltur December 21 2010, 10:39:58 UTC
почитайте в DDK про обработку ввода-вывода,
два приложения могут обратиться к одному устройству одновременно?
IRP_MJ_CREATE будет посылаться в драйвер на доступ к устройству?
функция обработчик IRP_MJ_CREATE может выполнятся параллельно в двух нитях двух приложений?

и внимательно читать вот это:
http://msdn.microsoft.com/en-us/library/ff564617(v=VS.85).aspx

Reply

viem77 December 21 2010, 12:13:15 UTC
Виндоус такой виндоус, что можно ожидать... Функция-обработчик может хоть в десяти нитях выполняться, хоть на сколько процессорных ядер будет распихана ядром, но для самого нижнего уровня работы с оборудованием для драйверов режима ядра проявлять излишнюю заботу о глобальных переменных надо не всегда, не для всех устройств и не для всех типов ядра системы. Впрочем, сейчас модно писать код, исходя из неких заданных правил без подключения аналитического аппарата межушного нервного узла. Nothing personal, я еще раз согласен с тем, что для сферического коня в вакууме вы правы. А зрить в корень, по заветам мудрейшего Козьмы Пруткова, дано не всем. Не принимайте близко к сердцу, вам просто не повезло с выбранной платформой.

Reply


ram_scanner December 20 2010, 19:06:50 UTC
Олли, не тупи. Твой драйвер забожежмой может параллельно выполняться в два ствола двумя ведрами (а то и поболе если ведер побольше). Сколько народу с постановкой сплайсинга неатомарными операциями в этот жыр по пояс вступило. На васме уж талмуд для чайнегов написали даже на тему что щщасте на SMP системах кончается. Есть еще гении которые на одном ведре прерывания отрубают а потом искренне удивляются какого хера оно валится...

Синхронизируй. Иначе в ламеры спишут, и будут абсолютно правы.

Reply

grey_olli December 20 2010, 23:49:41 UTC

viem77 December 20 2010, 20:33:42 UTC
Граждане комментаторы. Для сферического случая в вакууме вы может быть и правы. Но скажите мне, с каких пор у нас драйверы вне пространства ведра работают?

Reply


Leave a comment

Up