Файл устройства

редактировать
Интерфейс драйвера устройства, который появляется в файловой системе, как если бы это был обычный файл; например / dev / * в Unix-подобных системах; CON, PRN, NUL в DOS / Windows

В Unix-подобных операционных системах, файл устройства или специальный файл - это интерфейс к драйверу устройства, который появляется в файловой системе , как если бы это был обычный файл. Также есть специальные файлы в DOS, OS / 2 и Windows. Эти специальные файлы позволяют прикладной программе взаимодействовать с устройством, используя его драйвер устройства с помощью стандартных системных вызовов input/output . Использование стандартных системных вызовов упрощает многие задачи программирования и приводит к согласованным механизмам ввода-вывода в пользовательском пространстве независимо от характеристик и функций устройства.

Файлы устройств обычно предоставляют простые интерфейсы для стандартных устройств (таких как принтеры и последовательные порты), но также могут использоваться для доступа к определенным уникальным ресурсам на этих устройствах, таких как разделы диска. Кроме того, файлы устройств полезны для доступа к системным ресурсам, которые не имеют связи с каким-либо фактическим устройством, таким как приемники данных и генераторы случайных чисел.

Есть два основных типа файлов устройств в Unix-подобных операционных системах, известных как специальные символьные файлы, и специальные файлы блоков. Разница между ними заключается в том, сколько данных читается и записывается операционной системой и оборудованием. Вместе они могут называться специальными файлами устройств в отличие от именованных каналов, которые не подключены к устройству, но также не являются обычными файлами.

MS-DOS заимствовал концепцию специальных файлов из Unix, но переименовал их в устройства. Поскольку ранние версии MS-DOS не поддерживали иерархию каталогов, устройства отличались от обычных файлов, делая их имена зарезервированными словами, выбранными для степени совместимости с CP. / M.

В некоторых Unix-подобных системах большинство файлов устройств управляются как часть виртуальной файловой системы, традиционно монтируемой в / dev, возможно, связанной с управляющим демоном, который отслеживает добавление и удаление оборудования во время выполнения, вносит соответствующие изменения в файловую систему устройства, если это не выполняется автоматически ядром, и, возможно, вызывает сценарии в системе или пространстве пользователя для обработки особых потребностей устройства. Реализации FreeBSD и DragonFly BSD назвали файловую систему виртуального устройства devfs и связанный с ним демон devd. Linux в первую очередь использует реализацию пользовательского пространства, известную как udev, но существует множество вариантов. Darwin и операционные системы, такие как macOS на его основе, имеют файловую систему устройства исключительно на основе ядра.

В системах Unix, которые поддерживают изоляцию процессов chroot, например, Контейнеры Solaris, обычно для каждой среды chroot требуется свой собственный / dev; эти точки монтирования будут видны в ОС хоста на различных узлах глобального дерева файловой системы. Ограничивая узлы устройств, помещенные в экземпляры chroot / dev, аппаратная изоляция может быть усилена средой chroot (программа не может вмешиваться в аппаратное обеспечение, которое она не может ни видеть, ни именовать - еще более сильная форма управление доступом, чем разрешения файловой системы Unix ).

Конфликт аппаратных устройств под управлением MS-DOS (см. TSR ) путем монопольного открытия каждого файла устройства. Приложение, пытающееся получить доступ к уже используемому устройству, обнаружит, что не может открыть узел файла устройства. В Unix и Linux реализованы разнообразные семантики драйвера устройства, касающиеся одновременного доступа.

Содержание
  • 1 Unix и Unix-подобные системы
    • 1.1 Символьные устройства
    • 1.2 Блочные устройства
    • 1.3 Псевдоустройства
    • 1.4 Создание узла
    • 1.5 Соглашения об именах
    • 1.6 devfs
      • 1.6.1 Реализации
  • 2 ПК DOS, TOS, OS / 2 и Windows
  • 3 IOCS
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература
Unix и Unix-подобные системы
Упрощенная структура ядра Linux. Файловые системы реализованы как часть подсистемы ввода-вывода.

