У аппаратных устройств есть имена файлов, и пользователь может получить к ним доступ с помощью тех же системных вызовов, которые используются для обычных файлов. Ядро может отличить специальный файл устройства или специальный файл, и оно может определить, на какое устройство он ссылается, но большинству процессов не нужно это различие. Доступ к терминалам, принтерам и устройствам с магнитной лентой осуществляется так, как если бы все они были потоками байтов, подобно дисковым файлам FreeBSD. Таким образом, своеобразие и зависимости устройств по возможности сохраняются в ядре, и даже там большинство из них изолировано в драйверах устройств.
Процессы обычно получают доступ к устройствам посредством специальных файлов в файловой системе. Операции ввода/вывода для этих файлов обрабатываются резидентными программными модулями ядра, называемыми драйверами устройств. Доступ к большинству сетевого коммуникационного оборудования возможен лишь через средства межпроцессного взаимодействия, а не через специальные файлы в пространстве имен файловой системы, поскольку интерфейс непосредственного сокета (raw-socket) предоставляет более естественный интерфейс, чем специальный файл.
Специальные файлы устройств создаются в файловой системе dev своими драйверами устройств, когда оборудование впервые обнаружено. Системный вызов ioctl манипулирует параметрами лежащего в основе устройства специального файла. Доступные для осуществления операции отличаются для каждого устройства. Этот системный вызов позволяет получить доступ к особым характеристикам устройств, не перекрывая семантику других системных вызовов. Например, в звуковой карте существует ioctl для установки формата кодирования аудиоданных вместо наличия специализированной или измененной версии write.
- 15/05/2010 02:17 - Иерархия файлов
- 14/05/2010 11:31 - Файловые системы
- 14/05/2010 02:47 - Интерфейс устройств
- 13/05/2010 20:26 - Поддержка нескольких файловых систем
- 13/05/2010 03:54 - Механизм взаимодействия сокетов
- 12/05/2010 12:32 - Управление дескрипторами
- 12/05/2010 04:44 - Каналы 4.2BSD
- 11/05/2010 21:23 - Дескрипторы и ввод/вывод
- 11/05/2010 10:33 - Система ввода/вывода
- 11/05/2010 06:08 - Управление памятью внутри ядра