Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS.DOC
Скачиваний:
18
Добавлен:
28.10.2018
Размер:
653.82 Кб
Скачать

Взаимодействие драйверов с программной и аппаратной средой

Как уже отмечалось, в системе UNIX имеется два класса устройств - блочные устройства и устройства посимвольного ввода/вывода. Файловая структура может быть создана только на блок-ориентированных устройствах.

Блочные устройства представлены как запоминающие устройства с произвольным доступом, а к устройствам посимвольного ввода/вывода относятся все другие устройства, в том числе терминалы и сетевое оборудование. Пользователь взаимодействует с устройствами через посредничество файловой системы и драйверов. Каждое устройство имеет имя в каталоге /dev, и пользователь обращается к нему, как к файлу. Специальный файл устройства отличается от других файлов типом файла, хранящимся в его индексе: либо "блочный", либо "символьный специальный", в зависимости от устройства, которое этот файл представляет. Если устройство имеет и блочный, и символьный интерфейс, его представляют два файла: специальный файл устройства ввода/вывода блоками и специальный файл устройства посимвольного ввода/вывода. Системные функции обработки обычных файлов, такие, как open, close, read и write можно применять и для устройств. Однако системную функцию ioctl управляющую устройствами посимвольного ввода/вывода, нельзя применять по отношению к файлам обычного типа (и наоборот, системная функция fcntl обеспечивает контроль над действиями, производимыми на уровне дескриптора файла, но не на уровне устройства. В других реализациях функция ioctl применима для файлов всех типов.). Тем не менее, драйверам устройств нет необходимости поддерживать полный набор системных функций.

Байт-ориентированный интерфейс менее структурирован, поэтому программирование драйверов ввода/вывода для таких внешних устройств значительно проще.

Интерфейс системы с блок-ориентированными устройствами в большей степени определяется набором специальных функций и буферизацией блоков устройства. Поэтому их драйверы должны удовлетворять многим требованиям и системным соглашениям.

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

Синтаксис командной строки, содержащей вызов системной функции:

ioctl(fd,command,arg);

где fd - дескриптор файла, возвращаемый предварительно вызванной функцией open; command - действие (команда), которое необходимо выполнить драйверу; arg - параметр команды (может быть указателем на структуру). Команды специфичны для различных драйверов; следовательно, каждый драйвер интерпретирует команды в соответствии со своими внутренними спецификациями. От команды, в свою очередь, зависит формат структуры данных, описываемой передаваемым параметром. Драйверы могут считывать структуру данных arg из пространства задачи в соответствии с предопределенным форматом или записывать установки устройства в пространство задачи по адресу указанной структуры.

Например, наличие интерфейса, предоставляемого пользователям функцией ioctl, даст им возможность: 1) устанавливать для терминала скорость передачи информации в бодах, 2) перематывать магнитную ленту и 3) выполнять сетевые операции, задавая номера виртуальных каналов и сетевые адреса.

Доступ системы к драйверу соответствующего устройства осуществляется через две системные таблицы cdevsw и bdevsw содержащие указатели на подпрограммы драйверов. Сdevsw - для байт-ориентированных и bdevsw –для блок - ориентированных устройств.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]