Operating System Concepts: semaphore and mutex
"Operating System Concepts"を読んで理解したことをまとめてみる
コンセプト
複数プロセスがリソースに同時アクセスしうる環境では、データに不整合おこさないための仕組みが必要。semaphoreやmutexは整合性保つための仕組みである。
セマフォ
wait()とsignal()という2つのatomicな操作を通してアクセスできる整数。
wait(S) { while S <= 0 { } S--; } signal(S) { S++; }
counting semaphoreとbinary semaphoreに区別される
- counting semaphore: 有限なリソースへのアクセス制御に使われる
- 初期化時に利用可能なリソース数にセットされる
- リソースを使いたいプロセスはwait()をコールし、semaphoreがdecrementされる
- プロセスがリソースを解放するときはrelease()をコールし、semaphoreはincrementされる
- 0になったら利用できるリソースがないことを意味し、この間新たなプロセスは待たされる(=wait)
- binary semaphore: 排他制御に使われる
- 0と1のどちらかしか取らない、すなわち、あるプロセスが利用している間は他のプロセスは待たされる
- つまり排他制御のlockとして使える(=mutex lock)