Драйвер устройства

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

Драйвер устройства – это такая программа управления каждым устройством ввода-вывода, подключенным к компьютеру

Драйвер обычно пишется производителем и распространяется вместе с устройством. Поскольку для каждой операционной системы требуются специальные драйверы, производители устройств обычно поставляют драйверы для нескольких наиболее популярных операционных систем. Каждый драйвер устройства поддерживает один тип или, максимум, класс близких устройств.

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

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

В большинстве операционных систем определены два стандартных интерфейса, один из которых должен поддерживать все блочные драйверы, а второй – все символьные.

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

  1. обработку абстрактных запросов чтения и записи независимого от устройств и расположенного над ними программного обеспечения;
  2. инициализацию устройства;
  3. управление энергопотреблением и регистрацией событий;
  4. проверку входных параметров. Если они не удовлетворяют определенным критериям, драйвер возвращает ошибку.
  5. проверку использования устройства в данный момент. Если устройство занято, запрос может быть поставлен в очередь. Если оно свободно, проверяется его состояние. Как только устройство готово, может начинаться собственно управление – выдача ему серии команд. Именно в драйвере и определяется последовательность команд в зависимости от того, что должно быть сделано. Определившись с командами, драйвер начинает записывать их в регистры контроллера устройства.

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

По завершении выполнения операции драйвер должен проверить, завершилась ли операция без ошибок. Если все в порядке, драйверу устройства, возможно, придется передать данные программному обеспечению. Затем он возвращает некоторую информацию вызывающей программе о завершении операции.

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

Инструменты