DEVFS Linux

от автора

в

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

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

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

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

неопределенный

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Некоторые другие системы Unix, такие как FreeBSD, используют управление узлами устройств на основе ядра только через devfs и не поддерживают создание узлов вручную. Системный вызов mknod(2) и команда mknod(8) существуют для обеспечения совместимости с POSIX, но созданные вручную узлы устройств вне devfs вообще не будут работать.

Имена устройств

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

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

  • fb : буфер кадра
  • fd : (платформа) дискеты , хотя эта же аббревиатура также часто используется для обозначения файлового дескриптора.
  • hd : («классический») драйвер IDE (ранее использовался для жестких дисков ATA , приводов оптических дисков ATAPI и т. д.)
    • hda : главное устройство на первом канале ATA (обычно обозначается старшим номером 3 и младшим номером 0).
    • hdb : ведомое устройство на первом канале ATA.
    • hdc : главное устройство на втором канале ATA.
    • hdd : ведомое устройство на втором канале ATA.
  • parport , pp : параллельные порты
  • mem : Основная память (символьное устройство)
  • nbd : Сетевое блочное устройство : Абстракция, представляющая блочные устройства, монтируемые через сеть (или из образов с помощью qemu-nbd).
  • Драйвер NVMe :
    • nvme0 : контроллер устройства первого зарегистрированного устройства (символьное устройство)
    • nvme0n1 : первое пространство имен первого зарегистрированного устройства (блочное устройство)
    • nvme0n1p1 : первый раздел первого зарегистрированного пространства имен первого зарегистрированного устройства (блочное устройство)
  • Драйвер ММС :
    • 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. [10]

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

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

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

Источник https://en.wikipedia.org/wiki/Device_file#devfs

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Аватар пользователя yuliaadmin

Об авторе


Поиск по сайту


Полезные ссылки

Ссылки, которые я считаю полезными и хочу поделиться.