10

ULK の第 5 章で、著者は次のように述べています。

「...各割り込みハンドラーは、それ自体に対してシリアル化されます。つまり、同時に複数を実行することはできません。したがって、データ構造体へのアクセスには、同期プリミティブは必要ありません」

複数のコアを備えた最新の CPU で割り込みハンドラーが「シリアル化」される理由がよくわかりません。同じISRを異なるコアで同時に実行できる可能性があると思いますよね? その場合、スピンロックを使用してデータを保護しないと、競合状態になる可能性があります。

だから私の質問は、マルチCPUを備えた最新のシステムで、データの読み取りと書き込みを行うすべての割り込みハンドラーに対して、スピンロックが常に必要ですか?

4

5 に答える 5

4

明確化: CL による。以下の発言 - カーネルは同じ割り込みに対して割り込みハンドラーを起動しないようにしますが、複数の割り込みに対して同じ割り込みハンドラーを複数登録している場合、以下の答えよりも正しいと思います。

同じ割り込みハンドラーが複数のコアで同時に実行でき、共有データを保護する必要があることは正しいです。ただし、スピンロックは、これを実現するための唯一の方法ではなく、常に推奨される方法でもありません。

CPU ごとのデータから、アトミック操作のみを使用して共有データにアクセスするその他の多数の同期方法、さらには Read-Copy-Update バリアントを使用して、共有データを保護することができます。

于 2013-08-25T14:55:12.623 に答える