Поделиться через


Общие сведения о объектах контроллера

Как предполагает его имя, объект контроллера обычно представляет физический контроллер устройства с подключенными устройствами. Самый низкий уровень драйвера, отличного от WDM, для набора аналогичных устройств, координируемых физическим контроллером, может создать объект контроллера и использовать его для синхронизации операций ввода-вывода между подключенными устройствами. Драйвер реализует подпрограмму ControllerControl и вызывает поддерживающие подпрограммы объектов контроллеров менеджера ввода-вывода.

Примечание.

Использование объектов контроллера не поддерживается в драйверах WDM.

Как правило, драйверы используют объекты контроллера для синхронизации операций с подключенными устройствами при удержании следующих условий:

  • Контроллер не выполняет длительные операции без прерывания, поэтому драйверу не нужно создавать выделенный для устройства поток или использовать системные рабочие потоки.

  • Устройства, подключенные к контроллеру, похожи. То есть они не являются устройствами с совершенно разными физическими свойствами или функциональными возможностями, такими как устройства клавиатуры и мыши, которые могут быть подключены к клавиатуре и вспомогательному контроллеру устройства.

  • Драйвер предназначен быть монолитным: однослойным относительно контроллера устройства и подключенных физических устройств, а не в виде порт-драйвера (для контроллера) с одним или несколькими драйверами классов (для подключенных устройств), размещёнными поверх порт-драйвера.

Драйверы устройств с каналами ввода-вывода и набором объектов логических устройств также могут использовать объект контроллера для синхронизации операций ввода-вывода между каналами такого устройства или между ними.

Объект контроллера не имеет имени, поэтому не является целевым объектом запросов ввода-вывода. Это просто механизм синхронизации для сериализации ввода-вывода из набора объектов устройства. Так как объект контроллера не имеет имени, он невидим для подсистем, работающих в режиме пользователя, которые не могут выполнять запросы ввода-вывода устройства без получения идентификатора для объекта файла, представляющего целевой объект устройства. Объект контроллера также невидим для драйверов более высокого уровня, которые не могут подключать собственные объекты устройства к объекту контроллера. Другими словами, ни диспетчер ввода-вывода, ни драйвер более высокого уровня не могут настроить IRP, запрашивающий ввод-вывод на устройстве, представленном объектом контроллера. Запросы ввода-вывода всегда отправляются объектам устройств. Только драйвер может использовать объект контроллера.

Синхронизация и перекрытие операций ввода-вывода

Монолитным драйверам физических устройств с такими функциями, как у контроллера диска типа AT, не требуется использовать объект контроллера для синхронизации операций ввода-вывода их устройств. Например, модуль записи драйверов может попробовать примерно следующий метод синхронизации вместо использования объекта контроллера:

  • Настройте именованные объекты устройств для представления устройств, предназначенных для запросов ввода-вывода.

  • Храните сведения о состоянии (возможно, набор флагов "Занято устройство" в каждом расширении устройства или в одном расширении устройства), указывающий, какой объект устройства является целевым объектом текущей операции ввода-вывода.

  • Выполняйте операции ввода-вывода для объекта устройства, который в данный момент занят, и перенаправляйте входящие IRPs для других объектов устройств, пока текущий IRP не будет завершен.

Предыдущий метод синхронизации сериализует обработку IRP для всех целевых объектов устройства драйвера. Обратите внимание, что драйвер также заставляет драйвер завершить текущий IRP, прежде чем его подпрограмма StartIo может начать обработку следующего IRP, что, к сожалению, снижает производительность драйвера.

Если некоторые операции устройства могут перекрываться, использование объекта контроллера может увеличить пропускную способность ввода-вывода драйвера, так как этот метод синхронизации позволяет драйверу определить, может ли он перекрывать операции непосредственно перед настройкой физического устройства. Например, контроллер диска может позволить драйверу перекрывать поиск на одном диске с операциями чтения и записи на другом диске.

Кроме того, использование объекта контроллера является относительно простым способом синхронизации операций ввода-вывода для нескольких целевых объектов устройства через одно физическое устройство, например контроллер диска AT. Использование объекта контроллера позволяет монолитному драйверу синхронизировать операции ввода-вывода в наборе именованных объектов устройств без необходимости поддерживать состояние каждого устройства и контроллера в одном или нескольких расширениях устройства и без необходимости повторной постановки IRP в очередь.

Однако некоторые устройства, предназначенные для перекрывания операций ввода-вывода, таких как полнодуплексные последовательные контроллеры или адаптеры шины, обычно имеют драйверы, настраивающие внутренние очереди для IRP.