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/ |