Узлы устройств соответствуют ресурсам, которые ядро ​​ операционной системы уже выделили. Unix идентифицирует эти ресурсы по старшему и младшему номерам, которые хранятся как часть структуры узла . Назначение этих номеров происходит однозначно в разных операционных системах и на разных компьютерных платформах. Как правило, старший номер идентифицирует драйвер устройства, а младший номер определяет конкретное устройство (возможно, из многих), которым управляет драйвер: в этом случае система может передать младший номер драйверу. Однако при наличии это может быть не так (например, в FreeBSD 5 и выше).

Как и в случае с другими специальными типами файлов, компьютерная система обращается к узлам устройства, используя стандартные системные вызовы, и обрабатывает их как обычные компьютерные файлы. Существуют два стандартных типа файлов устройств; к сожалению, их имена довольно противоречивы по историческим причинам, и объяснения разницы между ними часто неверны.

Символьные устройства

Символьные специальные файлы или символьные устройства обеспечивают небуферизованный прямой доступ к аппаратному устройству. Они не обязательно позволяют программам читать или писать отдельные символы за раз; это зависит от рассматриваемого устройства. Например, символьное устройство для жесткого диска обычно требует, чтобы все операции чтения и записи были выровнены по границам блока и, безусловно, не позволяет читать ни одного байта.

Символьные устройства иногда называют необработанными устройствами, чтобы избежать путаницы, связанной с тем фактом, что символьное устройство для части аппаратного обеспечения на основе блоков обычно требует программ для чтения и записи выровненных блоков.

Блочные устройства

Блочные специальные файлы или блочные устройства обеспечивают буферизованный доступ к аппаратным устройствам и обеспечивают некоторую абстракцию от их особенностей. В отличие от символьных устройств, блочные устройства всегда позволяют программисту читать или записывать блок любого размера (включая отдельные символы / байты) и любое выравнивание. Обратной стороной является то, что, поскольку блочные устройства буферизуются, программист не знает, сколько времени пройдет, прежде чем записанные данные будут переданы из буферов ядра на фактическое устройство, или действительно в каком порядке две отдельные записи поступят на физическое устройство. Кроме того, если одно и то же оборудование предоставляет как символьные, так и блочные устройства, существует риск повреждения данных из-за того, что клиенты, использующие символьное устройство, не знают об изменениях, сделанных в буферах блочного устройства.

Большинство систем создают как блочные, так и символьные устройства для представления оборудования, такого как жесткие диски. В частности, FreeBSD и Linux этого не делают; в первом удалена поддержка блочных устройств, а во втором создаются только блочные устройства. В Linux, чтобы получить символьное устройство для диска, нужно использовать «необработанный» драйвер, хотя можно получить тот же эффект, что и при открытии символьного устройства, открыв блочное устройство с помощью специфичного для Linux O_DIRECTфлаг.

Псевдоустройства

Узлы устройств в Unix-подобных системах не обязательно должны соответствовать физическим устройствам. Узлы, не имеющие такого соответствия, образуют группу псевдоустройств. Они предоставляют различные функции, выполняемые операционной системой. Некоторые из наиболее часто используемых (символьных) псевдоустройств включают в себя:

  • / dev / null - принимает и отклоняет весь ввод, записанный на него; обеспечивает индикацию конца файла при чтении из.
  • / dev / zero - принимает и отклоняет весь ввод, записанный в него; создает непрерывный поток нулевых символов (байтов с нулевым значением) в качестве вывода при чтении из.
  • / dev / full - создает непрерывный поток нулевых символов (байтов с нулевым значением) как выводится при чтении из и генерирует ошибку ENOSPC («диск заполнен») при попытке записи в него.
  • / dev / random - генерирует байты, сгенерированные ядром криптографически безопасный генератор псевдослучайных чисел. Его точное поведение зависит от реализации, и иногда также предоставляются такие варианты, как / dev / urandom или / dev / arandom.

Кроме того, специфичные для BSD псевдоустройства с Интерфейс ioctl может также включать:

  • / dev / pf - позволяет процессам пользовательской среды управлять PF через интерфейс ioctl.
  • / dev / bio - обеспечивает доступ ioctl к устройствам, которые иначе не обнаруживаются как узлы / dev, используемые bioctl для реализации управления RAID в OpenBSD и NetBSD.
  • / dev / sysmon - используется фреймворком NetBSD sysmon_envsys для аппаратного мониторинга, доступ к которому осуществляется в пользовательском пространстве через proplib ( 3) с помощью утилиты envstat.

