[Linux 基础] -- Linux TTY framework(1)_基本概念

一、前言

由于串口的缘故,TTY 是 Linux 系统中最普遍的一类设备,稍微了解 Linux 系统的同学,对它都不陌生。尽管如此,相信很少有人能回答这样的问题:TTY 到底是什么东西?我们常常挂在嘴边的终端(terminal)、控制台(console)等概念,到底是什么意思?

本文是 Linux TTY Framework 分析文章的第一篇,将带着上述疑问,介绍 TTY 有关的基本概念,为后续的 TTY 软件框架的分析,以及 Linux serial subsystem 的分析,打好基础。

二、终端(terminal)

2.1、基本概念

在计算机或者通信系统中,终端是一个电子(或电气)设备,用于向系统输入数据(Input),或者将系统接收到的数据显示出来(output),即我们常说的 “人机交互设备”。

关于终端最典型的例子,就是电传打印机(Teletype)---- 一种基于电报计数的远距离信息传送器械。电传打印机通常由键盘、收发报器和印字机构等组成。发报时,按下某一字符键,就能将该字符的电码信号自动发送到信道(input);收报时,能自动接收来自信道的电码信号,并打印出相应的字符(output)。

2.2、Unix 终端

在计算机的世界里,键盘和显示器,是最常用的终端设备,一个用于想计算机输入信息,一个用于显示计算机的输出信息。

在大型机(mainframe)和小型机(minicomputer)的时代里,终端设备和计算机主机都同属一个整体。但到PC时代,情况发生了变化。Unix创始人肯•汤普逊和丹尼斯•里奇想让Unix成为一个多用户系统。多用户系统意味着要给每个用户配置一个终端,每个用户都要有一个显示器、一个键盘。但当时所有的计算机设备(包括显示器)价格都非常昂贵,而且键盘和主机是集成在一起的,根本没有独立的键盘。

最后他们找到了一样东西,那就是ASR33电传打字机。虽然电传打字机的用途是在电报线路上收发电报,但是它也可以作为人与计算机的接口,而且价格低廉。ASR33打字机的键盘用来输入信息,打印纸用来输出信息。所以他们把ASR33电传打字机作为终端,很多个ASR33连接到同一个主机,每个用户都可以在终端输入用户名和密码登录主机。这样他们创造了计算机历史上的第一个真正的多用户系统Unix,而ASR33成为第一个Unix终端。

2.3、TTY 设备

由上面的介绍可知,第一个 Unix 终端是一个名字为 ASR33 的电传打字机,而电传打字机的英文单词为 Teletype(或 Teletypewritter),缩写为 TTY。因此,该终端设备也被称为 TTY 设备。这就是 TTY 这个名称的来源,当然,在现在的 Unix/Linux 系统中,TTY 设备已经演变为不同的意义了,后面我们会介绍演变的过程。

注1:读到这里,希望读者再仔细思索一下 “设备” 的概念。ASR33 的电传打印机本身是一个硬件设备,在 Unix/Linux 系统中,这个硬件设备被抽象为 “TTY 设备”

2.4、串口终端(Serials Terminal)

早期的 TTY 终端(这里暂停特指电传打字机),一般通过串口和 Unix 设备连接的,如下所示:

然后,正如你我所熟知的,我们可以把上面红色部分(电传打字机),替换为任意的具有键盘、显示器、串口的硬件设备(如另一台 PC),如下:

因此,对 Unix/Linux 系统来说,只要是通过串口连接的设备,都可以作为终端设备,因而不再需要关注具体的终端形态。久而久之,终端设备、TTY 设备、串口设备等概念,逐渐混在一起,就不再区分了,总结来说,在当今的 Linux 系统中:

  1. TTY 设备就是终端设备,终端设备就是 TTY 设备,无需区分;
  2. 所有的串口设备都是 TTY 设备;
  3. 当然,除了串口设备,也发展出来了其它形式的 TTY 设备,例如虚拟终端(VT)、伪终端(Pseudo Terminal)等等,这些概念本文就不展开描述了,后续会使用专门的文章分析。

三、控制台(console)

了解了终端和 TTY 的概念之后,再来看看另一个比较熟悉的概念:console。

回到 Unix 系统刚刚支持多用户(2.2 小节的描述)的时代,此时的 PC 有一个自带的、昂贵的终端(自身的键盘、显示器等),另外为了支持多用户,可以通过串口线连接多个 TTY 终端(Teletype)。为了彰显自带终端崇高的江湖地位,人们称它为 console。

当然,“江湖地位” 之说,纯属玩笑,不过从 console 的中文翻译 —— 控制台,可以看出,自带终端(console)有别于 TTY 终端的地方如下:

1)控制台(console)是昂贵的;

2)控制台(console)比 TTY 终端拥有更多的权限,例如用户建立、密码更改、权限分配等等,这也是 “控制” 的意义所在;

3)系统的运行日志、出错信息等内容,通常只会输出到控制台(console)终端中,以方便管理员进行 “控制” 和 “管理”;

不过,随着计算机技术的发展,操作系统的改进,控制台(console)终端和普通 TTY 终端的界限越来月模糊,console 能做的事情,普通终端也都能做了。因此,console 逐渐退化,以至于在当前的 Linux 系统中,它仅仅保留了第三点 “日志输出” 的功能,这就是 Linux TTY Framework 中 console 的概念(具体可参考后续文章的分析)。

猜你喜欢

转载自blog.csdn.net/u014674293/article/details/115249231