THIS SECTION IS UNDER CONSTRUCTION
Драйвер - программа управляющая устройством или несколькими и имеющая унифицированный интерфейс с OS. +------------+ | OS | +------------+ | Driver | +------------+ | Hardware | +------------+ +------------+ +-----------+ | Driver |-------+------------+| +------------+ | Device |+ +------------+ Интерфейс зависит от операционной системы и типа устройства.
Например в UNIX устройства бывают символьные и блочные: Обмен с блочными устройствами происходит данными фиксированной длинны кратной размера блока. Типичные запросы к блочным устройствам: Взять размер устройства в блоках Взять размер блока Взять геометрию устройства Прочитать блоки Записать блоки SCSI pass-through (потому что вся storage кроме IDE/ESDI - SCSI) Типичные запросы к символьным устройствам Чтение Письмо Управление (ioctl) Но все равно некоторые типы устройств имеют специфические интерфейсы например FSD - File System Driver. Или драйверы сетевых карт и протоколов. В Windows устройства более специализированные SCSI Miniport NDIS Miniport NDIS Protocol Generic Kernel Mode Driver --- Bus Driver FSD Driver Filter Drivers WDM (как правило USB HID)
Драйверы / \ Драйвер Фильтр Драйвер физического (например драйвер класса устройств). устройства
TODO: Типовые интерфейсы драйверов
TODO: Типовые API предоставляемые OS для драйверов. Управление памятью Структуры данных и запросы могут находится в различных типах памяти OS Non-Paged Pool (Адрессное пространство OS, неподкачиваемое) OS Paged Pool (Адрессное пространство OS, подкачиваемое) Application (Адрессное пространство приложения) Понятно, что драйвер должен уметь осуществлять доступ во все эти пространства, при необходимости подкачивать и локировать страницы. Хотя бы копировадь данные между kernel и user spaces. Управление устройствами Физический ввод/вывод Работа с конфигурационной информацией (PCI Bus итд, Registry) Запуск и управление нитями в ядре и в приложениях Работа с пространством имен Object Managerа Вспомогательные сервисы Запуск и управление другими драйверами Включая их вызовы Подсоединение к другим устройствам