关于Unix/Linux的终端、伪终端、控制台和Shell(3)

从图中,我们可以看到,一个显示器样的屏幕和一个键盘,这就是终端terminal,用来输入输出,和计算机交互的设备。至此,我们应该彻底明白,console控制台和terminal终端的区别了:一个负责控制;一个负责供用户使用,与计算机进行工作交互。那么,在这里有一个问题:在Linux系统上,当你按下CTRL + ALT + F1时启动的那个黑色界面是console还是terminal?答案是terminal,为什么?因为你是在那里进行登录后与计算机交互。当你重启Server版纯命令行的Linux系统时,会看到屏幕上有很多的信息输出,那一刻你的屏幕则是console控制台的角色。

UNIX是从multics获得的灵感,而multics设计的初衷就是多用户,基于pdp-7开发出的UNIX自然也是一个支持多用户的操作系统,但pdp-7只有一个终端,只能同时一个用户使用,如何支持多用户呢?Ken Thompson和Dennis MacAlistair Ritchie使用了电传打字机来替代终端,电传打字机的英文名称是Teletype,缩写为TTY。电传打字机带一个键盘,也能打印纸张进行文字输出,而且价格低廉,因此可以用来作为UNIX的另一种终端。

需要注意的是,起初Terminal终端和TTY打字机并不是同一种东西,Terminal终端是只有一个,而TTY打字机可以有一到多个。另外,Terminal终端是本地,TTY打字机是远程,此远程非今天的网络远程,是地理位置上的远程,比如TTY打字机用很长的线缆连接到小型机的插口上,无需互联网,而且当时也没有网络。因为TTY打字机是一种终端设备,硬件连接到主机,所以终端的数量也是有限的。由于Terminal终端和TTY打字机扮演的终端的功能相同,所以后来用TTY来统称各种类型的终端设备。另外,之后的TTY终端设备可以通过串口来连接主机进行通信(串行点到点),这个名字也用来指任何的串口终端设备。

无论使用本地Terminal终端还是TTY打字机终端登录系统时,都属于终端登录,与此相对应的是网络登录,进而引申出来伪终端,至于什么是伪终端,我们稍后再讲解。

下面的图就是电传打字机:

关于Unix/Linux的终端、伪终端、控制台和Shell

关于Unix/Linux的终端、伪终端、控制台和Shell

仔细观察上图电传打字机的键盘,细心的读者会发现,该打字机的键盘和我们今天的键盘不太一样,少了好几个按键,比如上下左右,比如回车(Enter),比如删除(有的还没有退格键),但也多几个按键,比如第二排的最后两个键。

前面我们说过,电传打字机带一个键盘,也能打印纸张进行文字输出。电传打字机的输出印在纸上,用户输入的字符就像打字机一样也是删不掉的,而且用户输入什么就会立刻传给主机;后来有了以电子显示器为输出设备的终端,一开始也只能一个字符一个字符地给主机发信息,到七十年代末能用终端设备自带的缓冲来缓存用户输入的信息,然后再一次性给主机发送一整行信息的「智能」终端才成为主流。由于终端设备能够进行缓存,所以在发送给主机之前可以进行修改错误的输入,此时键盘上才有了现代电脑用户觉得司空见惯的上下左右方向键和删除退格键,以便对输入进行修改。

这里还涉及到一个历史典故:回车和换行的故事。从上面的电传打字机的图片中可以看到,该打字机每次打印一行,打印一行之后磁头和纸张接触的那个地方位于纸张当前行的最右侧,磁头要回到纸张的下一行最左侧的地方继续打印,从上一行最右侧移动到下一行最左侧这个过程需要耗费0.2秒,这0.2秒内正好可以打两个字符。如果一行只能打印10个字符,而打字机收到连续20个字符,那么在打完10个字符之后,换到下一行用去的0.2秒就会导致有2个字符没打印出来而丢失,最终只有18个字符。

如何解决这个问题?研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。这样刚好用回车和换行这2个无意义字符占用移动磁头所需的0.2秒的时间空缺,也即打字机收到22个字符,1-10字符有意义,11-12字符为回车和换行,13-24字符有意义,在应该打印到11-12字符时,打字机换到下一行最左侧,丢掉11-12字符,不会导致信息错误。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13374.html