專業(yè)移動(dòng)微網(wǎng)站建設(shè)優(yōu)秀軟文范例200字
Linux 終端(TTY)
TTY 是 Teletype 或 Teletypewriter 的縮寫(xiě),原來(lái)是指電傳打字機(jī),后來(lái)這種設(shè)備逐漸鍵盤(pán)和顯示器取代。不管是電傳打字機(jī)還是鍵盤(pán)顯示器,都是作為計(jì)算機(jī)的終端設(shè)備存在的,所以 TTY 也泛指計(jì)算機(jī)的終端(terminal)設(shè)備。為了支持這些 TTY 設(shè)備,Linux 實(shí)現(xiàn)了一個(gè)叫做 TTY 的子系統(tǒng)。所以 TTY 既指終端,也指 Linux 的 TTY 子系統(tǒng)。本文中演示部分使用的環(huán)境為 ubuntu 22.04。
硬件終端 terminal(TTY)
早期的終端(terminal) 是一臺(tái)獨(dú)立于計(jì)算機(jī)的機(jī)器(teletype 即, TTY),大概像下面的樣子:
它終端通過(guò)線纜與計(jì)算機(jī)連接,并完成計(jì)算機(jī)的輸入輸出功能:
現(xiàn)在物理終端實(shí)際上已經(jīng)滅絕了,我們看到的所有 TTY 都是模擬視頻終端,即軟件仿真出來(lái)的終端??梢酝ㄟ^(guò) toe -a 命令查看系統(tǒng)支持的終端類(lèi)型,該列表很長(zhǎng)。
qz@ubuntu22:~$ toe -a
ergo4000 microterm ergo 4000
excel62-w datamedia Excel 62 in 132 char mode
excel62-rv datamedia Excel 62 in reverse video mode
emu emu native mode
env230 envision 230 graphics terminal
ecma+color color control for ECMA-48-compatible terminals
excel62 datamedia Excel 62
elks default ELKS console
elks-glasstty ELKS glass-TTY capabilities
elks-vt52 ELKS vt52 console
esprit-am hazeltine esprit auto-margin
eterm-color Emacs term.el terminal emulator term-protocol-version 0.96
emu-220 Emu-220 (vt200-7bit mode)
ep40 execuport 4000
esprit Hazeltine Esprit I
ecma+sgr attribute capabilities for true ECMA-48 terminals
.....................
控制臺(tái)
提到終端就不能不提控制臺(tái) console??刂婆_(tái)的概念與終端含義非常相近,其實(shí)現(xiàn)在我們經(jīng)常用它們表示相同的東西,但是在計(jì)算機(jī)的早期時(shí)代,它們確實(shí)是不同的東西。
一些數(shù)控設(shè)備(比如數(shù)控機(jī)床)的控制箱,通常會(huì)被稱為控制臺(tái),顧名思義,控制臺(tái)就是一個(gè)直接控制設(shè)備的面板,上面有很多控制按鈕。 在計(jì)算機(jī)里,把那套直接連接在電腦上的鍵盤(pán)和顯示器就叫做控制臺(tái)。而終端是通過(guò)串口連接上的,不是計(jì)算機(jī)自身的設(shè)備,而控制臺(tái)是計(jì)算機(jī)本身就有的設(shè)備,一個(gè)計(jì)算機(jī)只有一個(gè)控制臺(tái)。**計(jì)算機(jī)啟動(dòng)的時(shí)候,所有的信息都會(huì)顯示到控制臺(tái)上,而不會(huì)顯示到終端上。**這同樣說(shuō)明,控制臺(tái)是計(jì)算機(jī)的基本設(shè)備,而終端是附加設(shè)備。計(jì)算機(jī)操作系統(tǒng)中,與終端不相關(guān)的信息,比如內(nèi)核消息,后臺(tái)服務(wù)消息,都可以顯示到控制臺(tái)上,但不會(huì)顯示到終端上。比如在啟動(dòng)和關(guān)閉 Linux 系統(tǒng)時(shí),我們可以在控制臺(tái)上看到很多的內(nèi)核信息(下圖來(lái)自 vSphere Client 中的 “Virtual Machine Console”):
現(xiàn)在終端和控制臺(tái)都由硬件概念,逐漸演化成了軟件的概念。簡(jiǎn)單的說(shuō),能直接顯示系統(tǒng)消息的那個(gè)終端稱為控制臺(tái),其他的則稱為終端(控制臺(tái)也是一個(gè)終端)?;蛘呶覀?cè)谄綍r(shí)的使用中壓根就不區(qū)分 Linux 中的終端與控制臺(tái)。
Linux 總是把寫(xiě)入 /dev/console 的內(nèi)容會(huì)顯示在控制臺(tái)中當(dāng)前的虛擬終端(tty1-tty6)里。
TTY 設(shè)備
從歷史上看,終端剛開(kāi)始就是終端機(jī),配有打印機(jī),鍵盤(pán),帶有一個(gè)串口,通過(guò)串口傳送數(shù)據(jù)到主機(jī)端,然后主機(jī)處理完交給終端打印出來(lái)。電傳打字機(jī)(teletype)可以被看作是這類(lèi)設(shè)備的統(tǒng)稱,因此終端也被簡(jiǎn)稱為 TTY(teletype 的縮寫(xiě))。
如下圖所示
UART 驅(qū)動(dòng)
如上圖所示,物理終端通過(guò)電纜連接到計(jì)算機(jī)上的 UART(通用異步接收器和發(fā)射器)。操作系統(tǒng)中有一個(gè) UART 驅(qū)動(dòng)程序用于管理字節(jié)的物理傳輸。
?
行規(guī)范
上圖中內(nèi)核中的 Line discipline(行規(guī)范)用來(lái)提供一個(gè)編輯緩沖區(qū)和一些基本的編輯命令(退格,清除單個(gè)單詞,清除行,重新打印),主要用來(lái)支持用戶在輸入時(shí)的行為(比如輸錯(cuò)了,需要退格)。
?
TTY 驅(qū)動(dòng)
TTY 驅(qū)動(dòng)用來(lái)進(jìn)行會(huì)話管理,并且處理各種終端設(shè)備。
?
UART 驅(qū)動(dòng)、行規(guī)范和 TTY 驅(qū)動(dòng)都位于內(nèi)核中,它們的一端是終端設(shè)備,另一端是用戶進(jìn)程。因?yàn)樵?Linux 下所有的設(shè)備都是文件,所以它們?nèi)齻€(gè)加在一起被稱為 “TTY 設(shè)備”,即我們常說(shuō)的 TTY。
從軟件仿真終端到偽終端
后來(lái)的終端慢慢演變成了鍵盤(pán) + 顯示器。如果我們要把內(nèi)容輸出到顯示器,只要把這些內(nèi)容寫(xiě)入到顯示器對(duì)應(yīng)的 TTY 設(shè)備就可以了,然后由 TTY 層負(fù)責(zé)匹配合適的驅(qū)動(dòng)完成輸出,這也是 Linux 控制臺(tái)的工作原理(
上圖中,TTY 驅(qū)動(dòng)和行規(guī)范的行為與前面的示例類(lèi)似,但不再有 UART 或物理終端。相反,軟件仿真出視頻終端,并最終被渲染到 VGA 顯示器。注意,這里出現(xiàn)了軟件仿真終端,它們是運(yùn)行在內(nèi)核態(tài)的。
tty1-tty6 都是軟件仿真終端:
/dev/tty1-/dev/tty6 是這些仿真終端在文件系統(tǒng)中的表示,程序通過(guò)對(duì)這些文件的讀寫(xiě)實(shí)現(xiàn)對(duì)仿真終端的讀寫(xiě)。
如果我們?cè)谟脩艨臻g也進(jìn)行終端仿真,情況會(huì)變得更加靈活,下圖是 xterm 及其克隆的工作方式:
為了便于將終端仿真移入用戶空間,同時(shí)仍保持 TTY 子系統(tǒng)(TTY 子系統(tǒng)指 TTY 驅(qū)動(dòng)和行規(guī)范)的完整,偽終端被發(fā)明了出來(lái)(pseudo terminal 或 pty)。偽終端在內(nèi)核中分為兩部分,分別是 master side 和 在 TTY 驅(qū)動(dòng)中實(shí)現(xiàn)的 slave side。注意上圖中的 xterm,這是一個(gè)運(yùn)行在用戶態(tài)的終端仿真程序,比如 Ubuntu Desktop 中的 GNOME Terminal:
當(dāng)創(chuàng)建一個(gè)偽終端時(shí),會(huì)在 /dev/pts 目錄下創(chuàng)建一個(gè)設(shè)備文件:
如果是通過(guò) PuTTY 等終端仿真程序通過(guò) SSH 的方式遠(yuǎn)程連接 Linux,那么終端仿真程序通過(guò) SSH 與 PTY master side 交換數(shù)據(jù)。
終端與偽終端的區(qū)別
至此我們可以得出這樣的結(jié)論:現(xiàn)在所說(shuō)的終端已經(jīng)不是硬件終端了,而是軟件仿真終端(終端模擬軟件)。
關(guān)于終端和偽終端,可以簡(jiǎn)單的理解如下:
- 真正的硬件終端基本上已經(jīng)看不到了,現(xiàn)在所說(shuō)的終端、偽終端都是軟件仿真終端(即終端模擬軟件)
- 一些連接了鍵盤(pán)和顯示器的系統(tǒng)中,我們可以接觸到運(yùn)行在內(nèi)核態(tài)的軟件仿真終端(tty1-tty6)
- 通過(guò) SSH 等方式建立的連接中使用的都是偽終端
- 偽終端是運(yùn)行在用戶態(tài)的軟件仿真終端
總結(jié)
通過(guò)本文我們可以了解到,真正的硬件終端基本上已經(jīng)看不到了。在一些連接了鍵盤(pán)和顯示器的系統(tǒng)中(當(dāng)然也包括一些 vsphere 等虛擬環(huán)境),我們可以接觸到運(yùn)行在內(nèi)核態(tài)的軟件仿真終端。而我們使用最多的則是偽終端。