首页 > 系统 > Linux > 正文

概述Linux TTY/PTS的区别

2024-08-28 00:04:20
字体:
来源:转载
供稿:网友

当我们在键盘上敲下一个字母的时候,到底是怎么发送到相应的进程的呢?我们通过ps、who等命令看到的类似tty1、pts/0这样的输出,它们的作用和区别是什么呢?

TTY历史

支持多任务的计算机出现之前

在计算机出来以前,人们就已经在使用一种叫teletype的设备,用来相互之间传递信息,看起来像下面这样:

+----------+   Physical Line   +----------+| teletype |<--------------------->| teletype |+----------+            +----------+

两个teletype之间用线连接起来,线两端可能也有类似于调制解调器之类的设备(这里将它们忽略),在一端的teletype上敲键盘时,相应的数据会发送到另一端的teletype,具体功能是干什么的,我也不太了解。(我脑袋里面想到画面是在一端敲字,另一端打印出来)

这些都是老古董了,完全没接触过,所以只能简单的推测。

支持多任务的计算机出现之后

等到计算机支持多任务后,人们想到把这些teletype连到计算机上,作为计算机的终端,从而可以操作计算机。

使用teletype的主要原因有两个(个人见解):

现实中已经存在了大量不同厂商的teletype,可以充分利用现有资源 teletype的相关网络已经比较成熟,连起来方便

于是连接就发展成这样:

                                   +----------+ +----------+  +-------+   Physical Line   +-------+  +------+  |     || Terminal |<->| Modem |<--------------------->| Modem |<->| UART |<->| Computer |+----------+  +-------+            +-------+  +------+  |     |                                   +----------+
左边的Terminal就是各种各样的teletype 物理线路两边用上了Modem,就是我们常说的“猫”,那是因为后来网络已经慢慢的变发达了,大家可以共享连接了。(大概推测,可能不对) UART可以理解为将teletype的信号转换成计算机能识别的信号的设备

内核TTY子系统

计算机为了支持这些teletype,于是设计了名字叫做TTY的子系统,内部结构如下:

  +-----------------------------------------------+  |          Kernel           |  |                 +--------+  |  |  +--------+  +------------+  |    |  |    +----------------+  |  | UART |  |  Line  |  | TTY  |<---------->| User process A |<------>|    |<->|      |<->|    |  |    +----------------+  |  | driver |  | discipline |  | driver |<---------->| User process B |  |  +--------+  +------------+  |    |  |    +----------------+  |                 +--------+  |  |                        |  +-----------------------------------------------+
UART driver对接外面的UART设备 Line discipline主要是对输入和输出做一些处理,可以理解它是TTY driver的一部分 TTY driver用来处理各种终端设备 用户空间的进程通过TTY driver来和终端打交道

为了简单起见,后面的介绍中不再单独列出UART driver和Line discipline,可以认为它们是TTY driver的一部分

TTY设备

对于每一个终端,TTY driver都会创建一个TTY设备与它对应,如果有多个终端连接过来,那么看起来就是这个样子的:

           +----------------+           |  TTY Driver  |           |        |           |  +-------+  |    +----------------+ +------------+    |  |    |<---------->| User process A | | Terminal A |<--------->| ttyS0 |  |    +----------------+ +------------+    |  |    |<---------->| User process B |           |  +-------+  |    +----------------+           |        |           |  +-------+  |    +----------------+ +------------+    |  |    |<---------->| User process C | | Terminal B |<--------->| ttyS1 |  |    +----------------+ +------------+    |  |    |<---------->| User process D |           |  +-------+  |    +----------------+           |        |           +----------------+
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表