0

私は現代のCPUとオペレーティングシステムでの割り込み処理について読んでいますが、1つの点を理解できません:

一部のハードウェア デバイスがstateCPU の割り込みピンの (電流/電圧?) を変更するとすぐに、CPU は優先命令の処理後に停止し、ジャンプして割り込みハンドラー コードを実行します。ここで、割り込みハンドラー コードがスケジューラーのデータ構造のある種の状態を変更する必要があると想像してください。ただし、OS が中断される前に、同じ構造内でも手探りでした。それはデータの混乱につながるため、解決策が必要です。

OS と割り込みハンドラーの両方が、共有データ構造を保護するためのアトミックな比較/設定メモリ操作によって実装されたセマフォを使用していると思います。ただし、そのようなセマフォを保持している間に OS が中断された場合、割り込みハンドラーは何もできず、割り込みは消えてしまいます。これは、そのセマフォを待っているビジー状態が OS に制御を返さないため、ロックが解放されないためです。

この問題はどのように解決されますか? 私が見逃しているトリックがあるはずです...

4

1 に答える 1

1

見落としているハードウェアの詳細が、あなたの混乱を説明しているかもしれません。

ハードウェア割り込みが発生するたびに、次のようなことが起こります。

1 - CPU は特権モードになり、それ以上のハードウェア割り込みは無効になり (通常はプロセッサ フラグ レジスタのビット)、実行は割り込みハンドラにジャンプします。

2 - OS 割り込み処理が完了すると、ハードウェア割り込みが再度有効になるため、さらに割り込みが発生する可能性があります。

つまり、OS/割り込みハンドラーは、ハードウェア割り込みが通常のフローに割り込むことができるタイミングを制御できます。問題の簡単な解決策は、これらのデータ構造をいじっている間、OSにハードウェア割り込みを無効にすることです。実際には、割り込みレイテンシを最小限に抑えるために、物事はより複雑になります。

アーキテクチャごとに状況は変わる可能性がありますが、基本的な原則は、それ以上のハードウェア割り込みが発生すると無効になり、有効/無効にできるということです (CPU が必要な特権モードで実行されている場合)。

この最後の部分を確認してください: http://en.wikibooks.org/wiki/X86_Assembly/Advanced_Interrupts

于 2013-10-16T17:18:37.927 に答える