- •Подсистема ввода/вывода
- •Драйверы устройств
- •Типы драйверов
- •Базовая архитектура драйверов
- •Файловый интерфейс
- •Vnode а также inode физической файловой системы, где расположен специальный файл устройства, и соответствующий ему vnode.
- •Встраивание драйверов в ядро
- •Блочные устройства
- •Символьные устройства
- •Интерфейс доступа низкого уровня
- •Буферизация
- •Архитектура терминального доступа
- •Псевдотерминалы
Подсистема ввода/вывода
Фактическая архитектура ввода/вывода скрыта от прикладного процесса несколькими интерфейсами.
Однако возможны ситуации, когда прикладному процессу требуется взаимодействие с периферийными устройствами на более низком уровне.
Хотя в этом случае роль файловой подсистемы не столь велика, как при работе с обычными файлам, все равно ядро предоставляет процессу унифицированную схему, скрывающую истинную архитектуру того или иного устройства.
В конечном итоге работа всех этих интерфейсов, как высокого уровни (файловая система), так и более низкого (взаимодействие с физическим устройством), обеспечивается подсистемой ввода/вывода ядра (ПВВ).
основным компонентом ПВВ являются драйверы — модули ядра, обеспечивающие непосредственную работу с периферийными устройствами.
UNIX использует два основных типа драйверов – символьные и блочные.
Как следует из названия, драйверы первого типа обеспечивают обмен сравнительно небольшими объемами данных с устройством, что имеет место при работе, например, с терминалами или принтерами. Драйверы второго типа производят передачу данных блоками, что имеет место для дисковых носителей данных. Эти типы драйверов входят в традиционную подсистему ввода/вывода и присутствуют во всех версиях UNIX.
Драйверы устройств
Драйверы устройств обеспечивают интерфейс между ядром UNIX и аппаратной частью компьютера.
Благодаря этому от остальной части ядра скрыты архитектурные особенности компьютера, что значительно упрощает перенос и поддержку работы различных периферийных устройств.
В UNIX существует большое количество драйверов. Часть из них обеспечивает доступ к физическим устройствам, например, жесткому диску, принтеру или терминалу, другие предоставляют аппаратно-независимые услуги. Примермо последних могут служить драйверы /dev/kmem для работы с виртуальной памятью ядра /dev/null, представляющий "нулевое" устройство.
В процессе запуска системы ядро вызывает соответствующие процедуры инициализации установленных драйверов.
Типы драйверов
по возможностям, которые они предоставляют, по способу обеспечения к ним доступа и управления.
три основные типа драйверов:
Символьные драйверы |
работу с устройствами с устройствами с побайтовым доступом и обменом данными (модемы, терминалы, принтеры, манипуляторы мышь и т. Д). Доступ к драйверам не включает использование буф. кэша. При необходимости буферизации обычно используется подход, основанный на структурах данных, называемых clist. |
Блочные драйверы |
Этот тип драйверов позволяет производить обмен данными с устройством фиксированными порциями (блоками). Например, для жесткого диска данные можно адресовать и, соответственно, читать только секторами, размер которых составляет несколько сотен байтов. обычно используется буф.кэш, который является интерфейсом между файловой системой и устройством. |
Драйверы низкого уровня (raw drivers) |
Этот тип интерфейса блочных драйверов позволяет производить обмен данными с блочными устройствами, минуя буферный кэш. Обмен данными позволяет производить ядру передачу непосредственно между пользовательским процессом и устройством, без дополнительного копирования. |
На рис. 5.1 приведена упрощенная схема взаимодействия драйверов устройств с другими подсистемами операционной системы UNIX.
Не все драйверы служат для работы с физическими устройствам
Часть драйверов служат для предоставления различных услуг ядра прикладным процессам и не имеют непосредственного отношения к аппаратной части компьютера. Такие драйверы называются программными или драйверами псевдоутройств.
примеры псевдоустройств и соответствующих программных драйверов: