當我們在鍵盤上敲下一個字母的時候,到底是怎么發送到相應的進程的呢?我們通過ps、who等命令看到的類似tty1、pts/0這樣的輸出,它們的作用和區別是什么呢?
TTY歷史
支持多任務的計算機出現之前
在計算機出來以前,人們就已經在使用一種叫teletype的設備,用來相互之間傳遞信息,看起來像下面這樣:
+----------+ Physical Line +----------+| teletype |<--------------------->| teletype |+----------+ +----------+
兩個teletype之間用線連接起來,線兩端可能也有類似于調制解調器之類的設備(這里將它們忽略),在一端的teletype上敲鍵盤時,相應的數據會發送到另一端的teletype,具體功能是干什么的,我也不太了解。(我腦袋里面想到畫面是在一端敲字,另一端打印出來)
這些都是老古董了,完全沒接觸過,所以只能簡單的推測。
支持多任務的計算機出現之后
等到計算機支持多任務后,人們想到把這些teletype連到計算機上,作為計算機的終端,從而可以操作計算機。
使用teletype的主要原因有兩個(個人見解):
現實中已經存在了大量不同廠商的teletype,可以充分利用現有資源 teletype的相關網絡已經比較成熟,連起來方便于是連接就發展成這樣:
+----------+ +----------+ +-------+ Physical Line +-------+ +------+ | || Terminal |<->| Modem |<--------------------->| Modem |<->| UART |<->| Computer |+----------+ +-------+ +-------+ +------+ | | +----------+左邊的Terminal就是各種各樣的teletype 物理線路兩邊用上了Modem,就是我們常說的“貓”,那是因為后來網絡已經慢慢的變發達了,大家可以共享連接了。(大概推測,可能不對) UART可以理解為將teletype的信號轉換成計算機能識別的信號的設備
內核TTY子系統
計算機為了支持這些teletype,于是設計了名字叫做TTY的子系統,內部結構如下:
+-----------------------------------------------+ | Kernel | | +--------+ | | +--------+ +------------+ | | | +----------------+ | | UART | | Line | | TTY |<---------->| User process A |<------>| |<->| |<->| | | +----------------+ | | driver | | discipline | | driver |<---------->| User process B | | +--------+ +------------+ | | | +----------------+ | +--------+ | | | +-----------------------------------------------+UART driver對接外面的UART設備 Line discipline主要是對輸入和輸出做一些處理,可以理解它是TTY driver的一部分 TTY driver用來處理各種終端設備 用戶空間的進程通過TTY driver來和終端打交道
為了簡單起見,后面的介紹中不再單獨列出UART driver和Line discipline,可以認為它們是TTY driver的一部分
TTY設備
對于每一個終端,TTY driver都會創建一個TTY設備與它對應,如果有多個終端連接過來,那么看起來就是這個樣子的:
+----------------+ | TTY Driver | | | | +-------+ | +----------------+ +------------+ | | |<---------->| User process A | | Terminal A |<--------->| ttyS0 | | +----------------+ +------------+ | | |<---------->| User process B | | +-------+ | +----------------+ | | | +-------+ | +----------------+ +------------+ | | |<---------->| User process C | | Terminal B |<--------->| ttyS1 | | +----------------+ +------------+ | | |<---------->| User process D | | +-------+ | +----------------+ | | +----------------+
新聞熱點
疑難解答