0

Linux を実行している 8 コアのシステムがあり、GUI デスクトップを使用していて、10 ~ 20 のターミナルが開いているとします。

何かを入力すると、ユーザー入力が正しい端末に表示されます。それはどのように起こりますか。たとえば、キーボード割り込みはどのCPUにも到達する可能性があります。正しいプロセスにどのようにルーティングされるかが私の質問です(一度に10個のプロセスがユーザー入力を待っていると仮定します)

これは私が知っていることです:

  1. キーボード ドライバーには、入力を読み取り、優先度の高いワークキューによって処理される可能性があるバッファーにコピーする割り込みハンドラーがあります。(必須ではありませんが、それが起こると私は感じています)


  2. このバッファは、現在アクティブなシェルの stdin のファイル記述子のバッファにコピーする必要があります。

わからないこと

work-queue work 関数は、現在アクティブなシェルを実行しているプロセスをどのように判断しますか。

4

2 に答える 2

0

ワーク キュー機能は、実行中のプロセスを特定しません。これは、より高いレベルで行われます。キーボード デバイスは、デバイス ファイルを介してカーネルによってエクスポートされます/dev/input/(私のシステムでは、キーボードに対応するデバイスを確認/dev/input/event3できます/dev/input/by-id)。このデバイス ファイルは、イベントを受信するために X サーバーによって開かれます (これがどこで発生するかを確認するには、デバイス ファイルを探します/var/log/Xorg.0.log)。したがって、X サーバーはすべてのキーボード イベントを受信し、適切なクライアント自体にディスパッチします。どのウィンドウにフォーカスがあるかがわかれば、対応する入力イベントをクライアント キュー キューに入れ、対応するプロセスにシグナルを送信できます。このプロセスはウェイクアップされ、イベントを処理できます。

詳細については、 http://en.wikipedia.org/wiki/Evdevおよび関連リンクを参照してください。

于 2012-07-19T03:03:03.827 に答える
0

それは知っているだけです。すべてのプロセスの 1 つが、コンソール I/O の現在のプロセスとしてマークされています。別のものに切り替えると、その別のものは現在のものとしてマークされます。実装の詳細はわかりませんが、それがアイデアです。

于 2012-07-18T06:54:27.080 に答える