ユニプロセッサ システムで SMP モードでコンパイルされた Linux カーネルを実行していると述べたように、速度とメモリの点でメリットがないことは明らかです。
linux-kernel は同期のために広範なロックを使用するためです。ただし、Uni-Processor モードでは、理論的にはロックする必要はないかもしれませんが、ロックが必要な場合が多いため、必要な場合はロックを使用してみてください。ただし、SMP ほどではありません。
ただし、スピンロックは一連のマクロによって実装され、IRQ ハンドラーとの同時実行を妨げるものもあれば、そうでないものもあることをよく知っておく必要があります。
2 番目の質問の時点で、ユニプロセッサ モードの割り込みを無効にすることでスピンロックを削除しようとしていますが、スピンロック マクロはプリエンプティブルではない UP(ユニプロセッサ) カーネルにあり、空のマクロに評価されます (またはそれらのいくつかは、無効/有効にするだけのマクロに評価されます)。割り込みます)。プリエンプションが有効になっている UP カーネルは、スピンロックを使用してプリエンプションを無効にします。ほとんどの場合、プリエンプションは SMP と同等のものと見なすことができます。したがって、UP カーネルでスピンロックを使用すると、それらは単なる空のマクロになり、それを使用する方が良いと思います。
同期には基本的に 4 つの手法があります。
しかし、あなたが言っているように、同期のために割り込みを無効にすることを覚えておいてください。その単純さのために、重要な領域を実装するためにカーネル関数によって割り込みの無効化が使用されます。この手法では、カーネル制御パスのインターリーブが常に防止されるわけではありません。
カーネル制御パスがこのセクションで実行されている間、CPU と I/O 間の通信がブロックされるため、クリティカル セクションは短くする必要があります。
したがって、Uni-Processor で同期が必要な場合は、セマフォを使用してください。