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

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



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

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

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

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

Традиционно в ОС UNIX выделяются три типа организации ввода/вывода и, соответственно, три типа драйверов. В частности, в ОС UNIX различаются кроме символьных, блок-ориентированных, еще и потоковые драйверы.

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

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

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

В ОС UNIX возможны два способа включения драйвера в состав ядра ОС. Первый способ состоит в полном включении драйвера в состав ядра на стадии генерации системы (т.е. драйвер статически объявляется частью ядра системы). Второй способ позволяет обойтись минимальным количеством статических объявлений на стадии генерации ядра. В любой момент работы системы такой драйвер может быть динамически загружен в ядро системы. После появления (статического или динамического) в ядре ОС UNIX драйверы всех разновидностей функционируют единообразно.

2.3.3. Независимый от устройств слой операционной системы. Пользовательский слой программного обеспечения ввода/вывода

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

Типичными функциями для независимого от устройств слоя ОС являются:

· обеспечение общего интерфейса к драйверам устройств;

· именование устройств;

· защита устройств;

· обеспечение независимого размера блока;

· буферизация;

· распределение памяти на блок-ориентированных устройствах;

· распределение и освобождение выделенных устройств;

· уведомление об ошибках.

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

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

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

Другой категорией программного обеспечения ввода/вывода является подсистема спулинга (spooling). Спулинг – это способ работы с выделенными устройствами в мультипрограммной системе (способ применения буферной памяти). Рассмотрим типичное устройство, требующее спулинга – принтер. Создается специальный процесс – монитор, который получает исключительные права на использование этого устройства. Также создается специальный каталог, называемый каталогом спулинга. Для того, чтобы напечатать файл, пользовательский процесс помещает выводимую информацию в этот файл и помещает его в каталог спулинга. Процесс-монитор по очереди распечатывает все файлы, содержащиеся в каталоге спулинга.





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



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