Создание узла

Узлы создаются с помощью системного вызова mknod . Программа командной строки для создания узлов также называется mknod. Узлы можно перемещать или удалять обычными системными вызовами файловой системы (переименовать, unlink ) и командами (mv, rm ).

Некоторые версии Unix включают сценарий с именем makedev или MAKEDEV для создания всех необходимых устройств в каталоге / dev. Это имеет смысл только в системах, устройствам которых статически назначены основные номера (например, посредством жесткого кодирования в их модуле ядра).

Соглашения об именах

Следующие префиксы используются для имен некоторых устройств в иерархии / dev, чтобы идентифицировать тип устройства:

Некоторые дополнительные префиксы стали широко использоваться в некоторых операционных системах:

  • fb: буфер кадра
  • fd: (платформа) гибкие диски, хотя эта же аббревиатура также часто используется для обозначения дескриптора файла
  • hd: («классический») драйвер IDE ( ранее использовалось для ATA жесткого диска, ATAPI оптических дисков и т. д.)
    • hda: ведущее устройство на первом канале ATA (обычно обозначается старшим номером 3 и младшим номером 0)
    • hdb: ведомое устройство на первом канале ATA
    • hdc: ведущее устройство на втором канале ATA
    • hdd: подчиненное устройство на втором канале ATA
  • parport, pp: параллельные порты
  • NVMe драйвер
    • nvme0: первая регистрация контроллер устройства tered (символьное устройство)
    • nvme0n1: первое зарегистрированное пространство имен устройства (блочное устройство)
    • nvme0n1p1: первый раздел первого зарегистрированного пространства имен устройства (блочное устройство)
  • MMC драйвер
    • mmcblk: драйвер хранилища для MMC носителей (SD карты, чипы eMMC на ноутбуках и т. д.)
      • mmcblk0: первое зарегистрированное устройство
      • mmcblk0p1: драйвер первого раздела первого зарегистрированного устройства
  • SCSI, также используется libATA (современный драйвер PATA / SATA ), USB, IEEE 1394 и т. Д.
    • sd: драйвер запоминающего устройства
      • sda: первое зарегистрированное устройство
      • sdb, sdc, и т.д.: второе, третье и т. д. зарегистрированные устройства
    • ses: драйвер корпуса
    • sg: общий уровень SCSI
    • sr: драйвер «ROM» (дисководы оптических дисков, ориентированные на данные; scd - это просто вторичный псевдоним)
    • st: магнитная лента драйвер
  • tty: терминалы

Канонический список префиксов, используемых в Linux, можно найти в списке устройств Linux, официальном реестре выделенных номеров устройств и / devузлы каталога для операционной системы Linux.

Для большинства устройств за этим префиксом следует номер, однозначно идентифицирующий конкретное устройство. Для жестких дисков для обозначения устройств используется буква, за которой следует число для обозначения разделов . Таким образом, файловая система может «знать» область на диске как / dev / sda3, например, или «видеть» сеанс сетевого терминала, связанный с / dev / pts / 14.

На дисках, использующих типичную загрузочную запись ПК , номера устройств первичного и дополнительного расширенного раздела пронумерованы от 1 до 4, а индексы любых логических разделов равны 5 и более, независимо от структуры предыдущие разделы (их родительский расширенный раздел не обязательно должен быть четвертым разделом на диске, и при этом не обязательно должны существовать все четыре основных раздела).

Имена устройств обычно не переносятся между различными вариантами Unix-подобных систем, например, в некоторых системах BSD устройства IDE называются / dev / wd0, / dev / wd1 и т. Д..

devfs

devfs - это конкретная реализация файловой системы устройства в Unix-подобных операционных системах, используемая для представления файлов устройств. Базовый механизм реализации может различаться в зависимости от ОС.

Хранить эти специальные файлы в физически реализованной файловой системе (например, на жестком диске) неудобно, и, поскольку для этого в любом случае требуется помощь ядра, возникла идея специальной логической файловой системы, которая физически не хранится.

