(57)【要約】【課題】  リソース競合の要因となるリソースを検出したうえで、そのリソースを使用するプロセスに対して、リソース競合を回避するスケジューリングを行なうことができるマルチプロセッサシステム、競合回避プログラム及び競合回避方法を提供する。【解決手段】  マルチプロセッサシステム１００は、複数のＣＰＵのうち一のＣＰＵ上で動作する一のプロセスがリソースを使用している場合に、他のＣＰＵ上で動作する他のプロセスが当該使用されているリソースに対するロックの要求及び／又はロックの要求後の待ち時間に基づいて、リソース競合を検知する競合検知部１２と、検知した競合対象のリソースを、回避対象として特定する回避対象特定部１３と、各プロセスの起床にあたり、当該各プロセスが回避対象のリソースを使用するプロセスであるかを判定し、起床される各プロセスに対して、前記複数のＣＰＵのうち、一のＣＰＵを割り当てる実行ＣＰＵ決定部７と、を備えるものである。【選択図】        図１
2010128664.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサのうち一のプロセッサの実行権を占有して動作するプロセスが、任意のリソースを使用し、当該複数のプロセッサによる並列処理を実行するマルチプロセッサを備えたマルチプロセッサシステムにおいて、
前記複数のプロセッサのうち一のプロセッサ上で動作する一のプロセスがリソースを使用している場合に、他のプロセッサ上で動作する他のプロセスが当該使用されているリソースに対するロックの要求及び／又はロックの要求後の待ち時間に基づいて、リソースの競合を検知する競合検知部と、
前記検知したリソース競合における競合対象であるリソースを、リソース競合を回避すべき回避対象として特定する回避対象特定部と、
各プロセスの起床にあたり、当該各プロセスが前記回避対象のリソースを使用するプロセスであるかを判定し、当該判定結果に基づき、前記起床される各プロセスに対して、前記複数のプロセッサのうち、一のプロセッサを割り当てる実行プロセッサ決定部と、
を備えていることを特徴とするマルチプロセッサシステム。
【請求項２】
前記請求項１に記載のマルチプロセッサシステムにおいて、
前記待ち時間に基づき、リソース毎に当該待ち時間を積算する合計待ち時間算出部を備え、
前記回避対象特定部が、前記合計待ち時間算出部によるリソース毎の積算結果に基づき、所定の合計待ち時間のリソース競合における回避対象のリソースとして特定し、
前記実行プロセッサ決定部は、前記起床されるプロセスが使用するリソースに対して、前記特定された回避対象のリソースに基づき、当該プロセスが回避対象のリソースを使用するプロセスであるかを判断し、当該起床されるプロセスが回避対象のリソースを使用する場合に、当該回避対象のリソースに対応する待ち時間のうち、所定の待ち時間に対応するプロセッサを、当該起床されるプロセスに対して割り当てることを特徴とするマルチプロセッサシステム。
【請求項３】
前記請求項１に記載のマルチプロセッサシステムにおいて、
前記待ち時間に基づき、リソース毎に当該待ち時間の平均時間を算出する平均待ち時間算出部を備え、
前記回避対象特定部が、前記平均待ち時間算出部によるリソース毎の算出結果に基づき、所定の平均待ち時間のリソース競合における回避対象のリソースとして特定し、
前記実行プロセッサ決定部は、前記起床されるプロセスが使用するリソースに対して、前記特定された回避対象のリソースに基づき、当該プロセスが回避対象のリソースを使用するプロセスであるかを判断し、当該起床されるプロセスが回避対象のリソースを使用する場合に、当該回避対象のリソースに対応する待ち時間のうち、所定の待ち時間に対応するプロセッサを、当該起床されるプロセスに対して割り当てることを特徴とするマルチプロセッサシステム。
【請求項４】
前記請求項２又は３に記載のマルチプロセッサシステムにおいて、
前記回避対象のリソースに対応するプロセッサのうち、前記所定の待ち時間に対応するプロセッサ以外のプロセッサが、特定のプロセスを動作させるプロセッサとして固定で割り付けられている場合であり、前記起床されるプロセスが回避対象のリソースを使用する場合に、前記実行プロセッサ決定部は、前記所定の待ち時間に対応するプロセッサの替わりに、前記固定で割り付けられたプロセッサを、前記起床されるプロセスに対して割り当てることを特徴とするマルチプロセッサシステム。
【請求項５】
複数のプロセッサのうち一のプロセッサの実行権を占有して動作するプロセスが、任意のリソースを使用し、当該複数のプロセッサによる並列処理を実行するマルチプロセッサを備えたマルチプロセッサシステムを機能させる競合回避プログラムにおいて、
前記複数のプロセッサのうち一のプロセッサ上で動作する一のプロセスがリソースを使用している場合に、他のプロセッサ上で動作する他のプロセスが当該使用されているリソースに対するロックの要求及び／又はロックの要求後の待ち時間に基づいて、リソースの競合を検知する競合検知手段と、
前記検知したリソース競合における競合対象であるリソースを、リソース競合を回避すべき回避対象として特定する回避対象特定手段と、
各プロセスの起床にあたり、当該各プロセスが前記回避対象のリソースを使用するプロセスであるかを判定し、当該判定結果に基づき、前記起床される各プロセスに対して、前記複数のプロセッサのうち、一のプロセッサを割り当てる実行プロセッサ決定手段として、
マルチプロセッサシステムを機能させることを特徴とする競合回避プログラム。
【請求項６】
複数のプロセッサによる並列処理を実行するマルチプロセッサを備えたマルチプロセッサシステムの競合回避方法において、
複数のプロセッサのうち一のプロセッサの実行権を占有して動作するプロセスが、任意のリソースを使用し、当該複数のプロセッサによる並列処理を実行するマルチプロセッサを備えたマルチプロセッサシステムの競合回避方法において、
前記複数のプロセッサのうち一のプロセッサ上で動作する一のプロセスがリソースを使用している場合に、他のプロセッサ上で動作する他のプロセスが当該使用されているリソースに対するロックの要求及び／又はロックの要求後の待ち時間に基づいて、リソースの競合を検知する競合検知ステップと、
前記検知したリソース競合における競合対象であるリソースを、リソース競合を回避すべき回避対象として特定する回避対象特定ステップと、
各プロセスの起床にあたり、当該各プロセスが前記回避対象のリソースを使用するプロセスであるかを判定し、当該判定結果に基づき、前記起床される各プロセスに対して、前記複数のプロセッサのうち、一のプロセッサを割り当てる実行プロセッサ決定ステップと、
を含むことを特徴とする競合回避方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のプロセッサによる並列処理を実行するマルチプロセッサを搭載したマルチプロセッサシステム、競合回避プログラム及び競合回避方法に関する。
【背景技術】
【０００２】
近年のサーバ製品等においては、複数のＣＰＵを使って並列処理を実行するマルチプロセッサシステムが一般的になりつつある。これらのシステムでは、運用に必要な多数のプロセスが、次々に交代しながら各ＣＰＵ（central processing unit：中央処理装置）の実行権を握る動作（スケジューリング）がＯＳ（operating system）によって繰返されている。
また、各プロセスは、マルチプロセッサ上で処理を実行する過程において、様々なリソース（メモリ、ディスク、ネットワーク又はバッファ等）を必要とする。
【０００３】
また、休止していたプロセスを起床させる場合には、メモリのキャッシュの有効性を考慮して、前回実行していたＣＰＵにおける実行を優先し、各ＣＰＵに対する待ちキューの数に顕著な差がある場合には、各ＣＰＵの負荷が均等になるように、繋ぐキューを変更して選択するものである。
【０００４】
例えば、従来のマルチプロセッサシステム用のスケジューリング方法は、マルチプロセッサシステム上で動くプロセスについて、その処理時間等をもとに決定した「処理特性」なる基準を用いてスケジューリングを行なう方式が開示されている。特に、この従来のマルチプロセッサシステム用のスケジューリング方法は、プロセス毎にあらかじめ処理特性を定めておき、運用中に計測したプロセスの処理時間が処理特性をオーバーする傾向が見られた場合には、該当プロセスを停止するか、若しくは該当プロセスに関するスケジューリングのアルゴリズムを変更するという方式が提唱されている（例えば、特許文献１参照）。
【０００５】
また、従来の共有リソースの競合検出方法は、マルチスレッド競合を検知した時点で割込みを発生させ、プロセスの停止（休止）や他プロセススイッチングを行なうことで、競合を回避する方法が開示されている（例えば、特許文献２参照）。
【特許文献１】特開平６−１１９３００号公報
【特許文献２】特開２００４−２５２６７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のマルチプロセッサシステム用のスケジューリング方法は、どのリソースに関するリソース競合が遅延に影響しているかを特定できないまま、単に処理時間を超過したことに基づき、他のスケジューリングアルゴリズムに変更するものであり、リソース競合が解消される保障がないという課題があった。
また、従来の共有リソースの競合回避方法は、割込み処理やプロセス切替えを実行する度に生じるオーバーヘッドの影響が大きくなる可能性が高いという課題があった。
【０００７】
特に、従来のマルチプロセッサシステム用のスケジューリング方法及び共有リソースの競合回避方法は、競合を検出した時点において、プロセスの停止や休止を行なうことにより、場当たり的にリソース競合を回避しているのみで、同種のリソース競合がすぐに発生する可能性が高く、恒久的な対策にならないという課題があった。
【課題を解決するための手段】
【０００８】
この発明に係るマルチプロセッサシステムは、複数のＣＰＵのうち一のＣＰＵ上で動作する一のプロセスがリソースを使用している場合に、他のＣＰＵ上で動作する他のプロセスが当該使用されているリソースに対するロックの要求及び／又はロックの要求後の待ち時間に基づいて、リソースの競合を検知する競合検知部と、前記検知したリソース競合における競合対象であるリソースを、リソース競合を回避すべき回避対象として特定する回避対象特定部と、各プロセスの起床にあたり、当該各プロセスが前記回避対象のリソースを使用するプロセスであるかを判定し、当該判定結果に基づき、前記起床される各プロセスに対して、前記複数のＣＰＵのうち、一のＣＰＵを割り当てる実行ＣＰＵ決定部と、を備えているものである。
【発明の効果】
【０００９】
この発明は、上述のような課題を解決するためになされたもので、第１の目的は、リソース競合の要因となるリソースを検出したうえで、そのリソースを使用するプロセスに対して、リソース競合を回避するスケジューリングを行なうことができるマルチプロセッサシステム、競合回避プログラム及び競合回避方法を提供するものである。
【００１０】
また、第２の目的は、リソース競合の対象であるリソースを予想して事前にスケジューリングで回避することにより、リソース競合自体を回避することができ、オーバーヘッドになり得る割込み処理やプロセススイッチングを発生させずに、効率の良いシステムの運用を行なうことができるマルチプロセッサシステム、競合回避プログラム及び競合回避方法を提供するものである。
【００１１】
また、第３の目的は、定期的に収集した情報に基づき、プロセスの起床時において、リソース競合を回避するようにスケジューリングすることにより、リソース競合に対する恒久的な対策を実施することができるマルチプロセッサシステム、競合回避プログラム及び競合回避方法を提供するものである。
【００１２】
開示のマルチプロセッサシステムは、リソースの開放待ちに伴う処理（ビジーウェイトによるＣＰＵの占有や、タスク切り替え処理）を削減し、その分のＣＰＵ資源を別のプロセスの処理に割り当てることができ、システムの処理効率を向上させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１３】
ここで、本発明は多くの異なる形態で実施可能である。したがって、下記の各実施形態の記載内容のみで解釈すべきではない。また、各実施形態の全体を通して同じ要素には同じ符号を付けている。
【００１４】
各実施形態では、主にシステムについて説明するが、いわゆる当業者であれば明らかな通り、本発明はコンピュータで使用可能なプログラム、方法としても実施できる。また、本発明は、ハードウェア、ソフトウェア、又は、ソフトウェア及びハードウェアの実施形態で実施可能である。プログラムは、ハードディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、光記憶装置又は磁気記憶装置等の任意のコンピュータ可読媒体に記録できる。さらに、プログラムはネットワークを介した他のコンピュータに記録することができる。
【００１５】
（本発明の第１の実施形態）
図１は第１の実施形態に係るマルチプロセッサシステムの主要な構成を示す概略図、図２（ａ）はプロセス実行格納部に記録される情報の一例を示す説明図、図２（ｂ）はリソース排他情報格納部に記録される情報の一例を示す説明図、図２（ｃ）はＣＰＵプロセス情報格納部に記録される情報の一例を示す説明図、図３はマルチプロセッサシステムにおける競合回避前のプロセス稼動例を示す説明図、図４はリソース排他情報格納部及びＣＰＵプロセス情報格納部の更新手順を示すシーケンス図、図５はプロセス実行格納部の更新手順を示すシーケンス図、図６はマルチプロセッサシステムにおける競合回避後のプロセス稼動例を示す説明図、図７（ａ）はプロセス実行格納部に記録される情報の他の例を示す説明図、図７（ｂ）はリソース排他情報格納部に記録される情報の他の例を示す説明図、図７（ｃ）はＣＰＵプロセス情報格納部に記録される情報の他の例を示す説明図、図８はマルチプロセッサシステムにおけるプロセス起床時の競合回避の手順を示すフローチャートである。
【００１６】
図１において、マルチプロセッサシステム１００は、従来のマルチプロセッサシステムと同様の構成要素である、プロセス起床部１、待ちキュー２、実行キュー３、実行キュー接続部４及びプロセッサ（ＣＰＵ）５を備えている。
【００１７】
プロセス起床部１は、プロセッサ５上で動作しているプロセスによるリソースの開放に基づき、後述する実行ＣＰＵ決定部７に対して、休止したプロセス（以下、休止プロセス６と称す）の起床を行なうように通知する。
待ちキュー２は、ＣＰＵが割り当てられていないプロセスのデータを先入れ先出し（ＦＩＦＯ：First In First Out）のリスト構造で保持するものである。
【００１８】
実行キュー３は、プロセスのデータを先入れ先出し（ＦＩＦＯ）のリスト構造で保持するものであり、保持するプロセスがＣＰＵの実行権を獲得すると、対応するＣＰＵにプロセスのデータを送り出す。
【００１９】
実行キュー接続部４は、後述する実行ＣＰＵ決定部７によるＣＰＵの割り当て結果に基づき、待ちキュー２から起床対象であるプロセスのデータを読出し、割り当てられたＣＰＵの実行キュー３に、該当する休止プロセス６を繋ぐものである。
【００２０】
また、マルチプロセッサシステム１００は、従来のマルチプロセッサシステムの構成要素である実行ＣＰＵ決定部に対して、後述する新たな機能を追加した実行ＣＰＵ決定部７を備えている。
【００２１】
実行ＣＰＵ決定部７は、各プロセスの起床にあたり、起床されるプロセスが使用するリソースに対して、後述するソース排他情報格納部１１に格納される、リソース識別情報及び回避対象情報に基づき、当該プロセスが回避対象のリソースを使用するプロセスであるかを判定する。
【００２２】
また、実行ＣＰＵ決定部７は、起床されるプロセスが回避対象のリソースを使用する場合に、後述するＣＰＵプロセス情報格納部１４に格納される、当該回避対象のリソースに対応するテーブルにおける待ち時間情報のうち、最短の待ち時間に対応するＣＰＵを、当該起床されるプロセスに対して割り当てる。すなわち、実行ＣＰＵ決定部７は、判定結果に基づき、起床させる各プロセスに対して、複数のＣＰＵのうち、一のＣＰＵを割り当てる。
【００２３】
また、マルチプロセッサシステム１００は、従来のマルチプロセッサシステムに対して、新たに追加した構成要素である、プロセス実行格納部８、排他情報収集部９、合計待ち時間算出部１０、リソース排他情報格納部１１、競合検知部１２、回避対象特定部１３及びＣＰＵプロセス情報格納部１４を備えている。
【００２４】
プロセス実行格納部８は、例えば、図２（ａ）に示すように、各プロセスが、一のＣＰＵの実行権を占有して動作し、任意のリソースを使用する場合に、当該各プロセスを識別する情報（以下、プロセスＩＤと称す）、当該各プロセスを動作させるＣＰＵを識別する情報（以下、ＣＰＵＩＤと称す）、当該各プロセスが使用するリソースを識別する情報（以下、リソースＩＤと称す）、及び、当該各プロセスがリソースのロックを要求してロックを獲得するまでの待ち時間の情報（以下、待ち時間情報と称す）を格納する。なお、ＣＰＵＩＤ及びプロセスＩＤは、メモリ内に保持されているプロセス情報から取得することが可能である。また、リソースＩＤとしては、例えば、リソース名、識別番号、又はリソースに対応する排他変数等が挙げられる。
【００２５】
排他情報収集部９は、プロセス実行格納部８にリアルタイムに記録される情報（ＣＰＵＩＤ、プロセスＩＤ、リソースＩＤ、待ち時間情報）を定期的に監視しており、一定周期における所定の期間内で記録された情報を、後述するリソース排他情報格納部１１及びＣＰＵプロセス情報格納部１４におけるテーブルの所定の欄に更新する。
【００２６】
なお、プロセス実行格納部８に、新規のリソースＩＤが記録された場合には、後述するリソース排他情報格納部１１のテーブルに新規の欄を作成して所定の情報を記録し、後述するＣＰＵプロセス情報格納部１４に新規のテーブルを作成して所定の情報を記録する。また、プロセス実行格納部８に、リソースＩＤとプロセスＩＤとの新規の組み合わせが記録された場合には、後述するＣＰＵプロセス情報格納部１４のテーブルに新規の欄を作成して所定の情報を記録する。
【００２７】
合計待ち時間算出部１０は、排他情報収集部９からのリソースＩＤ及び待ち時間情報に基づき、リソースＩＤのリソース毎に待ち時間を積算した合計の待ち時間（以下、合計待ち時間と称す）を算出し、リソース排他情報格納部１１に更新（新規は記録）する。
【００２８】
リソース排他情報格納部１１は、例えば、図２（ｂ）に示すように、合計待ち時間の情報（以下、合計待ち時間情報と称す）、当該合計待ち時間が所定の基準値を超えたリソースに対して回避対象のリソースとして識別する情報（以下、回避対象情報と称す）、及び、当該回避対象のリソースに対応する合計待ち時間を対象値とする対象値の情報（以下、対象値情報と称す）を、リソースＩＤのリソース毎に対応付けて格納する。なお、所定の基準値は、システム環境によってチューニングされ、例えば、リアルタイム性が要求されるマルチプロセッサシステム１００においては、ｍｓｅｃ〜μｓｅｃ単位での設定が想定される。
【００２９】
競合検知部１２は、リソース排他情報格納部１１に記録される合計待ち時間情報に基づき、合計待ち時間が所定の基準値を超えたことを検知して、回避対象特定部１３に検知結果を出力する。すなわち、競合検知部１２は、複数のＣＰＵによるリソース競合を検知する。
【００３０】
回避対象特定部１３は、リソース排他情報格納部１１のリソースＩＤにおける、合計待ち時間が所定の基準値を超えたリソースに対して、回避対象情報を記録し、合計待ち時間を対象値情報として記録する。すなわち、回避対象特定部１３は、競合検知部１２により検知したリソース競合における競合対象であるリソースを、リソース競合を回避すべき回避対象として特定する。
【００３１】
なお、本実施形態においては、回避対象のリソースを一つとし、リソース排他情報格納部１１の回避対象及び対象値の欄に対して初期段階で情報を記録する場合であり、合計待ち時間が所定の基準値を超えたリソースが複数存在する場合には、合計待ち時間が最長である一のリソースに対して、回避対象情報及び対象値情報を記録する。
【００３２】
また、リソース排他情報格納部１１の回避対象及び対象値の欄に記録された情報は、回避対象のリソースを使用するプロセスが、その後、他のリソースを使用することになり、当該他のリソースの合計待ち時間が、当該回避対象のリソースの対象値を超えるまでは、保持するものである。
【００３３】
ＣＰＵプロセス情報格納部１４は、例えば、図２（ｃ）に示すように、リソースＩＤのリソース毎にテーブルを有し、当該各テーブルのリソースＩＤに対応する、ＣＰＵＩＤ、プロセスＩＤ及び待ち時間情報を格納する。
【００３４】
つぎに、本実施形態に係るマルチプロセッサシステム１００における、リソース競合を回避する処理手順について説明する。
なお、以下の説明においては、本実施形態に係るマルチプロセッサシステム１００として、計３個のプロセッサ５（ＣＰＵ＃０、ＣＰＵ＃１、ＣＰＵ＃２）を搭載した場合について説明するが、このプロセッサの個数に限られるものではない。
【００３５】
まず、回避対象情報がリソース排他情報格納部１１に未設定の場合であり、本発明によるリソース競合の回避が機能する前における、一般的なプロセスの運用について説明する。
【００３６】
マルチプロセッサシステム１００は、各ＣＰＵ上において、一のプロセスが、一定期間、ＣＰＵの実行権を占有し、処理が一段落した時点で、他のプロセスに切り替わるというように、様々なプロセスが切り換わりながら、複数のＣＰＵによる並列処理が行なわれる。
【００３７】
また、処理が一段落したプロセスは、消滅又は休止状態に遷移するのであるが、休止状態に遷移した休止プロセス６は、やがて他のプロセスから起床され、ＣＰＵ毎に用意された実行キュー３に繋がれて、実行待ち状態に遷移する。
【００３８】
そして、実行キュー３に繋がれたプロセスは、スケジューリングの契機が巡ってくると、実行キュー３から取り出され、該当するＣＰＵの実行権を再び獲得する。一般的には、このような一連の操作のことを、プロセススケジューリングと称し、主にＯＳのスケジューラ機能が実現している。
【００３９】
なお、異なるＣＰＵ上のプロセスが、同一のリソースを同時期に必要とした場合には、プロセス間で排他処理を行なう必要が生じる。
この排他処理として、本実施形態に係るマルチプロセッサシステム１００においては、以下に示すようなスピンロックの仕組みを採用している。
【００４０】
まず、各プロセスは、ＣＰＵ上で動作中であり、リソースを必要とした時点において、スピンロック関数を呼び出す。
このスピンロック関数では、リソースを必要としたプロセスが、グローバルな（どのプロセスからも参照可能な）排他フラグを参照し、現時点において、リソースを獲得しているプロセスの有無をチェックする。
【００４１】
そして、排他フラグがオフである（そのリソースを獲得しているプロセスが他に存在しない）ならば、リソースを必要としたプロセスは、自プロセスに対応する排他フラグをオンにしてリソースを使用し始める。
【００４２】
また、排他フラグがオンである（そのリソースを獲得しているプロセスが他に存在する）ならば、リソースを必要としたプロセスは、ループ処理等でＣＰＵを空転させながら、排他フラグの参照を繰り返す。また、リソースを必要としたプロセスは、他のプロセスからリソースが開放され、排他フラグがオフに変わったことを確認すると、自プロセスに対応する排他フラグをオンにしてリソースを使用し始める。
【００４３】
なお、本実施形態に係るマルチプロセッサシステム１００においては、排他処理として、スピンロックを用いる場合について説明するが、スピンロックに限られるものではなく、例えば、ミューテックス（Mutex）やセマフォ（Semaphore）等が挙げられる。このミューテックスは、スピンロックと同様に、待ち時間中のプロセスが、ＣＰＵの実行権を保持したままの方式である。
【００４４】
これに対し、セマフォは、リソースの要求時に、そのリソースを獲得しているプロセスが他に存在する場合において、一旦、ＣＰＵの実行権を別のプロセスに明け渡し、リソースの要求を行なったプロセスを休止状態に強制的に遷移する点で、スピンロックと異なっている。また、セマフォは、所望のリソースが開放される契機により、休止プロセス６が、再び起床され、ＣＰＵの実行権を再獲得し、所望のリソースを使用可能とする方式である。
【００４５】
なお、スピンロックは、プロセスが待ち時間中にループ処理によりビジーウェイトを行なうために、リソース競合が激しくてリソースの確保までの期間が長時間になるような状況下においては、ＣＰＵ資源を多大に浪費することになり非効率である。
【００４６】
また、セマフォは、プロセスの休止、停止及び起床といった操作に、タスクスイッチングに伴う処理的なオーバーヘッドが伴うために、リソース競合が頻繁に起きる状況下では、その分、プロセス切替えに伴うオーバーヘッドも増加して非効率にならざるを得ない。特に、昨今のマルチプロセッサシステムでは、搭載するプロセッサの数の増加に伴い、リソース競合による非効率性は無視できないものとなっている。
【００４７】
このため、本実施形態に係るマルチプロセッサシステム１００においては、スピンロック等の排他処理を有効に機能させるために、後述する新たな処理を追加したものである。
ここで、新たに追加した処理を説明するにあたり、例えば、図３に示すような、各プロセスによるＣＰＵの実行権の獲得状態及びリソースの占有状態を想定する。
【００４８】
なお、図３においては、ある一定の期間（ここでは、時刻Ｔ１〜Ｔ４の範囲）内で、ＣＰＵ＃０上ではプロセスＤ、プロセスＣ及びプロセスＧが順に実行され、ＣＰＵ＃１上ではプロセスＢ及びプロセスＦが順に実行され、ＣＰＵ＃２上ではプロセスＡ及びプロセスＥが順に実行されている場合を想定する。
【００４９】
また、図３においては、各プロセスによる処理の過程において、プロセスＡ、プロセスＢ及びプロセスＣはリソースαを使用し、プロセスＦ及びプロセスＧはリソースβを使用し、プロセスＤ及びプロセスＥはリソースγを使用する場合を想定する。
特に、プロセスＢに関してその動きを説明すると、プロセスＢは、ＣＰＵ＃１上で動作しており、時刻Ｔ２の時点で、リソースαのロック取得要求を出している。
【００５０】
しかしながら、時刻Ｔ２の時点で、リソースαはプロセスＡにより既に使用されているために、プロセスＢは「待ち」状態になる。なお、本実施形態においては、排他処理として、スピンロックを採用しているため、この「待ち」状態の間に、プロセスＢは空転しながらＣＰＵを浪費し続ける。
やがて、プロセスＡが時刻Ｔ３の時点でリソースαのロックを開放すると、プロセスＢはリソースαのロックを取得でき、プロセスＢはリソースαの使用が可能になる。
【００５１】
以上のような、各プロセスによるＣＰＵの実行権の獲得状態及びリソースの占有状態に対して、マルチプロセッサシステム１００のＯＳは、各ＣＰＵ上でプロセスが実行権を握り、動作中に任意のリソースを使用する度に、そのプロセスに対応したＣＰＵＩＤ、リソースＩＤ及び待ち時間情報を、プロセス実行格納部８にリアルタイムに記録していく。
【００５２】
すなわち、図３に示す時刻Ｔ１〜Ｔ４の期間内においては、図２（ａ）に示すように、ＣＰＵＩＤ、リソースＩＤ及び待ち時間情報が、プロセス実行格納部８に記録されることになる。
【００５３】
なお、図２（ａ）において、太線枠で囲まれた行は、図３に示すプロセスＢが、ＣＰＵ上を動作中に、時刻Ｔ３のタイミングで記録されたデータである。また、待ち時間情報の「１３５」は、ロック取得要求時である時刻Ｔ２からロック取得時である時刻Ｔ３までの時間（Ｔ３−Ｔ２の差分）が、１３５ｍｓｅｃであることを示している。
【００５４】
また、図３に示すプロセスＡ、プロセスＤ、プロセスＥ及びプロセスＦについては、待ち時間情報が「１５」又は「２５」の短時間であるために、ロック取得要求時において、所望のリソースを使用しているプロセスが他に存在せず、リソースのロックをすぐに取得でき、空転時間を除く、走行時間のみであったことを示している。
【００５５】
そして、排他情報収集部９は、図４に示すように、プロセス実行格納部８にリアルタイムに記録される情報を定期的に監視しており（ステップＳ１０１）、一定周期における所定の期間内で記録された情報を、ＣＰＵプロセス情報格納部１４に更新する（ステップＳ１０２）。
【００５６】
また、排他情報収集部９は、一定周期における所定の期間内で記録された情報を、合計待ち時間算出部１０を介して、リソース排他情報格納部１１に更新する（ステップＳ１０３）。なお、合計待ち時間算出部１０は、排他情報収集部９からのリソースＩＤ及び待ち時間情報に基づき、合計待ち時間を算出し、リソース排他情報格納部１１に更新する。
【００５７】
すなわち、図２（ａ）に示す情報においては、図２（ｂ）に示すように、リソースＩＤ及び合計待ち時間情報が、リソース排他情報格納部１１に記録される。また、図２（ａ）に示す情報においては、図２（ｃ）に示すように、リソースＩＤ、プロセスＩＤ及び待ち時間情報が、ＣＰＵプロセス情報格納部１４に記録される。
【００５８】
そして、競合検知部１２は、リソース排他情報格納部１１に記録される合計待ち時間情報を参照し（ステップＳ１０４）、合計待ち時間が所定の基準値を超えたことを検知して、回避対象特定部１３に検知結果を出力する（ステップＳ１０５）。
【００５９】
なお、所定の基準値を、例えば、２００ｍｓｅｃに設定している場合には、図２（ｂ）において、リソースＩＤ「α」に対応する合計待ち時間情報が「３６０」ｍｓｅｃであり、所定の基準値を上回り、リソースαがリソース競合の回避対象となる。
【００６０】
回避対象特定部１３は、リソース排他情報格納部１１における、合計待ち時間が所定の基準値を超えたリソースに対して、リソース競合の回避対象として回避対象情報を記録し、合計待ち時間を対象値情報として記録する（ステップＳ１０６）。
【００６１】
すなわち、図２（ａ）に示す情報においては、図２（ｂ）に示すように、リソースＩＤ「α」に対応する、回避対象情報の欄にマーキングされ、対象値情報の欄に合計待ち時間情報「３６０」がコピーされる。
そして、ＣＰＵ上で動作した図３に示すプロセスＡ〜Ｇは、目的の処理をそれぞれ終えると、他のプロセスにＣＰＵの実行権を譲り渡した後に、休止プロセス６となる。
【００６２】
以下、回避対象情報がリソース排他情報格納部１１に設定された場合であり、本発明によるリソース競合の回避が機能する場合について、図５を用いて説明する。
まず、プロセス起床部１は、任意のイベントの契機により、他のプロセスからの命令に基づき、実行ＣＰＵ決定部７を起動して、実行キュー３の接続要求を送信する（ステップＳ２０１）。
実行ＣＰＵ決定部７は、リソース排他情報格納部１１を参照し（ステップＳ２０２）、回避対象のリソース（ここでは、リソースα）を認識する（ステップＳ２０３）。
【００６３】
つぎに、実行ＣＰＵ決定部７は、ＣＰＵプロセス情報格納部１４における回避対象のリソース（ここでは、リソースα）に対応するテーブルを参照する（ステップＳ２０４）。
【００６４】
そして、実行ＣＰＵ決定部７は、これから起床させるプロセスが、回避対象のリソース（ここでは、リソースα）を使用するプロセス（ここでは、プロセスＡ、プロセスＢ又はプロセスＣ）であるか否かを判断する。
【００６５】
ここで、例えば、起床させるプロセスがプロセスＤ〜Ｇである場合には、実行ＣＰＵ決定部７は、回避対象のリソースαに無関係なプロセスであると判断して、既存のスケジューリング方法に従うように、実行キュー接続部４に通知する（キュー接続要求を行なう）。
【００６６】
なお、既存のスケジューリング方法によれば、通常、起床させるプロセスは、前回動作したＣＰＵの実行キュー３に再び繋がれる。ただし、各ＣＰＵの実行キュー３上のプロセス数に極端な偏りがある場合には、既存のロードバランシング機能に従い、実行キュー３の偏りを減らすように、実行キュー３に待機中のプロセス数が少ない他のＣＰＵの実行キュー３に接続される場合もある。
【００６７】
また、起床させるプロセスがプロセスＡ〜Ｃである場合には、実行ＣＰＵ決定部７は、回避対象のリソースαに関連するプロセスであると判断する。そして、実行ＣＰＵ決定部７は、ＣＰＵプロセス情報格納部１４における回避対象のリソースαに対応するテーブルのうち、待ち時間情報が１５ｍｓｅｃと最も短いプロセスＡが動作するＣＰＵ＃２に対して、前回、ＣＰＵ＃２で動作していないプロセスＢ及びプロセスＣを集約させるように働く（ステップＳ２０５）。
【００６８】
すなわち、起床させるプロセスがプロセスＡである場合には、前回と同様に、ＣＰＵ＃２の実行キュー３に繋ぐように、実行キュー接続部４に通知する。また、起床させるプロセスがプロセスＢ及びプロセスＣである場合にも、プロセスＡと同じＣＰＵ＃２の実行キュー３に繋ぐように、実行キュー接続部４に通知する（ステップＳ２０６）。
【００６９】
そして、実行キュー接続部４は、待ちキュー２のデータを参照し、所定の休止プロセス６（ここでは、プロセスＢ）を起床させ、実行キュー３（ここでは、ＣＰＵ＃２の実行キュー３）に接続する（ステップＳ２０７）。
【００７０】
起床したプロセス（ここでは、プロセスＢ）は、実行キュー３上で待機し（ステップＳ２０８）、ＣＰＵ（ここでは、ＣＰＵ＃２）の実行権を獲得すると（ステップＳ２０９）、リソース（ここでは、リソースα）に対してロック取得要求を送信する（ステップＳ２１０）。また、リソース（ここでは、リソースα）は、ロックを取得できたことを送信する（ステップＳ２１１）。
【００７１】
そして、プロセス（ここでは、プロセスＢ）は、メモリに対して、プロセス情報にあるＣＰＵＩＤ及びプロセスＩＤを要求し（ステップＳ２１２）、ＣＰＵＩＤ（ここでは、ＣＰＵ#２）及びプロセスＩＤ（ここでは、Ｂ）を取得する（ステップＳ２１３）。
【００７２】
プロセス（ここでは、プロセスＢ）は、所定の処理に対してリソース（ここでは、リソースα）を使用し（ステップＳ２１４）、所定の処理が完了すると、リソース（ここでは、リソースα）に対してロック解除要求を送信する（ステップＳ２１５）。また、リソース（ここでは、リソースα）は、ロックを解除したことを送信する（ステップＳ２１６）。
【００７３】
そして、プロセス（ここでは、プロセスＢ）は、自プロセス（ここでは、プロセスＢ）の情報（ＣＰＵＩＤ、プロセスＩＤ、リソースＩＤ、待ち時間情報）を、プロセス実行格納部８に記録する（ステップＳ２１７）。
そして、プロセス（ここでは、プロセスＢ）は、プロセスを終了し（ステップＳ２１８）、休止状態になる。
【００７４】
したがって、例えば、図６に示すように、これ以降（図５の時刻Ｔ４以降）の時刻である時刻Ｔ４から時刻Ｔ５までの期間内において、リソース競合の回避が必要なリソースαを使用するプロセスＡ、プロセスＢ及びプロセスＣは、ＣＰＵ＃２に全て集約され動作することになる。また、プロセスＤ、プロセスＧ及びプロセスＦは、前回と同様のＣＰＵ（ＣＰＵ＃０又はＣＰＵ＃１）上で動作し、プロセスＥは、既存のロードバランス機能により、前回のＣＰＵ＃２からＣＰＵ＃１に移動され、ＣＰＵ＃１上で動作することになる。
【００７５】
このように、本実施形態に係るマルチプロセッサシステム１００は、リソース競合の回避操作により、リソース競合の回避が必要なリソース（ここでは、リソースα）を使用するプロセス（ここでは、プロセスＢ及びプロセスＣ）に対して、リソース要求の直後に、リソース（ここでは、リソースα）を獲得させることが可能となり、これまで発生していた待ち時間が大幅に削減できるという作用効果を奏する。また、これに伴う、ＣＰＵ資源の空きに対して、他のプロセス（ここでは、プロセスＨ、プロセスＩ及びプロセスＪ）に割り当てることが可能となる。
【００７６】
ここで、その後、現在のリソース競合の回避対象であるリソース（以下、現回避対象リソースと称す）以外のリソース（以下、回避対象候補リソースと称す）に関するリソース競合が激しくなり、回避対象候補リソースのリソースＩＤに対応する合計待ち時間情報が、所定の基準値を超過した場合を考える。
回避対象候補リソースを使用するプロセスを起床する場合には、当然ながら、ＣＰＵの集約対象となるが、以下の処理を行なうものとする。
【００７７】
まず、回避対象候補リソースを使用するプロセスとして、現回避対象リソースを使用していたプロセスが含まれていた場合には、実行ＣＰＵ決定部７が、回避対象候補リソースに対応する合計待ち時間情報と、リソース競合の回避対象として以前の設定時にコピーした現回避対象リソースの対象値情報とを比較する。
【００７８】
そして、回避対象候補リソースに対応する合計待ち時間情報が、現回避対象リソースに対応する対象値情報を上回る場合には、現回避対象リソースを使用していたプロセスに対しても、再度の実行キュー３の移動対象となり、ＣＰＵプロセス情報格納部１４における回避対象候補リソースに対応するテーブルのうち、最短の待ち時間情報に対応するプロセスが動作しているＣＰＵに集約される。
【００７９】
この場合には、実行ＣＰＵ決定部７が回避対象特定部１３に判定結果を出力し、回避対象特定部１３が、リソース排他情報格納部１１における、現回避対象リソースに対応する回避対象情報及び対象値情報を削除し、回避対象候補リソースに対応する回避対象情報及び対象値情報に所定の情報を記録することになる。
【００８０】
これに対し、回避対象候補リソースに対応する合計待ち時間情報が、現回避対象リソースに対応する対象値情報を下回る場合には、現回避対象リソースを使用していたプロセスに対して、回避対象候補リソースに関するＣＰＵの集約対象から外される。すなわち、現回避対象リソースを使用していたプロセスは、現回避対象リソースに関するリソース競合の回避時に集約されたＣＰＵ上で動作を継続することなる。
【００８１】
具体的には、図７（ｂ）に示すように、リソース競合の回避の効果により、リソースαに対応する合計待ち時間が「３６０」から「４０」に短縮され、リソースδに対応する合計待ち時間「２４０」が所定の基準値「２００」を超過していることが分かる。
【００８２】
この場合に、リソースαに対応する対象値情報「３６０」と、リソースδに対応する合計待ち時間情報「２４０」とを比較すると、リソースαに対応する対象値情報がリソースδに対応する合計待ち時間情報を上回っているために、過去のスケジューリングを優先し、今回はリソースδを基準としたＣＰＵの集約は行なわないことになる。
【００８３】
以下、これまで説明してきた処理について、図８に示すフローチャートを用いて説明する。
まず、プロセス起床部１は、任意のイベントの契機により、他のプロセスからの命令に基づき、実行ＣＰＵ決定部７を起動して、実行キュー３の接続要求を送信する（ステップＳ１）。
実行ＣＰＵ決定部７は、リソース排他情報格納部１１を参照し（ステップＳ２）、所定の基準値を超えるリソースが存在するか否かを判断する（ステップＳ３）。
【００８４】
ステップＳ３において、所定の基準値を超えるリソースが存在しないと判断した場合には、実行ＣＰＵ決定部７は、前回と同じＣＰＵの実行キュー３への接続依頼を、実行キュー接続部４に送信する（ステップＳ４）。すなわち、実行ＣＰＵ決定部７は、既存のスケジューリング方法に従うように、実行キュー接続部４に通知する（キュー接続要求を行なう）。
【００８５】
実行キュー接続部４は、指定された実行キュー３に休止プロセス６を起床させて接続し（ステップＳ５）、このプロセスは実行キュー３上で待機し、その後、ＣＰＵの実行権を獲得することになる。なお、以降の処理については、図５に示すステップＳ２１０〜ステップＳ２１８とほぼ同様（プロセスＢ、リソースα及びＣＰＵ＃１に限定しない）であるので、説明を省略する。
【００８６】
また、ステップＳ３において、所定の基準値を超えるリソースが存在すると判断した場合には、実行ＣＰＵ決定部７は、ＣＰＵプロセス情報格納部１４における超過しているリソースに対応するテーブルを参照する（ステップＳ６）。
【００８７】
そして、実行ＣＰＵ決定部７は、これから起床させるプロセスが、超過しているリソースを使用するプロセスであるか否かを判断する（ステップＳ７）。
ステップＳ７において、超過しているリソースを使用するプロセスでないと判断した場合には、前述したステップＳ４に進む。
【００８８】
また、ステップＳ７において、超過しているリソースを使用するプロセスであると判断した場合には、実行ＣＰＵ決定部７は、参照したリソースのテーブルにあるプロセスにより過去に使用されたリソースが、現在の回避対象であるか否かを判断する（ステップＳ８）。
【００８９】
ステップＳ８において、回避対象でないと判断した場合には、実行ＣＰＵ決定部７は、ＣＰＵプロセス情報格納部１４における回避対象のリソースに対応するテーブルのうち、待ち時間情報が最短であるプロセスが動作するＣＰＵに集約させることを決定し、その実行キュー３への接続依頼を実行キュー接続部４に送信する（ステップＳ９）。
【００９０】
また、ステップＳ８において、回避対象であると判断した場合には、実行ＣＰＵ決定部７は、過去にリソース競合したことで現在の回避対象であるリソース（現回避対象リソース）の対象値情報と、現在競合しているリソース（回避対象候補リソース）の合計待ち時間情報とを比較する（ステップＳ１０）。
【００９１】
そして、実行ＣＰＵ決定部７は、回避対象候補リソースの合計待ち時間が、現回避対象リソースの対象値以上であるか否かを判断する（ステップＳ１１）。
ステップＳ１１において、回避対象候補リソースの合計待ち時間が、現回避対象リソースの対象値以上でないと判断した場合には、前述したステップＳ４に進む。
【００９２】
ステップＳ１１において、回避対象候補リソースの合計待ち時間が、現回避対象リソースの対象値以上であると判断した場合には、前述したステップＳ９に進む。なお、この場合には、実行ＣＰＵ決定部７が回避対象特定部１３に判定結果を出力し、回避対象特定部１３が、リソース排他情報格納部１１における、現回避対象リソースに対応する回避対象情報及び対象値情報を削除し、回避対象候補リソースに対応する回避対象情報及び対象値情報に所定の情報を記録することになる。
【００９３】
以上のように、本実施形態に係るマルチプロセッサシステム１００は、リソースの開放待ちに伴う処理を削減し、その分のＣＰＵ資源を別のプロセスの処理に割り当てることができ、システムの処理効率を向上させることができるという作用効果を奏する。
【００９４】
また、本実施形態に係るマルチプロセッサシステム１００は、プロセスが次にＣＰＵの実行権を握る前の段階、つまり、プロセス起床され実行キュー３で待ち状態に入る時点において、リソース競合を予測した回避操作（実行キュー移動等）を事前に行なうために、恒久的な競合回避が望めるうえに、プロセス動作中に割込み等で強制タスクスイッチングを行なう必要も無く、オーバーヘッドによる処理能力の低下を最小限に抑制することができるという作用効果を奏する。
【００９５】
また、本実施形態に係るマルチプロセッサシステム１００は、ＣＰＵの浪費に関係するリソースを特定したうえで、そのリソースを使用するプロセスをターゲットとしたリソース競合の回避が行なえるため、競合対象であるリソースと無関係なプロセスへの影響を抑制することができるという作用効果を奏する。
【００９６】
なお、本実施形態に係るマルチプロセッサシステム１００においては、リソース排他情報格納部１１におけるリソース競合の回避対象とするリソースの設定を一つにしているが、これに限られるものではない。
【００９７】
例えば、マルチプロセッサシステム１００に使用されるリソースの数に応じて、所定の数以下のリソースを回避対象とし、回避対象情報を記録し、合計待ち時間を対象値情報として記録してもよい。
【００９８】
この場合に、新たに発生した回避対象となるべきリソース（回避対象候補リソース）をリソース排他情報格納部１１に記録することにより、回避対象が所定の数を超えることになるときは、リソース排他情報格納部１１に記録されている回避対象のリソース（現回避対象リソース）に対応する対象値のうちの最小の対象値と、回避対象候補リソースに対応する合計待ち時間とを比較する。
【００９９】
そして、回避対象候補リソースに対応する合計待ち時間が、現回避対象リソースに対応する対象値のうちの最小の対象値を超えている場合に、当該最小の対象値情報及び対応する回避対象情報を削除し、回避対象候補リソースに対応する回避対象情報及び対象値情報に所定の情報を記録することになる。
【０１００】
また、本実施形態に係るマルチプロセッサシステム１００においては、実行ＣＰＵ決定部７により、各プロセスの起床にあたり、当該各プロセスが回避対象のリソースを使用するプロセスであるかを判定し、当該判定結果に基づき、起床される各プロセスに対して、複数のＣＰＵのうち、一のＣＰＵを割り当てるものであるが、実行ＣＰＵ決定部７の替わりに回避対象特定部１３に、当該機能を持たせてもよい。
【０１０１】
（本発明の第２の実施形態）
図９は第２の実施形態に係るマルチプロセッサシステムの主要な構成を示す概略図、図１０（ａ）はプロセス実行格納部に記録される情報の一例を示す説明図、図１０（ｂ）はリソース排他情報格納部に記録される情報の一例を示す説明図、図１０（ｃ）はＣＰＵプロセス情報格納部に記録される情報の一例を示す説明図である。図９及び図１０において、図１〜図８と同じ符号は、同一又は相当部分を示し、その説明を省略する。
【０１０２】
平均待ち時間算出部１０ａは、排他情報収集部９からのリソースＩＤ及び待ち時間情報に基づき、リソースＩＤのリソース毎に合計待ち時間を算出し、リソースＩＤにおけるリソース毎の個数を積算して各リソースの使用回数を算出する。また、平均待ち時間算出部１０ａは、合計待ち時間に対して使用回数を除算した平均の待ち時間（以下、平均待ち時間と称す）を算出して、リソースＩＤのリソース毎に当該平均待ち時間及び使用回数をリソース排他情報格納部１１ａに更新（新規は記録）する。
【０１０３】
リソース排他情報格納部１１ａは、例えば、図１０（ｂ）に示すように、平均待ち時間の情報（以下、平均待ち時間情報と称す）、使用回数の情報、当該平均待ち時間が所定の基準値を超えたリソースに対して回避対象のリソースとして識別する情報（以下、回避対象情報と称す）、及び、当該回避対象のリソースに対応する平均待ち時間を対象値とする対象値の情報（以下、対象値情報と称す）を、リソースＩＤのリソース毎に対応付けて格納する。なお、所定の基準値は、システム環境によってチューニングされ、例えば、リアルタイム性が要求されるマルチプロセッサシステム１００においては、ｍｓｅｃ〜μｓｅｃ単位での設定が想定される。
【０１０４】
例えば、基準値を１００ｍｓｅｃに設定した場合に、図１０（ａ）（図２（ａ））に示す情報においては、リソースαが時刻Ｔ１から時刻Ｔ４までの間に３回使用され、合計待ち時間が３６０ｍｓｅｃであることから、平均待ち時間は１２０ｍｓｅｃとなり、基準値を上回っているために、リソースαがリソース競合の回避対象となる。
【０１０５】
競合検知部１２ａは、リソース排他情報格納部１１ａに記録される平均待ち時間情報に基づき、平均待ち時間が所定の基準値を超えたことを検知して、回避対象特定部１３ａに検知結果を出力する。
【０１０６】
回避対象特定部１３ａは、リソース排他情報格納部１１ａのリソースＩＤにおける、平均待ち時間が所定の基準値を超えたリソースに対して、回避対象情報を記録し、平均待ち時間を対象値情報として記録する。
【０１０７】
なお、本実施形態においては、回避対象のリソースを一つとし、リソース排他情報格納部１１ａの回避対象及び対象値の欄に対して初期段階で情報を記録する場合であり、平均待ち時間が所定の基準値を超えたリソースが複数存在する場合には、平均待ち時間が最長である一のリソースに対して、回避対象情報及び対象値情報を記録する。
【０１０８】
また、リソース排他情報格納部１１ａの回避対象及び対象値の欄に記録された情報は、回避対象のリソースを使用するプロセスが、その後、他のリソースを使用することになり、当該他のリソースの平均待ち時間が、当該回避対象のリソースの対象値を超えるまでは、保持するものである。
【０１０９】
なお、この第２の実施形態に係るマルチプロセッサシステム１００においては、合計待ち時間算出部１０の替わりに、平均待ち時間算出部１０ａを備えているところのみが第１の実施形態と異なるところであり、平均待ち時間算出部１０ａによる作用効果以外は、第１の実施形態と同様の作用効果を奏する。
【０１１０】
前述した第１の実施形態においては、あるリソースに関して、通常はリソース開放の待ち時間が短いのであるが、特定の監視周期にだけ突発的に長い待ち時間が発生し、合計待ち時間が基準値を超えた場合に、このリソースがリソース競合の回避対象となるのであるが、処理効率の向上は僅かである。
【０１１１】
これに対し、本実施形態においては、リソース排他情報格納部１１ａに平均待ち時間情報を保持させ、この平均待ち時間情報に基づき、リソース競合の回避対象のリソースを特定する。これにより、本実施形態に係るマルチプロセッサシステム１００は、正確な競合状態をリアルタイムに把握し、リソース開放の待ち時間に毎回比較的長い時間がかかるリソースを優先して、リソース競合の回避対象とするように制御することができ、第１の実施形態と比較して、一層の処理効率の向上を図ることができるという作用効果を奏する。
【０１１２】
（本発明の第３の実施形態）
図１１は第３の実施形態に係るマルチプロセッサシステムのプロセス実行格納部の更新手順を示すシーケンス図、図１２は第３の実施形態に係るマルチプロセッサシステムにおけるプロセス起床時の競合回避の手順を示すフローチャートである。図１１及び図１２において、図１〜図１０と同じ符号は、同一又は相当部分を示し、その説明を省略する。
【０１１３】
本実施形態においては、前提条件として、マルチプロセッサシステム１００の利用者がシステムコール（sched-setaffinity等）等を使用して、一部のプロセスを動作させるＣＰＵを固定で割り付け運用している場合を想定する。例えば、プロセスＢがＣＰＵ＃１で固定に動作するように割り付け設定を行なう場合には、メモリ内に存在するプロセス情報には、プロセスＢがＣＰＵ＃１に割り付いたことを示すフラグが記録されている。
【０１１４】
なお、図１１は、図５におけるステップＳ２０４とステップＳ２０５との間に、新たなステップＳ２０４ａを追加したものであり、図１２は、図８におけるステップＳ１１とステップＳ９との間に、新たなステップＳ１１ａを追加したものである。
【０１１５】
このステップＳ２０４ａ及びＳ１１ａにおいて、実行ＣＰＵ決定部７は、メモリ内のプロセス情報を参照し、回避対象のリソースに対応するＣＰＵのうち、最短の待ち時間に対応するＣＰＵ以外のＣＰＵが、特定のプロセスを動作させるＣＰＵとして固定で割り付けられているか否かを判断する。そして、実行ＣＰＵ決定部７は、固定で割り付けられていると判断した場合には、最短の待ち時間に対応するＣＰＵの替わりに、固定で割り付けられたＣＰＵを、起床されるプロセスに対して割り当てる。また、実行ＣＰＵ決定部７は、固定で割り付けられていないと判断した場合には、最短の待ち時間に対応するＣＰＵを、起床されるプロセスに対して割り当てる。
【０１１６】
なお、この第３の実施形態に係るマルチプロセッサシステム１００においては、一部のプロセスを動作させるＣＰＵを固定で割り付け運用しているところのみが第１の実施形態と異なるところであり、この運用による作用効果以外は、第１の実施形態と同様の作用効果を奏する。
【０１１７】
前述した第１の実施形態においては、リソースαを使用するプロセスＡ〜Ｃのうち、待ち時間が最も短いプロセスＡが動作するＣＰＵ＃２に、他のプロセス（プロセスＢ、プロセスＣ）を集約するように、ＣＰＵ＃２の実行キュー３に対して、プロセスＡの他に、プロセスＢ及びプロセスＣも接続していた。
これに対し、本実施形態においては、プロセスＢが固定に割り付けられているＣＰＵ＃１に、他のプロセス（プロセスＢ、プロセスＣ）を集約するように動作する。
【０１１８】
すなわち、起床させるプロセスが、プロセスＢである場合には、前回と同じＣＰＵ＃１の実行キュー３にプロセスＢが接続され、起床させるプロセスが、プロセスＡ又はプロセスＣである場合にも、プロセスＢと同じＣＰＵ＃１の実行キュー３にプロセスＡ又はプロセスＣが接続される。なお、回避対象のリソースαに直接関係しない他のプロセスの起床に関しては、前述した第１の実施形態と同様に、既存のスケジューリング動作に従うことになる。
【０１１９】
これにより、本実施形態に係るマルチプロセッサシステム１００においては、動作ＣＰＵが固定されているプロセスが存在する場合であっても、ＣＰＵの固定動作に極力影響を与えることなく、リソース開放の待ち状態を回避し、待ち時間の削減を実現して、システムの処理効率を向上させることができるという作用効果を奏する。また、本実施形態に係るマルチプロセッサシステム１００おいては、即時性等を考慮した、よりきめ細かい運用設計に反映可能なプロセスの運用を実現することができるという作用効果を奏する。
【図面の簡単な説明】
【０１２０】
【図１】第１の実施形態に係るマルチプロセッサシステムの主要な構成を示す概略図である。
【図２】（ａ）はプロセス実行格納部に記録される情報の一例を示す説明図であり、（ｂ）はリソース排他情報格納部に記録される情報の一例を示す説明図であり、（ｃ）はＣＰＵプロセス情報格納部に記録される情報の一例を示す説明図である。
【図３】マルチプロセッサシステムにおける競合回避前のプロセス稼動例を示す説明図である。
【図４】リソース排他情報格納部及びＣＰＵプロセス情報格納部の更新手順を示すシーケンス図である。
【図５】プロセス実行格納部の更新手順を示すシーケンス図である。
【図６】マルチプロセッサシステムにおける競合回避後のプロセス稼動例を示す説明図である。
【図７】（ａ）はプロセス実行格納部に記録される情報の他の例を示す説明図であり、（ｂ）はリソース排他情報格納部に記録される情報の他の例を示す説明図であり、（ｃ）はＣＰＵプロセス情報格納部に記録される情報の他の例を示す説明図である。
【図８】マルチプロセッサシステムにおけるプロセス起床時の競合回避の手順を示すフローチャートである。
【図９】第２の実施形態に係るマルチプロセッサシステムの主要な構成を示す概略図である。
【図１０】（ａ）はプロセス実行格納部に記録される情報の一例を示す説明図であり、（ｂ）はリソース排他情報格納部に記録される情報の一例を示す説明図であり、（ｃ）はＣＰＵプロセス情報格納部に記録される情報の一例を示す説明図である。
【図１１】第３の実施形態に係るマルチプロセッサシステムのプロセス実行格納部の更新手順を示すシーケンス図である
【図１２】第３の実施形態に係るマルチプロセッサシステムにおけるプロセス起床時の競合回避の手順を示すフローチャートである。
【符号の説明】
【０１２１】
１      プロセス起床部
２      待ちキュー
３      実行キュー
４      実行キュー接続部
５      プロセッサ
６      休止プロセス
７      実行ＣＰＵ決定部
８      プロセス実行格納部
９      排他情報収集部
１０    合計待ち時間算出部
１０ａ  平均待ち時間算出部
１１，１１ａ    リソース排他情報格納部
１２，１２ａ    競合検知部
１３，１３ａ    回避対象特定部
１４    ＣＰＵプロセス情報格納部
１００  マルチプロセッサシステム
【図１】
2010128664.tif 000003
【図２】
2010128664.tif 000004
【図３】
2010128664.tif 000005
【図４】
2010128664.tif 000006
【図５】
2010128664.tif 000007
【図６】
2010128664.tif 000008
【図７】
2010128664.tif 000009
【図８】
2010128664.tif 000010
【図９】
2010128664.tif 000011
【図１０】
2010128664.tif 000012
【図１１】
2010128664.tif 000013
【図１２】
2010128664.tif 000014