Linuxでは、割り込みはどのようにキューに追加されますか?

Linuxでは、割り込みはどのようにキューに追加されますか?

ハードウェアとソフトウェアの割り込みフローでは、キューはどのように処理されますか?より正確には、次の質問があります。

シナリオを想定しましょう。 CPUが2台のコンピュータがあります。 CPU1はプロセスP1を処理し、CPU2はプロセスP2を処理する。プロセスP3が実行を待っている。 CPU1はハードウェア割り込み(I1)を取得します。したがって、CPU1コンテキストはI1のISR(割り込みサービスルーチン)に切り替わります。

注:割り込みの下半分を無視し、すべての割り込みを上半分だけと見なすことができます。

  • I1の割り込み処理が完了した後。 P1を再配置することは保証されていますか、それともP3を配置する機会がありますか?
  • CPU2がアイドル状態の場合、プロセスP1(ハードウェア割り込みのためCPU1から削除されました)はCPU2を占有しますか?
  • I1の割り込みハンドラが割り込みをマスクしない場合、2番目の割り込みI2はどうなりますか?キューに入ると、誰がそのキューを覚えていますか?
  • I1の割り込みハンドラがすべての割り込みをマスクすると、2番目の割り込みI2はどうなりますか?

ベストアンサー1

通常、割り込みハンドラはできるだけ短く設計され、実際の処理コードはプロセスと同様のコンテキストで呼び出されます。ハンドラは単にソースを決定し、ソフトウェアにキューエントリを追加し、割り込みソースを無効にします。 CPUが割り込み処理から戻ると、割り込みハンドラキューが最初に処理され、次に「現在」プロセスが再開されます。

キュー評価中に呼び出されたハンドラは、どのプロセスが「現在」であるかを変更できます。最も明確な例は、タイムスライスが期限切れになったことを示すタイマー割り込みですが、着信イベントは優先順位の高いプロセスを実行可能にしてスケジュールすることもできます。

マルチプロセッサシステムには通常、関連するCPUにのみルーティングされる専用タイマーIRQを持つ明示的な割り込みルーティングがあり、ハードウェア割り込みには「優先」CPU(キャッシュのローカル性を向上させるため)またはロードバランシング方法が適用されます。ここで割り込みコントローラは以下を保証します。割り当てられます。

ハードウェアの観点からは、割り込みはキューに追加されず常に表示されるため、処理されるまで割り込みを再送信することはできません(したがって、速度が高すぎると割り込みの欠落に対するハードウェア制限はありません)。ただし、オペレーティングシステムは通常キューを保持します。ソフトウェアにあるため、「実際の」IRQハンドラはできるだけ少ない時間を費やします(ソースごとに1つのインスタンスしかキューに入れることができないため、キューの長さは制限されます)。

したがって、ある特定のハードウェア部分とインタフェースする「サブ」ハンドラは、他の受信割り込みによって中断される可能性がありますが、実行されるタスクは、2番目の割り込みをキューに追加するだけです。その後、最初の割り込みの下位半分ハンドラが再開され、返された場合、2番目の割り込みの下位半分ハンドラが呼び出され、下半分のハンドラキューが空の場合、現在のユーザ空間プロセスが呼び出されます。処刑される。

おすすめ記事