Драйверы в вычислительной технике¶
Драйвер — это системное программное обеспечение, которое обеспечивает взаимодействие операционной системы и прикладных программ с аппаратным устройством или периферийным оборудованием. Драйвер выступает посредником: он транслирует общие команды операционной системы в специфические инструкции, понятные конкретному устройству, и наоборот — передаёт данные о состоянии оборудования обратно в систему. Без драйвера операционная система, как правило, не может использовать устройство в полном объёме или не распознаёт его вовсе.
¶Назначение и принцип работы
Аппаратные устройства разных производителей различаются внутренним устройством, регистрами, протоколами обмена и форматами команд. Операционная система не может содержать код для каждого существующего устройства, поэтому применяется модульный подход: ядро системы предоставляет универсальный интерфейс, а драйвер реализует его применительно к конкретной модели оборудования.
Типовая схема взаимодействия выглядит так:
- приложение обращается к операционной системе через стандартный вызов (например, запись файла на диск);
- операционная система передаёт запрос драйверу соответствующего устройства;
- драйвер преобразует запрос в команды, понятные контроллеру устройства;
- устройство выполняет операцию, а драйвер сообщает системе о результате.
Драйверы работают на разных уровнях привилегий. Часть из них встраивается в ядро (kernel-mode drivers) и имеет полный доступ к памяти и оборудованию, часть функционирует в пользовательском режиме. Ошибка в драйвере ядра способна привести к сбою всей системы, поэтому к их разработке и подписи предъявляются повышенные требования.
¶Классификация
Драйверы различают по нескольким признакам.
По типу устройства:
- драйверы видеокарт (графические);
- драйверы звуковых карт;
- драйверы сетевых адаптеров;
- драйверы принтеров, сканеров, МФУ;
- драйверы чипсета и материнской платы;
- драйверы накопителей и контроллеров хранения данных.
По способу подключения к системе:
- встроенные (входящие в состав операционной системы);
- устанавливаемые отдельно производителем оборудования.
По режиму работы:
- драйверы ядра;
- драйверы пользовательского режима;
- виртуальные драйверы, не связанные с физическим устройством напрямую.
¶История развития
В ранних операционных системах, таких как MS-DOS, драйверы часто подключались вручную через конфигурационные файлы, а их набор был ограничен. С распространением Windows и Linux утвердились стандартизированные модели драйверов: в Windows — WDM, WDF, а позднее модель, основанная на универсальных драйверах UMDF и KMDF; в Linux — модули ядра с открытым исходным кодом.
В Linux значительная часть драйверов входит непосредственно в ядро и распространяется по свободным лицензиям. Это упрощает поддержку, но создаёт сложности для производителей, не желающих раскрывать документацию на оборудование. В результате для ряда устройств драйверы либо отсутствуют, либо создаются сообществом методом обратной разработки.
В Windows исторически практиковалась поставка драйверов на отдельных носителях вместе с устройством. Со временем получили распространение централизованные хранилища и автоматическая загрузка через службы обновления.
¶Установка и обновление
Современные операционные системы, включая Windows и дистрибутивы Linux, содержат базу типовых драйверов и способны автоматически подбирать их при обнаружении нового оборудования. Тем не менее для полноценной работы видеокарт, звуковых интерфейсов и специализированного оборудования обычно требуется установка фирменного драйвера с сайта производителя.
Основные способы получения драйверов:
- автоматическая установка средствами операционной системы;
- загрузка с официального сайта производителя устройства;
- установка с прилагаемого носителя или диска;
- использование менеджеров пакетов в Linux;
- централизованное развёртывание в корпоративных сетях.
Обновление драйверов может улучшать производительность, устранять ошибки и закрывать уязвимости. Вместе с тем необоснованное обновление иногда приводит к нестабильной работе, поэтому в корпоративной среде применяют проверенные версии.
¶Проблемы и риски
Драйверы — один из наиболее уязвимых компонентов системы. Поскольку драйверы ядра обладают высокими привилегиями, ошибки и уязвимости в них используются злоумышленниками для повышения прав и внедрения вредоносного кода. Известны случаи, когда неподписанные или устаревшие драйверы становились каналом атаки.
Дополнительные сложности:
- несовместимость версий драйвера и операционной системы;
- отсутствие драйверов для устаревшего оборудования;
- конфликты между драйверами разных устройств;
- рост размера драйверов и усложнение их сопровождения.
Для снижения рисков применяют цифровую подпись драйверов, обязательную в 64-битных версиях Windows, изоляцию драйверов пользовательского режима и механизмы проверки целостности.
¶Драйверы в России
В России разработкой драйверов занимаются как производители вычислительной техники и электроники, так и профильные компании, создающие программное обеспечение для банковского, промышленного и телекоммуникационного оборудования. Значительное внимание уделяется драйверам для отечественных операционных систем семейства Linux, применяемых в государственных и корпоративных системах. Развитие собственных драйверов рассматривается как условие технологической независимости, поскольку импортные комплектующие нередко поставляются без документации, необходимой для написания ПО.
¶Смежные понятия
С драйверами тесно связаны понятия прошивки (firmware), которая выполняется самим устройством, и программного интерфейса (API), через который система обращается к драйверу. Иногда функции драйвера и прошивки частично дублируются, что требует согласованной работы обеих сторон.
Источники: документация Microsoft по моделям драйверов Windows; документация ядра Linux; материалы производителей видеокарт и периферии; техническая литература по операционным системам.