趣话:什么是终端?

终端,或说终端设备,这是早期的计算机中遗留下来的概念,这些计算机大部分中国人别说用过,见都没见过,对终端实在谈不上有什么感觉,根本形成不了这个概念,而且终端也涉及到众多的设备、名词,比较容易让人糊涂的。而这个概念是非常重要的。而要理解终端必须要了解计算机的历史。

早期的 UNIX 类的系统都是大型机系统,非常昂贵,是没有键盘和显示器之类设备的,那时所谓的计算机其实就指相当于现代电脑的主机一样,那人们是如何使用这些机器得呢?那时的计算机是多个人共享使用的,独占一台计算机是一件很奢侈的事情。那时人们通过串口、电话线、网线等方式用某个设备和计算机脑相连,这个设备非常简陋,没有计算功能,甚至可能就是一台电传打字机,只有输入输出功能,没有计算处理能力,这样的设备就称为“终端”。

人们通过终端进行将数据传给计算机,计算机处理以后将结果传回终端,终端将结果再显示出来,所有用户交互,都是借助终端方式访问系统的。后来个人计算机出现了,PC的出现使得个人独占计算机成为可能,这时候输入输出设备,一般是显示器和键盘(可能还有鼠标)和计算机一件组合在一起了,终端已经发生了极大变化,计算机专家决定继续保留这个概念,并对这个概念进行拓展,这样的好处就是以前的知识和经验得到了积累。

到现在 Linux 也保留着“终端”的概念,终端现在对于普通 Linux 来说,一般说的就是一个字符(或者模拟字符)的命令交互界面,实现对计算机的控制。

我们可以总结一下:终端就是实现人机交互手段的设备

这个设备可以是对应着真实的硬件,也可以是虚拟的。

用户向系统登录时使用的终端被称为该用户的“控制终端”,控制终端中有个用于系统的引导、控制和管理的终端,我们称之为“控制台”(console),控制台一般只有一台保留给系统管理员。早期的控制台一般采用电传打字机(tty),后来采用CRT终端,这些设备一般是没有智能的,且是面向文字的。PC机出现后,人们通过显示器和键盘(通常还有鼠标)进行人机交互,这些设备合在一起既要做系统的控制台又是用户的控制终端,操作系统要有一部分的终端功能。另一方面,显示器和键盘所构成的终端设备并不是唯一的终端设备,计算机的串口也常常作为终端的物理接口,也就是串口终端。

PC机上一般以显示器和键盘(可能还有鼠标)的组合作为控制台,这二者的组合就相当于一个终端,但是,有些情况下一个系统的控制台不只一个,多个控制台使得系统用户可以启动不同的作业,且易于管理所以Linux可以将同一套物理的显示器和键盘复用于若干“虚拟控制台(虚拟终端,virtual console)”。用户通过 “ALT”键和功能键“F1”至“F12”的组合来选择,设备文件 /dev/tty1 ~/dev/tty12代表12个控制台,此外/dev/tty0永远代表系统的当前控制台,另外还有/dev/console一般是连接到/dev/tty0的,所以也代表着系统的当前控制台。需要注意Linux只在前6个虚拟终端上创建login进程。控制台也不全是显示器和鼠标构成的“虚拟终端”,也可能是通过常规串行口连接的终端设备,/dev/ttyS0 ~  /dev/ttyS191代表着192个可能的UART串行口,即一般的串行终端设备,因为工业领域串口应用非常广泛,所以嵌入式系统中通常会采用串行端口终端

以上的终端都是物理上存在的,即使是虚拟终端,最终也要对应到一个物理的设备上。但是考虑一下现代的图形化用户界面运行情况:在这样的系统中屏幕上显示的每个应用集成都涉及输入输出,每个进程都以为它的输入输出设备都指向一个终端设备,但是该进程既不知道也没有能力控制屏幕显示屏上的窗口。怎么办呢?Linux中采用“伪终端设备”:视窗管理进程与常规的终端设备进行通讯,而视窗启动的每一个进程通过一个伪终端设备再与视窗管理进程通讯,由视窗管理进程控制屏幕显示,伪终端总是成对出现,一般主设备名为/dev/ptyAX , 从设备为/dev/ttyAX, A代表16个选定的字母,X则是16个16进制数。

另外每一个进程在运行时,都可能涉及到键盘的输入(执行c语言中的getch等),屏幕输出(执行c语言中的printf等),这就需要终端设备。进程对应的输入输出设备也叫控制终端,不要和系统的控制终端搞混,这个终端可以称为进程的控制终端,其一般对应计算机的显示器和键盘。

(注当进程在运行时,不需要用户输入输出,我们一般让进程在后台运行,在后台运行的进程一定是运行过程中不需要用户输入输出的,我们称这些进程为daemon进程,daemon进程的终端一定要关闭。)

一个进程具体绑定的终端是什么终端,可以设定。

在嵌入式系统中我们常用串口终端,所以有时候我们会将串口设备和终端设备搞混,实际上这两者是不一样的。我们常用window中的的超级终端来进行调试,这时候windows就相当于终端,这个终端与我们的嵌入式系统目标板通过串口连接在一起。串口是一个设备,一个通讯设备,终端也是一个设备,实现这个完整的终端功能要借助串口设备。通讯设备不是串口设备,有可能是其他设备。终端设备接收到数据以后如何解释,这又涉及到链路规则问题。

发布了27 篇原创文章 · 获赞 3 · 访问量 5568

猜你喜欢

转载自blog.csdn.net/wxg_wuchujie88/article/details/92660470