私はO'ReillyのLinuxカーネルについてで知っているLinuxカーネルを研究していて、最近、信号と割り込みの処理の章をいくつかの基本的な2.4 Linuxバージョンに固執し、理解できる限りコードに飛び込んでいます。
それでも、自分で説明したり、他で答えを見つけたりできませんでした。たとえば、シェルで実行されているプロセスに対してctrl + c
が押されたときに発生する命令フローは何ですか。
私がこれまでに理解したこと:
char
をさらに処理しますここからはあいまいです。
ただし、例外処理中は割り込み処理がプロセスコンテキストにないので、例外がcurrent->thread.error_code
とcurrent->thread.trap_no
が最終的にforce_sig
を更新する方法を簡単に理解できました。しかし、上記の例のように割り込みハンドラーが実行されると、最終的にどのようにして望ましいプロセスとシグナルを生成してコンテキストに入るのでしょうか。
キープレスは、あなたが理解したように、割り込みを生成します。割り込みは、割り込みハンドラーによって処理されます。どのハンドラーはハードウェアのタイプに依存します。 USBキーボードまたはPS/2キーボード。割り込みハンドラは、ハードウェアからキーコードを読み取り、バッファリングします。バッファーから文字がttyドライバーによってピックアップされます。これは、Ctrl-Cの場合、それを割り込み文字として認識し、SIGINT
を端末のフォアグラウンドプロセスグループに送信します。 n_tty.c を参照してください。
Ttyドライバーは、Linuxコンソールのような「ターミナル」タイプ(コマンドライン)インターフェース、シリアルターミナル(/dev/ttyS*
)、および疑似tty。 GUIシステム(X11、Wayland実装)では、入力デバイスの扱いが異なります。