
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 devfs
la primera solución virtual. solución de sistema de archivos para /dev
.
El problema era que el autor de devfs
habí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_PTYS
opción está configurada mientras compila su kernel).
Luego, se introdujeron los dispositivos PTY asignados dinámicamente al estilo Unix98. Implementarlos en un /dev
directorio estático requería un sistema de archivos virtual /dev/pts
, y esto se conoció como devpts
sistema de archivos. Además, tener esto como un sistema de archivos separado probablemente también habría hecho posible aplicarlo sobre la dinámica devfs
sin duplicar el código.
Los dispositivos PTY asignados dinámicamente se convirtieron rápidamente en la opción favorita, porque tener /dev
cientos 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 udev
con él. Rápidamente dejó obsoletos tanto la estática /dev
como devfs
las soluciones. Por razones de compatibilidad con versiones anteriores, devpts
el sistema de archivos todavía existía, pero ahora la misma funcionalidad se podía trasladar al /dev
sistema de archivos principal, ya que ahora estaba completamente basado en RAM.
Hoy en día, por ejemplo, Debian 9 todavía monta devpts
el sistema de archivos /dev/pts
para compatibilidad heredada, pero /dev/pts/ptmx
no asigna permisos de forma predeterminada; esto es una señal de que el devpts
sistema 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).