OSDev
http://osdev.su/

Вввод-вывод
http://osdev.su/viewtopic.php?f=5&t=530
Страница 1 из 1

Автор:  Bargest [ 18 апр 2012, 23:52 ]
Заголовок сообщения:  Вввод-вывод

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

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

Автор:  grindars [ 20 апр 2012, 19:27 ]
Заголовок сообщения:  Re: Вввод-вывод

Bargest писал(а):
Правильно ли я понимаю, что сия функция зависима от устройства (например, она не имеет смысла для COM-порта) ...

Именно так.

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


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

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


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

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


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

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


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

Автор:  Bargest [ 20 апр 2012, 19:41 ]
Заголовок сообщения:  Re: Вввод-вывод

Спасибо за развёрнутый ответ. По поводу дебага - в личке.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/