Файл устройства - Device file

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

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

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

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

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

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

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

Unix и Unix-подобные системы

Упрощенная структура ядра Linux. Файловые системы реализованы как часть подсистемы ввода-вывода.

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

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

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

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

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

Блокировать устройства

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

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

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

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

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

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

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

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

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

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

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

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

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

  • fb: кадровый буфер
  • fd: (Платформа) дискеты, хотя эта же аббревиатура также часто используется для обозначения дескриптор файла
  • HD: («Классический») IDE драйвер (ранее использовался для ATA накопитель на жестком диске, ATAPI приводы оптических дисков, так далее.)
    • hda: главное устройство на первом Канал ATA (обычно обозначается старшим номером 3 и второстепенным номером 0)
    • HDB: ведомое устройство на первом канале ATA
    • HDC: главное устройство на втором канале ATA
    • жесткий диск: ведомое устройство на втором канале ATA
  • Parport, pp: параллельные порты
  • NVMe Водитель
    • nvme0: контроллер устройства первого зарегистрированного устройства (символьное устройство)
    • 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 - это просто вторичный псевдоним)
    • ул: магнитная лента Водитель
  • tty: терминалы
    • ttyS: (Платформа) Серийный порт Водитель
    • ttyUSB: USB последовательные преобразователи, модемы и т. Д.

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

Для большинства устройств за этим префиксом следует номер, однозначно идентифицирующий конкретное устройство. Для жестких дисков используется буква для обозначения устройств, за которой следует число для идентификации. перегородки. Таким образом, файловая система может "знать" область на диске как / 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 на любой фс, но обычно tmpfs/ devГрег Кроа-Хартман, Кей Сиверс и Дэн СтеклоффРеализовано в основном в пользовательском пространстве, информация об устройстве собирается из sysfs. Файлы устройства могут храниться в обычной файловой системе общего назначения или в файловой системе памяти (tmpfs ).
Linux 2.6.32–devtmpfs с udev или без него/ devКей Сиверс, Ян Бланк, Грег Кроа-ХартманГибридный подход файловой системы устройства к ядру / пользовательскому пространству для предоставления узлов перед первым запуском udev[9]
Солярис/ устройстваSun MicrosystemsПредставлено с динамически загружаемыми драйверами в Solaris-2.1.
FreeBSD 2.0–devfs/ devПоул-Хеннинг КампРеализовано полностью в ядре.
DragonFly BSD 2.3.2–devfs/ devАлекс ХорнунгРеализовано полностью в ядре.
macOSdevfs/ devApple Inc.Реализовано полностью в ядре.
HP-UX B.11.31devfs/ devHPРеализовано полностью в ядре.
План 9#Bell LabsРеализовано в ядре.
ОС RISCDeviceFSУстройства:Желудь КомпьютерыDeviceFS был запущен в 1991 году.[10] и впервые появился в RISC OS 3. Он управляет несколькими устройствами, такими как специальные файлы, чаще всего: Parallel, Serial, FastParallel и USB. Модуль SystemDevices реализует псевдоустройства, такие как Vdu, Kbd, Null и Printer.
MS-DOS, ПК DOS, DR-DOSЖИРDEV/ DEV)различныйКак реализовано в ядре, символьные устройства появляются в каталоге виртуального DEV и любом каталоге на диске. Под MS-DOS / PC DOS 2.x, CONFIG.SYS AVAILDEV Директива = FALSE может использоваться для принудительного существования устройств только в DEV.
MagiC, МИНТ, MultiTOSU: DEV[11][12]Application Systems Heidelberg, Эрик Р. Смит, Atari Corp.Специальный диск U: содержит виртуальный каталог DEV, внутри которого находятся файлы устройства.
Windows 9x устройстваMicrosoft
Windows NT.MicrosoftВ . префикс позволяет поддерживающим API получить доступ к пространству имен устройства Win32, а не к пространству имен файлов Win32. Само пространство имен устройства Win32 находится под Устройства в пространстве имен NT.

ПК DOS, TOS, OS / 2 и Windows

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

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

