コンピュータシステム

セマフォの仕組みを学んでみよう

2020年9月8日

コンピュータにおける一連の作業において、複数のタスク(処理)がリソース(記憶領域)を奪い合って問題が発生してしまうことがあります。

そのための対策として「排他制御」がありますが、この方法にはいくつかの種類があります。

今回はこの排他制御の手法の一つである「セマフォ」に関して解説します。

セマフォとは?

先ず、セマフォという言葉ですが、英語で書くと「semaphore」となります。意味は「手旗信号、信号装置」なのですが、セマフォの仕組みがまさに「手旗信号」のようなものなのです。

セマフォはダイクストラ法で有名な「エドガー・ダイクストラ」によって考案された排他制御の仕組みとなります。

セマフォには「セマフォ変数」という変数があり、これを使うことで排他制御ができます。

セマフォ変数にリソース(資源)の状態を常に記録し、その数字が0(空いてない)ならばそのタスクは空くまで待つ、ということです。これを「待ち行列に並ぶ」と言われたしますね。

反対にリソースが空いていて使う際にはその変数を一つ減らすことになります。

セマフォによる排他制御と流れ

先ほど説明したセマフォ変数ですが、各タスクが勝手に触って値を変えてしまうと、制御が成立しません...

そのためにセマフォ変数を制御するための命令として、P操作」と「V操作を使います。

 

セマフォの二つの命令

  • P操作」:資源をロックする。セマフォ変数の「S」を一つ減算して、タスクの実行を継続する
  • V操作」:資源をアンロックする。セマフォ変数の「S」を一つ加算して、待ち行列で待っている先頭タスクを実行可能状態に遷移させる

では、セマフォを使った排他制御の流れを見てみましょう!

二つのタスクが共有資源を順番にロックし、アンロックする流れとなります。

ちょっと流れが難しくみえますが、やっていることはシンプルで、

「P操作→資源ロック→V操作→資源アンロック→P操作」

の流れが続くような感じです。

セマフォの流れ

まとめ

今回は排他制御の方法であるセマフォに関して解説しました。

P操作やV操作なども出てきて、言葉だけだと難しい感じがしますが、仕組みはシンプルで、セマフォ変数を使いながら各タスクがルールを守って共有資源を使い合うイメージですね。

因みにP操作のPは、オランダ語で小さくする意味の「Prolagen」で、V操作はオランダ語で大きくする意味の「Verhogen」の頭文字を取っているようですね。オランダ語なのは、考案者のエドガー・ダイクストラさんがオランダ出身だからなんでしょうね。


以上です!

排他制御に関して以下記事でも解説してますんで、併せて読んでみてください。

-コンピュータシステム