Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Обзор системы ввода/вывода Отображение ввода/вывода от пользователя на устройство

Отображение ввода/вывода от пользователя на устройство

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

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

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

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

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

Устройства идентифицируются по номеру устройства, который составляется из старшего (major) и младшего (minor) номеров устройства. Старший номер устройства уникально идентифицирует тип устройства (на самом деле, драйвера устройства).

Исторически он использовался в качестве индекса элемента устройства в таблице символьных устройств. В FreeBSD 5.2 нет таблицы символьных устройств. Когда устройства конфигурируются, в файловой системе /dev создаются элементы для устройства. Каждый элемент в файловой системе /dev имеет прямую ссылку на его соответствующий элемент cdevsw. FreeBSD 5.2 назначает каждому устройству при его конфигурировании уникальный старший номер устройства, чтобы обеспечить совместимость для приложений, которые его проверяют. Но внутри ядра или драйвера устройства он не используется.

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


Похожие:
Еще по теме:

Сейчас 55 гостей онлайн