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


Что такое драйвер?

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

Схема, показывающая взаимодействие между приложением, операционной системой и драйвером.

Развертывание определения

Наше объяснение упрощает концепцию драйверов. Вот еще несколько моментов, которые следует учитывать.

  • Драйверы не всегда должны разрабатываться производителем устройства. Если устройство соответствует опубликованному стандарту оборудования, корпорация Майкрософт может написать драйвер, поэтому конструктор устройств не должен предоставлять его.

  • Не все драйверы взаимодействуют напрямую с устройством. Часто несколько драйверов, размещенных в стеке драйверов , принимают участие в запросе ввода-вывода. Обычный способ визуализации стека — первый участник вверху и последний участник в нижней части, как показано на этой схеме. Некоторые драйверы в стеке изменяют запрос из одного формата в другой. Эти драйверы не взаимодействуют напрямую с устройством. Вместо этого они изменяют запрос и передают его драйверам, которые находятся ниже в стеке.

    Схема, демонстрирующая взаимодействие между приложением, операционной системой, тремя драйверами и устройством.

    Драйвер функции. Драйвер, который напрямую взаимодействует с устройством, называется драйвером функции.

    Драйвер фильтра. Драйверы, которые выполняют вспомогательную обработку, называются драйверами фильтров.

    Дополнительные сведения о стеках см. в разделе Стеки драйверов.

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

Мы можем уточнить определение драйвера как любого программного компонента, который наблюдает или участвует в обмене данными между операционной системой и устройством.

Драйверы программного обеспечения

Расширенное определение является достаточно точным, но по-прежнему неполным, так как некоторые драйверы вообще не связаны с каким-либо аппаратным устройством.

Например, если необходимо написать средство, которое обращается к основным структурам данных операционной системы, его можно разделить на два компонента. Первый компонент выполняется в пользовательском режиме и представляет пользовательский интерфейс. Второй компонент выполняется в режиме ядра и обращается к данным основной операционной системы. Компонент, работающий в пользовательском режиме, называется приложением, а компонент, работающий в режиме ядра, называется программным драйвером. Программный драйвер не связан с аппаратным устройством.

На этой схеме показано приложение в пользовательском режиме, взаимодействующее с программным драйвером в режиме ядра.

Схема, показывающая связь между приложением и программным драйвером.

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

Дополнительные сведения о режимах процессора см. в разделах Пользовательский режим и Режим ядра.

Водители автобусов

Еще одним типом водителей является водитель автобуса. Чтобы понять драйверы автобуса, необходимо понимать узлы устройств и дерево устройств.

Сведения о деревьях устройств, узлах устройств и драйверах шины см. в разделе Узлы устройств и стеки устройств.

Дополнительные сведения о драйверах функций

Наше объяснение до сих пор упрощение определения драйвера функции. Мы указали, что драйвер функции для устройства — это драйвер в стеке, который напрямую взаимодействует с устройством. Это справедливо для устройства, которое подключается напрямую к шине PCI. Драйвер функции для устройства PCI получает адреса, сопоставленные с ресурсами порта и памяти на устройстве. Драйвер функции напрямую взаимодействует с устройством, записывая на эти адреса.

Однако во многих случаях устройство не подключается напрямую к шине PCI. Вместо этого устройство подключается к адаптеру шины узла, который подключен к шине PCI. Например, USB-тостер подключается к адаптеру шины узла (называемому КОНТРОЛЛЕРом УЗЛА USB), который подключен к шине PCI. USB-тостер имеет драйвер функции, а usb-контроллер узла также имеет драйвер функции. Драйвер функции для тостера косвенно взаимодействует с тостером, отправляя запрос к драйверу функции для usb-контроллера узла. Затем драйвер функции для хост-контроллера USB взаимодействует напрямую с оборудованием USB-контроллера узла, которое взаимодействует с тостером.

Схема, демонстрирующая взаимодействие между драйверами USB-тостера, драйвером хост-контроллера USB и шиной PCI.