Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

Так как в операционную систему будут устанавливаться куски программ (драй­веры), написанные другими программистами, необходима определенная архитекту­ра, позволяющая подобную установку. Это означает, что должна быть выработана строго определенная модель функций драйвера и его взаимодействия с остальной операционной системой. Драйверы устройств обычно располагаются под осталь­ной операционной системой, как показано на рисунке:

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

Чтобы получить доступ к аппаратной части устройства, то есть к регистрам кон­троллера, драйвер устройства должен быть частью ядра операционной системы, по крайней мере, в существующих на сегодняшний день архитектурах. Некоторые ОС представляли собой единую дво­ичную программу, содержащую в себе, в откомпилированном вместе с ней виде, все необходимые ей драйверы. Такая схема в течение многих лет была нормой для систем UNIX, так как они предназначались для работы в компьютерных центрах, а устройства ввода-вывода менялись нечасто. При добавлении нового устройства системный администратор просто перекомпилировал ядро с новым драйвером, получая новый двоичный модуль. С появлением персональных компьютеров с их огромным разнообразием устрой­ств ввода-вывода такая модель перестала работать. И операционные системы, начиная с MS-DOS, перешли к модели динамической подгрузки драйверов во время выполнения системы.

У драйвера устройства есть несколько функций. Наиболее очевидная - обработка абстрактных запросов чтения и записи независимо­го от устройств ПО. Кроме этого, драйвер должен при необходимости инициализировать устройство. Ему также может по­надобиться управлять энергопотреблением устройства и регистрацией событий.

Многие драйверы устройств обладают сходной общей структурой. Типич­ный драйвер начинает с проверки входных параметров. Если они не удовлетворя­ют определенным критериям, драйвер возвращает ошибку. В противном случае драйвер преобразует абстрактные термины в конкретные (например, дисковый драйвер может преобразовывать линейный номер блока в номера головки, дорожки и секторы). Затем драйвер может проверить, не используется ли это устройство в данный момент. Если устройство занято, запрос может быть поставлен в очередь. Если устройство свободно, проверяется аппаратный статус устройства, чтобы понять, может ли запрос быть обслужен прямо сейчас. Может оказаться необходимым включить устройство или запустить двигатель, прежде чем начнется перенос данных. Как только устройство включено и готово, может начинаться собственно управление устройством - выдачу ему серии команд. Именно в драйвере определяется последовательность команд в зависимости от того, что должно быть сделано. Определившись с командами, драйвер начинает записывать их в регистры контроллера устройства. После записи каждой команды в контрол­лер может быть нужно проверить, принял ли контроллер эту команду и готов ли принять следующую. Такая последовательность действий продолжается до тех пор, пока контроллеру не будут даны все команды.

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

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

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





Дата публикования: 2015-01-26; Прочитано: 1055 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...