
- •3.4. Процессы и потоки
- •3.5. Управление памятью
- •3.6 Организация ввода-вывода
- •3.7 Драйверы устройств
- •3.8 Файловые системы
- •3.9 Файловые системы Microsoft Windows
- •3.10 Операционная система Windows
- •3.11 Служебные программы
- •3.12 Прикладное программное обеспечение
- •4.2. Принципы разработки алгоритмов и программ для решения прикладных задач
- •4.3. Методы и искусство программирования
3.7 Драйверы устройств
П
рограмма
управления каждым устройством
ввода-вывода, подключённым к компьютеру,
называется драйвером устройства.
Поскольку различаются все внешние
устройства ЭВМ, то и их управляющие
программы тоже будут сильно различаться.
Драйверы обычно пишутся производителями
устройств и распространяются вместе с
устройствами. Каждый драйвер устройства
поддерживает один тип устройства или,
максимум, класс близких устройств.
Драйвер либо бывает частью ядра
операционной системы (см. рис. 3.4), либо
частью пространства пользователя.
Чтобы получить доступ к аппаратной
части устройства, т. е. к регистрам
контроллера, драйвер должен быть частью
ядра операционной системы. Если же
драйвер работает в пространстве
пользователя, то это позволяет изолировать
ядро от драйверов, а драйверы друг от
друга. При этом устраняется причина
сбоев ОС, когда драйверы, содержащие
ошибки, сталкиваются с ядром тем или
иным способом. Чаще же драйверы работают
в пространстве ядра. В этом случае
необходима специальная архитектура,
допускающая подобную установку, т. е.
должна быть определена модель функций
драйвера и его взаимодействие с остальной
частью операционной системы.
Операционная система классифицирует драйверы по нескольким категориям в соответствии с типами обслуживаемых ими устройств: блочными или символьными устройствами. В большинстве ОС определены два стандартных интерфейса, один из которых должен поддерживать все блочные драйверы, а другой – все символьные драйверы.
Некоторые операционные системы представляют собой двоичную программу, содержащую в себе все необходимые драйверы, например, ОС UNIX. При добавлении нового устройства системный администратор перекомпилировал ядро с новым драйвером, получая при этом новый двоичный модуль. Ясно, что такие ОС эффективно работают на тех ЭВМ, где устройства ввода-вывода меняются редко.
На персональных компьютерах эта модель не эффективна, т. к. не все пользователи могут самостоятельно перекомпилировать и собрать ядро. Поэтому ОС, начиная с MS-DOS, перешли к модели динамической подгрузки драйверов.
Драйвер устройства выполняет следующие основные функции:
обрабатывает запросы чтения и записи независимого от устройств программного обеспечения;
инициализирует устройства;
управляет энергопотреблением устройств и регистрацией событий;
проверяет входные параметры при обращении к устройству. Если параметры ошибочны, драйвер возвращает ошибку в оперативную систему; если параметры правильны, управляет работой устройства;
проверяет использование устройства в данный момент, т. е. контролирует работу устройства.
Управление устройством подразумевает выдачу ему серии команд. Именно в драйвере определяется последовательность команд в зависимости от того, что должно быть сделано. Определившись с командами, драйвер записывает их в контроллер устройства, после чего ситуация может развиваться по двум сценариям:
драйвер ждёт, пока контроллер не выполнит для него определённую работу; пока он ждёт, он блокируется до тех пор, пока прерывание от устройства его не разблокирует;
если работа контроллера быстрая, драйвер не блокируется, а начинает обрабатывать следующий запрос.
По окончании работы с устройством, драйвер проверяет, не было ли ошибок. Если всё в порядке он возвращает информацию о проделанной работе вызывающей программе. После этого драйвер либо опять блокируется, либо выполняет следующий запрос.
В целом драйверам не разрешается обращаться к системным вызовам, но некоторые из них они всё же используют для взаимодействия с ядром, например, вызовы диспетчера памяти, таймера, контроллера прерываний и т. п. Сейчас преобладает подход, при котором у всех драйверов, несмотря на все их различия, должен быть похожий интерфейс. Работать с драйверами в таких условиях пользователям значительно легче.