歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux核心概念之終端

Linux核心概念之終端

日期:2017/2/28 14:49:27   编辑:Linux教程

注意:本文是作者自己對終端的理解,為了解開自己心中困惑查閱了一些資料後有感而寫,很多地方術語表述並不精確,自己的體會而已,僅供參考。

1 終端的由來

計算機剛被發明的時候,並沒有顯示器和鍵盤。後來的Unix主機也沒有,其輸入和輸出是通過一個串口線連接到專門的輸入輸出設備上,這個設備就叫做終端,最早出現的是一種電傳打字機teletype,所以終端就使用tty三個字母表示了。

主機 ---------(串口線)--------------終端設備(包括鍵盤、顯卡和鼠標等)

2 終端控制協議

終端設備一般包括用於輸入的鍵盤和用於輸出的顯示器,由於主機不直接管理終端的鍵盤和顯示器,而是把終端作為一個物理整體對待,所以主機和終端之間是通過一組控制命令(協議)來交互的。按照Unix中一切都是文件的概念,終端設備也一樣,對終端設備的讀就是獲取用戶的輸入,而對終端設備的寫就是輸出。

需要注意的是,微軟的DOS和Windows中很少使用終端的概念,因為這些系統出現在本身就帶有鍵盤和顯示器的機器上。這些系統更傾向於直接管理鍵盤和顯示器(處理鍵盤控制器和直接寫顯存),而不是把它們作為一個終端來使用。

早期終端型號很多,其顯示能力也各不相同,控制指令也不統一,這給編程帶來了很大麻煩,為了規范終端的顯示能力和控制指令,相繼出現了一些標准:ANSI,VT100等。慢慢地所有設備都遵循這些標准來設計和實現了。相應的也出現了設備無關的編程接口庫,如termcap,terminfo(/lib/libtinfo.so)等。這兩個庫還是很原始的,只是屏蔽了不同終端的控制指令,並沒有提供更高級的功能,less工具依賴於libtinfo.so。為了便於實現類似菜單、窗口等字符模式下的高級顯示方式,出現了著名的curses庫。像vim,emacs等編輯器,以及info工具都是基於curses庫的。

3 當主機集成終端以後

3.1 內建鍵盤顯卡的兩種使用方式

隨著計算機的發展,幾乎所有的機器都內建了鍵盤和顯卡。在這種條件下,機器本身集合了主機和終端於一身。出現了兩種使用設備的方式:一是還是按照傳統的終端方式使用內建的鍵盤和顯卡,二是直接控制鍵盤和顯卡。第一種方式的優點是原來使用終端的程序不用改動,就可以直接運行,代價是必須模擬一個終端設備,把對這個終端設備的操作映射到對鍵盤和顯卡的操作。

程序-------模擬的終端-------內建的鍵盤和顯卡

第二種方式下,缺點是原來使用終端的程序必須重新編寫。優點是可以充分利用內建顯卡的性能,而不局限於ANSI,VT100等終端能力的限制。由於ANSI,VT100等出現很早,所以並未有提供像素控制的能力,所以現在所有的圖形化界面程序都是基於第二種方式。

3.2 Linux系統中的終端

就Linux系統來說,文本模式下仍然支持傳統的終端方式使用內建的鍵盤和顯卡,並且模擬出了多個終端,可以通過Alt+F1,Alt+F2,...來切換。這樣一個使用終端的程序就可以不用修改的使用真正的串口連接的終端設備(現在很少了),也可以使用通過內建顯卡和鍵盤模擬的虛擬終端了。更需要說明的是,Linux更進一步,在內核層還提供了純粹的虛擬終端設備,用於支持網絡程序,如ssh,telnet等。之所以說它純粹是指這種終端沒有對應的硬件,更合適的名字是偽終端(pty)。

Windows平台上的putty程序(模擬終端)--------網絡-----偽終端------Linux主機

Linux平台X環境下的xterm程序(模擬終端)-----偽終端--- Linux主機

剛才也說了,終端只支持文本模式顯示,所以Linux下的圖形境X也是直接控制鍵盤和顯卡的。需要注意的是,Linux有一種framebuffer模式,啟動後能同時支持終端模式和圖形模式兩種方式來使用顯卡。

程序--------frambuffer API---------直接寫顯存

程序--------curses API---(終端指令)----模擬終端(/dev/tty1)--------映射為寫顯存

Copyright © Linux教程網 All Rights Reserved