разработчики
devpts — это каталог виртуальной файловой системы, доступный в ядре Linux начиная с версии 2.1.93 (апрель 1998 г.). Обычно он монтируется на /dev/pts
и содержит исключительно файлы устройств, которые представляют собой подчиненные устройства мультиплексирования, ведущего устройства расположенного по адресу /dev/ptmx
который, в свою очередь, используется для реализации эмуляторов терминала (таких как X11 xterm ). [1] [2]
Эмуляция терминала
[ редактировать ]Псевдотерминал («псевдо TTY» или « PTY ») — это пара псевдоустройств — ведомое и ведущее устройство , которые обеспечивают особый вид канала связи. Подчиненное псевдоустройство имитирует физический текстовый терминал компьютера (например, DEC VT100 ) и может читать и писать текст, как если бы оно было таким физическим терминалом. Главное псевдоустройство предоставляет средства , с помощью которых программа, предоставляющая текстовый пользовательский интерфейс, взаимодействует со своим подчиненным устройством и управляет им.
Широко распространенными программами с текстовым пользовательским интерфейсом являются эмуляторы терминала (например, xterm , gnome-terminal или Konsole ) или программы, использующие SSH или telnet . Запись на ведущее устройство аналогична набору текста на терминале, поэтому ведущее псевдоустройство действует как человек, сидящий перед физическим компьютерным текстовым терминалом.
Пара псевдотерминалов аналогична двунаправленному каналу. Все, что записано на ведущем устройстве, отображается как входные данные на ведомом устройстве, а все, что записано на ведомом устройстве, отображается как входные данные на ведущем устройстве. [3] С точки зрения POSIX определенные терминальные устройства (файлы) могут работать в полнодуплексном режиме . [4] Как и каналы, псевдотерминалы имеют ограниченную пропускную способность. В Linux емкость псевдотерминала составляет около 4 КиБ в каждом направлении.
Типичная операционная система на базе ядра Linux предоставляет множество PTY для поддержки текстовых интерфейсов, предоставляемых эмуляторами терминала (таких как xterm или gnome-terminal), а также интерфейсов удаленного доступа, таких как SSH.
Создание Devpts было вызвано желанием отказаться от необходимости во вспомогательной программе setuid , например /usr/libexec/pt_chown
. Это отличная реализация идеи псевдотерминала; предыдущая реализация обеспечивала фиксированное количество пар главный/подчиненный, которые имели постоянные узлы устройств, например пара главный-подчиненный. /dev/ptyp63
и /dev/ttyp63
, ср. Интерфейс программирования Linux, глава 62 «Терминалы» и глава 64 «Псевдотерминалы».
История внедрения
[ редактировать ]В феврале 1998 года в Linux 2.1.87 появилась поддержка /dev/ptmx
ведущее устройство мультиплексирования. [5] Открытие этого устройства обеспечивает доступ к неиспользуемому в противном случае ведущему псевдотелетайпу и позволяет идентифицировать соответствующее ведомое устройство с помощью ioctl()
. В апреле того же года в Linux 2.1.93 была добавлена новая виртуальная файловая система под названием devpts, которая обычно монтируется по адресу /dev/pts
. Всякий раз, когда создается новая пара главный/подчиненный, в этой виртуальной файловой системе создается узел устройства для подчиненного устройства.
Чтобы облегчить перенос эмуляции терминала в пользовательскую среду, сохранив при этом подсистему TTY (управление сеансом и дисциплину линии), был изобретен псевдотерминал. [6]
Причина, по которой дисциплина строк находится внутри ядра, заключается в том, чтобы избежать переключений контекста при приеме каждого символа (что на заре небольших объемов памяти ядра означало бы замены и замены!). Таким образом, строковая дисциплина сохраняет в буфере ядра строку ввода, и поскольку достаточно просто проверить определенный байт и уменьшить счетчик для реализации «редактирования» обратного пространства (и нескольких других простых функций редактирования), это делается там. .
Альтернативой является использование необработанного режима, в котором символы пересылаются в приложение, как только они получены, что необходимо для более сложных редакторов, таких как (в то время) широко известный Emacs . И действительно, поскольку emacs должен был использовать этот сырой режим, подразумевающий переключение контекста при приеме каждого набранного символа, он постоянно менялся, когда у компьютеров не хватало памяти для хранения emacs и всех других программ в ядре.
С добавлением псевдотерминалов (PTY) код TTY также стал своего рода механизмом межпроцессного взаимодействия с сохранением всей семантики TTY. Код TTY также должен поддерживать сетевые протоколы, такие как PPP, без создания узких мест в производительности. [7]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Нил Браун (01 июня 2016 г.). «Контейнеры, псевдо-TTY и обратная совместимость» . LWN.net .
- ^ «pts(4) — страница руководства Linux» . man7.org . Проверено 22 июля 2021 г.
- ^ «Определения» . pubs.opengroup.org . Проверено 22 июля 2021 г.
- ^ «Общий интерфейс терминала» . pubs.opengroup.org . Проверено 22 июля 2021 г.
- ^ «разница /drivers/char/pty.c» .
- ^ Линус Акессон. «TTY демистифицируется» .
- ^ Джонатан Корбет (29 июля 2009 г.). «Буря в тележке» . LWN.net .