unix シェルで作業していて、コマンド「ls」を入力したとしましょう。Enter キーを押すと、割り込み要求 (IRQ) がキーボード コントローラーからプロセッサに送信されます。IRQ を受信すると、プロセッサは実行中の処理を停止し、実行コンテキストを保存して、割り込みハンドラを実行します。押されたキーに関する情報が、関心のあるスレッド (この場合は UNIX シェル プロセスに属するスレッド) にどのように渡されるのか、興味があります。これが割り込みハンドラの役割ではないでしょうか。割り込みが発生したときに実行されているコードは、UNIX シェルのコードである必要はありませんよね? スレッドが IO を待っているときにブロックされる原因は?
質問する
339 次
1 に答える
1
割り込みハンドラーはほとんどの場合、キー コードをデータ構造に保存し、何らかのイベントを通知するだけなので、デスクトップ/window_manager/whatever_it_is はデータを取得して、現在アクティブな (コンソール) ウィンドウで使用できるようにします。
明らかに、データはいつでも到着する可能性があり、必ずしもプログラム (またはシェル) が内部で待機している場合とは限りませんgetchar()
。また、データの配信は非同期であるため、データをバッファリングする必要があります。
ISR は、シェルやプログラムについて、またはそのデスクトップが残りのキーボード データ配信をどのように処理するかについて、ほとんど何も知りません。
于 2013-03-28T14:39:22.360 に答える