临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

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

10月6日 血海塔投稿
  计算机终端(计算机终端包括什么)你可能听说过TTY和PTY这些缩写,也在dev目录下看到过devtty〔n〕设备,大概知道它们和Linux终端的概念有关。可是你清楚TTY、PTY具体指的是什么,它们有什么区别,以及它们和shell又是什么关系呢?为了理解这些,我们需要先回顾一下历史。回顾历史
  在计算机诞生之前,人们发明了Teleprinter(电传打字机),通过长长的电线点对点连接,发送和接收打印的信息,用于远距离传输电报信息。
  Teleprinter也可以写成teletypewriter或teletype。
  后来人们将Teleprinter连接到早期的大型计算机上,作为输入和输出设备,将输入的数据发送到计算机,并打印出响应。
  在今天你很难想象程序的运行结果需要等到打印出来才能看到,Teleprinter设备已经进了计算机博物馆。现在我们用TTY代表计算机终端(terminal),只是沿用了历史习惯,电传打字机(teletypewriter)曾经是计算机的终端,它的缩写便是TTY(TeleTYpewriter)。
  为了把不同型号的电传打字机接入计算机,需要在操作系统内核安装驱动,为上层应用屏蔽所有的低层细节。
  电传打字机通过两根电缆连接:一根用于向计算机发送指令,一根用于接收计算机的输出。这两根电缆插入UART(UniversalAsynchronousReceiverandTransmitter,通用异步接收和发送器)的串行接口连接到计算机。
  操作系统包含一个UART驱动程序,管理字节的物理传输,包括奇偶校验和流量控制。然后输入的字符序列被传递给TTY驱动,该驱动包含一个linediscipline。
  linediscipline负责转换特殊字符(如退格、擦除字、清空行),并将收到的内容回传给电传打字机,以便用户可以看到输入的内容。linediscipline还负责对字符进行缓冲,当按下回车键时,缓冲的数据被传递给与TTY相关的前台用户进程。用户可以并行的执行几个进程,但每次只与一个进程交互,其他进程在后台工作。终端模拟器(terminalemulator)
  今天电传打字机已经进了博物馆,但LinuxUnix仍然保留了当初TTY驱动和linediscipline的设计和功能。终端不再是一个需要通过UART连接到计算机上物理设备。终端成为内核的一个模块,它可以直接向TTY驱动发送字符,并从TTY驱动读取响应然后打印到屏幕上。也就是说,用内核模块模拟物理终端设备,因此被称为终端模拟器(terminalemulator)。
  上图是一个典型的Linux桌面系统。终端模拟器就像过去的物理终端一样,它监听来自键盘的事件将其发送到TTY驱动,并从TTY驱动读取响应,通过显卡驱动将结果渲染到显示器上。TTY驱动和linediscipline的行为与原先一样,但不再有UART和物理终端参与。
  如何看到一个终端模拟器呢?在Ubuntu20桌面系统上,按CtrlAltF3就会得到一个由内核模拟的TTY。Linux上这种模拟的文本终端也被称为虚拟终端(Virtualconsoles)。每个虚拟终端都由一个特殊的设备文件devtty〔n〕所表示,与这个虚拟终端的交互,是通过对这个设备文件的读写操作,以及使用ioctl系统调用操作这个设备文件进行的。通过执行tty命令可以查看代表当前虚拟终端的设备文件:ttydevtty3
  复制代码
  可以看到,当前终端的设备文件是devtty3,也就是通过CtrlAltF3得到的虚拟终端。
  你可以通过CtrlAltF3到CtrlAltF6在几个虚拟终端之间切换。按CtrlAltF2回到桌面环境。X系统也是运行在一个终端模拟器上,在Ubuntu20上它对应的设备是devtty2,这也是为什么使用CtrlAltF2可以切换到X系统的原因。
  我们可以看看X系统打开的文件中是否包含了设备文件devtty2。先查找X系统的PID:psauxgrepXorgmazhen14040。10。674188449996tty2Sl08:070:13usrlibxorgXorgvt2displayfd3authrunuser1000gdmXauthoritybackgroundnonenoresetkeepttyverbose3
  复制代码
  再看看这个进程(1404)打开了哪些文件:llproc1404fd总用量0drx2mazhenmazhen07月1008:07。drxrxrx9mazhenmazhen07月1008:07。。lrwx1mazhenmazhen647月1008:070devtty2lrwx1mazhenmazhen647月1008:07139;socket:〔39965〕39;lrwx1mazhenmazhen647月1010:091039;socket:〔34615〕39;。。。
  复制代码
  可以看到,X系统确实打开了devtty2。
  再做一个有趣的实验,在tty3下以root用户身份执行echo命令:echohellofromtty3devtty4
  复制代码
  再按CtrlAltF4切换到tty4,能看到从tty3发送来的信息。伪终端(pseudoterminal,PTY)
  终端模拟器(terminalemulator)是运行在内核的模块,我们也可以让终端模拟程序运行在用户区。运行在用户区的终端模拟程序,就被称为伪终端(pseudoterminal,PTY)。
  PTY运行在用户区,更加安全和灵活,同时仍然保留了TTY驱动和linediscipline的功能。常用的伪终端有xterm,gnometerminal,以及远程终端ssh。我们以Ubuntu桌面版提供的gnometerminal为例,介绍伪终端如何与TTY驱动交互。
  PTY是通过打开特殊的设备文件devptmx创建,由一对双向的字符设备构成,称为PTYmaster和PYTslave。
  gnometerminal持有PTYmaster的文件描述符devptmx。gnometerminal负责监听键盘事件,通过PTYmaster接收或发送字符到PYTslave,还会在屏幕上绘制来自PTYmaster的字符输出。
  gnometerminal会fork一个shell子进程,并让shell持有PYTslave的设备文件devpts〔n〕,shell通过PYTslave接收字符,并输出处理结果。
  PTYmaster和PYTslave之间是TTY驱动,会在master和slave之间复制数据,并进行会话管理和提供linediscipline功能。
  在gnometerminal中执行tty命令,可以看到代表PYTslave的设备文件:ttydevpts0
  复制代码
  执行psl命令,也可以确认shell关联的伪终端是pts0:pslFSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD0S10001842183208003423dowaipts000:00:00bash0R10001897184208003626pts000:00:00ps
  复制代码
  注意到TTY这一列指出了当前进程的终端是pts0。
  我们以实际的例子,看看在terminal执行一个命令的全过程。
  我们在桌面启动终端程序gnometerminal,它向操作系统请求一个PTYmaster,并把GUI绘制在显示器上
  gnometerminal启动子进程bash
  bash的标准输入、标准输出和标准错误都设置为PYTslave
  gnometerminal监听键盘事件,并将输入的字符发送到PTYmaster
  linediscipline收到字符,进行缓冲。只有当你按下回车键时,它才会把缓冲的字符复制到PYTslave。
  linediscipline在接收到字符的同时,也会把字符写回给PTYmaster。gnometerminal只会在屏幕上显示来自PTYmaster的东西。因此,linediscipline需要回传字符,以便让你看到你刚刚输入的内容。
  当你按下回车键时,TTY驱动负责将缓冲的数据复制到PYTslave
  bash从标准输入读取输入的字符(例如lsl)。注意,bash在启动时已经将标准输入被设置为了PYTslave
  bash解释从输入读取的字符,发现需要运行ls
  bashfork出ls进程。bashfork出的进程拥有和bash相同的标准输入、标准输出和标准错误,也就是PYTslave
  ls运行,结果打印到标准输出,也就是PYTslave
  TTY驱动将字符复制到PTYmaster
  gnometerminal循环从PTYmaster读取字节,绘制到用户界面上。Shell
  我们经常不去区分terminal和Shell,会说打开一个terminal,或打开一个Shell。从前面介绍的命令执行过程可以看出,Shell不处理键盘事件,也不负责字符的显示,这是terminal要为它处理好的。
  Shell是用户空间的应用程序,通常由terminalfork出来,是terminal的子进程。Shell用来提示用户输入,解释用户输入的字符,然后处理来自底层操作系统的输出。
  通常我们使用较多的shell有Bash、Zsh和sh。配置TTY设备
  内核将使用TTY驱动来处理terminal和Shell之间的通信。linediscipline是TTY驱动的一个逻辑组件。linediscipline主要有以下功能:
  当用户输入时,字符会被回传到PTYmaster
  linediscipline会在内存中缓冲这些字符。当用户按回车键时,它才将这些字符发送到PYTslave
  linediscipline可以拦截处理一些特殊的功能键,例如:
  当用户按CTRLc时,它向连接到PYTslave的进程发送kill2(SIGINT)信号
  当用户按CTRLw时,它删除用户输入的最后一个字
  当用户按CTRLz时,它向连接到PYTslave的进程发送killSTOP信号
  当用户按退格键时,它从缓冲区中删除该字符,并向PTYmaster发送删除最后一个字符的指令
  我们可以使用命令行工具stty查询和配置TTY,包括linediscipline规则。在terminal执行sttya命令:sttyaspeed38400rows40;columns80;line0;intrC;erase?;killU;eofD;;eol2;;startQ;stopS;suspZ;rprntR;weraseW;lnextV;discardO;min1;time0;parenbparoddcmsparcs8hupclcstopbcreadclocalcrtsctsignbrkbrkintignparparmrkinpckistripinlcrigncricrnlixonixoffiuclcixanyimaxbeliutf8opostolcucocrnlonlcronocronlretofillofdelnl0cr0tab0bs0vt0ff0isigicanoniextenechoechoeechokechonlnoflshxcasetostopechoprtechoctlechokeflushoextproc
  复制代码
  a标志告诉stty返回所有的设置,包括TTY的特征和linediscipline规则。
  让我们看一下第一行:
  speed表示波特率。当terminal和计算机通过物理线路连接时,speed后的数字表示物理线路的波特率。波特率对PTY来说是没有意义。
  rows,columns表示terminal的行数和列数,以字符为单位。
  line表示linediscipline的类型。0是NTTY。
  stty能够对terminal进行设置,让我们做个简单的测试验证一下。在第一个terminal中使用vi编辑一个文件。vi在启动时会查询当前terminal的大小,以便vi能填满整个窗口。这时候我们在另一个terminal中输入:sttyFdevpts0rows20
  复制代码
  这个命令将终端pts0的行数设置为原来的一半,这将更新内核中TTY的数据结构,并向vi发送一个SIGWINCH信号,vi接收到该信号后将根据TTY新的行列数重新绘制自己,这时vi就只使用了可用窗口区域的上半部分。
  sttya输出的第二行给出了linediscipline能处理的所有特殊字符,包含了键的绑定。例如intrC是指将CTRLc映射到kill2(SIGINT)信号。你也可以更改这个绑定,例如执行sttyintro命令,将发送SIGINT信号的键从CTRLc换成了字符o。
  最后,sttya列出了一系列linediscipline规则的开关。表示开关是关闭的,否则开关就是打开的。所有的开关在manstty中都有解释。我举其中一个简单的例子,echo是指示linediscipline将字符回传的规则,我们可以执行命令关闭echo规则:sttyecho
  复制代码
  这时候你再输入一些东西,屏幕上什么也不会出现。linediscipline不会将字符回传给PTYmaster,因此terminal不会再显示我们输入的内容。然而其他一切都照常进行。例如你输入ls,在输入时看不到字符ls,然后你输入回车后,仍然会看到ls的输出。执行命令恢复echo规则:sttyecho
  复制代码
  可以通过sttyraw命令来禁用所有的linediscipline规则,这样的终端被称为rawterminal。像vi这样的编辑器会将终端设置为raw,因为它需要自己处理字符。后面介绍的远程终端也是需要一个rawterminal,同样会禁用所有的linediscipline规则。远程终端
  我们经常通过ssh连接到一个远程主机,这时候远程主机上的sshserver就是一个伪终端PTY,它同样持有PTYmaster,但sshserver不再监听键盘事件,以及在屏幕上绘制输出结果,而是通过TCP连接,向sshclient发送或接收字符。
  我们简单梳理一下远程终端是如何执行命令的。
  用户在客户端的terminal中输入ssh命令,经过PTYmaster、TTY驱动,到达PTYslave。bash的标准输入已经设置为了PTYslave,它从标准输入读取字符序列并解释执行,发现需要启动ssh客户端,并请求和远程服务器建TCP连接。
  服务器端接收客户端的TCP连接请求,向内核申请创建PTY,获得一对设备文件描述符。让sshserver持有PTYmaster,sshserverfork出的子进程bash持有PTYslave。bash的标准输入、标准输出和标准错误都设置为了PTYslave。
  当用户在客户端的terminal中输入命令lsl和回车键,这些字符经过PTYmaster到达TTY驱动。我们需要禁用客户端linediscipline的所有规则,也就是说客户端的linediscipline不会对特殊字符回车键做处理,而是让命令lsl和回车键一起到达PTYslave。sshclient从PTYslave读取字符序列,通过网络,发送给sshserver。
  sshserver将从TCP连接上接收到的字节写入PTYmaster。TTY驱动对字节进行缓冲,直到收到特殊字符回车键。
  由于服务器端的linediscipline没有禁用echo规则,所以TTY驱动还会将收到的字符写回PTYmaster,sshserver从PTYmaster读取字符,将这些字符通过TCP连接发回客户端。注意,这是发回的字符不是lsl命令的执行结果,而是lsl本身的回显,让客户端能看到自己的输入。
  在服务器端TTY驱动将字符序列传送给PTYslave,bash从PTYslave读取字符,解释并执行命令lsl。bashfork出ls子进程,该子进程的标准输入、标准输出和标准错误同样设置为了PTYslave。lsl命令的执行结果写入标准输出PTYslave,然后执行结果通过TTY驱动到达PTYmaster,再由sshserver通过TCP连接发送给sshclient。
  注意在客户端,我们在屏幕上看到的所有字符都来自于远程服务器。包括我们输入的内容,也是远程服务器上的linediscipline应用echo规则的结果,将这些字符回显了回来。表面看似简单的在远程终端上执行了一条命令,实际上底下确是波涛汹涌。写在最后
  简单回顾总结一下本文的主要内容:
  电传打字机(TTY)是物理设备,最初是为电报设计的,后来被连接到计算机上,发送输入和获取输出。
  电传打字机(TTY)现在被运行在内核中的模块所模拟,被称为终端模拟器(terminalemulator)。
  伪终端(pseudoterminal,PTY)是运行在用户区的终端模拟程序。
  Shell由terminalfork出来,是terminal的子进程。Shell不处理键盘事件,也不负责字符的显示,这些是由terminal处理。Shell负责解释执行用户输入的字符。
  可以使用stty命令对TTY设备进行配置。
  远程终端ssh也是一种伪终端PTY。
  相信通过这篇文章,你已经能够理解终端、终端模拟器和伪终端的区别和联系。如果想进一步探究低层实现,可以阅读TTY驱动的源码driversttyttyio。c和linediscipline的源码driversttyntty。c。
  原文
  https:xie。infoq。cnarticlea6153354865c225bdce5bd55e

