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: 有限なリソースへのアクセス制御に使われる
    1. 初期化時に利用可能なリソース数にセットされる
    2. リソースを使いたいプロセスはwait()をコールし、semaphoreがdecrementされる
    3. プロセスがリソースを解放するときはrelease()をコールし、semaphoreはincrementされる
    4. 0になったら利用できるリソースがないことを意味し、この間新たなプロセスは待たされる(=wait)
  • binary semaphore: 排他制御に使われる
    1. 0と1のどちらかしか取らない、すなわち、あるプロセスが利用している間は他のプロセスは待たされる
    2. つまり排他制御のlockとして使える(=mutex lock)