DOS использует файлы устройств для доступа к принтерам и портам. Большинство версий Windows также содержат эту поддержку, что может вызвать путаницу при попытке создать файлы и папки с определенными именами, поскольку они не могут иметь эти имена.[15] Версии 2.x из MS-DOS предоставить AVAILDEV CONFIG.SYS параметр, который, если установлен в ЛОЖНЫЙ, делает эти специальные имена активными, только если они имеют префикс DEV, что позволяет создавать обычные файлы с этими именами.[16]

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

Ключевое слово устройства[15]Использовать как вводИспользовать как выход
ПРОТИВПринимает введенные данные, пока не будет нажата ^ Z (Ctrl-Z).Печатает данные на консоль.
PRN[17]Нет данныхПечатает текст на принтер, обычно перенаправляется на LPT1 или LST. Иногда перенастраивается на другие устройства.[18][19][20]
AUX (не в OS / 2[17])Считывает данные с вспомогательного устройства, обычно последовательного устройства, такого как COM1. Иногда перенастраивается на другие устройства.[18][19][20]Отправляет данные на вспомогательное устройство, обычно последовательное устройство, такое как COM1. Иногда перенастраивается на другие устройства.[18][19][20]
NULВозвращает ноль или отсутствие данных.Отбрасывает полученные данные.
ЧАСЫ $ (все еще назван ЧАСЫ в некоторых версиях MS-DOS 2.11[21][18][19])Нет данныхНет данных
KEYBD $ (только в многозадачность MS-DOS )??
КБД $ (только в OS / 2[17])??
ЭКРАН $ (только в многозадачных MS-DOS и OS / 2[17])??
УКАЗАТЕЛЬ $ (только в OS / 2[17])??
МЫШЬ $ (только в OS / 2[17])??
$ IDLE $ (только в DR-DOS (начиная с 5.0) и Многопользовательская DOS (поскольку Параллельная DOS 386 ) семьи)Нет данныхНет данных
КОНФИГУРАЦИЯ $ (только в MS-DOS 7.0 и выше)Нет данныхНет данных
LST (только в 86-ДОС и DOS 1.x, а также в MS-DOS 2.11 Hewlett-Packard для HP Portable Plus[18][19])Не возвращает данных.Отправляет данные на линейный принтер. (LPT2 для MS-DOS 2.11 компании Hewlett-Packard[18][19])
PLT (только в MS-DOS 2.11 Hewlett-Packard для HP Portable Plus[18][19])Не возвращает данных.Отправляет данные назначенному плоттер. Подключенное устройство плоттера можно реконфигурировать.[18][19]
LPT1, LPT2, LPT3, и иногда LPT4 (в DR-DOS 7.02 и выше и некоторых версиях многопользовательской DOS)Нет данныхОтправляет данные на выбранный параллельный порт.
COM1, COM2, COM3, COM4Считывает данные из выбранного последовательного порта.Отправляет данные в выбранный последовательный порт.
82164A (только в MS-DOS 2.11 Hewlett-Packard для HP Portable Plus[18][19])Перенаправляет на COM2.Перенаправляет на COM2.

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

ТИП c: data.txt> PRN

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

IOCS

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

Смотрите также

