Existem várias coisas sobre os terminais que são gerenciados dentro do kernel, como sinais de teclado (mapeamento, por exemplo, Ctrl+Z
para SIGSTOP ), gerenciando grupos de processos em primeiro plano e em segundo plano, um mecanismo de edição de linha extremamente simples, enviando SIGHUP quando o terminal for embora, e outras sutilezas .
Com um terminal de hardware, o dispositivo terminal fica entre o aplicativo e o hardware. O tipo de dispositivo terminal depende do tipo de hardware, por exemplo (no Linux) /dev/tty1
para um teclado e tela do PC, /dev/ttyS0
para um terminal conectado por uma linha serial, /dev/ttyUSB0
para um terminal conectado via USB, etc.
+-------------+ +-----------------+ +-------------+
| text mode | | kernel | | peripheral |
| application |<------->| e.g. /dev/ttyS0 |<------->| e.g. on a |
| | | | | serial port |
+-------------+ +-----------------+ +-------------+
Com um emulador de terminal , o princípio é o mesmo, com a conexão ainda passando por um driver de kernel, mas o que é no outro extremo também é um processo.
+-------------+ +-----------------+ +-------------------+
| text mode | | kernel | | terminal emulator |
| application |<------->| /dev/pts/* |<------->| e.g. xterm, sshd, |
| | | | | screen, ... |
+-------------+ +-----------------+ +-------------------+
Xterm, telnetd¹, sshd e similares não estão (diretamente) conectados a nenhum hardware. Quando você digita uma tecla em um teclado, a informação passa pelo teclado (o dispositivo físico) para o driver do teclado dentro do kernel, que então o retransmite para um processo que está escutando no dispositivo de teclado. Se você estiver em uma sessão gráfica, esse processo é um servidor X , que retransmite informação para o processo cuja janela é focalizada. Inversamente, quando um programa rodando dentro do xterm produz saída, o xterm transforma isto em uma ordem para o servidor X exibir certos caracteres em uma certa fonte em uma certa posição. Não há nenhum hardware envolvido perto do processo que está processando a entrada ou produzindo a saída, e possivelmente nenhum (por exemplo, se a janela xterm não estiver visível na tela, ou pelo menos nenhuma localmente se o terminal for fornecido por um telnet ou servidor ssh).
¹ O terminal está no lado remoto (servidor).