Также определение, когда устройства готовы к появлению, не совсем тривиально. Подход devfs заключается в том, что драйвер устройства запрашивает создание и удаление записей devfs, связанных с устройствами, которые он включает и отключает.

Реализации

Операционная системаФайловая система или управляющее программное обеспечениеСтандартная точка монтирования АвторПримечания
Linux 2.3.46pre5–2.6.17devfsd / devПолностью реализован в ядре. Устарело - пользователям рекомендуется перейти на udev и / или devtmpfs.
Linux 2.5–udev на любой fs, но обычно на tmpfs / devГрег Кроа-Хартман, Кей Сиверс иРеализованы в основном в пространстве пользователя, информация об устройстве собирается из sysfs. Файлы устройства могут храниться в обычной файловой системе общего назначения или в файловой системе памяти (tmpfs ).
Linux 2.6.32–devtmpfs с udev/ devили без него/ devКей Сиверс, Ян Бланк, Грег Кроа-Хартман А гибридное ядро ​​/ пользовательское пространство файловой системы устройства для предоставления узлов перед первым запуском udev
Solaris / devicesSun Microsystems Представлено с динамически загружаемыми драйверами в Solaris-2.1
FreeBSD 2.0–devfs/ devPoul-Henning Kamp Полностью реализован в ядре.
DragonFly BSD 2.3.2–devfs/ devПолностью реализован в ядре.
macOS devfs/ devApple Inc. полностью реализовано в ядре.
HP-UX B.11.31devfs/ devHP Полностью реализован в ядре.
Plan 9 #Bell Labs Реализовано в ядре.
RISC OS DeviceFSУстройства:Acorn Computers DeviceFS была запущена в 1991 году и впервые появилась в RISC OS 3. Она управляет несколькими устройствами, такими как специальные файлы, чаще всего: параллельный, последовательный, FastParallel и USB. Модуль SystemDevices реализует псевдоустройства, такие как Vdu, Kbd, Null и Printer.
MS-DOS, PC DOS, DR-DOS FAT \ DEV/ DEV)различныеКак реализовано в ядре, символьные устройства появляются в виртуальном каталоге \ DEV и любом каталоге диска. В MS-DOS / PC DOS 2.x файл CONFIG.SYS AVAILDEV = Директива FALSE может использоваться для принудительного существования устройств только в \ DEV.
MagiC, MiNT, MultiTOS U: \ DEVApplication Systems Heidelberg, Eric R. Smith, Atari Corp. Специальный диск U: содержит виртуальный каталог DEV, внутри которого можно найти файлы устройств.
Windows 9x \\ devices \Microsoft
Windows NT \\. \Microsoft Префикс \\. \позволяет поддерживающим API-интерфейсам обращаться к пространству имен устройства Win32 вместо пространства имен файлов Win32. Устройство Win32 само пространство имен находится в \ Devicesв пространстве имен NT.
ПК DOS, TOS, OS / 2 и Windows

Файл устройства - это зарезервированное ключевое слово, используемое в ПК DOS, TOS, OS / 2, и системы Windows, чтобы разрешить доступ к определенным портам и устройствам.

MS-DOS заимствовал концепцию специальных файлов из Unix, но переименовал их в устройства. Поскольку ранние версии MS-DOS не поддерживали иерархию каталогов , устройства отличались от обычных файлов, делая их имена зарезервированными словами. Это означает, что определенные имена файлов были зарезервированы для устройств и не должны использоваться для именования новых файлов или каталогов. Сами зарезервированные имена были выбраны для совместимости с обработкой "специальных файлов" команды PIP в CP / M. В DOS было два типа устройств: блочные устройства (используемые для дисководов) и символьные устройства (обычно все другие устройства, включая устройства COM и PRN).

DOS использует файлы устройств для доступа к принтерам и портам. Большинство версий Windows также содержат эту поддержку, что может вызвать путаницу при попытке создать файлы и папки с определенными именами, поскольку они не могут иметь эти имена. Версии 2.x из MS-DOS предоставляют параметр AVAILDEV CONFIG.SYS, который, если установлен в FALSE, делает эти специальные имена активен только при наличии префикса \ DEV \, что позволяет создавать обычные файлы с этими именами.