использованная литература

  1. ^ а б «Windows для рабочих групп: как VSHARE.386 управляет общим доступом к файлам». Support.microsoft.com. 1999-09-22. Получено 2014-01-22.
  2. ^ Корбет, Джонатан; Кроа-Хартман, Грег; Рубини, Алессандро (2005). «Контроль доступа к файлу устройства». Драйверы устройств Linux, 3-е издание. О'Рейли. Получено 2017-04-28. Следующим шагом после открытия устройства с одним открытием является разрешение одному пользователю открывать устройство в нескольких процессах, но разрешить только одному пользователю открывать устройство одновременно.
  3. ^ Керниган, Брайан В.; Пайк, Роб (1984). Среда программирования UNIX. Prentice-Hall. п.66. ISBN  0-13-937681-X.
  4. ^ Нил Браун (27.10.2010). «Призраки прошлого Unix: исторический поиск шаблонов проектирования». LWN.net. Получено 2014-03-30.
  5. ^ «IEEE Std 1003.1, издание 2013 г.». Получено 2014-04-24.
  6. ^ «Справочник по архитектуре FreeBSD». Получено 2013-03-07.
  7. ^ "usr.sbin / envstat / envstat.c". Перекрестная ссылка BSD. NetBSD. Сложить резюме.
  8. ^ Администрация по присвоению имен и номеров в Linux (2009-04-06). «Устройства, выделенные Linux (версия 2.6+)». Ядро Linux (Документация / devices.txt). Архивировано из оригинал на 2016-04-24. Получено 2013-06-08.
  9. ^ "Ядро драйвера: devtmpfs - поддерживаемый ядром tmpfs-based / dev". LWN. Получено 2009-08-10.
  10. ^ "Журнал изменений Project Black". Получено 2016-05-15.
  11. ^ «Диск U: в MagiC». 2016-03-28. В архиве из оригинала на 2017-01-15. Получено 2017-01-09.
  12. ^ «FreeMiNT-Portal - mint.doc». 2000-04-27. В архиве из оригинала на 2017-01-15. Получено 2017-01-09.
  13. ^ «Избегайте создания имен файлов Macintosh, которые являются именами устройств NT». Support.microsoft.com. 2006-11-01. Получено 2014-01-22.
  14. ^ "атрибуты устройства". Stanislavs.org. Получено 2014-01-22.
  15. ^ а б «Имена драйверов устройств MS-DOS не могут использоваться в качестве имен файлов». Редакция 2.0. Microsoft. 2003-05-12. KB74496, Q74496. Архивировано из оригинал 21 июля 2012 г.
  16. ^ «Недокументированные команды». 4dos.info. Кевтроника. 2002-04-12. Получено 2014-05-16.
  17. ^ а б c d е ж Технический справочник по операционной системе IBM / 2 - Семейство программирования (PDF). 1 (1-е изд.). IBM. Сентябрь 1987 [1986]. В архиве (PDF) из оригинала от 03.01.2017.
  18. ^ а б c d е ж г час я Hewlett-Packard - Справочное техническое руководство - Portable PLUS (1-е изд.). Корваллис, штат Орегон, США: Компания Hewlett-Packard, Отдел портативных компьютеров. Август 1985. 45559-90001.. Получено 2016-11-27.
  19. ^ а б c d е ж г час я Hewlett-Packard - Справочное техническое руководство - Portable PLUS (PDF) (2-е изд.). Подразделение портативных компьютеров, Корваллис, штат Орегон, США: Компания Hewlett-Packard. Декабрь 1986 г. [август 1985 г.]. 45559-90006. В архиве (PDF) из оригинала от 28.11.2016. Получено 2016-11-27.
  20. ^ а б c Пол, Матиас Р. (1997-10-02). "Caldera OpenDOS 7.01 / 7.02 Обновление Alpha 3 IBMBIO.COM README.TXT". Архивировано из оригинал на 2003-10-04. Получено 2009-03-29. [1]
  21. ^ Патерсон, Тим; Microsoft (19 декабря 2013 г.) [1983]. «Microsoft DOS V1.1 и V2.0: /msdos/v20source/SKELIO.TXT, /msdos/v20source/HRDDRV.ASM». Музей истории компьютеров, Microsoft. Получено 2014-03-25. (Примечание: хотя издатели утверждают, что это будут MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Альтос MS-DOS 2.11 и TeleVideo для ПК DOS 2.11.)
  22. ^ "REG: CurrentControlSet Entries ЧАСТЬ 2: SessionManager". Support.microsoft.com. 2006-11-01. Получено 2014-01-22.
  23. ^ Справочное техническое руководство PC-E500 (PDF). Sharp Corporation, Группа информационных систем, Подразделение персонального оборудования. Март 1990 г. с. 17. В архиве (PDF) из оригинала на 2017-03-14. Получено 2017-03-14.

дальнейшее чтение