Система ввода/вывода LINUX.
В
системе ввода/вывода все внешние
устройства рассматриваются как файлы,
над которыми допускается производить
обычные файловые операции. Конечно,
существуют и драйверы устройств, но
интерфейс с ними оформлен для пользователя
как обращение к специальному файлу.
Специальные файлы являются средством
унификации системы ввода/вывода.
Каждому
подключенному устройству (терминалу,
дискам, принтеру и т. д.), соответствует,
как минимум, один специальный файл.
Большая часть этих специальных файлов
хранится в каталоге /dev:
$
cd /dev
$
ls -l
onsole
пульт управления системы
dsk
порции на диске
fd0
флоппи-диск 1
mem
память
lр
принтер
lр0
параллельный порт 0
.
. .
root
порция на диске для корневой файловой
системы
swap
своп-порция
syscon
альтернативное имя пульта
systty
еще одно имя для системной консоли
term
директория для терминалов
ttyS0
серийный порт 0 (COM1)
.
. .
Когда
программа выполняет запись в такой
специальный файл, то ОС система
перехватывает их и направляет на
устройство, например принтер. При чтении
данных из такого типа файла в
действительности они принимаются с
устройства, например, с диска. Программа
не должна учитывать особенности работы
устройства ввода/вывода. Для этой цели
и служат специальные файлы (драйверы),
которые выполняют функции интерфейса
между компонентами ядра ОС и прикладными
программами общего назначения. Система
обнаруживает отличие обычного файла
от специального только после того, как
будет проанализирован соответствующий
индексный дескриптор, на который
ссылается запись в каталоге.
Индексный
дескриптор специального файла содержит
информацию о классе устройства, его
типе и номере. Класс устройства определяет
устройства с посимвольным обменом и с
поблочным обменом. Примером устройства
с посимвольным обменом может служить
клавиатура. Специальные файлы,
обеспечивающие связь с устройствами
такого типа, называют байт-ориентированными.
Для блочных устройств характерен обмен
большими блоками информации, это ускоряет
обмен и делает его более эффективным.
Все дисковые устройства поддерживают
блочный обмен, а специальные файлы,
обслуживающие их, называют
блок-ориентированными. Специальные
файлы не содержат какой-либо символьной
информации, поэтому в листинге каталога
их длина не указывается.
Тип
и номер устройства, также являются
основными характеристиками специальных
файлов (в поле длины помещаются главный
и дополнительный номера соответствующего
устройства). Первый из них определяет
тип устройства, второй - идентифицирует
его среди однотипных устройств. ОС может
одновременно обслуживать несколько
десятков, и даже сотни терминалов. Каждый
из них должен иметь свой собственный
специальный файл, поэтому наличие
главного и дополнительного номеров
позволяет установить требуемое
соответствие между устройством и таким
файлом.
В
LINUX дисковые устройства имеют своеобразные
обозначения. В LINUX пользователь никогда
не сталкивается с проблемой точного
указания физического устройства, на
котором располагается информация. В
LINUX произвольное число внешних устройств
может быть очень большим, поэтому,
пользователь имеет дело только с именем
каталога, в котором находятся нужные
ему файлы. Все файловые системы монтируются
один раз, как правило, при загрузке
системы. На некоторые каталоги могут
быть смонтированы файловые системы и
с удаленных компьютеров.
Для
физических устройств в LINUX существуют
директории dsk и rdsk, которые содержат
файлы, соответствующие дисковым
устройствам. Обыкновенно имена файлов
в этих директориях одинаковы и единственная
разница между ними, что директория rdsk
содержит дисковые устройства со
специальным доступом (raw), который
используют некоторые устройства системы
для более быстрого доступа к диску. Одна
типичная директория dsk содержит следующие
устройства:
$
1s /dev/dsk
0s0
1s0 c0t0d0s0 c0tld0s0 f0 f05q f13dt fld8d
0sl
1sl c0t0d0sl c0tld0sl f03d f05qt f13h fld8dt
0s2
1s2 c0t0d0s2 c0tld0s2 f03dt f0d8d f13ht fld8t
.
. .
$
B
системе LINUX дисковые устройства логически
разделены на секции, подобно разделам
определяемым в Partition Table MasterBoot MS DOS. Файлы
0s1, 0s2, 0s3 и т. д, соответствуют секциям
первой, второй, третьей и т. д. диска с
номером 0. Файлы 1s0, 1sl, 1s2 и т. д. соответствуют
секциям первой, второй, третьей и т. д.
диска с номером 1. Если система имеет
больше дисков, секции будут пронумерованы
ns0, nsl и т. д. для каждого диска с номером
n.
Системы
с большим количеством дисковых устройств
используют следующую систему нумерации:
с
controller
d
disk
s
section
где
controller - номер контроллера диска; disk -
номер диска; section -номер секции диска.
Так,
0s0 обычно эквивалентно c0t0d0s0, а 0sl -
c0t0d0sl, и трехсимвольные имена секций -
это просто сокращение для дискового
контроллера с номером 0.
Файлы,
имена которых начинаются с f, определяют
различные виды гибких дисков. Каталог
rmt содержит файлы на устройствах типа
магнитная лента:
$
1s /dev/rmt
c0s0
cls0 c3s0 ntape ntapel tape tapel
Файлы
c0s0, cls0, c2s0 и c3s0 определяют четыре кассетных
ленточных запоминающих устройства.
Файлы tape и tapel определяют магнитные
запоминающие устройства с двумя бобинами.
Файлы, чьи имена начинаются с n, относятся
к тем же устройствам, только лента не
перематывается после использования, в
то время как использование других файлов
заставляет ленту перематываться, когда
использующая ее программа заканчивает
работу.
В
некоторых системах эти файлы имеют
другие названия, однако все они всегда
находятся в /dev и словарь, который обычно
приходит с системой, содержит подробное
описание устройств и связанных с ними
файлов.
Файловая
система extX при операциях ввода/вывода
использует буферизацию данных. При
считывании блока информации ядро выдает
запрос операции ввода/вывода на несколько
расположенных рядом блоков. Такие
операции сильно ускоряют извлечение
данных при последовательном считывании
файлов. При занесении данных в файл
файловая система extX, записывая новый
блок, заранее размещает рядом до 8 смежных
блоков. Такой метод позволяет размещать
файлы в смежных блоках, что ускоряет их
чтение и дает возможность достичь
высокой производительности системы.