Лекция: Драйверы устройств

 

Программа управления каждым устройством ввода-вывода, подключённым к компьютеру, называется драйвером устройства. Поскольку различаются все внешние устройства ЭВМ, то и их управляющие программы тоже будут сильно различаться. Драйверы обычно пишутся производителями устройств и распространяются вместе с устройствами. Каждый драйвер устройства поддерживает один тип устройства или, максимум, класс близких устройств. Драйвер либо бывает частью ядра операционной системы (см. рис. 3.4), либо частью пространства пользователя. Чтобы получить доступ к аппаратной части устройства, т. е. к регистрам контроллера, драйвер должен быть частью ядра операционной системы. Если же драйвер работает в пространстве пользователя, то это позволяет изолировать ядро от драйверов, а драйверы друг от друга. При этом устраняется причина сбоев ОС, когда драйверы, содержащие ошибки, сталкиваются с ядром тем или иным способом. Чаще же драйверы работают в пространстве ядра. В этом случае необходима специальная архитектура, допускающая подобную установку, т. е. должна быть определена модель функций драйвера и его взаимодействие с остальной частью операционной системы.

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

Некоторые операционные системы представляют собой двоичную программу, содержащую в себе все необходимые драйверы, например, ОС UNIX. При добавлении нового устройства системный администратор перекомпилировал ядро с новым драйвером, получая при этом новый двоичный модуль. Ясно, что такие ОС эффективно работают на тех ЭВМ, где устройства ввода-вывода меняются редко.

На персональных компьютерах эта модель не эффективна, т. к. не все пользователи могут самостоятельно перекомпилировать и собрать ядро. Поэтому ОС, начиная с MS-DOS, перешли к модели динамической подгрузки драйверов.

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

§ обрабатывает запросы чтения и записи независимого от устройств программного обеспечения;

§ инициализирует устройства;

§ управляет энергопотреблением устройств и регистрацией событий;

§ проверяет входные параметры при обращении к устройству. Если параметры ошибочны, драйвер возвращает ошибку в оперативную систему; если параметры правильны, управляет работой устройства;

§ проверяет использование устройства в данный момент, т. е. контролирует работу устройства.

Управление устройством подразумевает выдачу ему серии команд. Именно в драйвере определяется последовательность команд в зависимости от того, что должно быть сделано. Определившись с командами, драйвер записывает их в контроллер устройства, после чего ситуация может развиваться по двум сценариям:

§ драйвер ждёт, пока контроллер не выполнит для него определённую работу; пока он ждёт, он блокируется до тех пор, пока прерывание от устройства его не разблокирует;

§ если работа контроллера быстрая, драйвер не блокируется, а начинает обрабатывать следующий запрос.

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

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

 

еще рефераты
Еще работы по информатике