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