2

デバイスドライバーの場合のスピンロックの正確な使用法を誰でも説明できますか? スピンロックを見た多くの割り込みハンドラールーチンのように、私は混乱しています。スピンロックは待機中です。他の割り込みで遅延が発生する可能性があります。可能であれば、スピンロックを使用できるデバイス ドライバーのシナリオをいくつか挙げてください。

私はこの分野に不慣れです。あなたの助けは私にとって最初のブーストになります。

4

1 に答える 1

4

スピンロックは、クォンタムをスケジューラに渡すことができない高 Irql シナリオで使用されます。

たとえば、(割り込み以外の) データ構造をロックする場合は、mutex を取得します。他の誰かがミューテックスを所有している場合、ミューテックスが解放されるまで、スレッドはスケジューラーの「待機中」リストに入れられます。次に、ミューテックスの所有権を取得し、それにアクセスする他のすべてのスレッドがミューテックスを取得しようとすると、スリープ状態になります。

中断中は、これを行うことはできません。スレッド コンテキストもありませんし、この割り込みを「無期限に」延期する必要もありません。ただし、割り込み内の共有データにアクセスする必要がある場合があります。システムに複数の CPU が存在する場合、複数の割り込みとスレッドが同時に実行できます。そのため、ワーク キューや共有オブジェクトなどを保護して、破損しないようにする必要があります。これを行うには、スピンロックを使用します。ポリシーは、スピンロックで保護されたセクション内でできる限り少ないことを行うことであるため、所有者によって解放されるまで、数サイクルだけロック自体をスピンしても問題はないと予想できます。

したがって、ここからわかることは、割り込みから共有データにアクセスするときは、使用できるプリミティブが他にないため、スピンロックを使用する必要があるということです。

前述のように、スピンロックは常に非常に短い時間だけ保持してください。

于 2010-11-09T17:49:14.793 に答える