Por que o Fedora tem dois arquivos `ptmx`?

Por que o Fedora tem dois arquivos `ptmx`?

Eu sei que o arquivo /dev/ptmxé usado para gerar um arquivo mestre para um pseudoterminal. Mas descobri que o Fedora tem outro ptmxarquivo ( /dev/pts/ptmx):

insira a descrição da imagem aqui

Qual é o propósito deste segundo arquivo?

Responder1

A razão, como acontece com muitas coisas no mundo da computação, é a história e a compatibilidade com versões anteriores.

Nos kernels 2.4.*, antes udev(a solução atual de sistema de arquivos virtual para /dev) existir no Linux, havia duas soluções concorrentes, a "maneira Unix tradicional" de ter os dispositivos em um diretório real em um sistema de arquivos raiz, e devfs, o primeiro virtual solução de sistema de arquivos para /dev.

O problema era que o autor devfshavia construído um esquema de nomenclatura completamente novo para vários dispositivos, e as pessoas tinham uma opinião bastante forte sobre isso: alguns queriam migrar para o novo esquema e abolir o antigo, outros não viam a necessidade de migração. Algumas distribuições usaram os antigos dispositivos estáticos, outras escolheram o devfs.

Nesse ponto, havia um número fixo de dispositivos pseudo-TTY criados no momento da instalação. (A propósito, isso ainda é possível, se a CONFIG_LEGACY_PTYSopção for definida durante a compilação do seu kernel.)

Em seguida, foram introduzidos dispositivos PTY alocados dinamicamente no estilo Unix98. Implementá-los em um /devdiretório estático exigia um sistema de arquivos virtual /dev/pts, e isso ficou conhecido como devptssistema de arquivos. Além disso, ter isso como um sistema de arquivos separado provavelmente tornaria possível aplicá-lo devfstambém sobre a dinâmica, sem duplicação de código.

Os dispositivos PTY alocados dinamicamente rapidamente se tornaram a escolha preferida, porque ter /devsobrecarregado centenas de dispositivos PTY alocados estaticamente, muitos dos quais poderiam nunca ser usados ​​durante a vida útil do sistema, era claramente absurdo.

Depois veio o Linux 2.6 e udevcom ele. Rapidamente tornou obsoleta tanto a estática /devquanto devfsas soluções. Por motivos de compatibilidade com versões anteriores, devptso sistema de arquivos ainda existia, mas agora a mesma funcionalidade poderia ser movida de volta para o /devsistema de arquivos principal, já que agora era inteiramente baseado em RAM.

Hoje, por exemplo, o Debian 9 ainda monta devptssistemas de arquivos /dev/ptspara compatibilidade herdada, mas não atribui /dev/pts/ptmxnenhuma permissão por padrão - isso é um sinal de que o devptssistema de arquivos provavelmente está sendo obsoleto e será removido em algum 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

Se algum programa ainda precisar de /dev/pts/ptmx, isso pode ser permitido ajustando as permissões padrão, mas isso permite que as pessoas saibam quais programas ainda estão usando o nome de dispositivo obsoleto mais antigo.

Responder2

Quando um processo abre /dev/ptmx (usandoposix_openpt()), ele obtém um descritor de arquivo para um mestre pseudoterminal (PTM) e um dispositivo escravo pseudoterminal (PTS) é criado no diretório /dev/pts.

Quando o mestre é aberto, o escravo é bloqueado. Você pode obter o nome do escravo e definir suas permissões, etc. e então desbloquear o escravo. Isto permite o controle do escravo antes que ele esteja acessível.

O escravo emula um dispositivo terminal de texto real, o mestre fornece os meios pelos quais um processo emulador de terminal controla o escravo.

O escravo é uma implementação virtual de um terminal físico e o mestre é uma implementação virtual da digitação humana nesse terminal; o computador trata os caracteres enviados ao escravo da mesma forma que se um humano os tivesse digitado em um terminal real (limitado pela configuração de permissão quando o mestre foi criado).

informação relacionada