范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

计算机终端(计算机终端包括什么)

  计算机终端(计算机终端包括什么)你可能听说过TTY和PTY这些缩写,也在/dev目录下看到过/dev/tty[n]设备,大概知道它们和 Linux 终端的概念有关。可是你清楚TTY、PTY具体指的是什么,它们有什么区别,以及它们和shell又是什么关系呢?为了理解这些,我们需要先回顾一下历史。回顾历史
  在计算机诞生之前,人们发明了 Teleprinter(电传打字机) ,通过长长的电线点对点连接,发送和接收打印的信息,用于远距离传输电报信息。
  Teleprinter也可以写成teletypewriter或teletype。
  后来人们将Teleprinter连接到早期的大型计算机上,作为输入和输出设备,将输入的数据发送到计算机,并打印出响应。
  在今天你很难想象程序的运行结果需要等到打印出来才能看到,Teleprinter设备已经进了计算机博物馆。现在我们用TTY代表计算机终端(terminal),只是沿用了历史习惯,电传打字机(teletypewriter)曾经是计算机的终端,它的缩写便是TTY(TeleTYpewriter)。
  为了把不同型号的电传打字机接入计算机,需要在操作系统内核安装驱动,为上层应用屏蔽所有的低层细节。
  电传打字机通过两根电缆连接:一根用于向计算机发送指令,一根用于接收计算机的输出。这两根电缆插入UART(Universal Asynchronous Receiver and Transmitter,通用异步接收和发送器)的串行接口连接到计算机。
  操作系统包含一个UART驱动程序,管理字节的物理传输,包括奇偶校验和流量控制。然后输入的字符序列被传递给TTY驱动,该驱动包含一个line discipline。
  line discipline负责转换特殊字符(如退格、擦除字、清空行),并将收到的内容回传给电传打字机,以便用户可以看到输入的内容。line discipline还负责对字符进行缓冲,当按下回车键时,缓冲的数据被传递给与TTY相关的前台用户进程。用户可以并行的执行几个进程,但每次只与一个进程交互,其他进程在后台工作。终端模拟器(terminal emulator)
  今天电传打字机已经进了博物馆,但 Linux/Unix 仍然保留了当初 TTY 驱动和line discipline的设计和功能。终端不再是一个需要通过 UART 连接到计算机上物理设备。终端成为内核的一个模块,它可以直接向 TTY 驱动发送字符,并从 TTY 驱动读取响应然后打印到屏幕上。也就是说,用内核模块模拟物理终端设备,因此被称为终端模拟器(terminal emulator)。
  上图是一个典型的 Linux 桌面系统。终端模拟器就像过去的物理终端一样,它监听来自键盘的事件将其发送到 TTY 驱动,并从 TTY 驱动读取响应,通过显卡驱动将结果渲染到显示器上。TTY 驱动 和line discipline的行为与原先一样,但不再有 UART 和 物理终端参与。
  如何看到一个终端模拟器呢?在Ubuntu 20桌面系统上,按Ctrl+Alt+F3就会得到一个由内核模拟的 TTY。Linux 上这种模拟的文本终端也被称为 虚拟终端(Virtual consoles) 。每个虚拟终端都由一个特殊的设备文件/dev/tty[n]所表示,与这个虚拟终端的交互,是通过对这个设备文件的读写操作,以及使用ioctl系统调用操作这个设备文件进行的。通过执行tty命令可以查看代表当前虚拟终端的设备文件:$tty  /dev/tty3
  复制代码
  可以看到,当前终端的设备文件是/dev/tty3,也就是通过Ctrl+Alt+F3得到的虚拟终端。
  你可以通过Ctrl+Alt+F3到Ctrl+Alt+F6在几个虚拟终端之间切换。按Ctrl+Alt+F2回到桌面环境。X 系统也是运行在一个终端模拟器上,在Ubuntu 20上它对应的设备是/dev/tty2,这也是为什么使用Ctrl+Alt+F2可以切换到 X 系统的原因。
  我们可以看看 X 系统打开的文件中是否包含了设备文件/dev/tty2。先查找 X 系统的 PID:#psaux|grepXorgmazhen14040.10.674188449996tty2Sl+08:070:13/usr/lib/xorg/Xorgvt2-displayfd3-auth/run/user/1000/gdm/Xauthority-backgroundnone-noreset-keeptty-verbose3
  复制代码
  再看看这个进程(1404)打开了哪些文件:#ll/proc/1404/fd总用量0dr-x------2mazhenmazhen07月1008:07./dr-xr-xr-x9mazhenmazhen07月1008:07../lrwx------1mazhenmazhen647月1008:070->/dev/tty2lrwx------1mazhenmazhen647月1008:071->'socket:[39965]'lrwx------1mazhenmazhen647月1010:0910->'socket:[34615]'...
  复制代码
  可以看到,X 系统确实打开了/dev/tty2。
  再做一个有趣的实验,在 tty3 下以 root 用户身份执行 echo 命令:#echo"hellofromtty3">/dev/tty4
  复制代码
  再按Ctrl+Alt+F4切换到 tty4,能看到从 tty3 发送来的信息。伪终端(pseudo terminal, PTY)
  终端模拟器(terminal emulator)是运行在内核的模块,我们也可以让终端模拟程序运行在用户区。运行在用户区的终端模拟程序,就被称为伪终端(pseudo terminal, PTY)。
  PTY 运行在用户区,更加安全和灵活,同时仍然保留了 TTY 驱动和line discipline的功能。常用的伪终端有 xterm,gnome-terminal,以及远程终端 ssh。我们以 Ubuntu 桌面版提供的 gnome-terminal 为例,介绍伪终端如何与 TTY 驱动交互。
  PTY 是通过打开特殊的设备文件/dev/ptmx创建,由一对双向的字符设备构成,称为PTY master和PYT slave。
  gnome-terminal 持有PTY master的文件描述符/dev/ptmx。gnome-terminal 负责监听键盘事件,通过PTY master接收或发送字符到PYT slave,还会在屏幕上绘制来自PTY master的字符输出。
  gnome-terminal 会 fork 一个 shell 子进程,并让 shell 持有PYT slave的设备文件/dev/pts/[n],shell 通过PYT slave接收字符,并输出处理结果。
  PTY master和PYT slave之间是 TTY 驱动,会在 master 和 slave 之间复制数据,并进行会话管理和提供line discipline功能。
  在 gnome-terminal 中执行 tty 命令,可以看到代表PYT slave的设备文件:$tty  /dev/pts/0
  复制代码
  执行ps -l命令,也可以确认 shell 关联的伪终端是pts/0:$ps-lFSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD0S1000184218320800-3423do_waipts/000:00:00bash0R1000189718420800-3626-pts/000:00:00ps
  复制代码
  注意到 TTY 这一列指出了当前进程的终端是pts/0。
  我们以实际的例子,看看在 terminal 执行一个命令的全过程。
  我们在桌面启动终端程序gnome-terminal,它向操作系统请求一个PTY master,并把 GUI 绘制在显示器上
  gnome-terminal启动子进程bash
  bash的标准输入、标准输出和标准错误都设置为PYT slave
  gnome-terminal监听键盘事件,并将输入的字符发送到PTY master
  line discipline收到字符,进行缓冲。只有当你按下回车键时,它才会把缓冲的字符复制到PYT slave。
  line discipline在接收到字符的同时,也会把字符写回给PTY master。gnome-terminal只会在屏幕上显示来自PTY master的东西。因此,line discipline需要回传字符,以便让你看到你刚刚输入的内容。
  当你按下回车键时,TTY 驱动负责将缓冲的数据复制到PYT slave
  bash 从标准输入读取输入的字符(例如ls -l)。注意,bash 在启动时已经将标准输入被设置为了PYT slave
  bash 解释从输入读取的字符,发现需要运行ls
  bash fork 出 ls 进程。bash fork 出的进程拥有和 bash 相同的标准输入、标准输出和标准错误,也就是PYT slave
  ls 运行,结果打印到标准输出,也就是PYT slave
  TTY 驱动将字符复制到PTY master
  gnome-terminal循环从PTY master读取字节,绘制到用户界面上。Shell
  我们经常不去区分 terminal 和 Shell,会说打开一个 terminal,或打开一个 Shell。从前面介绍的命令执行过程可以看出,Shell 不处理键盘事件,也不负责字符的显示,这是 terminal 要为它处理好的。
  Shell 是用户空间的应用程序,通常由 terminal fork 出来,是 terminal 的子进程。Shell 用来提示用户输入,解释用户输入的字符,然后处理来自底层操作系统的输出。
  通常我们使用较多的 shell 有 Bash、Zsh 和 sh。配置 TTY 设备
  内核将使用 TTY 驱动来处理 terminal 和 Shell 之间的通信。line discipline是 TTY 驱动的一个逻辑组件。line discipline主要有以下功能:
  当用户输入时,字符会被回传到PTY master
  line discipline会在内存中缓冲这些字符。当用户按回车键时,它才将这些字符发送到PYT slave
  line discipline可以拦截处理一些特殊的功能键,例如:
  当用户按CTRL+c时,它向连接到PYT slave的进程发送kill -2(SIGINT)信号
  当用户按CTRL+w时,它删除用户输入的最后一个字
  当用户按CTRL+z时,它向连接到PYT slave的进程发送kill -STOP信号
  当用户按退格键时,它从缓冲区中删除该字符,并向PTY master发送删除最后一个字符的指令
  我们可以使用命令行工具stty查询和配置 TTY,包括line discipline规则。在 terminal 执行stty -a命令:$stty-aspeed38400baud;rows40;columns80;line=0;intr=^C;quit=^\;erase=^?;kill=^U;eof=^D;eol=<undef>;eol2=<undef>;swtch=<undef>;start=^Q;stop=^S;susp=^Z;rprnt=^R;werase=^W;lnext=^V;discard=^O;min=1;time=0;-parenb-parodd-cmsparcs8-hupcl-cstopbcread-clocal-crtscts-ignbrk-brkint-ignpar-parmrk-inpck-istrip-inlcr-igncricrnlixon-ixoff-iuclc-ixany-imaxbeliutf8opost-olcuc-ocrnlonlcr-onocr-onlret-ofill-ofdelnl0cr0tab0bs0vt0ff0isigicanoniextenechoechoeechok-echonl-noflsh-xcase-tostop-echoprtechoctlechoke-flusho-extproc
  复制代码
  -a标志告诉stty返回所有的设置,包括 TTY 的特征和line discipline规则。
  让我们看一下第一行:
  speed表示波特率。当 terminal 和计算机通过物理线路连接时,speed 后的数字表示物理线路的波特率。波特率对 PTY 来说是没有意义。
  rows, columns表示 terminal 的行数和列数,以字符为单位。
  line表示line discipline的类型。0 是N_TTY。
  stty能够对 terminal 进行设置,让我们做个简单的测试验证一下。在第一个 terminal 中使用 vi 编辑一个文件。vi 在启动时会查询当前 terminal 的大小,以便 vi 能填满整个窗口。这时候我们在另一个 terminal 中输入:#stty-F/dev/pts/0rows20
  复制代码
  这个命令将终端pts/0的行数设置为原来的一半,这将更新内核中 TTY 的数据结构,并向 vi 发送一个SIGWINCH信号,vi 接收到该信号后将根据 TTY 新的行列数重新绘制自己,这时 vi 就只使用了可用窗口区域的上半部分。
  stty -a输出的第二行给出了line discipline能处理的所有特殊字符,包含了键的绑定。例如intr = ^C是指将CTRL+c映射到kill -2 (SIGINT)信号。你也可以更改这个绑定,例如执行stty intr o命令,将发送SIGINT信号的键从CTRL+c换成了字符o。
  最后,stty -a列出了一系列line discipline规则的开关。-表示开关是关闭的,否则开关就是打开的。所有的开关在man stty中都有解释。我举其中一个简单的例子,echo是指示line discipline将字符回传的规则,我们可以执行命令关闭echo规则:$stty-echo
  复制代码
  这时候你再输入一些东西,屏幕上什么也不会出现。line discipline不会将字符回传给PTY master,因此 terminal 不会再显示我们输入的内容。然而其他一切都照常进行。例如你输入ls,在输入时看不到字符ls,然后你输入回车后,仍然会看到ls的输出。执行命令恢复echo规则:$sttyecho
  复制代码
  可以通过stty raw命令来禁用所有的line discipline规则,这样的终端被称为raw terminal。像 vi 这样的编辑器会将终端设置为 raw ,因为它需要自己处理字符。后面介绍的远程终端也是需要一个raw terminal,同样会禁用所有的line discipline规则。远程终端
  我们经常通过 ssh 连接到一个远程主机,这时候远程主机上的ssh server就是一个伪终端 PTY,它同样持有PTY master,但ssh server不再监听键盘事件,以及在屏幕上绘制输出结果,而是通过 TCP 连接,向ssh client发送或接收字符。
  我们简单梳理一下远程终端是如何执行命令的。
  用户在客户端的 terminal 中输入 ssh 命令,经过PTY master、TTY 驱动,到达PTY slave。bash 的标准输入已经设置为了PTY slave,它从标准输入读取字符序列并解释执行,发现需要启动 ssh 客户端,并请求和远程服务器建 TCP 连接。
  服务器端接收客户端的 TCP 连接请求,向内核申请创建 PTY,获得一对设备文件描述符。让ssh server持有PTY master,ssh serverfork 出的子进程 bash 持有PTY slave。bash 的标准输入、标准输出和标准错误都设置为了PTY slave。
  当用户在客户端的 terminal 中输入命令ls -l和回车键,这些字符经过PTY master到达 TTY 驱动。我们需要禁用客户端line discipline的所有规则,也就是说客户端的line discipline不会对特殊字符回车键做处理,而是让命令ls -l和回车键一起到达PTY slave。ssh client从PTY slave读取字符序列,通过网络,发送给ssh server。
  ssh server将从 TCP 连接上接收到的字节写入PTY master。TTY 驱动对字节进行缓冲,直到收到特殊字符回车键。
  由于服务器端的line discipline没有禁用echo规则,所以 TTY 驱动还会将收到的字符写回PTY master,ssh server从PTY master读取字符,将这些字符通过 TCP 连接发回客户端。注意,这是发回的字符不是ls -l命令的执行结果,而是ls -l本身的回显,让客户端能看到自己的输入。
  在服务器端 TTY 驱动将字符序列传送给PTY slave,bash 从PTY slave读取字符,解释并执行命令ls -l。bash fork 出ls子进程,该子进程的标准输入、标准输出和标准错误同样设置为了PTY slave。ls -l命令的执行结果写入标准输出PTY slave,然后执行结果通过 TTY 驱动到达PTY master,再由ssh server通过 TCP 连接发送给ssh client。
  注意在客户端,我们在屏幕上看到的所有字符都来自于远程服务器。包括我们输入的内容,也是远程服务器上的line discipline应用echo规则的结果,将这些字符回显了回来。表面看似简单的在远程终端上执行了一条命令,实际上底下确是波涛汹涌。写在最后
  简单回顾总结一下本文的主要内容:
  电传打字机(TTY)是物理设备,最初是为电报设计的,后来被连接到计算机上,发送输入和获取输出。
  电传打字机(TTY)现在被运行在内核中的模块所模拟,被称为终端模拟器(terminal emulator)。
  伪终端(pseudo terminal, PTY)是运行在用户区的终端模拟程序。
  Shell由terminalfork 出来,是terminal的子进程。Shell不处理键盘事件,也不负责字符的显示,这些是由terminal处理。Shell负责解释执行用户输入的字符。
  可以使用stty命令对 TTY 设备进行配置。
  远程终端ssh也是一种伪终端 PTY。
  相信通过这篇文章,你已经能够理解终端、终端模拟器和伪终端的区别和联系。如果想进一步探究低层实现,可以阅读 TTY 驱动的源码 drivers/tty/tty_io.c 和line discipline的源码 drivers/tty/n_tty.c 。
  原文
  https://xie.infoq.cn/article/a6153354865c225bdce5bd55e

