2012-02-22 5 views
0

Linuxデバイスドライバに従っています。それはスピンロックを紹介するとき、それは次の例を示します:割り込みハンドラが回転を開始するとどうなりますか?

あなたのドライバが実行されていると、ちょうどそのデバイスへのアクセスを制御するロックを取り出しました。ロックが保持されている間、デバイスは割り込みを発行し、これにより割り込みハンドラが実行されます。割り込みハンドラは、デバイスにアクセスする前にロックを取得する必要があります。割り込みハンドラでスピンロックを取り出すことは正当なことです。これは、スピンロック操作がスリープ状態にならない理由の1つです。しかし、割り込みルーチンが最初にロックを解除したコードと同じプロセッサで実行されるとどうなりますか? 割り込みハンドラが回転している間に、非割り込みコードを実行してロックを解放できません。そのプロセッサは永遠に回転します。

割り込みハンドラが回転している場合、非割り込みコードを実行できない理由がわかりません。

割り込みハンドラのルーチンを先取りすることはできないためですか?もしそうなら、それは割り込みルーチンが原子的でなければならないと言うことですか?

+0

割り込みハンドラは、非割り込みコードによって既に保持されているスピンロックを取得しようとしたため、スピンしています。後者は、割り込みが完了する前に必ずしも実行されない可能性があります。 –

答えて

2

割り込みハンドラのルーチンを先取りできないためですか?

プロセスコンテキストコードではありません。

もしそうなら、割り込みルーチンはアトミックでなければならないのでしょうか?

より高い優先度の割り込みまたはNMI(またはSMM)によって中断される可能性があります。

関連する問題