Kernel

鍵盤中斷如何作為程序信號結束

  • July 28, 2017

我正在通過 O’Reilly 的Understanding Linux Kernel學習 linux 核心,最近涵蓋了堅持一些基本 2.4 linux 版本的信號和中斷處理章節,並在我能理解的範圍內深入研究程式碼。

然而,我無法向自己解釋,也無法在其他地方找到答案,比如說,當 actrl + c被按下用於在 shell 中執行的程序時,會發生什麼指令流。

到目前為止我所做的事情是:

  1. 一旦按下鍵盤 APIC 將 IRQ 線提升到 cpu
  2. 如果中斷不可屏蔽,則 cpu 載入相應的 int。來自 IDT 的處理程序
  3. 比,一些關鍵的int。呼叫處理程式碼,進一步處理char從 APIC 中的鍵盤設備寄存器到其他寄存器的按下

從這裡對我來說是模糊的。

不過,我確實理解,中斷處理不在程序上下文中,而異常在,因此很容易弄清楚異常如何更新current->thread.error_codecurrent->thread.trap_no最終呼叫force_sig. 然而,一旦中斷處理程序被執行,如上例所示,它如何最終進入所需程序的上下文並生成信號?

就像你想的那樣,按鍵會產生中斷。中斷由中斷處理程序處理;哪個處理程序取決於硬體類型,例如 USB 鍵盤或 PS/2 鍵盤。中斷處理程序從硬體讀取關鍵程式碼並對其進行緩衝。tty 驅動程序從緩衝區中提取字元,在 Ctrl-C 的情況下,該驅動程序將其辨識為中斷字元,並將 a 發送SIGINT到終端的前台程序組。請參閱n_tty.c

請注意,tty 驅動程序僅涉及“終端”類型(命令行)介面,如 Linux 控制台、串列終端 ( /dev/ttyS*) 和偽 tty。GUI 系統(X11,Wayland 實現)以不同方式處理輸入設備。

引用自:https://unix.stackexchange.com/questions/382347