Драйвер — программный модуль¶
Драйвер — это программный модуль операционной системы, обеспечивающий взаимодействие аппаратных устройств или программных подсистем с остальной частью системы. Драйверы работают на уровне ядра операционной системы и предоставляют единый программный интерфейс для доступа к ресурсам устройства, скрывая от прикладного программного обеспечения особенности конкретного оборудования.
¶Назначение и принцип работы
Основная задача драйвера — абстрагировать приложения от различий в аппаратном обеспечении. Программа, обращающаяся к принтеру, не должна знать, является ли тот лазерным или струйным, подключён ли по USB или по сети: за неё это делает драйвер, преобразующий универсальные команды в специфичные для устройства протоколы.
Драйверы работают в двух основных режимах:
- В режиме ядра — имеют полный доступ к аппаратным ресурсам и памяти, выполняются с высокими привилегиями. Ошибка в драйвере ядра может привести к сбою всей системы (синий экран смерти в Windows, паника ядра в Linux).
- В режиме пользователя — работают в изолированном пространстве, что повышает устойчивость системы, но ограничивает доступ к оборудованию. Такой подход применяется, например, в драйверах CUPS для печати в Linux и macOS.
¶Классификация
Драйверы классифицируют по нескольким признакам.
По типу управляемого устройства:
| Тип | Примеры |
|---|---|
| Дисковые устройства | HDD, SSD, оптические приводы |
| Сетевые устройства | сетевые карты, Wi-Fi модули |
| Видеоустройства | видеокарты, мониторы |
| Периферийные устройства | клавиатуры, мыши, принтеры |
| Звуковые устройства | звуковые карты, микрофоны |
| Датчики и контроллеры | термометры, акселерометры |
По способу подключения к системе:
- Монолитные — встроены в ядро операционной системы (типично для Linux, где драйверы часто компилируются как модули ядра).
- Загружаемые модули — подключаются к работающей системе без перезагрузки.
- Пользовательские — работают в пространстве пользователя и общаются с ядром через специальные интерфейсы.
¶Драйверы в разных операционных системах
¶Windows
В Windows драйверы реализуются в виде исполняемых файлов с расширением .sys и подписываются цифровой подписью Microsoft. Система использует модель WDM (Windows Driver Model) и более новую модель KMDF/WDM-совместимую Windows Driver Framework (WDF). Драйверы видеокарт в Windows поставляются производителями оборудования (NVIDIA, AMD, Intel) и устанавливаются через Windows Update или специализированные утилиты.
¶Linux
В Linux драйверы являются модулями ядра (.ko-файлы) и часто входят в основное дерево ядра. Распространённый пакет linux-headers содержит заголовочные файлы для компиляции модулей. Драйверы для большинства устройств уже включены в ядро, поэтому новые устройства нередко работают «из коробки». Для управления драйверами используются утилиты modprobe, lsmod, insmod.
¶macOS
В macOS драйверы реализуются в виде бандлов (.kext — kernel extension). С 2020 года Apple постепенно переводит драйверы на DriverKit — фреймворк, работающий в пространстве пользователя, что повышает безопасность системы.
¶Установка и обновление
Операционные системы автоматически определяют оборудование и подбирают подходящий драйвер. В Windows для этого используется механизм Plug and Play (PnP), в Linux — udev. Обновления драйверов выпускаются для исправления ошибок, повышения производительности и обеспечения совместимости с новым оборудованием. В корпоративной среде драйверы часто распространяются через системы централизованного управления (например, WSUS или SCCM).
¶Особенности разработки
Разработка драйверов — сложная задача, требующая знания архитектуры операционной системы и аппаратных интерфейсов. Ошибки в драйверах являются частой причиной нестабильности компьютеров. В связи с этим операционные системы предпринимают меры по изоляции драйверов: механизм Driver Verifier в Windows, механизм изоляции драйверов в macOS и ограничения на запись в память ядра в современных Linux-системах.
¶Интересные факты
- В 1990-х годах драйверы часто распространялись на дискетах, входивших в комплект с оборудованием.
- В Linux драйверы для большинства устройств написаны сообществом и распространяются под свободными лицензиями (GPL).
- Некоторые устройства (например, принтеры HP) поддерживаются двумя независимыми драйверами: проприетарным от производителя и свободным (HPLIP).
Источники:
- «Операционные системы» — учебник под редакцией С. С. Балакирева
- Документация Microsoft по Windows Driver Framework (WDDM)
- Документация ядра Linux (kernel.org)
- «Драйверы устройств в Linux» — материалы Linux Documentation Project
