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


Предотвращение опроса устройств

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

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

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

Хотя может показаться логичным решить проблему медленного устройства путем написания простого цикла, который увеличивает счетчик, тем самым "тратя" минимальный интервал во время регистрации обновлений устройства, такой драйвер вряд ли будет переносимым на разных платформах Windows. Максимальное значение счетчика цикла потребует настройки для каждой платформы. Кроме того, если драйвер компилируется с помощью хорошего компилятора оптимизации, компилятор может удалить переменную счетчика драйвера и циклы, в которых она увеличивается.

Примечание Следуйте этому руководству по реализации, если драйвер должен зависать в состоянии обновления оборудования устройства. Драйвер может вызвать KeStallExecutionProcessor перед считывание регистров устройств. Драйвер должен свести к минимуму интервал, который он зависает, и, как правило, должен указывать интервал останова не более 50 микросекунд.

Гранулярность интервала KeStallExecutionProcessor составляет один микросекунд.

Если устройству часто требуется более 50 микросекунд для обновления состояния, рассмотрите возможность настройки выделенного для устройства потока в драйвере.