web-dev-qa-db-ja.com

キーボード割り込みはどのようにプロセス信号として終了するのですか

私はO'ReillyのLinuxカーネルについてで知っているLinuxカーネルを研究していて、最近、信号と割り込みの処理の章をいくつかの基本的な2.4 Linuxバージョンに固執し、理解できる限りコードに飛び込んでいます。

それでも、自分で説明したり、他で答えを見つけたりできませんでした。たとえば、シェルで実行されているプロセスに対してctrl + cが押されたときに発生する命令フローは何ですか。

私がこれまでに理解したこと:

  1. キーボードが押されるとAPICはIRQラインをCPUに上げます
  2. 割り込みがマスカブルでない場合、cpuは対応するintをロードします。 IDTのハンドラー
  3. より、いくつかの重要なint。ハンドラーコードが呼び出され、APICのキーボードデバイスのレジスターから他のレジスターに押されたcharをさらに処理します

ここからはあいまいです。

ただし、例外処理中は割り込み処理がプロセスコンテキストにないので、例外がcurrent->thread.error_codecurrent->thread.trap_noが最終的にforce_sigを更新する方法を簡単に理解できました。しかし、上記の例のように割り込みハンドラーが実行されると、最終的にどのようにして望ましいプロセスとシグナルを生成してコンテキストに入るのでしょうか。

5
Asher Yartsev

キープレスは、あなたが理解したように、割り込みを生成します。割り込みは、割り込みハンドラーによって処理されます。どのハンドラーはハードウェアのタイプに依存します。 USBキーボードまたはPS/2キーボード。割り込みハンドラは、ハードウェアからキーコードを読み取り、バッファリングします。バッファーから文字がttyドライバーによってピックアップされます。これは、Ctrl-Cの場合、それを割り込み文字として認識し、SIGINTを端末のフォアグラウンドプロセスグループに送信します。 n_tty.c を参照してください。

Ttyドライバーは、Linuxコンソールのような「ターミナル」タイプ(コマンドライン)インターフェース、シリアルターミナル(/dev/ttyS*)、および疑似tty。 GUIシステム(X11、Wayland実装)では、入力デバイスの扱いが異なります。

7
Johan Myréen