ПВВ
В конечном итоге работа всех интерфейсов, как высокого уровни (файловая система), так и более низкого (взаимодействие с физическим устройством), обеспечивается подсистемой ввода/вывода ядра (ПВВ).
основным компонентом ПВВ являются драйверы — модули ядра, обеспечивающие непосредственную работу с периферийными устройствами.
UNIX использует два основных типа драйверов – символьные и блочные.
Устройства
UNIX "изолирует" приложения от аппаратной части вычислительной системы.
Например, в имени файла отсутствует указатель диска, на котором этот файл расположен, а большая часть взаимодействия с периферийными устройствами неотличима от операций с обычными файлами.
UNIX предоставляет единый интерфейс различных устройств системы в виде специальных файлов устройств.
Специальный файл устройства связывает прикладное приложение с драйвером устройства.
Каждый специальный файл соответствует какому-либо физическому устройству (например, диску, накопителю на магнитной ленте, принтеру или терминалу) или т. н. псевдоустройству (например, сетевому интерфейсу, пустому устройству, сокету или памяти).
Вся работа приложения с устройством происходит через специальный файл, а соответствующий ему драйвер обеспечивает выполнение операций ввода/вывода в соответствии с конкретным протоколом обмена данными с устройством.
Существует два типа специальных файлов устройств:
-
Файлы блочных устройств
-
Файлы символьных устройств
Файлы блочных устройств
Файлы блочных устройств служат интерфейсом к устройствам, обмен данными с которыми происходит большими фрагментами, называемыми блоками.
Ядро ОС обеспечивает необходимую буферизацию. Пример: жесткие диски.
ПРИМЕР: фрагмент подробного списка файлов каталога /dev системы UNIX, отражающий файлы для доступа к первому и второму разделам первого диска SCSI:
brw 1 root system 8, 1 Apr 18 11:03 /dev/rzOa
brw 1 root system 8, 1 Apr 18 13:15 /dev/rzOb
Файлы символьных устройств
Файлы символьных устройств используются для доступа к устройствам, драйверы которых обеспечивают собственную буферизацию и побайтную передачу данных.
Пример устройства с символьным интерфейсом: терминалы, принтеры и накопители на магнитной ленте.
одно и то же физическое устройство может иметь как блочный, так и символьный интерфейсы.
Для блочных устройств такой интерфейс также называют интерфейсом доступа низкого уровня (raw interface).
для побайтного доступа к разделам диска, приведенным в предыдущем примере, используются соответствующие файлы:
crw 1 root system 8,1 Apr 18 11:04 /dev/rrzOa
crw 1 root system 8,1 Apr 18 13:15 /dev/rrzOb
crw-r 1 root system 13,1 Apr 18 18:08 /dev/kmem
crw-rw-rw- 1 root system 7,0 Apr 18 15:20 /dev/ptypO
crw-rw-rw- 1 root system 7,1 Apr 18 15:20 /dev/ptypl
crw-rw-rw- 1 bin terminal 3,2 Apr 18 16:10 /dev/ttyO2
crw-rw-rw- 1 bin terminal 3,3 Apr 18 16:10 /dev/ttyO3
Последние три строки списка представляют интерфейс доступа к виртуальной памяти ядра и двум псевдотерминалам.
В поле размера файла (пятая колонка вывода команды ls()) у специальных файлов устройств выводятся два числа.
Это так называемые старшее (major) и младшее (minor) числа. Часто драйвер обслуживает более одного устройства.
старшее число указывает ядру на конкретный драйвер (например, драйвер псевдо-терминалов), а младшее передается драйверу и указывает на конкретное устройство (например, конкретный псевдотерминал).
Интерфейс файловой системы для взаимодействия с устройством схематически представлен на рис. 1.7.
Мнемоника названий специальных файлов устройств в файловой системе unix
Названия специальных файлов устройств в большой степени зависят от конкретной версии UNIX.
Тем не менее в этих названиях присутствует общая логика, позволяющая даже в незнакомой системе определить, какие файлы отвечают за конкретные устройства. Например, имена файлов доступа к дисковым устройствам обычно содержат указание на тип диска, номер контроллера, логический номер устройства, раздел диска и т. д. По названию также легко определить, какой вид доступа предоставляет данный интерфейс (блочный или символьный).
Пример: специальный файл устройства для доступа к разделу диска в ОС Solaris:
/dev/dsk/c0t4d0s2
Данный файл предоставляет блочный интерфейс, а соответствующий ему символьный (или необработанный) файл имеет имя:
/dev/rdsk/c0t4d0s2
Файлы доступа к дисковым устройствам располагаются в специальных подкаталогах — /dev/dsk (для блочных устройств) и
/dev/rdsk (для символьных устройств).
Такая структура хранения специальных файлов характерна для систем UNIX версии System V.
Имя файла, характерное для систем версии SVR4, можно представить в общем виде:
cktldmsn
где к — номер контроллера,
l — номер устройства (для устройств SCSI это идентификатор устройства ID),
m — номер раздела, а
n — логический номер устройства (LUN) SCSI.
Т.о. файл устройства /dev/rdsk/c0t4d0s2 обеспечивает доступ к первому разделу (нумерация разделов начинается с 0) диска с ID=4, LUN=2 первого контроллера.
Такой формат имен файлов в версии SVR4 применяется для всех дисковых устройств и накопителей на магнитной ленте. Иногда для этих стандартных имен в файловой системе имеются символические связи с более простыми названиями.
Например, в Solaris имя /dev/sd0a может использоваться вместо /dev/dsk/c0t3d0s, также обеспечивая доступ к устройству:
lrwxrwxrwx 1 root root 12 Oct 31 17:48 /dev/sd0a ->dsk/c0t3d0s
В SCO UNIX имеются специальные файлы с более простыми именами /dev/root, /dev/usr и т. п, которые предоставляют доступ к разделам диска с такими же именами (root, usr).
Более простая мнемоника обнаруживается в именах специальных файлов других устройств. Так, например, параллельный порт в большинстве систем имеет имя /dev/lpn, где п — номер порта (0, 1 и т. д.)- Терминальные линии, подключенные к последовательным портам компьютера обозначаются как /dev/ttynn, где пп является идентификатором линии. В табл. 1.6 приведены примеры других специальных файлов устройств.
Таблица 1.6. Имена некоторых специальных файлов устройств
Общий вид имени Пример Описание устройства, доступ к
которому обеспечивается через файл
/dev/rmtn /dev/rmtO Накопитель на магнитной ленте
/dev/nrmtn /dev/nrmtO Накопитель на магнитной ленте в режиме
без перемотки назад по окончании работы
/dev/rstn /dev/rst1 SCSI-накопитель на магнитной ленте
/dev/cdn /dev/cdO CD-ROM
/dev/cdrom
/dev/ttypn /dev/ttyp12 Псевдотерминал (подчиненный)
/dev/ptypn /dev/ptyp5 Псевдотерминал (мастер)
/dev/console Системная консоль
/dev/tty Синоним терминальной линии управляю-
щего терминала для данного процесса
/dev/mem Физическая оперативная память
/dev/kmem Виртуальная память ядра
/dev/null Нулевое устройство — весь вывод на него
уничтожается, а при попытке ввода с этого устройства
возвращается 0 байтов
/dev/zero Нулевое устройство — весь вывод на него
уничтожается, а ввод приводит к получению последовательности О