tty 子系统有什么用?

What is the tty subsystem for?

到目前为止,我已经花了至少 10 个小时试图了解 Linus Akesson 的著名博客 post,但我仍在苦苦挣扎。所以让我把我对 tty/ptty 的疑问作为一系列简短的问题提出来。

1) tty/ptty 是用户 space 还是内核 space?

2) tty/ptty 与设备或驱动程序或某些编号之类的连接是什么?

3) tty 似乎链接到进程的控制终端,这是什么关系,每个进程都与终端相关吗?

4) 总的来说,我仍然不明白这个终端概念到底适合什么地方。一个进程想要从 stdio 读取一些东西,它不能简单地从所需的设备文件中读取。 tty 打算解决的问题到底是什么?

5) 我在某处读到有人试图将 tty 从用户 space 移动到内核 space。 tty 只是一个历史遗留物,而不是一个强大的设计特征。??

澄清(可能会回答您的一些问题): 我认为你的意思是 pty(而不是 ptty),它是 pseudo-tty/pseudo-terminal.

  1. A tty (/dev/ttyx) - 代表电传打字机 - 是原始终端(使用行式打印机输出和键盘输入!)。终端基本上只是一个使用文本进行输入和输出的用户界面设备。

  2. pty (/dev/pty/n) 是一个伪终端 - 它是一种软件实现,在附加程序看来就像一个终端,但不是直接与 "real" 终端,它将输入和输出传输到另一个程序。它是 telnet/SSH 甚至 GNOME 终端的终点。

例如,当您通过 ssh 进入远程机器并 运行 ls 时,ls 输出被发送到伪终端,伪终端的另一端连接到 SSH 守护进程。

编辑: 据我所知,tty 和 pty 都是用户模式。但它们代表终端驱动程序。我的意思是:设备文件/dev/tty1是第一个虚拟控制台。大多数代码位于 drivers/char 中,在文件 tty_io.c 和 n_tty.c 和 vt.c 中(内核源代码)。与字符设备相比,为了打开这些文件 tty_open 例程被调用,相信我,它比打开字符设备更混乱...

Tty/pty代表上面提到的终端驱动程序,但它们代表串口(你说的"numbering")。我对此知之甚少,所以我不想说不正确的数据......但是你可以在网上搜索它(或者其他人可以从这里继续)

编辑2: 你已经改变了问题,所以现在我好像断章取义了...... 无论如何,即使在今天,tty 也有许多不同的角色。终端驱动程序是用户内核可以 "communicate" 的方式。还有终端驱动、字符设备等技术

如果您还有问题,请发表评论,不要更改整个post.....