Символьные устройства
Символьные устройства представляют собой значительную часть периферийного оборудования системы, включая терминалы, мани (например, мышь), клавиатуру и локальные принтеры. Основное отличие этих устройств от блочных заключается в том, что они, как правило дают небольшие объемы данных.
Обмен данными с символьными устройствами происходит непосредственно через драйвер, минуя буферный кэш. При этом данные обычно копируются в драйвер из адресного пространства процесса, запросившего операцию ввода/вывода.
Если процесс сделал системный вызов ввода/вывода, например, read(2)
Или write(2) со специальным файлом символьного устройства, запрос направляется
в файловую подсистему. Поскольку доступ к устройству обслу-
живаемой файловой системой specfs, рассмотренной ранее, в ответ на вы-
полнение системного вызова процесса ядро выполняет вызов функции
spec_read() или spec_write() соответственно для read(2) или write(2).
Действие функций spec read () и spec write () похожи. Обе проверяют тип vnode и определяют, что устройство является символьным. После этого, с помощью коммутатора, ядро выбирает соответствующую точку входа конвейера, используя старший номер, хранящийся в поле v_rdev vnode, вызывает эту функцию (соответственно xxread () или xxwrite(J)), передавая ей в качестве параметров старший и младший номера, ряд дополнительных параметров, зависящих от конкретного вызова, а также явно или неявно адресует область копирования данных в адресном пространстве процесса3.
- Подсистема ввода/вывода
- Драйверы устройств
- Типы драйверов
- Базовая архитектура драйверов
- Файловый интерфейс
- Vnode а также inode физической файловой системы, где расположен специальный файл устройства, и соответствующий ему vnode.
- Встраивание драйверов в ядро
- Блочные устройства
- Символьные устройства
- Интерфейс доступа низкого уровня
- Буферизация
- Архитектура терминального доступа
- Псевдотерминалы