student
Гость
|
|
« : 14-05-2006 20:45 » |
|
Нужно написать приложение, которое в одном потоке читает/пишет данные, а в другом ждет прерывание и в случае прихода обрабатывает его. Вопрос: Должен ли я в драйвере(драйвер мой) как-то учитывать, что буду работать с ним в нескольких потоках?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #1 : 15-05-2006 11:01 » |
|
1. на уровне обращения независимых процессов к общим ресурсам - да;) рекомендуются для синхронизации: мьютексы, семафоры, Interloked и SpinLock функции. 2. когда создается объект драйвера - ему можно дать флаг, что открыть его handle(CreateFile) может только одно приложение, хотя вы не это наверное спрашивали)
|
|
« Последнее редактирование: 15-05-2006 11:06 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
IRP
Постоялец
Offline
|
|
« Ответ #2 : 16-05-2006 09:44 » |
|
Все зависит от функциональности и архитектуры которую ты заложишь в драйвер. Если с драйвером могут работать несколько потоков одновременно (писать или читать) то я думаю здесь нужна синхронизация. Как я понимаю проблемма в следующем. Обрабатывается прерывание и чего то сохраняет вы буффер, выставляет event для приложения и завершает обработку. Приложение услышав event забирает эти данные. Если это так на самом деле - то я думаю что нужно предусмотреть синхронизацию при обращение к буферу из обработчика прерываний с высоким IRQL и обращения к буферу их DISPATH_ROUTINE твоего драйвер с более низким IRQL. В зависимости от значений IRQL правильно выбери объект синхронизации!
|
|
|
Записан
|
|
|
|
student
Гость
|
|
« Ответ #3 : 16-05-2006 15:08 » |
|
Спасибо. Пишу и читаю я через ReadFile Writefile. и у меня есть специальный буффер для передачи данных из DpcForIsr пользовательскому приложению. DpsForIsr сигнализирует приложению через event. И приложение через DeviceIoControl читает данные из драйвера(буфера). Вопрос: Пересекаются ли эти буферы?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #4 : 16-05-2006 15:15 » |
|
не понял?))) кто туда пишет и кто из него читатет?)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
IRP
Постоялец
Offline
|
|
« Ответ #5 : 17-05-2006 07:19 » |
|
Все зависит от того как ты работаешь с этим буфером из DpsForIsr. Если при добавлении новых данных выделяешь постоянно новый буфер - а потом вычитываешь его и возвращаешь память системе - то тогда не обязательно синхронизировать. Если буфер единый - то тут нужна синхронизация. В общем все зависит от конкретной реализации. Если распишешь подробнее схему работы - может быть смогу сказать поконкретней.
|
|
|
Записан
|
|
|
|
|