GEMDOS, DOS-подобная часть Atari TOS, поддерживается имена устройств аналогичны DOS, но, в отличие от DOS, требовался завершающий символ ":" (в DOS это необязательно), чтобы идентифицировать их как устройства в отличие от обычных имен файлов (таким образом, "CON:" будет работать как в DOS, так и в TOS, но «CON» будет называть обычный файл в TOS, но консольное устройство в DOS). В MiNT и MagiC специальное представление унифицированной файловой системы в стиле UNIX, доступное через букву диска «U:», также помещало файлы устройств в «U: \ DEV».

Ключевое слово устройстваИспользовать как входИспользовать как выход
CON Принимает набранные данные до тех пор, пока не будет нажата ^ Z (Ctrl-Z).Выводит данные на консоль.
PRN Н / ДПечатает текст на принтер, обычно перенаправляется на LPT1 или LST. Иногда перенастраивается на другие устройства.
AUX (не в OS / 2)Считывает данные с вспомогательного устройства, обычно последовательного устройства, такого как COM1. Иногда можно перенастраивать на другие устройства.Отправляет данные на вспомогательное устройство, обычно последовательное устройство, такое как COM1. Иногда перенастраивается на другие устройства.
NUL Возвращает нулевые данные или их отсутствие.Отменяет полученные данные.
CLOCK $ (по-прежнему называется CLOCK в некоторых версиях MS-DOS 2.11)Н / ДН / Д
KEYBD $ (только в многозадачной MS-DOS )??
KBD $ (только в OS / 2 )??
SCREEN $ (только в многозадачной MS-DOS и OS / 2)??
POINTER $ (только в OS / 2)??
MOUSE $ (только в OS / 2)??
$ IDLE $ (только в DR-DOS (начиная с 5.0) и Multiuser DOS (начиная с Concurrent DOS 386 ) семейств)Н / ДН / Д
КОНФИГУРАЦИЯ $ (только в MS-DOS 7.0 и выше)Н / ДН / Д
LST (только в 86-DOS и DOS 1.x, также в MS-DOS 2.11 Hewlett-Packard для HP Portable Plus )Не возвращает данных.Отправляет данные на строчный принтер. (LPT2 для Hewlett-Packard's MS-DOS 2.11)
PLT (только в MS-DOS 2.11 Hewlett-Packard для HP Portable Plus )Не возвращает данных.Отправляет данные на назначенный плоттер . Подключенное устройство плоттера можно перенастроить.
LPT1, LPT2, LPT3, а иногда LPT4 (в DR-DOS 7.02 и выше и некоторых версиях многопользовательской DOS)Н / ДОтправляет данные на выбранный параллельный порт.
COM1, COM2, COM3, COM4 Считывает данные из выбранного последовательного порта.Отправляет данные в выбранный последовательный порт.
82164A (только в MS-DOS 2.11 Hewlett-Packard для HP Portable Plus )перенаправляет на COM2.перенаправляет на COM2.

Использование оболочки перенаправление и каналы, данные могут быть отправлены на устройство или получены от него. Например, при вводе следующего текста на принтер будет отправлен файл c: \ data.txt:

TYPE c: \ data.txt>PRN

PIPE, MAILSLOT и MUP - это другие стандартные устройства Windows.

IOCS

8-битная операционная система Sharp карманные компьютеры, такие как PC-E500, PC-E500S и т. Д., Состоят из интерпретатора BASIC, файла, подобного DOS 2 Система управления (FCS), реализующая элементарную 12-битную файловую систему, подобную FAT, и BIOS-подобную систему управления вводом / выводом (IOCS), реализующую ряд стандартных символьных и блочных устройств драйверы, а также специальные файловые устройства, включая STDO: / SCRN: (дисплей), STDI: / KYBD: (клавиатура), COM: (последовательный ввод-вывод), STDL: / PRN: (принтер), CAS: (кассетная лента), E: / F: / G: (mem ory), S1: / S2: / S3: (карта памяти), X: / Y: (гибкий диск), SYSTM: (система) и NIL: (функция).

См. также
Ссылки
Дополнительная литература
Последняя правка сделана 2021-05-17 03:39:00
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте