- •Глава 8. Обслуживание ввода-вывода
- •1. Задачи ос по управлению файлами и устройствами
- •1.1. Организация параллельной работы устройств ввода-вывода и процессора
- •1.2. Согласование скоростей обмена и кэширование данных
- •1.3. Разделение устройств и данных между процессами
- •1.4. Обеспечение удобного логического интерфейса между устройствами и остальной частью системы
- •1.5. Поддержка широкого спектра драйверов и простота включения нового драйвера в систему
- •1.6. Динамическая загрузка и выгрузка драйверов
- •1.7. Поддержка нескольких файловых систем
- •1.8. Поддержка синхронных и асинхронных операций ввода-вывода
- •2. Многослойная модель подсистемы ввода-вывода
- •2.1 Общая схема
- •2.2 Менеджер ввода-вывода
- •2.3 Многоуровневые драйверы
- •2.4 Специальные файлы
2.4 Специальные файлы
Специальные файлы, называемые иногда виртуальными, не связаны со статичными наборами данных, хранящихся на дисках, являются удобным унифицированным представлением устройств ввода-вывода.
Понятие специального файла появилось в операционной системе UNIX. Специальный файл всегда связан с некоторым устройством ввода-вывода и представляет его для остальной части операционной системы и прикладных процессов в виде неструктурированного набора байт. Со специальным файлом можно работать так же, как и с обычным, то есть открывать, считывать из него определенное количество байт или же записывать в него определенное количество байт, а после завершения операции закрывать. Для этого используются те же системные вызовы, что и для работы с обычными файлами: open, create, read, write и close. Таким образом, для того чтобы вывести на алфавитно-цифровой терминал, с которым связан специальный файл /dev/tty3, сообщение "Hello, friends!", достаточно открыть этот файл с помощью системного вызова open:
fd = open ("/de/tty3". 2)
Затем можно вывести сообщение с помощью системного вызова write:
write (fd, "Hello, friends!". 15)
Для устройств прямого доступа имеет смысл также указатель текущего положения в файле, которым можно управлять с помощью системного вызова lseek.
Очевидно, что представление устройства в виде файла и использование для управления устройством файловых системных вызовов во многих случаях позволяет выполнять только достаточно простые операции.
Традиционно специальные файлы помещаются в каталог /dev, хотя ничто не мешает создать их в любом каталоге файловой системы. При появлении нового устройства и соответственно нового драйвера администратор системы может создать новую запись с помощью команды mknod. Например, следующая команда создает блок-ориентированный специальный файл:
mknod /dev/dsk/sc4d2s3 b 32 33