6

IA-32 アーキテクチャで、プロセッサがプロセッサ間割り込みを自分自身に送信する目的は何ですか?

Intel IA-32 Architecture Software Developer's Manual、Vol。3、Ch。10.1:

IPI は、ソフトウェア自己割り込み、割り込み転送、またはプリエンプティブ スケジューリングに使用されます。

しかし、プロセッサが INT 命令で自分自身に割り込むこともできるのに、なぜセルフ IPI を使用するのでしょうか? この機能は冗長なようです。

4

4 に答える 4

3

大きな理由は一貫性にあると思います。マルチコア プロセッサ用のソフトウェアを作成していて、システム内のすべてのコアに割り込みを送信したい場合、他のすべてのコアに IPI を実行してから実行する必要があるのは面倒です。 INT を使用して現在のコアに割り込みます。もちろん、両方の割り込みソースのハンドラーもセッ​​トアップする必要があります。IPI をすべての人に送信する方がずっと簡単です。

もう 1 つのシナリオは、負荷を処理するために作業やメッセージを「空き」コアに渡すマルチコア システムです。「フリー」コアが現在のコアである可能性があります。これも、自分自身に割り込みを送信しているという理由だけで、ソフトウェアに特別なケースを持たせたくありません。

于 2012-11-16T13:20:24.213 に答える
1

いいえ、いいえ、いいえ、そしていいえ。

Chris Desjardins は、本当の理由に最も近いものでした。

Self-IPIの目的を明らかにしようと思います。セルフ IPI はソフトウェア割り込みと区別がつきません ( INT nn)。どちらも、割り込み記述子テーブル (IDT) を介して、指定された割り込みハンドラーの呼び出しを引き起こします。さらに、カーネルは両方を使用して、何らかの処理手順を呼び出すことができます。ただし、オペレーティング システム カーネルは Self-IPI を広範囲に使用する傾向がありますが、ソフトウェア割り込みは使用しません。なぜ、何が違いを生むのですか?まず第一に、どちらの方法も費用がかかります。割り込み処理は CPU にとって重い作業であり、数百サイクルを消費します。割り込みハンドラーのプロローグとエピローグは、呼び出し元と呼び出し先の両方がカーネルに存在する場合、多くのブックキーピングを実行する必要はありません。通常の関数呼び出しのコストはわずか数 CPU サイクルで、ソフトウェア割り込みと同じ効果があります。したがって、100 倍以上の料金を支払って使用する理由はありません。INT nn. このため、カーネルはINT nnコード内でソフトウェア割り込み ( ) を使用しません。ただし、彼らは依然として Self-IPI を広く使用しており、これは同じ仕事をしているようです. 違いは何ですか?それらの間の根本的で明らかな違いは、ソフトウェア割り込みが他の命令と同様に CPU コアで直接処理されるのに対し、セルフ IPI は他のハードウェア割り込みとしてローカル APIC を通過することです。Self-IPI はハードウェア割り込みのみをINT nn模倣しますが、IO デバイスによって生成される IRQ 要求と区別がつきません。

そして、ここで要点を見つけることができます。ローカル APIC は、割り込み優先度スキーマを実装します。これは常に、保留中のすべてのベクトル値の最大値を持つ CPU 割り込み要求に渡されます。優先順位の高いクラスの割り込み要求は、優先順位の低い割り込みの割り込みハンドラーの実行を横取りできます。つまり、カーネルは、現時点で複数のスタックされた割り込みハンドラーを持つことができます。さらに、TPR レジスタがあり、指定した優先度以下の割り込みの報告を排出します。オペレーティング システムはこれを広範囲に使用するため、x64 では、アクセスを高速化するために CR8 レジスタによってエイリアス化されました。一般に、オペレーティング システムはローカル APIC 優先度スキーマに大きく依存しています。たとえば、Windows の IRQ レベルは、ローカル APIC 優先度クラスに直接マップされます。カーネルは、ベクトルを割り込みソース間で慎重に分配して、それらを異なる優先度クラスに適切な順序で割り当てます。例えば、通常、システム タイマーは最も優先順位が高く、他の割り込みハンドラーによってブロックまたはプリエンプトされることはありません。カーネルが Self-IPI を作成すると、指定された割り込みハンドラーに優先順位を付けて呼び出しを要求します。

実例。Windows は、ローカル APIC 優先度スキーマに直接基づいて、遅延プロシージャ コール メカニズムを実装します。DPC 割り込みハンドラの優先度は最も低くなります。DPC を使用して、Windows は Linux と同様の割り込み処理戦略を実装し、上半分/下半分として知られています。上半分のハンドラーは高い優先度で実行され、できるだけ短く迅速に実行する必要があります。割り込み処理に関連するすべての重い作業を、低い優先度で実行される下半分のハンドラーに委任して延期します。同様に、Windows では、ハードウェア割り込みハンドラーが高い優先度で実行され、重い作業に対して Self-IPI を使用して DPC をスケジュールします。DPC は割り込みであり、通常のコード (スレッド、プロセス、アプリケーション) よりも高い優先度で実行されますが、優先度が最も低いため、保留中のすべてのハードウェア割り込みハンドラーが完了したときに実行されます。さらに、DPC の実行は通常のコードをブロックしますが、ハードウェア割り込みハンドラーの実行をブロック、遅延、延期することはありません。これは、DPC 手順の途中で到着する割り込みにも当てはまります。

于 2021-03-26T02:41:40.750 に答える