logo
Лекции_по_ОС / ТОС_11_п_вв_выв_слайды

Символьные устройства

Символьные устройства представляют собой значительную часть периферийного оборудования системы, включая терминалы, мани (например, мышь), клавиатуру и локальные принтеры. Основное отличие этих устройств от блочных заключается в том, что они, как правило дают небольшие объемы данных.

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

Если процесс сделал системный вызов ввода/вывода, например, 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.