衣带渐宽(衣带渐宽终不悔为伊消人憔悴意思)衣带渐宽(衣带渐宽终不悔为伊消人憔悴意思)品读古诗词时,最怕的就是想当然。比如想当然地认为,李白日照香炉生紫烟中的香炉是烧香的炉子,却不知庐山有个香炉峰比如想当然地认为,白居易离离为伊消得人憔悴的上一句(为医消得人憔悴陆故之)为伊消得人憔悴的上一句(为医消得人憔悴陆故之)朗诵翟第。mp3217来自爱上经典文学艺术蝶恋花作者柳永(宋代)朗诵翟第编制爱上经典文学艺术IDasjdwxys666原文伫倚危楼风细科普下鸟鸣涧被苏轼评为什么及鸟鸣涧唐王维关于到现在鸟鸣涧被苏轼评为什么及鸟鸣涧唐王维这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道鸟鸣涧被苏轼评为什么及鸟鸣涧唐不拘一格降人才是谁的诗句(不拘一格降人才的全诗意思)不拘一格降人才是谁的诗句(不拘一格降人才的全诗意思)此诗,在万马齐喑的时代发出了特别响亮的异声,故诗一出,即让龚自珍名扬天下。为什么会万马齐喑?因为贫穷落后的清王朝不但思想保守,而什么胜于无(胜于无是什么意思)什么胜于无(胜于无是什么意思)资料图,图片来自网络。近日,据媒体报道,山东青岛的公交车上试点设立投放了守护员专座,这个座位设立在驾驶员右侧第一排的位置,上面印着醒目的红色标语人人争上善若水下一句(上善若水厚德载物)上善若水下一句(上善若水厚德载物)笔者多次看到有名家贤达题词赠言上善若水,厚德载物,还可在一些企事业单位的宣传资料的扉页上看到印着如上的箴言警语,那么看到的人有没有想过这两句名言的上善若水下一句(与上善若水相配的对联)上善若水下一句(与上善若水相配的对联)善若水。水善利万物而不争,处众人之所恶,故几于道。居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。夫唯不争,故无尤。种植基地请教你一个上善若水下一句(上善若水完整的一句话)上善若水下一句(上善若水完整的一句话)上善若水出自道德经上篇道经中的第八章,在原文中,上善若水的后一句是水善利万物而不争,处众人之所恶,故几与道。从原文中不难看出,老子认为的最高品母亲节都送什么礼物(送妈妈的100种礼物)母亲节都送什么礼物(送妈妈的100种礼物)五一假期刚刚结束,可别忘了这周末就是母亲节了!母亲节即将来临,如果直接微信转账300块难免有些直接和缺乏节日气氛和浪漫如何把礼物送到老母亲母亲节做什么礼物(送妈妈的100种礼物)母亲节做什么礼物(送妈妈的100种礼物)不管什么时候,选这几个礼物送给妈妈,她就是在过母亲节202105082242有间食堂明天是母亲节,相信很多人已经悄咪咪地准备好了送给妈妈的礼快乐生活一点通小窍门(实用生活小窍门大全)快乐生活一点通小窍门(实用生活小窍门大全)1hr淘米之后的水千万不要倒掉,淘米水中含有维生素和蛋白质,用淘米水洗头发可以使头发更加柔软,用淘米水浇花也能使花开的更加艳丽,淘米水洗脸
科普下中华姓氏吴姓吴姓的来源吴姓取名字关于到现在中华姓氏吴姓吴姓的来源吴姓取名字这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道中华姓氏吴姓吴姓的来源吴姓取名字高铁停运通知(高铁时刻表查询最新)高铁停运通知(高铁时刻表查询最新)6月22日,记者从中国铁路南宁局集团有限公司了解到,6月25日零时起,铁路部门将实行今年第三季度列车运行图。本次调图主要以提质量优结构为重点。记者冠心病好治吗?(冠心病真可以治好吗?)冠心病好治吗?(冠心病真可以治好吗?)根据目前对冠心病患者的研究,冠心病的发病率较高,死亡率逐年上升。冠心病患者的心脏功能会变差,不会有太大的情绪波动,也会对生活产生一定的影响。冠天天向上韩国组合(天天向上请过的韩国组合)天天向上韩国组合(天天向上请过的韩国组合)2020年5月4日,一张直播截图在网上传播,一时之间,著名主持人汪涵被送上了风口浪尖。事件来龙去脉是这样的疫情阴云尚在笼罩,汪涵却在一场义高考成绩多久出来(高考几天看成绩)高考成绩多久出来(高考几天看成绩)不同省市的高考分数线也出炉了,各位考生都已经可以自由地查分了,知道高考成绩了。2021届1078万高三考生在享受着高考后的悠闲假期,在假期内考生们aabc式的词语大全(勃勃生机AABC)aabc式的词语大全(勃勃生机AABC)期末常考词语总结!AABCABCCAABBABAB等七种形式,为孩子收藏请写出4个AABC形式的成语,不仅把孩子难倒了,就连辅导的家长也被难层层波纹相似的词语(层层波纹是不是AABC)层层波纹相似的词语(层层波纹是不是AABC)25收藏分享语文一年级下册单元字词句段知识点总结以下展示部分(全部电子版文末附下载方法)2。词(1)必须掌握的词吹拂聚拢形式偶尔花瓣莲蓬abab的词语有哪些(ABAB式的词语怎么写)abab的词语有哪些(ABAB式的词语怎么写)期末常考词语总结!AABCABCCAABBABAB等七种形式,为孩子收藏请写出4个AABC形式的成语,不仅把孩子难倒了,就连辅导的家长aabb式的成语(ABAB四字成语)aabb式的成语(ABAB四字成语)叠词是汉语的一种特殊词汇现象,使用非常普遍。汉语的名词数词量词形容词副词动词以及象声词都有重叠变化。在小学阶段叠词可以说是我们语文学习过程中比较如何练好普通话(怎么样练好标准的普通话)如何练好普通话(怎么样练好标准的普通话)核心提示一个汉字就是一个音节,音节是语言中最小使用单位。构成这最小使用单位的有三种成分,起头的音是声母,其余的是韵母,构成整个音节音调高低升什么是爵士乐(怎么判断爵士乐)什么是爵士乐(怎么判断爵士乐)关于爵士乐是什么,可能在一千个人心中有一千种模样。看看台湾的爵士乐友林炜盛是怎么说的。大约这十年来,爵士乐处在一个有点模糊又有点矛盾的状况下,好像一天