有趣的問題:鍵盤打字如何顯示到屏幕中?

鍵盤輸入的內容爲什麼會顯示到屏幕上?這其中到底發生了什麼?這個問題很有意思。回答這個問題你的知識儲備越豐富那這條線就越長。這明顯是一個開放性的話題,在此只嘗試做一個淺薄的回答。

第一 常識判斷

很顯然這是一個信號傳輸的過程,這是一種一一對應的關係,輸入一個數字顯示一個數字,輸入一種組合按鍵,會自動翻譯爲特定字符。這是通過生活常識和邏輯判斷能得出的結果。

第二 基於軟件的理解

如果是用C寫單片機軟件,鍵盤掃描、OLED顯示的過程和這個類似,這是一個編碼採集->處理->顯示的過程。

如果使用Qt/python等,這就是鍵盤事件的識別->處理->更新UI顯示的過程。

對於電腦的操作系統而言,輸入的是鍵盤事件,輸出的是屏幕顯示,這些功能都封裝成了基本的API。深究細節的話,系統是怎麼識別到有鍵盤輸入的?是否有特定的進程在統一管理?屏幕顯示在軟件層面調用的最後一個程序是什麼?它控制的是什麼物理部件?很顯然這是分時的,那系統是怎麼把這些邏輯或者時序有序膠合起來的?

軟件和系統發展的方向都是爲了更高效(更方便)組織代碼或者更充分利用硬件。相反的軟件做的越好越傻瓜越易用,越是掩蓋了其內部的原理/細節,所以即便你知道軟件的每一行代碼表示什麼那還是不知道到底物理世界發生了什麼,所以這個問題還要繼續往下走。

第三 基於硬件的理解

不管多複雜的設備、工具都是由最簡單的功能部分組成,沒有人能講到每一個細節,但是對原理上的大致認識還是要有的。

鍵盤本質上和單板上的按鍵陣列沒有區別,只是集成了編碼模塊,編碼的作用可能更多是在於標準化此處不表,編碼並不是直接傳輸到屏幕,而是通過USB這樣的電氣協議,只談硬件那就是一根USB。

按照以上描述方式,電信號的傳輸到達電腦主板,信號經過複雜的電路(芯片)變換,最終將編碼信號轉換爲了一串二進制保存在了內存或者顯存中,顯示器顯示的過程實際上是根據這些二進制數據來不斷刷新屏幕。

內存中的字符編碼對應的用於顯示的二進制是如何傳輸到VGA顯示器的,涉及到VGA這樣的電氣協議,物理上是特定字符對應的信息被翻譯成模擬電壓信號,通過VGA線傳輸到顯示器中。

顯示器電路翻譯了這些模擬電壓,根據模擬電壓的不同實時刷新着特定像素點的顏色,由於視覺暫存的效果,很多個像素點最終拼成了我們看到的字符。

以上,提到USB、VGA這些外設傳輸協議,沒有提到USB作爲外設->CPU識別之間板內傳輸的各種協議,總之,最終這是將差分的電平信號轉換爲CPU的電平信號,中間可能有入關的串行,並行傳輸等等。

到了CPU這一塊,就到了芯片設計這個領域,CPU接收到了鍵盤輸入導致的電平信號之後,怎麼就能轉移數據、邏輯運算了呢?這裏又能設計到板上那些硬件模塊呢?這個問題或許太複雜了,那就先排除一下硬盤吧,像硬盤讀寫這類很耗時的IO操作是不可能在這瞬間發生的,如果你不Ctrl+S,CPU是不會主動吧這個字符保存到硬盤的。

很顯然,這些能影響顯示的電平信息是暫存在了某些地方,內存或者顯存就是幹這個事情的,至少這是一箇中介處。

至於CPU爲什麼能搬運電平信息(bit數據)?這是通過CPU指令實現的,CPU指令又是什麼東西?這是一些時序邏輯和組合邏輯電路組成的硬件玩意兒。那時序……太多問題了,那還是先去了解一下計算機的發展史,什麼是打孔紙帶、打孔卡片吧……

第四 看山還是山

或許對事物的理解終究會回到“看山還是山”的境界,難道不是嗎?

這還是信號傳輸

具體是:鍵盤上的高低電平信號--(物理線路傳輸、軟件和硬件的協同處理)-->顯示器上的控制像素點的高低電平信號

無論電平經過了多少次轉換,在什麼時序(時間點)中轉換,轉換爲什麼樣的電壓,最終它變成了一些串行的或者並行的能夠使像素上的LED亮和滅的高低電平。

 

【最後】

這是2014年,蘇州,和一位醫藥行業的舍友討論的話題,如今翻出來,發現世界依然很大,時間依然太少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章