Многоуровневые драйверы
Первоначально, первый драйвер применяли в доступно узком смысле. Под драйвером понимается программный модуль, который:
- входит в состав ядра операционной системы, работая в привилегированном режиме;
- непосредственно управляет внешним устройством, взаимодействует с его контроллером с помощью команды ввода-вывода в компьютере;
- обрабатывает прерывания от контроллера устройства;
- предоставляет прикладному программисту удобный1 логический интерфейс для работы с устройством, экранируя от него низкоуровневые детали управления устройством и организации его данных;
- взаимодействует с другими модулями ядра ОС с помощью строго оговоренного интерфейса, описывающего формат передаваемых данных, структуру буфера, способы включения драйверов в состав ОС и т.д.
По мере развития ОС и усложнения структуры подсистем ввода-вывода в ОС появились высокоуровневые драйверы, которые располагаются в общей модели подсистемы ввода-вывода над традиционными драйверами. Вместо того, чтобы концентрировать все функции по управлению устройством в одном программном модуле гораздо эффективнее распределить их между несколькими модулями в соседних слоях иерархии.
Традиционные драйверы, которые стали называть аппаратными низкоуровневыми или драйверами устройств занимаются только низкоуровневыми операциями. При таком подходе повышается гибкость и расширяемость функций по управлению устройств.
На практике в подсистеме ввода-вывода чаще всего используют от 2 до 5 уровней драйверов. высокоуровневые драйверы не вызываются по прерываниям, т.к. взаимодействуют с управляющим устройством через посредничество аппаратных драйверов.
Менеджер ввода-вывода управляет драйверами однотипно не зависимо от того, к какому уровню он относится.
В вертикальной подсистеме сетевых устройств приведенной на схеме аппаратными драйверами являются драйверы сетевых адаптеров, которые выполняют функции низкоуровневых канальных протоколов (Ethernet, FR, ATM). Они организуют передачу кадров данных между компьютерами одной сети. Над ними располагается слой модулей, которые реализуют функции более интеллектуальных протоколов (IP, IPX), которые могут обеспечить взаимодействие компьютеров разных сетей с производительными связями. Они находятся в промежуточном слое и непосредственно с аппаратурой не взаимодействуют.
Еще выше располагается слой транспортных протоколов (CP/UDP,SPX), которые отвечают за надежную связь между компьютерными сетями.
Драйверы верхнего уровня (HTTP,FTP,SMB) представляют пользователям конечные услуги по доступу к гипертекстовой информации к архивам файла и т.д.
В подсистеме управления графическими устройствами (мониторы и принтеры) на нижнем уровне работают аппаратные драйверы, позволяющие управлять графическим адаптером или принтером, заставляя выполнять набор примитивных графических операций: вывод точки, символа и т.д. Высокоуровневые графические драйверы строят на базе этих операций более мощные операции (масштабирование изображения, преобразование графического формата в соответствии с разрешающими возможностями устройства). Самый верхний уровень подсистемы составляет менеджер окон, который создает для каждого приложения виртуальный образ экрана в виде набора окон, в котором приложение может выводить свои графические данные.
В подсистеме управления дисками аппаратные драйверы поддерживают для верхних уровней представления диска, как последовательного набора блоков одинакового размера, преобразуя вместе с контроллером номер блока, в более сложный адрес, состоящий из номера цилиндра, головки и сектора.
Понятие файла такие драйверы не поддерживают. Для этого в ОС устанавливается несколько высокоуровневых драйверов файловых систем (UFS, NTFS, FAT), работающих с общеаппаратными драйверами, но по-своему представляющих файловую систему пользователя процессов. Может присутствовать общий драйвер верхнего уровня, играющий роль диспетчера нескольких драйверов файловых систем.
Условно разделяют как драйверы, так и периферийные устройства делятся на два типа: блок-ориентированные и байт-ориентированные .
Блок-ориентированные драйверы управляют устройствами прямого доступа, которые хранят информацию в блоках фиксированного размера, каждый из которых имеет фиксированный адрес (диск в качестве примера).
Устройства, с которым работают блок-ориентированные драйверы - не адресуемы и не позволяют производить операцию поиска данных, они генерируют или потребляют последовательность байтов.
Специальные файлы
В унификацию драйверов большой вклад внесла операционная система UNIX. В этой системе все драйверы были разделены на два больших класса: блок-ориентированные (block-oriented) драйверы и байт-ориентированные (character-oriented) драйверы. Например, драйверы графических устройств и драйверы сетевых устройств относятся к классу байт-ориентированных. Блок-ориентированные драйверы управляют устройствами прямого доступа, которые хранят информацию в блоках фиксированного размера, каждый из которых имеет собственный адрес. Самое распространенное внешнее устройство прямого доступа - диск. Адресуемость блоков приводит к тому, что для устройств прямого доступа появляется возможность кэширования данных в оперативной памяти, и это обстоятельство значительно влияет на общую организацию ввода-вывода для блок-ориентированных драйверов.
Устройства, с которыми работают байт-ориентированные драйверы, не адресуемы и не позволяют производить операцию поиска данных, они генерируют или потребляют последовательности байт. Примерами таких устройств, которые также называют устройствами последовательного до-ступа, служат терминалы, строчные принтеры, сетевые адаптеры.
Блок- или байт-ориентированность является характеристикой как самого устройства, так и драйвера. Очевидно, что если устройство не поддерживает обмен адресуемыми блоками данных, а позволяет записывать или считывать последовательность байт, то и устройство, и его драйвер можно назвать байт-ориентированными. Для байт-ориентированного устройства невозможно разработать блок-ориентированный драйвер.
Устройство прямого доступа с блочной адресацией является блок-ориентированным, и для управления им естественно использовать блок-ориентированный драйвер. Однако блок-ориентированным устройством можно управлять и с помощью байт-ориентированного драйвера. Так, диск можно рассматривать не только как набор блоков, но и как набор байт, первый из которых начинает первый блок диска, а последний завершает последний блок. Физический обмен с контроллером устройства по-прежнему осуществляется блоками, но байт-ориентированный драйвер устройства будет преобразовывать блоки в последовательность байт. Для устройств прямого доступа часто разрабатывают пару драйверов, чтобы к устройству можно было обращаться и по байт-ориентированному, и по блок-ориентированному интерфейсам в зависимости от потребностей.
Операционная система UNIX в свое время сделала еще один важный шаг по унификации операций и структуризации программного обеспечения ввода-вывода. В ОС UNIX все устройства рассматриваются как некоторые виртуальные (специальные) файлы, что дает возможность использовать общий набор базовых операций ввода-вывода для любых устройств независимо от их специфики.
Специальный файл всегда связан с некоторым устройством ввода-вывода и представляет его для остальной части операционной системы и прикладных процессов в виде неструктурированного набора байт. Интерфейс взаимодействия со специальным файлом организован так же, как и с обычным. Его можно открывать, считывать из него определенное количество байт или же записывать в него определенное количество байт, а после завершения операции закрывать.
Очевидно, что представление устройства в виде файла и использование для управления устройством файловых системных вызовов во многих случаях не позволяет выполнять только достаточно простые операции.
Традиционно специальные файлы помещаются в каталог /dev, хотя ничто не мешает создать их в любом каталоге файловой системы.
Дата добавления: 2016-06-02; просмотров: 1221;