2

私はULK3を読んでいて、次のステートメントを得ました

「外部ハードウェア デバイスからの割り込み要求は、次の 2 つの方法で使用可能な CPU に分散できます。

静的配布 IRQ 信号は、対応するリダイレクション テーブル エントリにリストされているローカル APIC に配信されます。割り込みは、1 つの特定の CPU、CPU のサブセット、またはすべての CPU に一度に配信されます (ブロードキャスト モード)。」</p>

Linuxが静的ディストリビューションを使用しないことは知っていますが、私の質問は次のとおりです。

OS が静的分散を使用して割り込みリダイレクション テーブルの 1 つのエントリを初期化し、その IRQ が発生した場合、マルチ APIC システムが 2 つの CPU を選択し (ここでは、2 つの cpu がエントリにリストされているのは単なる例です)、信号を配信します。対応するローカル APIC に接続し、2 つのローカル APIC は両方とも割り込みを受け入れます。

  1. 1 つの CPU だけが割り込みを処理しますか? または両方?ある場合、どのように選択しますか?
  2. Static Distribution を使用している OS はありますか?

はいの場合、例を示してください

いいえの場合、なぜそれが存在するのですか? 歴史的な問題があるからでしょうか。このデザインの本来の理由は何ですか?

4

1 に答える 1

0

これは、ローカル APIC、IO APIC、および ICC バスのメカニズムを説明するリンクです。

http://syszux.com/book/kernel/Understanding.the.Linux.Kernel(3rd%20Edition)/understandlk-CHP-4-SECT-2.html

以下の段落は、そのページから抽出されたもので、あなたの質問の答えかもしれません:

動的配布

IRQ 信号は、優先順位が最も低いプロセスを実行しているプロセッサのローカル APIC に配信されます。

すべてのローカル APIC にはプログラム可能なタスク優先度レジスタ (TPR) があり、現在実行中のプロセスの優先度を計算するために使用されます。インテルは、このレジスターが各プロセス・スイッチによってオペレーティング・システム・カーネルで変更されることを想定しています。

2 つ以上の CPU が最も低い優先順位を共有している場合、アービトレーション と呼ばれる手法を使用して、それらの間で負荷が分散されます。各 CPU には、ローカル APIC の調停優先度レジスタで、0 (最低) から 15 (最高) までの範囲の異なる調停優先度が割り当てられます。

割り込みが CPU に配信されるたびに、対応する調停優先度が自動的に 0 に設定され、他の CPU の調停優先度が上がります。アービトレーションプライオリティレジスタが15以上になると、勝ったCPUの前のアービトレーションプライオリティに1を加えた値に設定されます。そのため、同じタスクプライオリティを持つCPU間でラウンドロビン方式で割り込みが分配されます[*]。

于 2014-03-14T05:05:09.307 に答える