Скачиваний:
21
Добавлен:
09.05.2014
Размер:
354.82 Кб
Скачать

Оцените этот текст:

Глава 10. Подсистема управления вводом-выводом

Подсистема управления вводом-выводом позволяет процессам поддерживать

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

ках и лентах, терминалы, принтеры и сети, с одной стороны, и с модулями яд-

ра, которые управляют устройствами и именуются драйверами устройств, с дру-

гой. Между драйверами устройств и типами устройств обычно существует одноз-

начное соответствие: в системе может быть один дисковый драйвер для управле-

ния всеми дисководами, один терминальный драйвер для управления всеми терми-

налами и один ленточный драйвер для управления всеми ленточными накопителя-

ми. Если в системе имеются однотипные устройства, полученные от разных изго-

товителей - например, две марки ленточных накопителей, - в этом случае можно

трактовать однотипные устройства как устройства двух различных типов и иметь

для них два отдельных драйвера, поскольку таким устройствам для выполнения

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

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

Например, один терминальный драйвер может управлять всеми терминалами, подк-

люченными к системе. Драйвер различает устройства, которыми управляет: вы-

ходные данные, предназначенные для одного терминала, не должны быть посланы

на другой.

Система поддерживает "программные устройства", с каждым из которых не

связано ни одно конкретное физическое устройство. Например, как устройство

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

не, пусть даже память не является периферийным устройством. Команда ps обра-

щается к информационным структурам ядра в физической памяти, чтобы сообщить

статистику процессов. Еще один пример: драйверы могут вести трассировку за-

писей в удобном для отладки виде, а драйвер трассировки дает возможность

пользователям читать эти записи. Наконец, профиль ядра, рассмотренный в гла-

ве 8, выполнен как драйвер: процесс записывает адреса программ ядра, обнару-

женных в таблице идентификаторов ядра, и читает результаты профилирования.

В этой главе рассматривается взаимодействие между процессами и подсисте-

мой управления вводом-выводом, а также между машиной и драйверами устройств.

Исследуется общая структура и функционирование драйверов и в качестве приме-

ров общего взаимодействия рассматриваются дисковые и терминальные драйверы.

Завершает главу описание нового метода реализации драйверов потоковых уст-

ройств.

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

В системе UNIX имеется два типа устройств - устройства вводавывода бло-

ками и устройства неструктурированного или посимвольного ввода-вывода. Как

уже говорилось в главе 2, устройства ввода-вывода блоками, такие как диски и

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

произвольной выборкой; к устройствам посимвольного ввода-вывода относятся

все другие устройства, в том числе терминалы и сетевое оборудование. Устрой-

ства ввода-вывода блоками могут иметь интерфейс и с устройствами посимволь-

ного ввода-вывода.

Пользователь взаимодействует с устройствами через посредничество файло-

вой системы (см. Рисунок 2.1). Каждое устройство имеет имя, похожее на имя

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

ройства имеет индекс и занимает место в иерархии каталогов файловой системы.

Файл устройства отличается от других файлов типом файла, хранящимся в его

индексе, либо "блочный", либо "символьный специальный", в зависимости от ус-

290

тройства, которое этот файл представляет. Если устройство имеет как блочный,

так и символьный интерфейс, его представляют два файла: специальный файл ус-

тройства ввода-вывода блоками и специальный файл устройства посимвольного

ввода-вывода. Системные функции для обычных файлов, такие как open, close,

read и write, имеют то же значение и для устройств, в чем мы убедимся позже.

Системная функция ioctl предоставляет процессам возможность управлять уст-

ройствами посимвольного ввода-вывода, но не применима в отношении к файлам

обычного типа (*). Тем не менее, драйверам устройств нет необходимости под-

держивать полный набор системных функций. Например, вышеупомянутый драйвер

трассировки дает процессам возможность читать записи, созданные другими

драйверами, но не позволяет создавать их.

Соседние файлы в папке материалы к собеседованию