Linuxでは、スピンロックはどのように実装されていますか?

Linuxでは、スピンロックはどのように実装されていますか?

Linuxでスピンロックの「コンテキスト切り替え防止」機能を実装する方法について考えています。私はその背後にあるロジックだけを知っているので、大きな絵/医師コードは受け入れられます。

答え1

SpinlockはLinux機能ではなく、少なくともほとんどのCPUでは非常に単純なCPU機能です。

スピンロックはコンテキスト切り替えを防止しません。コンテキスト切り替えを無効にすると、ほとんどの場合、Linuxでは不要なマルチタスクも無効になります。

ただし、スピンロックはコンテキストスイッチで保護されています。スピンロックの性質は、ロック試行が単一のCPU命令で発生することです。コンテキスト遷移はプロセスを破壊しませんCPU命令内部、それ以降のみ。

実装はOS固有ではなくCPU固有です。つまり、レジスタ内容とメモリアドレスを原子的に交換できるニーモニックが必要です。 x86では、次のようなことが起こります。シグ

関連情報