¿Por qué Fedora tiene dos archivos `ptmx`?

¿Por qué Fedora tiene dos archivos `ptmx`?

Sé que el archivo /dev/ptmxse utiliza para generar un archivo maestro para un pseudoterminal. Pero descubrí que Fedora tiene otro ptmxarchivo ( /dev/pts/ptmx):

ingrese la descripción de la imagen aquí

¿Cuál es el objetivo de este segundo expediente?

Respuesta1

La razón, como ocurre con muchas cosas en el mundo de la informática, es la historia y la compatibilidad con versiones anteriores.

En los kernels 2.4.*, antes de que udev(la solución actual de sistema de archivos virtual para /dev) existiera en Linux, había dos soluciones en competencia, la "forma tradicional de Unix" de tener los dispositivos en un directorio real en un sistema de archivos raíz, y devfsla primera solución virtual. solución de sistema de archivos para /dev.

El problema era que el autor de devfshabía creado un esquema de nombres completamente nuevo para varios dispositivos, y la gente estaba bastante convencida de ello: algunos querían migrar al nuevo esquema y abolir el antiguo, otros no veían la necesidad de migrar. Algunas distribuciones utilizaron los antiguos dispositivos estáticos, otras eligieron devfs.

En ese momento, había una cantidad fija de dispositivos pseudo-TTY creados en el momento de la instalación. (Por cierto, esto aún es posible si la CONFIG_LEGACY_PTYSopción está configurada mientras compila su kernel).

Luego, se introdujeron los dispositivos PTY asignados dinámicamente al estilo Unix98. Implementarlos en un /devdirectorio estático requería un sistema de archivos virtual /dev/pts, y esto se conoció como devptssistema de archivos. Además, tener esto como un sistema de archivos separado probablemente también habría hecho posible aplicarlo sobre la dinámica devfssin duplicar el código.

Los dispositivos PTY asignados dinámicamente se convirtieron rápidamente en la opción favorita, porque tener /devcientos de dispositivos PTY asignados estáticamente, la mayoría de los cuales probablemente nunca se usarían durante la vida útil del sistema, era claramente una tontería.

Luego vino Linux 2.6 y udevcon él. Rápidamente dejó obsoletos tanto la estática /devcomo devfslas soluciones. Por razones de compatibilidad con versiones anteriores, devptsel sistema de archivos todavía existía, pero ahora la misma funcionalidad se podía trasladar al /devsistema de archivos principal, ya que ahora estaba completamente basado en RAM.

Hoy en día, por ejemplo, Debian 9 todavía monta devptsel sistema de archivos /dev/ptspara compatibilidad heredada, pero /dev/pts/ptmxno asigna permisos de forma predeterminada; esto es una señal de que el devptssistema de archivos probablemente esté en desuso y se eliminará en algún momento futuro.

# 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

Si algún programa aún necesita /dev/pts/ptmx, se puede permitir ajustando los permisos predeterminados, pero esto permite a las personas saber qué programas todavía usan el nombre de dispositivo obsoleto anterior.

Respuesta2

Cuando un proceso abre /dev/ptmx (usandoposix_openpt()), obtiene un descriptor de archivo para un pseudoterminal maestro (PTM) y se crea un dispositivo pseudoterminal esclavo (PTS) en el directorio /dev/pts.

Cuando se abre el maestro, el esclavo se bloquea. Puede obtener el nombre del esclavo y configurar sus permisos, etc. y luego desbloquear el esclavo. Esto permite el control del esclavo antes de que sea accesible.

El esclavo emula un dispositivo terminal de texto real, el maestro proporciona los medios mediante los cuales un proceso de emulador de terminal controla el esclavo.

El esclavo es una implementación virtual de un terminal físico y el maestro es una implementación virtual de la escritura humana en ese terminal; la computadora trata los caracteres enviados al esclavo de la misma manera que si un humano los hubiera escrito en una terminal real (limitado por la configuración de permisos cuando se creó el maestro).

información relacionada