1

シナリオを考えてみましょう:-

割り込みが発生すると、カーネル スレッドはロックを取得し、クリティカル セクションの途中にあります。割り込みハンドラーが実行され、同じクリティカル セクションに到達し、ロックを取得してスリープ状態に移行しようとします。

これは発生する可能性がありますか、それともクリティカル セクション中に割り込みが無効になっていますか? それを回避するためにどのような手順が取られますか?

// Some Code
 Acquire_lock()

Critical section   //Interrupt occurs and arrives to acquire the same lock.

Disable_lock()
4

1 に答える 1

2

ロックを保持しているコードが、同じロックを取得しようとするコードによって中断されることは決してありません。OS 内を意味する場合は、割り込みハンドラーによっても操作されるオブジェクトと対話するコード内のすべての割り込みを無効にする必要がある場合があります。

ユーザー空間のスレッドとプロセスには、このような問題はありません。ユーザー空間スレッドが取得できるロックを取得する割り込みハンドラはありません。また、ユーザー空間のロックを保持しているスレッドが中断された場合、再スケジュールされるとすぐに解放されます。ユーザー空間のスレッドはまだ実行可能です。

于 2013-02-06T23:12:32.813 に答える