科普下硫酸铁是什么化学式怎么写关于到现在硫酸铁是什么化学式怎么写这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道硫酸铁是什么化学式怎么写,小编也是到……数学知识wm是什么计量单位关于到现在wm是什么计量单位这个话题相信很多小伙伴都是非常有兴趣了解的吧因为这个话题也是近期非常火热的那么既然现在大家都想要知道wm是什么计量单位小编也是到网上收集了一些与wm……知我罪我其惟春秋(知我罪我其惟春秋翻译)知我罪我其惟春秋(知我罪我其惟春秋翻译)2021071518:24古凌古有无字碑,建国后也有人民英雄纪念碑,上面没有具体写明这些人的功绩,目的是为了让后人评说是非功过,一切自有……为什么脚浮肿(肾病水肿怎么消肿最快)生活中有时不经意间就会发现自己的小腿有些浮肿,造成小腿浮肿的原因有许多,可能是内在因素,也可能是外伤引起的。如果发现自己的小腿出现浮肿,需要了解引起浮肿的原因才能对症下药,及时……红楼十二钗(红楼梦十二钗分别代表什么花?)红楼十二钗(红楼梦十二钗分别代表什么花?)《红楼梦》是赞颂女性的作品,而金陵十二钗则是《红楼梦》里最出色,最具有特点的十二位女性。她们分别是薛宝钗、林黛玉、贾元春、贾探春……计算机终端(计算机终端包括什么)计算机终端(计算机终端包括什么)你可能听说过TTY和PTY这些缩写,也在dev目录下看到过devtty〔n〕设备,大概知道它们和Linux终端的概念有关。可是你清楚TTY、PT……怎样查手机定位系统(怎么定位手机位置)怎样查手机定位系统(怎么定位手机位置)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的,可以……aunt的音标(uncle的音标)aunt的音标(uncle的音标)学习的基础,记单词对于小朋友来说难免是有些枯燥乏味的。因此我们将教科书中的单词配上趣味插画和例句,按单元制作了单词闪卡,配上北美外教专业……华帝热水器怎么样(华帝热水器质量怎样)华帝热水器怎么样(华帝热水器质量怎样)华帝热水器质量怎样?我们选择热水器的时候,当然质量越好的越受欢迎了,毕竟热水器的使用寿命非常的长久,一款质量好的热水器对我们的整体使……关于迈克尔杰克逊(迈克尔杰克逊最经典的歌曲)关于迈克尔杰克逊(迈克尔杰克逊最经典的歌曲)谁在称传奇,哪个敢言腐朽!迈克尔杰克逊的一生充满着传奇,但是也饱受着争议。从八卦杂志嘴里迈克尔杰克逊始终被误解,甚至被攻……男脸型与发型的搭配(长脸型适合什么样的发型男)男脸型与发型的搭配(长脸型适合什么样的发型男)男生发型和脸型搭配的终极指南,看完就懂了!发型可以说是男生的第二张脸,很多男生喜欢跟风去剪潮流款,结果丑爆了。其实这很……科普下二氧化碳的物理性质是什么关于到现在科普下二氧化碳的物理性质是什么这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道科普下二氧化碳的物理性质是什么……
提拉紧致面膜哪个牌子好用(紧致面膜推荐10款)1提拉紧致面膜哪个牌子好用1。肤泊漫二裂酵母面膜,2。一叶子面膜3。小迷糊面膜套装4。名膜壹号樱花面膜5。蒂佳婷(Dr。Jart)水动力活力水润蓝……日系美白精华有哪几款夏季美白修复宝典美白肌肤一直是大家都很关注的护肤话题,美白精华是最有效的美白护肤产品,市面上很多好用的美白精华,日系美白精华一直销量很好。日系美白精华有哪几款1、碧丽妃药用美白精华……韩国女星护肤棒棒的高弹性护肤打造动人美肌文根英、申世京、高俊熙等活跃在电视剧领域的女星们,就拥有着这样令人羡慕的光彩美肌。通过wellbeing护肤管理,你也可以打造光彩肌肤。下面就为你介绍打造明星般透明靓肌的护肤T……面膜纸厚的好还是薄的好?面膜纸越薄越好吗?提这个问题绝对不是脑洞大开,就拿小编买的同一款产品的面膜来说吧!一款面膜纸厚,一款面膜纸薄,感觉精华也很多,敷上去很贴合。这下就晕了,厚实好像做工好,薄的好像更贴肌肤,哪款更好……minon适合什么肤质?minon适合油皮敏感肌吗?喜欢日本化妆品,或是经常关注cosme大赏的女生们,都不会对MINON感到陌生。这个品牌在日本非常出名,有着悠久历史,产品十分温和天然。那么,minon适合什么肤质?mi……化妆水是化妆前用的吗化妆水的使用方法化妆水大家应该都用过,我们平时护肤的时候都会使用化妆水,是我们日常保养的必需步骤,不同的化妆水有着不同的使用方法和顺序。化妆水是化妆前用的吗是的,化妆前要有基础的护肤步骤……杏仁酸可以去痘印吗?杏仁酸可以祛痘吗?杏仁酸其实在很多嫩肤的精华液中都有它的存在,它也是可以安全的添加到护肤品中的一种酸,可见它的温和性,那么,杏仁酸可以祛痘吗?杏仁酸可以去痘印吗可以祛痘給大家简单说一……来学习超简单的补妆术让你一分钟恢复美貌超简单补妆术,让你一分钟恢复美貌。早晨化着美美的妆出门,可一过中午就开始晕妆、脸上也油光闪闪!只要化妆,晕妆就在所难免。妆容花了,看起来像一只脏脏的小猫。别担心,一起来学习一下……姬存希始末档次姬存希的护肤品怎么样姬存希护肤品你用过吗?姬存希是浙江的一个化妆品品牌。那么你知道姬存希属于什么档次吗?姬存希的护肤品怎么样呢?一起去了解了解。1姬存希属于什么档次姬存希是一个国产护肤品牌,……欧缇丽葡萄籽喷雾功效成分味道保质期欧缇丽葡萄籽喷雾听朋友安利的,我是油性肤质,喷上去感觉很舒服,很清凉,味道也好闻。那么欧缇丽葡萄籽喷雾有什么功效?成分味道是什么?保质期多久?产品功效一种独特的水萃取自天……菲洛嘉面霜好用吗?菲洛嘉面霜怎么样?菲洛嘉是一个比较知名的牌子,很多人也蛮喜欢这个牌子的,菲洛嘉出的一款面霜引起了大家的讨论,究竟这款面霜效果怎么样呢,下面介绍菲洛嘉面霜好用吗?菲洛嘉面霜怎么样?菲洛嘉面霜好用吗……美牙笔怎么用?美牙笔使用步骤美牙笔相对于牙贴,洗牙粉来说,更好携带,就像是一支笔一样,使用的时候也像是在刷牙,下面具体来说说它的用法美牙笔怎么用第一步:取出牙齿洁白笔直接擦试牙面,使逐个牙齿脱色,直……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找