什么是tty、pty、pts

1 tty的原型

teletype writer,早期是这样的一个大型设备,多个teletype writer链接起来可以进行实时通信,左端在纸上打的字右端收到后在纸上打出来。

img

后来做出了可以把字母转码为打孔纸带(二进制码流)的机器:向计算机输入信息时打字在纸上,拿到打孔纸带给计算机读;计算机输出的纸带拿到teletype writer上解码打字到纸上即可。这与我们当前的人机交互方式类似,teletype writer上自带键盘,纸就相当于现在的显示器。

img

早期计算机都是在机房的,而这个teletype writer设备在用户这一测,便称之为终端(terminal)

2 早期计算机输入架构

但操作系统不能只是接上输入设备就完事大吉了,作为人机交互的终端还需要考虑如下三个方面:

  1. 输入校验和流控 UART (Universal Asynchronous Receiver and Transmitter);
  2. 行编辑(写错字回退等功能);
  3. 会话管理:一个终端需要能够控制多个进程

所以人机交互便被设计成这个样子

img

3 桌面输入架构

计算机进入到电子显示器阶段。在早期计算机设备上,电子显示器与计算机的关系就像是现在的机床一样,通过嵌在设备上的电子显示器和按键控制计算机,此时我们便称这个显示器和按钮为——控制台(console),但久而久之,人们惯性的认为显示器就是那个控制台(就像计算机刚刚普及的时候人们都认为显示器就是计算机,给显示器配防尘套,让主机在一旁吃灰)。

UART只能做到打孔纸带级别信息的流控,原先在teletype writer上做的打孔纸带到人类语言的转码也需要集成在计算机中实现,便出现了各类输入输出设备的驱动(driver)负责控制设备与人交互,terminal emulator负责与计算机交互,于是桌面输入架构便成了这个样子。

img

4 远程输入架构

再发展到后来出现了在远程控制计算机的需求,人需要通过软件远程连接到计算机上与操作系统进行交互,与驱动交互的terminal emulator显然不能满足需求,此时便出现了pty(pseudo tty)负责与负责远程连接的进程(如ssh)进行交互。

img

现在的linux是多用户操作系统,会为每个远程连接分配一个pty,放在/dev/pts/目录,也就形成了我们常见的pts(pseudo ttys)

img

远程用户通过用户态进程ssh读写pts字符设备(文件类型是[c])与操作系统通信。

img

上图ssh下的所有进程的stdinstdoutstderr都是当前pts设备/dev/pts/0

5 相关命令

  1. tty:打印当前的tty
  2. who:查看当前有哪些用户已登录到本系统

6 reference

  1. 什么是电传打字机,为什么它们被用于计算机?
  2. The TTY demystified
  3. 硬件终端 terminal(TTY)
posted @ 2022-09-02 02:35  董漂亮  阅读(1033)  评论(0编辑  收藏  举报