2016-05-15 4 views
0

私が考えることができるのは、割り込みを有効/無効にすることだけでカーネルの先取りを無効にすることです。これは、複数のスレッドが同時に共有カーネルデータに触れることは不可能(?)になります。カーネルからの割り込みの有効化と無効化は競合状態をどのように防ぎますか?

一度に1つのCPUに対して割り込みを有効/無効にできるだけなので、何か不足していますか?

答えて

1

古いプロセッサシステムでは、割り込みをブロックすることはカーネルデータ構造をロックする方法でした。割り込みXが何かを変更している途中であった場合、優先度の高い割り込みYを実行してデータ構造をあいまいな状態にすることは望ましくありません。もちろん、Xは最小限の時間だけ割り込みをブロックする必要があります。

マルチプロセッサシステムでは、システムデータ構造が変更されている間(割り込みとシステムコールの両方)、別のプロセスがシステムデータ構造を破壊するのを防ぐためにソフトウェアロックを追加する必要があります。

ただし、割り込みをブロックする必要があります。割り込みXがデータ構造をロック(または部分的にロック)していて、割り込みYが実行できた場合、同じデータを構造化してロックしようとする可能性があり、永遠に待機します。

関連する問題