2012-07-18 99 views
0
到達正確的虛擬終端

假設我們有一個8核系統上運行Linux和你正在使用圖形化桌面,並有10-20終端開放。如何鍵盤輸入在GUI

當你輸入的東西,用戶輸入出現在正確的端子上。這是怎麼發生的。例如,鍵盤中斷可以到達任何的CPU,它是如何路由到正確的過程是我的問題(假設有10個進程正在等待用戶輸入)

這就是我所知道的:

  1. 鍵盤驅動程序將有一箇中斷處理程序讀取輸入,並將其複製到它可能是由一些高優先級的工作隊列處理的緩衝區。 (不是必須的,但是這是我的感覺會發生)


  2. 這個緩衝區被複制到當前活動殼的標準輸入文件描述符的緩衝區。

我不知道什麼

如何工作隊列功函數確定哪些進程正在運行當前活動的殼。

回答

0

它只是不知道。其中一個過程被標記爲控制檯I/O的當前狀態。你切換到另一個,另一個被標記爲當前。我不知道實施的細節,但這是主意。

0

工作隊列功能無法確定哪些進程正在運行 - 這是在一個更高的水平完成。鍵盤設備是由內核通過一個設備文件中/dev/input/出口(我的系統上它是/dev/input/event3 - 你可以看看/dev/input/by-id,看看哪一個對應於鍵盤)。此設備文件由X服務器打開以接收事件(查找/var/log/Xorg.0.log中的設備文件以查看發生這種情況的位置)。 X服務器因此接收所有的鍵盤事件,並將它們分派給正確的客戶端本身。知道哪個窗口有焦點,它可以將相應的輸入事件放入客戶端隊列隊列中,並將信號發送給相應的進程,喚醒並處理事件。

有關詳情請參閱http://en.wikipedia.org/wiki/Evdev和相關鏈接。