(57)【要約】 【課題】共有資源に対するアクセス競合の状態が正常か否かを分析するのに好適な競合分析装置、競合分析方法、およびプログラムを提供することを目的とする。【解決手段】制御部１１０Ａ〜１１０Ｎは、共有資源へのアクセスを排他的に行う指示を含む分析対象プログラムを実行する。一方、制御部１１０Ｘは、当該分析対象プログラムでアクセスされる共有資源のアクセス権（ロック）を獲得し、ロックの獲得に要したロック獲得所要時間を計測する。また、直近のロック獲得所要時間を所定の数だけ蓄積し、当該蓄積されたロック獲得所要時間に基づいて、ロック獲得所要時間として許容する許容範囲を算出する。最新のロック獲得所要時間が当該許容範囲に含まれている場合、共有資源へのアクセス競合の状態は正常であると分析する。 【選択図】図１
2009251871.tif 000002
【特許請求の範囲】
【請求項１】
共有資源に対するアクセス競合の状態が正常か否かを分析する競合分析装置であって、
前記共有資源へのアクセスを排他的に行う指示を含む分析対象プログラムに従って、当該共有資源へのアクセスを、それぞれが競合しながら排他的に実行する複数の実行部、
前記共有資源を排他的にアクセスするためのアクセス権を獲得するアクセス権獲得部、
前記アクセス権獲得部が、前記アクセス権の獲得に要した時間を計測する計測部、
前記計測されたアクセス権の獲得時間を、所定の件数蓄積する蓄積部、
前記蓄積された所定の件数のアクセス権獲得時間に基づいて、アクセス権獲得時間として許容する許容範囲を算出する算出部、
前記計測された最新のアクセス権獲得時間が前記許容範囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると分析し、当該計測された最新のアクセス権獲得時間が当該許容範囲に含まれない場合、当該共有資源へのアクセス競合の状態は異常であると分析する分析部、
を備える、
ことを特徴とする競合分析装置。
【請求項２】
請求項１に記載の競合分析装置であって、
前記分析対象プログラムのソースコードを解析し、当該プログラムで定義される、前記共有資源に対するアクセス権を獲得するためのアクセス権獲得命令を抽出するアクセス権情報抽出部をさらに備え、
前記アクセス権獲得部は、前記抽出されたアクセス権獲得命令に基づいて、アクセス権の獲得を行う、
ことを特徴とする競合分析装置。
【請求項３】
請求項１に記載の競合分析装置であって、
前記分析結果をログファイルに出力するか、またはユーザに通知する表示用画面を出力するか、の少なくともいずれかを行う、出力手段をさらに備える、
ことを特徴とする競合分析装置。
【請求項４】
請求項１に記載の競合分析装置であって、
前記アクセス権獲得部は、アクセス権の獲得を開始してから所定の時間以上が経過した場合、アクセス権の獲得を中止する、
ことを特徴とする競合分析装置。
【請求項５】
共有資源に対するアクセス競合の状態が正常か否かを分析する競合分析方法であって、
前記共有資源へのアクセスを排他的に行う指示を含む分析対象プログラムに従って、当該共有資源へのアクセスを、競合しながら排他的に実行する実行ステップ、
前記共有資源を排他的にアクセスするためのアクセス権を獲得するアクセス権獲得ステップ、
前記アクセス権獲得ステップにおいて、前記アクセス権の獲得に要した時間を計測する計測ステップ、
前記計測されたアクセス権の獲得時間を、所定の件数蓄積する蓄積ステップ、
前記蓄積された所定の件数のアクセス権獲得時間に基づいて、アクセス権獲得時間として許容する許容範囲を算出する算出ステップ、
前記計測された最新のアクセス権獲得時間が前記許容範囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると分析し、当該計測された最新のアクセス権獲得時間が当該許容範囲に含まれない場合、当該共有資源へのアクセス競合の状態は異常であると分析する分析ステップ、
を備える
ことを特徴とする競合分析方法。
【請求項６】
コンピュータを、
共有資源に対するアクセス競合の状態が正常か否かを分析する競合分析装置として機能させるプログラムであって、
コンピュータを、
前記共有資源へのアクセスを排他的に行う指示を含む分析対象プログラムに従って、当該共有資源へのアクセスを、それぞれが競合しながら排他的に実行する複数の実行部、
前記共有資源を排他的にアクセスするためのアクセス権を獲得するアクセス権獲得部、
前記アクセス権獲得部が、前記アクセス権の獲得に要した時間を計測する計測部、
前記計測されたアクセス権の獲得時間を、所定の件数蓄積する蓄積部、
前記蓄積された所定の件数のアクセス権獲得時間に基づいて、アクセス権獲得時間として許容する許容範囲を算出する算出部、
前記計測された最新のアクセス権獲得時間が前記許容範囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると分析し、当該計測された最新のアクセス権獲得時間が当該許容範囲に含まれない場合、当該共有資源へのアクセス競合の状態は異常であると分析する分析部、
として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
共有資源に対するアクセス競合の状態が正常か否かを分析するのに好適な競合分析装置、競合分析方法、およびプログラム
【背景技術】
【０００２】
メモリやファイルなどの資源を共有して、データ処理を行うマルチタスクシステムや、マルチプロセッサシステムが知られている。マルチタスクシステムでは、複数のタスク（プロセスおよび、同一プロセス内で実行されるスレッドを含む）が時間分割で１つのＣＰＵ（Central Processing Unit）で処理されるよう制御され、マルチプロセッサシステムでは、複数のプロセスが複数のＣＰＵ（プロセッサ）に分散して並列に実行されるよう制御される。ＣＰＵのそれぞれが、マルチタスクシステムとして動作するマルチプロセッサシステムも知られている。
【０００３】
いずれの場合も、プロセス（プロセスに替えてスレッドについても同様であるが、理解を容易にするために、ここではプロセスについて説明する）は、共有資源のクリティカルセクション（即ち、１つの共有資源に対して複数の処理が同時に行われると、整合性が保てない部分）にアクセスする際に、ロック、即ち、排他的なアクセス権を獲得して、他のプロセスがアクセスするのを防ぐ必要がある。共有資源へのアクセスを終了すると、プロセスはロックを開放して、アクセス権を他のプロセスに譲る。
【０００４】
しかしながら、ロックの獲得に対して激しい競合が生じた場合、他のプロセスがロックの解放を待つ時間の割合が増え、処理効率が下がる。このため、共有資源のアクセスをより効率よく行うために、排他制御区間の命令の実行に要する時間を求める技術が提案されている。このような技術は、例えば、以下の文献に開示されている。
【特許文献１】特開平５−６６９７２号公報
【０００５】
特許文献１に開示の技術では、トレースファイル、即ち、動作プログラムにおいて実行された命令の情報を記憶するファイルを解析して排他制御区間を抽出し、当該排他制御区間の平均命令実行時間を計算する。
【０００６】
しかし、共有資源へのアクセスのタイミングは、実行時の環境に応じてその都度変化するため、特許文献１のように一度プログラムを実行して取得したトレースファイルを用いるだけでは、共有資源の厳しい競合状態や、２つ以上のタスクが互いに相手の占有している資源の解放を待ってしまう状況（即ち、デッドロック）等の異常を必ずしも検出できない。
【０００７】
また、記録した時間に基づいて、想定範囲内の競合が発生しているのか、あるいは、ロックの不正な残留状態やデッドロック状態などの異常な状態が発生しているのかを判定するためには、異常と判定するための判定基準を予め定めておく必要がある。しかし、ロックによって排他制御される資源の利用状況は一般に均一でなく、ゆえに、ロック獲得要求後、実際に獲得するために要する時間も均一ではない。このため、例えば、コンピュータ内の別なプロセスがＣＰＵを多く使用したためにロック獲得に時間を要したケースについても、異常が発生していると誤判定してしまう可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は以上のような課題を解決するためのものであり、共有資源に対するアクセス競合の状態が正常か否かを分析するのに好適な競合分析装置、競合分析方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の第１の観点に係る競合分析装置は、
共有資源に対するアクセス競合の状態が正常か否かを分析する競合分析装置であって、
前記共有資源へのアクセスを排他的に行う指示を含む分析対象プログラムに従って、当該共有資源へのアクセスを、それぞれが競合しながら排他的に実行する複数の実行部、
前記共有資源を排他的にアクセスするためのアクセス権を獲得するアクセス権獲得部、
前記アクセス権獲得部が、前記アクセス権の獲得に要した時間を計測する計測部、
前記計測されたアクセス権の獲得時間を、所定の件数蓄積する蓄積部、
前記蓄積された所定の件数のアクセス権獲得時間に基づいて、アクセス権獲得時間として許容する許容範囲を算出する算出部、
前記計測された最新のアクセス権獲得時間が前記許容範囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると分析し、当該計測された最新のアクセス権獲得時間が当該許容範囲に含まれない場合、当該共有資源へのアクセス競合の状態は異常であると分析する分析部、
を備える、
ことを特徴とする。
【００１０】
また、本発明の他の観点に係る競合分析方法は、
共有資源に対するアクセス競合の状態が正常か否かを分析する競合分析方法であって、
前記共有資源へのアクセスを排他的に行う指示を含む分析対象プログラムに従って、当該共有資源へのアクセスを、競合しながら排他的に実行する実行ステップ、
前記共有資源を排他的にアクセスするためのアクセス権を獲得するアクセス権獲得ステップ、
前記アクセス権獲得ステップにおいて、前記アクセス権の獲得に要した時間を計測する計測ステップ、
前記計測されたアクセス権の獲得時間を、所定の件数蓄積する蓄積ステップ、
前記蓄積された所定の件数のアクセス権獲得時間に基づいて、アクセス権獲得時間として許容する許容範囲を算出する算出ステップ、
前記計測された最新のアクセス権獲得時間が前記許容範囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると分析し、当該計測された最新のアクセス権獲得時間が当該許容範囲に含まれない場合、当該共有資源へのアクセス競合の状態は異常であると分析する分析ステップ、
を備えることを特徴とする。
【００１１】
また、本発明の他の観点に係るプログラムは、
コンピュータを、
共有資源に対するアクセス競合の状態が正常か否かを分析する競合分析装置として機能させるプログラムであって、
コンピュータを、
前記共有資源へのアクセスを排他的に行う指示を含む分析対象プログラムに従って、当該共有資源へのアクセスを、それぞれが競合しながら排他的に実行する複数の実行部、
前記共有資源を排他的にアクセスするためのアクセス権を獲得するアクセス権獲得部、
前記アクセス権獲得部が、前記アクセス権の獲得に要した時間を計測する計測部、
前記計測されたアクセス権の獲得時間を、所定の件数蓄積する蓄積部、
前記蓄積された所定の件数のアクセス権獲得時間に基づいて、アクセス権獲得時間として許容する許容範囲を算出する算出部、
前記計測された最新のアクセス権獲得時間が前記許容範囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると分析し、当該計測された最新のアクセス権獲得時間が当該許容範囲に含まれない場合、当該共有資源へのアクセス競合の状態は異常であると分析する分析部、
として機能させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、共有資源に対するアクセス競合の状態が正常か否かを分析するのに好適な競合分析装置、競合分析方法、およびプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１３】
（実施形態）
以下、本実施の形態に係る競合分析装置１００の概要構成について説明する。
【００１４】
本実施の形態に係る競合分析装置１００は、図１に示すように、複数の制御部１１０と、メインメモリ１２０と、を備えるマルチプロセッサシステムである。競合分析装置１００は、複数の制御部１１０上で共有資源であるメインメモリへのアクセスを行うプログラムを実行した場合に、当該プログラムの実行によって生じる共有資源に対するアクセスの競合状態が、正常であるのか、あるいは異常であるのかを分析する。
【００１５】
複数の制御部１１０のそれぞれは、ＣＰＵ（Central Processing Unit）１１１、キャッシュメモリ１１２等を備える。
ここで、キャッシュメモリ１１２は、後述するメインメモリ１２０よりも小容量ではあるが、高速に動作する揮発性メモリであり、メインメモリ１２０の記憶する情報のコピーを、メインメモリ１２０と整合性を取りつつ、適宜記憶して、ＣＰＵ１１１がメインメモリ１２０へアクセスする回数を減らすことで種々の処理を高速に実行する。制御部１１０のそれぞれのＣＰＵ１１１は、キャッシュメモリ１１２に記憶されるプログラムに従って処理を行う。 
【００１６】
メインメモリ１２０は、揮発性メモリにより構成され、複数の制御部１１０によって共有して利用される共有資源として機能する。
【００１７】
なお、本実施の形態においては、制御部１１０Ａ〜１１０Ｎ（Ｎは任意の個数を意味する）上で共有資源に対してアクセスを行う分析対象のプログラムを実行し、制御部１１０Ｘ上で、競合分析用アプリケーションを実行する。これにより、制御部１１０Ｘが当該分析対象プログラムの分析処理を行う。このとき、制御部１１０Ｘは，制御部１１０Ａ〜１１０Ｎとは異なる制御部であることが好ましい。
【００１８】
したがって、本実施の形態においては、制御部１１０ＸのＣＰＵ１１１が、後述するアクセス権獲得部、算出部、分析部、として機能する。また、制御部１１０ＸのＣＰＵ１１１の備える、発振回路などから構成されるクロック（図示せず）は、後述の計測部として機能する。制御部１１０Ｘのキャッシュメモリ１１２は、競合分析用アプリケーションを記憶する他、後述の蓄積部として機能する。
【００１９】
ここで、蓄積部は、図２に示すように、分析対象プログラムで定義される、共有資源のそれぞれに用意されるアクセス権毎に、当該アクセス権の獲得処理を開始した時刻（開始時刻）、獲得処理が成功した時刻（終了時刻）、獲得処理に要した時間（ロック獲得所要時間：終了時刻−開始時刻）を最新のＭ件分（Ｍ：所定の整数）記憶する構成を有している。なお、本実施の形態においては、以降排他的なアクセス権をロックと呼ぶ。 
【００２０】
一方、分析対象プログラムを実行する制御部１１０Ａ〜１１０Ｎのキャッシュメモリ１１２には、分析対象プログラムが記憶され、ＣＰＵ１１１のそれぞれは、当該分析対象プログラムを実行することで実行部として機能する。ただし、実行部として機能する制御部やその数は、分析対象プログラムの内容によって変化する。
【００２１】
（競合の分析処理）
上記のような構成を備える競合分析装置１００の動作を図３を参照して説明する。このとき、制御部１１０Ｘでは競合分析用アプリケーションが、そして、制御部１１０Ａ〜１１０Ｎでは分析対象プログラムがすでに起動されているものとして説明する。
【００２２】
まず、制御部１１０Ｘは、最後に競合の分析処理を開始した時刻（最終実行時刻と呼ぶ）を現在時刻として記憶する（ステップＳ２０１）。次に、現在時刻が最終実行時刻から所定の時間（例えば、Ｔ時間）が経過したか判定する（ステップＳ２０２）。Ｔ時間を経過していなければ、処理はステップＳ２０２に戻る。一方、Ｔ時間経過している場合（ステップＳ２０２；Ｙ）、以降の処理を実行し、分析対象プログラムの分析処理を開始する。即ち、制御部１１０ＮはＴ時間毎に、分析対象プログラムの実行によりアクセスされる共有資源に対するロックのそれぞれについて、次に説明するステップＳ２０３〜Ｓ２１１を実行する。
【００２３】
まず、制御部１１０Ｘは、ロックの獲得処理を開始した時間（開始時刻）として、現在時刻を、蓄積部の対応する領域に記憶する（ステップＳ２０３）。次いで制御部１１０Ｘは当該ロックの獲得を実行する（ステップＳ２０４）。即ち、制御部１１０ＸのＣＰＵ１１１はアクセス権獲得部として機能する。
【００２４】
ここで、制御部１１０Ｘは、分析対象プログラムと同様の方法を用いてロックを獲得する。例えば、図４に示すソースプログラムを分析対象とした場合を例に示す。
【００２５】
図４の分析対象プログラムを実行した場合、図５に示すように、初期化を担当するプロセスＰ０（"-init"を指定して実行されるプロセス）と、それ以外のプロセスＰ１（引数の指定なしで実行されるプロセス）が、共有メモリ中に実現されるロックを獲得し、クリティカルセクションへのアクセス（（Ａ）に示す部分）を排他的に行う処理を繰り返す（図４、４５行では１０００回）。当該プログラムは、Ｃ言語で記述されており、システムＶ系のＯＳ（Operating System)の提供するシステムコールを呼び出して動作する。
【００２６】
上記いずれのプロセスも、共有メモリの割り当てを行い（図４、２１行）、割り当てられた共有メモリセグメントを、自プロセスのアドレス空間に割当てる（アタッチする）（図４、３３行）。そして、アタッチしたメモリ空間中のロックに対して、獲得処理を行う（図４、４６行）。ロックを獲得すると、クリティカルセクションへのアクセスを行い（図４、４７行）、ロックを解放する（図４、４８行）。
このほか、プロセスＰ０は、共有メモリの作成（図４、２１行）やロックの初期化などの処理も行う（図４、４０〜４３行等）。
【００２７】
制御部１１０Ｘも分析対象プログラムに記載の命令と同様の命令を発行して、ロック獲得処理を実行する。即ち、図４の例であれば、制御部１１０Ｘは、２１行と同様に、パス名を"sample"、プロジェクトＩＤを'A'として、共有メモリを割り当て、３３行と同様に共有メモリを自分のアドレス空間にアタッチし、４６行と同様にロックを獲得する。
【００２８】
ロックを獲得する命令は、分析対象プログラムに基づいて、例えば、所定のファイル（以降ロック属性ファイルと呼ぶ）に予め登録しておき、制御部１１０Ｘのキャッシュ１１２に読み込まれるように、メインメモリ１２０などに記憶しておく。図７（Ｂ）にロック属性ファイルの一例を示す。図７（Ｂ）に示すように、ロック属性ファイルには、ロック獲得のために必要な、一連の定義や処理を記載する。制御部１１０Ｘはロック属性ファイルに登録されている情報に基づいて、ロック獲得命令を発行するために必要な変数定義などを行い、Ｔ時間ごとに、ロック族定ファイルに登録されているロック獲得命令を実行する。
【００２９】
ロック獲得に成功すると、制御部１１０Ｘは、現在時刻を終了時刻とし、ロックの獲得に要したロック獲得所要時間を計測（即ち、ステップＳ２０３で記憶した開始時刻から、ロック獲得が終了した時刻までを計測）する（ステップＳ２０５）。即ち、制御部１１０ＸのＣＰＵ１１１は計測部として機能する。そして、終了時刻とロック獲得所要時間を蓄積部の対応する領域に記憶（ステップＳ２０６）し、直ちにロックを開放する（ステップＳ２０７）。ここで、ロック開放命令は、ロック獲得命令と同様にロック属性ファイルに登録されており、制御部１１０Ｘは、ロック属性ファイルからロック開放命令を読み出してロックを開放する。
【００３０】
なお、本実施の形態では、上記のようにシステムＶ系のシステムコールを呼び出してクリティカルセクションを排他的にアクセスするＣ言語で記載のプログラムを分析対象として説明したが、それ以外を分析対象としてもよい。即ち、Ｃ言語以外で記述されたプログラムであっても、あるいは、システムＶ系以外のシステムコールを用いたプログラムであっても、明示的に排他制御を行うプログラムであれば、本実施の形態に記載の方法でアクセス競合の状態を分析することが可能である。
【００３１】
次いで、制御部１１０Ｘは、現在処理中のロックについて、直近の所定の数（例えば最新の値を除いた、Ｍ−１件）のロック獲得所要時間を蓄積部から取得し、これらＭ−１件のロック獲得所要時間に基づいて、ロック獲得所要時間としての通常値の範囲を算出する（ステップＳ２０８）。このように、制御部１１０ＸのＣＰＵ１１１は算出部として機能する。
【００３２】
このとき、通常値としては、例えば、統計的に許容される範囲（例えば直近のＭ−１件のロック獲得所要時間について、平均値±標準偏差×２、等）を求める。なお、蓄積されたロック獲得所要時間が所定の件数に満たない場合は、所定の下限値と上限値を通常値の範囲として使用する。あるいは、所定の件数のロック獲得所要時間が蓄積するまで、ステップＳ２０８〜Ｓ２１１の処理を飛ばしてもよい。
【００３３】
次いで、制御部１１０Ｘは、ステップＳ２０５で求めた、現在処理中のロックの最新のロック獲得所要時間が、ステップＳ２０８で求められた通常値の範囲内であるか否かを判定する（ステップＳ２０９）。範囲内であった場合（ステップＳ２０９；Ｙ）、制御部１１０Ｘは、最新の１件のロック獲得所要時間が平均的なものであるとし、当該ロックの管理している共有資源への競合は正常な状態であると分析する（ステップＳ２１０）。一方、最新の１件のロック獲得所要時間が通常値の範囲外であった場合（ステップＳ２０９；Ｎ）、制御部１１０Ｘは、当該ロックの管理している共有資源への競合は異常な状態であると分析する（ステップＳ２１１）。このように制御部１１０ＸのＣＰＵ１１１は分析部として機能する。
【００３４】
以上の処理が終了すると、処理はステップＳ２０１へと戻り、所定の時間Ｔが経過すると、再度上述のステップＳ２０３〜Ｓ２１１の処理を全ロックについて実行する。
【００３５】
このように、本発明に係る実施の形態は、あるクリティカルセクションの競合状態を動的に分析し、固定的な判定基準を用いることなく、蓄積された過去のロック獲得所要時間から統計的にロック獲得処理に異常が生じているかを分析する。クリティカルセクションへのアクセス状況は均一でないため、固定基準を用いないことで、状況に応じて柔軟に異常を検出することが可能となる。
【００３６】
また、本発明に係る実施の形態は、ロック変数のセット/リセットを不可分（アトミック）に行うようなロック機構だけでなく、例えば、排他制御管理用のデーモンプロセスが、ある特定の共有資源（クリティカルセクション）へのアクセスを一元管理するようなロック機構にも適用できる。例えば、共有資源へアクセスするためには、当該排他制御管理用デーモンのポート番号を指定して、ロック獲得要求を送信するようなロック機構がある場合、ロック属性ファイルには、当該デーモンのポート番号、引き渡すデータ構造とその値、成功時、あるいは失敗時に返却されるデータ構造とその値、等を対応付けて記憶するようにすればよい。そして、制御部１１０Ｘは当該ロック属性ファイルに登録されている内容に基づいて、ロックの獲得を実行すればよい。
【００３７】
以上、本発明の実施の形態について説明したが、本発明は、上述した実施形態に限定されず、種々の変形および応用が可能である。また、上述した実施形態の各構成要素を自由に組み合わせることも可能である。 
【００３８】
例えば、上記実施の形態において、競合の状態が正常であるか否かを判定した後に（ステップＳ２１０、Ｓ２１１）、分析結果を、ロック獲得所要時間、および通常値として算出された範囲とともに、ログファイルなどに出力するようにしてもよい。さらに、競合状態が異常であると分析した場合（ステップＳ２１１）は、ダイアログボックスなどを表示して、ログファイルに出力した情報と同様の情報をモニタなどを備える表示部（図示せず）に出力して、ユーザに通知してもよい。このとき、処理を中断するか否かをユーザが選択入力できるようにしてもよい。このように、制御部１１０ＸのＣＰＵ１１１は図６に示す出力部として機能するようにしてもよい。
【００３９】
また、上記実施の形態において、ステップＳ２０４で獲得中のロックがデッドロック状態にある場合、ステップＳ２０４は終了しない。これを避けるため、制御部１１０Ｘは、ステップＳ２０４を実行してから、現在時刻がステップＳ２０３で記録した開始時刻から所定の時間Ｔ２よりも長い時間が経過している場合に、ロック獲得処理を終了するようにしてもよい。
【００４０】
即ち、例えば、制御部１１０Ｘは、定期的にロック獲得処理を中断して、現在時刻がステップＳ２０３で記録した開始時刻から所定の時間Ｔ２よりも長い時間が経過しているかを判定するようにして、所定の時間Ｔ２よりも長い時間が経過していれば、ロック獲得処理を終了するようにしてもよい。一方、所定の時間Ｔ２がまだ経過していない場合は、ロック獲得処理を再開すればよい。
【００４１】
このように、ロックを獲得できずに所定の時間Ｔ２が経過した場合、デッドロックが生じているものと分析して、制御部１１０Ｘは、競合分析処理をステップＳ２１１へと進めればよい。また、直前のステップＳ２０３で記録した最新の開始時刻は以後利用しないため、削除すればよい。
【００４２】
また、ロックを獲得できずに所定の時間Ｔ２が経過した場合、ログファイルへの分析結果を出力するときに、ロック獲得所要時間に替えて、デッドロックの可能性がある旨を出力してもよい。
【００４３】
また、上記実施の形態では、制御部１１０Ｘが実行するロック獲得の命令は、分析対象プログラムに基づいて、ロック属性ファイル等に登録しておき、メインメモリ１２０等に記憶しておくものとした。そうではなく、図６に示すように、制御部１１０Ｘがアクセス権情報抽出部を備えるようにして、ロック属性ファイルを分析対象プログラムから自動的に抽出するようにしてもよい。
【００４４】
例えば、プログラム内で呼び出される、ロックに関連するシステムコールについての基礎情報を予め所定のファイルに登録しておく（以降このファイルをロック基礎情報ファイルと呼ぶ）。アクセス権情報抽出部として機能する制御部１１０ＸのＣＰＵ １１１は、分析対象プログラムに対して、当該ロック基礎情報ファイルを参照して、既存の構文解析手法、意味解析手法などを適用することでロック獲得に必要な一連の命令を抽出すればよい。
【００４５】
図４のプログラムを分析対象とした場合の、ロック基礎情報ファイルの例を、図７（Ａ）に示す。ロック基礎情報ファイルには、例えば、プログラムの記述言語、ＯＳのタイプ、ロック獲得命令、ロック解放命令、共有メモリの割当命令、共有メモリ空間のアタッチ命令、共有メモリのデタッチ命令、などの情報を記載する。
【００４６】
制御部１１０Ｘは、ロック基礎情報ファイルに記載されたロック獲得命令を参照して、ソースファイルを分析することで、ソースファイルの４６行目："pthread_mutex_lock(&shmptr->mutex);" がロックを獲得している箇所であることを特定する。さらに、制御部１１０Ｘは、ロックの獲得に利用される構造体shmptrが７行目："typedef struct shared_mem"で定義されていること、および、３３行目："shmat(shmid,0,0)"で、値を代入されていることを特定する。
【００４７】
制御部１１０Ｘは、ロック基礎情報ファイルを参照して、"shmat"システムコールは、第１引数の指定する共有メモリ・セグメントを、コールしたプロセスのアドレス空間（即ちshmptrの指す空間）にアタッチすることを特定する。
【００４８】
また、制御部１１０Ｘは、shmatシステムコールの第１引数である、int型変数、shmidが、２１行目："shmget(ftok("sample",'A'), sizeof(shared_mem) , IPC_CREAT)"で、値を代入されていることを特定する。制御部１１０Ｘはロック基礎情報ファイルを参照することにより、shmgetの第１引数である"ftok("sample",'A')"は、共有メモリのキーを生成すること、また、shmgetが、当該生成されたキーを指定して、共有メモリ・セグメントを割り当てることを特定する。
【００４９】
このように制御部１１０Ｘは、ロック基礎情報ファイルに記載されているロック獲得命令をソースファイルから抽出し、ロック獲得命令の引数として利用される値をまず特定する。そして、当該引数として利用される値を得るために必要な処理を、順次ロック基礎情報ファイルを参照しながら取得する。以上のようにして取得した情報は、例えば、図７（Ｂ）に示すようなロック属性ファイルとして出力する。
なお、同様のシステムコールを用いるプログラムが分析対象であれば、ロック基礎情報ファイルを再利用することもできる。
【００５０】
また、上記実施の形態では、競合分析装置１００において、種々の動作プログラムがキャッシュメモリ等に予め記憶されているものとして説明した。しかし、上述の処理動作を実行させるためのプログラムを、フレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disk Read-Only Memory）、ＭＯ（Magneto-Optical disk）等のコンピュータ読み取り可能な記録媒体に格納して配布し、当該プログラムをコンピュータにインストールすることにより、上述の処理動作を実行をする装置を構成してもよい。
【００５１】
また、コンピュータに通信インタフェース等を有する通信部を備えるようにしてもよい。そして、プログラムをインターネット等の通信ネットワーク上の所定のサーバ装置が有するディスク装置等に格納しておき、例えば、搬送波に重畳させて、通信部を介してコンピュータにダウンロード等するようにしてもよい。さらに、通信ネットワークを介してプログラムを転送しながら起動実行することによっても、上述の処理を達成することができる。
【００５２】
また、上述の機能を、ＯＳが分担して実現する場合、又はＯＳとアプリケーションとの協働により実現する場合等には、ＯＳ以外の部分のみを媒体に格納して配布してもよく、また、コンピュータにダウンロード等してもよい。
【００５３】
また、上記実施の形態に係る競合分析装置１００は、専用のハードウェアによっても実現することもできる。
【図面の簡単な説明】
【００５４】
【図１】本実施の形態に係る競合分析装置の概要構成を示すブロック図である。
【図２】本実施の形態に係る蓄積部の構成例を示す図である。
【図３】本実施の形態に係る競合分析処理の例を示すフロー図である。
【図４】本実施の形態に係る分析対象プログラムの例を示す図である。
【図５】図４のプログラムの動作を説明する図である。
【図６】本実施の形態の変形例の１つを示す図である。
【図７】（Ａ）は本実施の形態の変形例の１つで利用するロック基礎情報ファイルの例を示す図であり、（Ｂ）はロック基礎情報ファイルを元に得られたロック属性ファイルの例を示す図である。
【符号の説明】
【００５５】
１００  競合分析装置
１１０  制御部
１１１  ＣＰＵ
１１２  キャッシュメモリ
１２０  メインメモリ
【図１】
2009251871.tif 000003
【図２】
2009251871.tif 000004
【図３】
2009251871.tif 000005
【図４】
2009251871.tif 000006
【図５】
2009251871.tif 000007
【図６】
2009251871.tif 000008
【図７】
2009251871.tif 000009