(57)【特許請求の範囲】
【請求項１】
複数のプロセスを並列に実行可能な複数の実行手段と、
３つ以上のプロセスにより共有されるリソースと、
前記リソースが利用可能となるのを待つ前記プロセスの待ち行列であるキューと、
前記リソースの利用を終えたプロセスの実行を停止する制御手段と、
を有することを特徴とする実行制御装置。
【請求項２】
複数のプロセスを並列に実行可能な複数の実行手段と、３つ以上のプロセスにより共有されるリソースと、前記リソースが利用可能となるのを待つ前記プロセスの待ち行列であるキューと、を備えた実行制御装置による実行制御方法であって、
前記リソースの利用を終えたプロセスの実行を停止することを特徴とする実行制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコア環境でプロセスをコアに割り当てる技術に関する。
【背景技術】
【０００２】
複数のプロセスが共有するメモリ（以下「共有メモリ」という）を用いて、プロセス間の情報伝達をすることが一般的に行われている。共有メモリ上の情報の一貫性を保つために、共有メモリに書き込みを行う際は、共有メモリの占有権（セマフォ）を取得して他のプロセスからの書き込みをロックする。書き込みをロックされたプロセスは待ち行列に入れられて、先行プロセスがロックを解除した後に共有メモリの占有権を取得して書き込みを行う。
【０００３】
共有メモリを利用する装置の例として通信制御を行うＳＩＰサーバがある。ＳＩＰサーバにおいては、ＳＩＰプロトコルの処理を行うプロトコル部と、プロトコル部から必要な情報を取得して呼処理を行うシナリオ部からなる構成が一般的である。プロトコル部は信号を受信すると、信号から呼情報を取得して共有メモリに書き込む。シナリオ部は、共有メモリから呼情報を取得し、宛先のルーチング処理やサービスの実施判定を行なって呼情報を処理した後で共有メモリに書き込むことによって、プロトコル部へ情報を伝達する。プロトコル部に比べてシナリオ部の処理負荷は重く、大量の呼処理を行うと、シナリオ部がボトルネックとなって遅延が生じる可能性がある。そのため、シナリオ部をマルチプロセス化して処理を多重化することが考えられる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】“セマフォ”、［online］、ウィキペディア、［平成25年7月10日検索］、インターネット〈 URL：http://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9〉
【非特許文献２】“Man page of SEMOP”、［online］、［平成25年7月10日検索］、インターネット〈 URL：http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/semop.2.html〉
【非特許文献３】“JSR-000116 SIP Servlet API - Final Release”、［online］、オラクル、［平成25年7月10日検索］、インターネット〈 URL：http://jcp.org/aboutJava/communityprocess/final/jsr116/index.html〉
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＳＩＰサーバのような遅延規定が厳格なリアルタイムシステムにおいて、共有メモリを利用し、マルチプロセス化したときに、以下の条件に合致する場合、処理遅延が生じる可能性がある。
【０００６】
・マルチコア環境上で動作している。
【０００７】
・３つ以上のプロセスが共有するメモリを用いて情報を伝達している。
【０００８】
・ある契機で優先度の高いプロセスが活性化する処理がある。
【０００９】
図８を用いて、上記の条件で処理遅延が発生するメカニズムについて説明する。図８の例では、１つのメモリを共有する３つのプロセス１，２，３がそれぞれコア１，２，３に割り当てられて実行されている状態である。
【００１０】
優先度の高いプロセスが活性化してコア１を占有すると（ステップＳ５０１）、コア１で実行されていたプロセス１は、ＯＳの既存機能によって比較的空いているコア２に割り当てられる（ステップＳ５０２）。
【００１１】
コア３で実行されているプロセス３が共有メモリのセマフォを取得する（ステップＳ５０３）。
【００１２】
その後、コア２で実行されているプロセス２がセマフォを取得しようとするが（ステップＳ５０４）、共有メモリはプロセス３が占有しているため、プロセス２はセマフォ取得待ちのための待ち行列に入れられて（ステップＳ５０５）、コア２でプロセス１が実行される（ステップＳ５０６）。
【００１３】
プロセス３がセマフォを解放する（ステップＳ５０７）。
【００１４】
プロセス１がセマフォを取得しようとするが（ステップＳ５０８）、待ち行列にプロセス２が存在するので、プロセス１は待ち行列に入れられ（ステップＳ５０９）、待ち行列の先頭のプロセス２が取り出されてコア２で実行される（ステップＳ５１０）。
【００１５】
プロセス２がセマフォを取得し（ステップＳ５１１）、セマフォを解放した後もコア２で実行されるので（ステップＳ５１２）、プロセス１は実行されずに待ち行列に入れられたままとなる。
【００１６】
このとき、別のコア３で実行されるプロセス３がセマフォを取得しようとしても（ステップＳ５１３）、先に待ち行列に入っているプロセス１を優先するため、プロセス３も待ち行列に入れられる（ステップＳ５１４）。
【００１７】
結果として、プロセス２がコア２を解放してコア２でプロセス１が実行され（ステップＳ５１５）、プロセス１がセマフォを取得し（ステップＳ５１６）、セマフォを解放するまで（ステップＳ５１７）、他のプロセス３がセマフォを取得しようとしても待ち行列に入ってしまい、処理遅延が発生する。図８の区間Ａでは、コア２以外で実行されるプロセスがセマフォを取得できれば処理を行えるものの、待ち行列にプロセス１が存在するため、共有メモリの占有者がないにもかかわらずセマフォを取得できない状態である。区間Ａは、プロセス２が明示的にコア２を解放するか、プロセス２に割り当てられた最大割り当て時間が経過するまで続き、区間Ａが長くなるという問題があった。
【００１８】
そのため、例えばＳＩＰサーバにおいて、プロトコル部、シナリオ部よりも優先度の高いプロセス（ＯＳやミドルウェアによるバックアップ処理など）が発生することで、共有メモリの排他ロックによる処理待ち時間が長大し、呼処理遅延が生じる可能性がある。
【００１９】
本発明は、上記に鑑みてなされたものであり、複数のプロセスが共有するメモリを効率的に利用することを目的とする。
【課題を解決するための手段】
【００２３】
第１の本発明に係る実行制御装置は、複数のプロセスを並列に実行可能な複数の実行手段と、３つ以上のプロセスにより共有されるリソースと、前記リソースが利用可能となるのを待つ前記プロセスの待ち行列であるキューと、前記リソースの利用を終えたプロセスの実行を停止する制御手段と、を有することを特徴とする。
【００２７】
第２の本発明に係る実行制御方法は、複数のプロセスを並列に実行可能な複数の実行手段と、３つ以上のプロセスにより共有されるリソースと、前記リソースが利用可能となるのを待つ前記プロセスの待ち行列であるキューと、を備えた実行制御装置による実行制御方法であって、前記リソースの利用を終えたプロセスの実行を停止することを特徴とする。
【発明の効果】
【００２８】
本発明によれば、複数のプロセスが共有するメモリを効率的に利用することができる。
【図面の簡単な説明】
【００２９】
【図１】第１の実施の形態における実行制御装置の構成を示す機能ブロック図である。
【図２】第１の実施の形態における実行制御装置の処理の流れを説明する図である。
【図３】第２の実施の形態における実行制御装置の構成を示す機能ブロック図である。
【図４】第２の実施の形態における実行制御装置の処理の流れを説明する図である。
【図５】第３の実施の形態における実行制御装置の処理の流れを説明する図である。
【図６】第４の実施の形態における実行制御装置の構成を示す機能ブロック図である。
【図７】第４の実施の形態における実行制御装置の処理の流れを説明する図である。
【図８】複数のプロセスを並列処理するマルチコア環境で共有メモリを用いた際に処理遅延が発生するメカニズムを説明する図である。
【発明を実施するための形態】
【００３０】
［第１の実施の形態］
図１は、第１の実施の形態における実行制御装置の構成を示す機能ブロック図である。
【００３１】
図１に示す実行制御装置１は、複数の実行部１１Ａ，１１Ｂ、排他対象メモリ１２、キュー１３、およびキュー変更部１４を備える。
【００３２】
実行部１１Ａ，１１Ｂは、例えばマルチコアプロセッサのコアそれぞれであり、割り当てられたプロセスを並列に実行する。
【００３３】
排他対象メモリ１２は、複数のプロセスからアクセスされる記憶領域である。排他対象メモリ１２に書き込むプロセスは、排他対象メモリ１２の占有権（セマフォ）を取得する。セマフォを取得できなかったプロセスは排他対象メモリ１２への書き込みが禁止される。
【００３４】
キュー１３は、排他対象メモリ１２のセマフォが取得できなかったプロセスの待ち行列である。セマフォが取得できなかったプロセスはキュー１３に入れられて排他対象メモリ１２が利用可能となるのを待つ。セマフォが取得できる状態になった場合に、キュー１３の先頭のプロセスが割り当てられた実行部１１Ａ，１１Ｂで実行できるときは、キュー１３の先頭のプロセスが取り出されて割り当てられた実行部１１Ａ，１１Ｂで実行される。
【００３５】
キュー変更部１４は、キュー１３に複数のプロセスが存在するときに、キュー１３に入れられたプロセスの順序を実行部１１Ａ，１１Ｂで実行されるまでの時間が短い順に変更する。具体的には、実行部１１Ａ，１１Ｂにおいてプロセスに割り当てられる最大の時間を示す最大割り当て時間からその実行部１１Ａ，１１Ｂで現在実行中のプロセスの実行時間を引いた時間を比較してプロセスの順序を並べ替える。実行部１１Ａ，１１Ｂですぐに実行できるプロセスが存在する場合はそのプロセスがキュー１３の先頭となる。
【００３６】
次に、第１の実施の形態における実行制御装置の動作について説明する。
【００３７】
図２は、第１の実施の形態における実行制御装置の処理の流れを説明する図であり、実行部１１Ａ，１１Ｂで実行されているプロセス、排他対象メモリ１２のセマフォを取得したプロセス、およびキュー１３に入れられたプロセスを図示している。実行制御装置１では、排他対象メモリ１２を利用する３つのプロセス１，２，３が実行されるものとする。
【００３８】
実行部１１Ｂで実行されているプロセス３が排他対象メモリ１２のセマフォを取得し、排他対象メモリ１２の占有者はプロセス３となる（ステップＳ１０１）。
【００３９】
実行部１１Ａで実行されているプロセス２がセマフォを取得しようとするが（ステップＳ１０２）、排他対象メモリ１２はプロセス３により使用されているので、プロセス２はキュー１３へ入れられて（ステップＳ１０３）、実行部１１Ａでプロセス１が実行される（ステップＳ１０４）。
【００４０】
プロセス３がセマフォを解放し、排他対象メモリ１２の占有者がいなくなる（ステップＳ１０５）。
【００４１】
プロセス１がセマフォを取得しようとするが（ステップＳ１０６）、キュー１３にプロセス２が入れられているので、プロセス１はキュー１３へ入れられ（ステップＳ１０７）、プロセス２がキュー１３から取り出されて実行部１１Ａで実行されて（ステップＳ１０８）、プロセス２がセマフォを取得する（ステップＳ１０９）。
【００４２】
プロセス２がセマフォを解放し、排他対象メモリ１２の占有者がいなくなる（ステップＳ１１０）。
【００４３】
プロセス３がセマフォを取得しようとするが（ステップＳ１１１）、キュー１３にプロセス３が存在するので、プロセス３はキュー１３へ入れられる（ステップＳ１１２）。このとき、キュー１３の先頭のプロセス１は、まだ実行部１１Ａで実行できない。キュー１３に複数のプロセスが存在するので、キュー変更部１４はキュー１３に入れられたプロセスを並べ替える（ステップＳ１１３）。プロセス３は実行部１１Ｂですぐに実行できるので、キュー１３の待ち行列はプロセス３、プロセス１の順序となる。
【００４４】
プロセス３がキュー１３から取り出されて実行部１１Ｂで実行されて（ステップＳ１１４）、プロセス３がセマフォを取得する（ステップＳ１１５）。
【００４５】
プロセス３がセマフォを解放すると（ステップＳ１１６）、実行部１１Ａで実行可能となったプロセス１がキュー１３の先頭から取り出されて実行され（ステップＳ１１７）、プロセス１がセマフォを取得する（ステップＳ１１８）。
【００４６】
そして、プロセス１がセマフォを解放し、排他対象メモリ１２の占有者がいなくなる（ステップＳ１１９）。
【００４７】
以上説明したように、本実施の形態によれば、複数のプロセスがキュー１３に存在するときに、キュー変更部１４が、キュー１３に入れられたプロセスの順序を次の実行部１１Ａ，１１Ｂで実行されるまでの時間が短い順に並べ替えることにより、排他対象メモリ１２のセマフォを早く取得できるプロセスから順にキュー１３から取り出されるので、排他対象メモリ１２を効率的に利用し、処理遅延を防止することが可能となる。
【００４８】
［第２の実施の形態］
図３は、第２の実施の形態における実行制御装置の構成を示す機能ブロック図である。
【００４９】
図３に示す実行制御装置１は、複数の実行部１１Ａ〜１１Ｄ、排他対象メモリ１２、キュー１３、割当部１５、およびプロセス情報蓄積部１６を備える。第２の実施の形態の実行制御装置１は、第１の実施の形態の実行制御装置とは、キュー変更部１４の代わりに割当部１５、プロセス情報蓄積部１６を備えた点で異なる。
【００５０】
割当部１５は、システムの起動時及びプロセスを実行部１１Ａ〜１１Ｄに割り当てる必要が生じた時に、割当先の実行部１１Ａ〜１１Ｄに競合するプロセスが既に割り当てられているか否かを判定し、競合するプロセスが割り当てられていない実行部１１Ａ〜１１Ｄにプロセスを割り当てる。
【００５１】
プロセス情報蓄積部１６は、排他対象メモリ１２を共有し、競合するプロセスの情報（例えばプロセスを識別する情報）を予め保持する。割当部１５は、プロセス情報蓄積部１６を参照してプロセスが競合するものであるか否を判定する。
【００５２】
次に、第２の実施の形態における実行制御装置の動作について説明する。
【００５３】
図４は、第２の実施の形態における実行制御装置の処理の流れを説明する図である。同図に示すプロセス１，２，３は、いずれも排他対象メモリ１２を共有し、競合するプロセスである。実行部１１Ａにプロセス１、実行部１１Ｂにプロセス２、実行部１１Ｄにプロセス３が割り当てられているとする。
【００５４】
優先プロセスが実行部１１Ａで実行されると（ステップＳ２０１）、割当部１５は、プロセス情報蓄積部１６を参照し、実行部１１Ａで実行されていたプロセス１を他の競合するプロセス２，３が割り当てられていない実行部１１Ｃに割り当てる（ステップＳ２０２）。
【００５５】
実行部１１Ｄで実行されているプロセス３が排他対象メモリ１２のセマフォを取得し、排他対象メモリ１２の占有者はプロセス３となる（ステップＳ２０３）。
【００５６】
実行部１１Ｂで実行されているプロセス２がセマフォを取得しようとするが（ステップＳ２０４）、排他対象メモリ１２はプロセス３により使用されているので、プロセス２はキュー１３へ入れられる（ステップＳ２０５）。
【００５７】
プロセス１がセマフォを取得しようとするが（ステップＳ２０６）、排他対象メモリ１２はプロセス３により使用されているので、プロセス１はキュー１３へ入れられる（ステップＳ２０７）。
【００５８】
プロセス３がセマフォを解放すると（ステップＳ２０８）、キュー１３の先頭のプロセス２が取り出されて実行部１１Ｂで実行され（ステップＳ２０９）、プロセス２がセマフォを取得する（ステップＳ２１０）。
【００５９】
プロセス２がセマフォを解放すると（ステップＳ２１１）、キュー１３の先頭のプロセス１が取り出されて実行部１１Ｃで実行され（ステップＳ２１２）、プロセス１がセマフォを取得する（ステップＳ２１３）。
【００６０】
そして、プロセス１がセマフォを解放し、排他対象メモリ１２の占有者がいなくなる（ステップＳ２１４）。
【００６１】
以上説明したように、本実施の形態によれば、割当部１５が他の競合するプロセスが割り当てられていない実行部１１Ａ〜１１Ｄにプロセスを割り当てることで、キュー１３の先頭のプロセスは、セマフォが取得できる状態になったときにすぐ実行できるので、排他対象メモリ１２を効率的に利用し、処理遅延を防止するもことが可能となる。
【００６２】
［第３の実施の形態］
第３の実施の形態における実行制御装置の構成は、第２の実施の形態における実行制御装置と同じであるので図は省略する。
【００６３】
第３の実施の形態では、割当部１５は、システムの起動時及びプロセスを実行部１１Ａ〜１１Ｄに割り当てる必要が生じた時に、割当先の実行部１１Ａ〜１１Ｄに競合するプロセスが既に割り当てられているか否かを判定し、競合するプロセスが割り当てられている実行部１１Ａ〜１１Ｄにプロセスを割り当てる。つまり、競合するプロセスはすべて同じ実行部１１Ａ〜１１Ｄに割り当てられる。
【００６４】
次に、第３の実施の形態における実行制御装置の動作について説明する。
【００６５】
図５は、第３の実施の形態における実行制御装置の処理の流れを説明する図である。同図に示すプロセス１，２，３は、いずれも排他対象メモリ１２を共有し、競合するプロセスである。プロセス１，２，３のいずれも実行部１１Ａに割り当てられる。
【００６６】
プロセス２が排他対象メモリ１２のセマフォを取得し、排他対象メモリ１２の占有者はプロセス２となる（ステップＳ３０１）。プロセス２がセマフォを解放し、排他対象メモリ１２の占有者がいなくなる（ステップＳ３０２）。
【００６７】
プロセス１がセマフォを取得し、排他対象メモリ１２の占有者はプロセス１となる（ステップＳ３０３）。プロセス１がセマフォを解放し、排他対象メモリ１２の占有者がいなくなる（ステップＳ３０４）。
【００６８】
プロセス３がセマフォを取得し、排他対象メモリ１２の占有者はプロセス３となる（ステップＳ３０５）。プロセス３がセマフォを解放し、排他対象メモリ１２の占有者がいなくなる（ステップＳ３０６）。
【００６９】
以上説明したように、本実施の形態によれば、排他対象メモリ１２を共有する全てのプロセスが同じ実行部１１Ａ〜１１Ｄに割り当てられるので、キュー１３の先頭のプロセスが実行されずに、セマフォを取得しようとするプロセスがキュー１３に入ってしまう競合の発生を防ぐことができる。そのため、他の実行部１１Ａ〜１１Ｄの利用効率が向上し、特に利用できる実行部１１Ａ〜１１Ｄの数が少ない場合に効力を発揮する。
【００７０】
［第４の実施の形態］
図６は、第４の実施の形態における実行制御装置の構成を示す機能ブロック図である。
【００７１】
図６に示す実行制御装置１は、複数の実行部１１Ａ，１１Ｂ、排他対象メモリ１２、キュー１３、および制御部１７を備える。第４の実施の形態の実行制御装置１は、第１の実施の形態の実行制御装置とは、キュー変更部１４の代わりに制御部１７を備えた点で異なる。
【００７２】
制御部１７は、プロセスがセマフォを解放した後に、そのプロセスのＣＰＵ時間を解放してプロセスの実行を停止し、別のプロセスを実行させる。
【００７３】
次に、第４の実施の形態における実行制御装置の動作について説明する。
【００７４】
図７は、第４の実施の形態における実行制御装置の処理の流れを説明する図である。
【００７５】
実行部１１Ｂで実行されているプロセス３が排他対象メモリ１２のセマフォを取得し、排他対象メモリ１２の占有者はプロセス３となる（ステップＳ４０１）。
【００７６】
実行部１１Ａで実行されているプロセス２がセマフォを取得しようとするが（ステップＳ４０２）、排他対象メモリ１２はプロセス３により使用されているので、プロセス２はキュー１３へ入れられて（ステップＳ４０３）、実行部１１Ａではプロセス１が実行される（ステップＳ４０４）。
【００７７】
プロセス３がセマフォを解放すると（ステップＳ４０５）、制御部１７がプロセス３のＣＰＵ時間を解放する（ステップＳ４０６）。実行部１１Ｂにはプロセス３のみ割り当てられているので、実行部１１Ｂではプロセス３が再び実行される。
【００７８】
プロセス１がセマフォを取得しようとするが（ステップＳ４０７）、キュー１３にプロセス２が入れられているので、プロセス１はキュー１３へ入れられ（ステップＳ４０８）、プロセス２がキュー１３から取り出されて実行部１１Ａで実行されて（ステップＳ４０９）、プロセス２がセマフォを取得する（ステップＳ４１０）。
【００７９】
プロセス２がセマフォを解放すると（ステップＳ４１１）、制御部１７がプロセス２のＣＰＵ時間を解放し、プロセス２は待機中となる（ステップＳ４１２）。プロセス１がキュー１３から取り出されて実行部１１Ａで実行されて（ステップＳ４１３）、プロセス１がセマフォを取得する（ステップＳ４１４）。
【００８０】
プロセス１がセマフォを解放すると（ステップＳ４１５）、制御部１７がプロセス１のＣＰＵ時間を解放し、プロセス１は待機中となる（ステップＳ４１６）。待機中のプロセス２が実行部１１Ａで実行される（ステップＳ４１７）。
【００８１】
その後、プロセス３がセマフォを取得する（ステップＳ４１８）。
【００８２】
プロセス３がセマフォを解放すると（ステップＳ４１９）、制御部１７がプロセス３のＣＰＵ時間を解放する（ステップＳ４２０）。実行部１１Ｂにはプロセス３のみ割り当てられているので、実行部１１Ｂではプロセス３が再び実行される。
【００８３】
以上説明したように、本実施の形態によれば、制御部１７が、プロセスがセマフォを解放した後すぐにそのプロセスの実行を停止させることで、キュー１３で待つプロセスがすぐに実行されてセマフォを取得できるので、排他対象メモリ１２を効率的に利用し、処理遅延を防止するもことが可能となる。
【符号の説明】
【００８４】
１…実行制御装置
１１Ａ〜１１Ｄ…実行部
１２…排他対象メモリ
１３…キュー
１４…キュー変更部
１５…割当部
１６…プロセス情報蓄積部
１７…制御部
【図１】
0005990139.tif 000002
【図２】
0005990139.tif 000003
【図３】
0005990139.tif 000004
【図４】
0005990139.tif 000005
【図５】
0005990139.tif 000006
【図６】
0005990139.tif 000007
【図７】
0005990139.tif 000008
【図８】
0005990139.tif 000009