目录

类 Unix 系统中 TTY 与 PTY 的区别

使用 Linux 等类 Unix 系统的同学可能经常能看到 tty、pts、ptmx 等字样;玩过树莓派的同学会在登陆界面看到 tty1 的字样。这些东西对我们正常使用操作系统没有任何影响,但是理解它们可以让我们更加了解类 Unix 系统背后的机制。

Console

Console 意即控制台。Console 出现在操作系统诞生之前,那个时候的老式计算机还只能通过按钮开关等方式控制计算机的运转,而 Console 就是将控制计算机器件集中起来的面板。由于现代计算机不再使用控制台来控制电脑,所以现代操作系统中的 Console 一般指控制台终端。

Terminal

Terminal 意即终端。顾名思义,是连接到计算机上的终端设备。当操作系统出现之后,不再使用控制台与计算机交互,而是使用命令,为了能够输入这些命令,出现了电传打字机(Teletype),程序输入输出可以通过电传打字机打印到屏幕上。所以 Terminal 其实是指一种监视计算机输入输出的硬件。但是现代操作系统中使用更多的是软件仿真终端。

TTY

TTY 即 TeleTYpe,意即电传打字机。TTY 与 Terminal 初期是同一个概念,电传打字机连接到计算机上便是一台终端设备。当时的 TTY 需要使用 UART 驱动来传输数据,而现代计算机中的 TTY 直接将输出数据渲染成视频信号,输出到显示器中,这些操作都运行在内核态。目前只能在连接键盘与显示器的计算机上使用 TTY。

PTY

PTY 即 Pseudo TeleTYpe,意即伪 TTY。PTY 是现代计算机中使用终端模拟软件或者 SSH 连接所使用的伪终端,运行在用户态。现代操作系统使用的终端都是伪终端,通过终端软件对终端进行模拟。PTY 为了保证能够与 TTY 兼容,采用了主从结构,分为 PTY slave side 与 PTY master side。

PTY slave side

PTY slave side 的通过 TTY 驱动实现。PTY slave side 与 PTY master side 进行连接,将程序输入输出发送给 PTY master side 并显示出来。

PTY master side

PTY master side 会将程序的输入输出显示在终端模拟软件中。例如当时用 SSH 远程连接时,PTY master side 与 SSH 连接,交换数据。

参考文章