Многоуровневые драйверы


 

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

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

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

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

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

Пример 1.

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

Пример 2.

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

 

В унификацию драйверов большой вклад внесла операционная система UNIX. В ней все драйверы были разделены на два больших класса: блок-ориентирован­ные (block-oriented) драйверы и байт-ориентированные (character-oriented) драйверы.

· Блок-ориентированные драйверы управляют устройствами прямого доступа, ко­торые хранят информацию в блоках фиксированного размера, каждый из кото­рых имеет собственный адрес. Самое распространенное внешнее устройство пря­мого доступа — диск. Адресуемость блоков приводит к тому, что для устройств прямого доступа появляется возможность кэширования данных в оперативной памяти, и это обстоятельство значительно влияет на общую организацию ввода-вывода для блок-ориентированных драйверов.

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

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

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

 

Специальные файлы

 

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

Понятие специального файла появилось в операционной системе UNIX. Специальный файл всегда связан с некоторым устройством ввода-вывода и представляет его для остальной части операционной системы и прикладных процессов в виде неструктурированного набора байт. Со специальным файлом можно работать так же, как и с обычным, то есть открывать, считывать из него определенное количество байт или же записывать в него определенное количество байт, а после завершения операции закрывать. Для этого используются те же системные вызовы, что и для работы с обычными файлами: open, create, read, write и close. Таким образом, для того чтобы вывести на алфавитно-цифровой терминал, с которым связан специальный файл /dev/tty3, сообщение "Hello, friends!", достаточно открыть этот файл с помощью системного вызова open:

fd = open ("/de/tty3". 2)

Затем можно вывести сообщение с помощью системного вызова write:

write (fd, "Hello, friends!". 15)

Для устройств прямого доступа имеет смысл также указатель текущего положения в файле, которым можно управлять с помощью системного вызова lseek.

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

Традиционно специальные файлы помещаются в каталог /dev, хотя ничто не мешает создать их в любом каталоге файловой системы. При появлении ново­го устройства и соответственно нового драйвера администратор системы может создать новую запись с помощью команды mknod. Например, следующая команда создает блок-ориентированный специальный файл:

mknod /dev/dsk/sc4d2s3 b 32 33

 



Дата добавления: 2016-06-05; просмотров: 2708;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.