アットウィキロゴ

re2

OSの制御方式で特に排他制御に使われるセマフォについて書こうと思う。排他制御とは資源に対して複数のプロセスから読み込みや書き込みがあった場合に矛盾が生じることを防ぐ役割を持っている。その一つにセマフォが使われる。他にも排他制御は場面によって様々に使い分けられている。セマフォは主にファイルアクセスの排他に使われる。
セマフォのアルゴリズムは単純である。セマフォを鍵として考えると分かりやすい、資源に鍵を1つ持たせる。その資源にアクセスするには資源から鍵をもらわなくてはならない。そして資源にアクセスする際に資源から鍵をもらうことができれば資源を使うことができる、なければ鍵が解放されるのを待つという仕組みである。また資源のアクセスをやめるときに鍵を解放して他のプロセスから資源にアクセスできるようにする。これによって複数のプロセスから同時にアクセスされて資源に矛盾が生じることを防ぐことができる。だが資源のアクセスで読み込み処理が多い場合はこの仕組みだと非効率である。読み込みアクセスのみの場合は資源の矛盾が起きないからである。よって読み込み処理を多く行われる資源なら読み込みセマフォを用意し、複数のプロセスからアクセスできるようにした方が効率的である。一方書き込みでは、複数のプロセスから資源に書きこむと矛盾が生じてしまうため資源に対して1つだけの書き込みセマフォを用意して1つのプロセスのみがアクセスできるようにする。
ここまでセマフォのアルゴリズムを説明したが注意しなくてはならない現象がいくつかある。デッドロックと言われるものである。プロセスAが資源aにアクセスしている、プロセスBが資源bアクセスしている状態でプロセスAが資源bにプロセスBが資源aにアクセスしようとすると互いにセマフォが解放されるのを待つことになる。これでは処理が一向に進まないのでデッドロックを防ぐ仕組みが必要である。
セマフォは簡単なアルゴリズムだが、排他制御の多くは注意深く実装しないとデッドロックや割り込み処理などでバグが起こる可能性が高いのである。また場面によっていろいろな排他制御のアルゴリズムがある。
最終更新:2012年07月17日 16:52
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。