Почему в Fedora два файла `ptmx`?

Почему в Fedora два файла `ptmx`?

Я знаю, что файл /dev/ptmxиспользуется для генерации главного файла для псевдотерминала. Но я обнаружил, что в Fedora есть другой ptmxфайл ( /dev/pts/ptmx):

введите описание изображения здесь

Какова цель этого второго файла?

решение1

Причина, как и во многом другом в мире вычислительной техники, кроется в истории и обратной совместимости.

В ядрах 2.4.*, до того как в Linux появилось udev(текущее решение виртуальной файловой системы для /dev), существовало два конкурирующих решения: «традиционный способ Unix», когда устройства располагались в реальном каталоге корневой файловой системы, и devfs, первое решение виртуальной файловой системы для /dev.

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

На тот момент существовало фиксированное количество псевдо-TTY-устройств, созданных во время установки. (Кстати, это все еще возможно, если соответствующая опция CONFIG_LEGACY_PTYSустановлена ​​при компиляции ядра.)

Затем были введены динамически выделяемые устройства PTY в стиле Unix98. Для их реализации в статическом /devкаталоге требовалась виртуальная файловая система для /dev/pts, и это стало известно как devptsфайловая система. Кроме того, наличие этой файловой системы в качестве отдельной, вероятно, позволило бы применять ее поверх динамической devfsбез дублирования кода.

Динамически выделяемые устройства PTY быстро стали предпочтительным выбором, поскольку загромождение /devсотнями статически выделяемых устройств PTY, большинство из которых, возможно, никогда не будут использованы за весь срок службы системы, было явно бессмысленным.

Затем появился Linux 2.6, а udevс ним и он. Он быстро сделал устаревшими как статические, так /devи devfsрешения. По причинам обратной совместимости devptsфайловая система все еще существовала, но теперь ту же функциональность можно было перенести обратно в основную /devфайловую систему, поскольку она теперь была полностью основана на оперативной памяти.

Сегодня, например, Debian 9 по-прежнему монтирует devptsфайловую систему /dev/ptsдля совместимости с устаревшими версиями, но /dev/pts/ptmxпо умолчанию назначает нулевые разрешения — это признак того, что devptsфайловая система, вероятно, устарела и будет удалена в будущем.

# ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty  5, 2 Nov 22 11:47 /dev/ptmx
c--------- 1 root root 5, 2 Nov 12 14:59 /dev/pts/ptmx

Если какой-то программе по-прежнему требуется /dev/pts/ptmx, это можно разрешить, изменив разрешения по умолчанию, но это позволит людям узнать, какие программы по-прежнему используют старое устаревшее имя устройства.

решение2

Когда процесс открывает /dev/ptmx (используяposix_openpt()), он получает файловый дескриптор для главного псевдотерминала (PTM), а в каталоге /dev/pts создается подчиненное псевдотерминальное устройство (PTS).

Когда открывается мастер, подчиненный блокируется. Вы можете получить имя подчиненного устройства и установить его разрешения и т. д., а затем разблокировать подчиненное устройство. Это позволяет контролировать подчиненное устройство до того, как оно станет доступным.

Подчиненное устройство эмулирует реальное текстовое терминальное устройство, ведущее устройство предоставляет средства, с помощью которых процесс эмулятора терминала управляет подчиненным устройством.

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

Связанный контент