OSDev

для всех
Текущее время: 19 окт 2018, 01:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Вввод-вывод
СообщениеДобавлено: 18 апр 2012, 23:52 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Вопрос 1. SetFilePointer.
Правильно ли я понимаю, что сия функция зависима от устройства (например, она не имеет смысла для COM-порта) и реализуется в Windows при помощи DeviceIOControl? Если нет, то как?
З.Ы. Пытался дизассемблировать винду, но интересующая часть кода защищена от дебага простыми дебаггерами вроде IDA.:(

Вопрос 2. параллельная работа
Существуют ли устройства, способные работать параллельно с несколькими потоками ввода-вывода (например, одновременно вводить и выводить данные, или выводить разные данные в несколько каналов)? Т.к. та модель ввода-вывода, что я придумал, такой возможности на одном устройстве лишена (без регистрации в системе дополнительных экземпляров того же устройства), и если таковые устройства существуют, нужно придумывать что-то другое.
Я планирую запустить для каждого устройства в системе поток, который всё время спит; диспетчер устройств, при обнаружении запроса IO к какому-либо устройству, будит соответствующий поток, и тот обходит очередь запросов, вызывая для каждого драйвер, пока запросы не кончатся и он снова не заснёт. В этом случае запросы для разных устройств будут обслуживаться параллельно, но всё же на каждом устройстве будет строго последовательная обработка и параллельно обработать запросы к одному и тому же устройству будет крайне трудно (драйверу придётся самому создавать в системе потоки и вручную перераспределять запросы между ними).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вввод-вывод
СообщениеДобавлено: 20 апр 2012, 19:27 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
Bargest писал(а):
Правильно ли я понимаю, что сия функция зависима от устройства (например, она не имеет смысла для COM-порта) ...

Именно так.

Bargest писал(а):
... и реализуется в Windows при помощи DeviceIOControl?


Нет, не через неё. Есть две функции API ядра - NtSetInformationFile и NtQueryInformationFile, через подфункцию FilePositionInformation которой можно получить доступ к указателю. Но это только для синхронных (не-overlapped) вызовов. Для асинхронных позиция задается в структуре overlapped WinAPI или через параметр ByteOffset для Native API (см., например, NtReadFile).

Bargest писал(а):
З.Ы. Пытался дизассемблировать винду, но интересующая часть кода защищена от дебага простыми дебаггерами вроде IDA.:(


Защищена от дебага? Не встречал ничего такого, сколько не разбирал. Что разбирали и в чем заключается проблема? Можно в личку, в принципе.

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


Да, такое бывает. COM-порты (UART, если точнее) могут одновременно работать на прием и на передачу, шина SPI вообще только одновременно.

Цитата:
Я планирую запустить для каждого устройства в системе поток, который всё время спит; диспетчер устройств, при обнаружении запроса IO к какому-либо устройству, будит соответствующий поток, и тот обходит очередь запросов, вызывая для каждого драйвер, пока запросы не кончатся и он снова не заснёт. В этом случае запросы для разных устройств будут обслуживаться параллельно, но всё же на каждом устройстве будет строго последовательная обработка и параллельно обработать запросы к одному и тому же устройству будет крайне трудно (драйверу придётся самому создавать в системе потоки и вручную перераспределять запросы между ними).


В принципе, нормальное решение. Истинно параллельное выполнение - достаточно редкое явление, и усложнять всю систему ради пары устройств смысла нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вввод-вывод
СообщениеДобавлено: 20 апр 2012, 19:41 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Спасибо за развёрнутый ответ. По поводу дебага - в личке.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB