]追加された行はこの色です。削除された行はこの色です。ここではキーボード入力に対してOSがどういう処理を行っているかを読解します。OSはlinux-2.6.26.3を対象とします((すでに2.6.28が出ていますが、眺め始めたのが2.6.26.3だったため、2.6.26.3を対象にします。キーボード周りは変わらないでしょう))。注目するのは以下の点です。プラットフォームはx86、キーボードはPS/2接続とします。以下のものは多分こんな風に動くんだろうなぁということで実際にどう処理しているかには踏み込みません。キーボードの処理をやっていそうなコードを探すとdrivers/input/keyboardにatkbd.cが見つかります。dmesg見ても確かにこれが使われてるっぽいです。module_init()ではatkbd_initが指定されているので見てみるとserio_register_driver()が呼び出されています。次にdrivers/input/serio/serio.cを見るとロード時にkseriodスレッドを起動しています。スレッドではserio_event_listにエントリが入っていたらserio_handle_event()を呼び出すということをやっています。なっているのでドライバが設定されていればserio_event_listには格納されずinterrupt関数が直接呼ばれているようです。ちなみにlikelyについては[[psを読む]]に書いているので参照してください。次にserio_interrupt()が誰に呼ばれるかですがgrepしてみるとi8042.cのi8042_interrupt()が見つかります。i8042_interruptはrequest_irq()の引数に渡されているのでキーボードが押されて割り込みが発生すると呼ばれるようです。atkbd.cに戻って、serio_interrupt()から呼ばれるatkbd_interrupt()を眺めると変換とかをいろいろやっていますが一番重要なのは以下の一行でしょう。いうわけでキーボードが押されたことによって発生した割り込みは入力イベントとしてポストされるようです。いうわけでキーボードが押されたことによって発生した割り込みは入力イベントとしてポストされるようです。