情報処理装置および方法、並びにプログラム
【課題】デバッグ工数を低減できるようにする。
【解決手段】プログラム実行部は、指定されたプログラムを実行し、必要に応じてメモリとのデータの授受を行なう。スナップショット生成部は、プログラムの実行中の各時刻において、メモリの各アドレスに格納されているデータを含むスナップショットを生成する。プログラム実行中に障害が発生すると、プログラム実行部は、障害発生の要因となった障害データと、その障害発生データが記録されているメモリの障害発生アドレスを取得する。比較部は、スナップショットに含まれる障害発生アドレスのデータと、障害データとを比較して、障害が発生する要因となった処理の直前に生成されたスナップショットを特定する。本発明は、情報処理装置に適用することができる。
【解決手段】プログラム実行部は、指定されたプログラムを実行し、必要に応じてメモリとのデータの授受を行なう。スナップショット生成部は、プログラムの実行中の各時刻において、メモリの各アドレスに格納されているデータを含むスナップショットを生成する。プログラム実行中に障害が発生すると、プログラム実行部は、障害発生の要因となった障害データと、その障害発生データが記録されているメモリの障害発生アドレスを取得する。比較部は、スナップショットに含まれる障害発生アドレスのデータと、障害データとを比較して、障害が発生する要因となった処理の直前に生成されたスナップショットを特定する。本発明は、情報処理装置に適用することができる。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は情報処理装置および方法、並びにプログラムに関し、特に、デバッグ工数を低減させることができるようにした情報処理装置および方法、並びにプログラムに関する。
【背景技術】
【0002】
従来、プログラムの実行中に障害が発生した場合などに、システムを回復させるためにスナップショットと呼ばれる情報が利用されている(例えば、特許文献1参照)。スナップショットは、プログラムの実行中に、定期的にメモリ内の情報などシステムの回復に必要となる情報、つまりプログラムの再実行に必要となる情報をファイルに格納することで生成される。
【0003】
例えば、スナップショットを用いてシステムを回復させれば、障害発生によるプログラムの異常終了地点、より詳細には、障害が発生する要因となった処理が行なわれた地点を特定することができる。そのため、障害発生の原因を究明しようとする場合に、異常終了地点から最も近い地点に戻って処理を実行することにより、プログラムの実行を最初から実施しなくてすむことになる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開昭58−201152号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上述した技術では、障害発生の原因調査に多くの工数がかかっていた。
【0006】
すなわち、スナップショットを利用してプログラムの異常終了地点を特定しようとする場合、最後に取得されたスナップショットから順番に、スナップショットを用いてシステムを回復させてプログラムを再実行する処理を繰り返し行なう必要があった。このようにスナップショットごとに、システムの回復とプログラムの再実行を行なうと異常終了地点の特定に時間がかかり、デバッグ工数が多くなってしまう。
【0007】
本技術は、このような状況に鑑みてなされたものであり、デバッグ工数を低減させることができるようにするものである。
【課題を解決するための手段】
【0008】
本技術の一側面の情報処理装置は、指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部とを備える。
【0009】
前記比較部には、前記スナップショットの生成時刻が新しい順に、前記スナップショットに含まれる前記比較データと、前記障害データとを比較させていき、前記アドレスの前記比較データが前記障害データとは異なる最初の前記スナップショットを、前記直前に生成された前記スナップショットとさせることができる。
【0010】
前記アドレスを前記記録部の物理アドレスとすることができる。
【0011】
情報処理装置には、保持している変換テーブルを用いて、前記記録部の物理アドレスと仮想アドレスの変換を行なうメモリ管理部をさらに設け、前記スナップショット生成部には、前記記録部の物理アドレスに格納されているデータと、前記メモリ管理部に保持されている前記変換テーブルとを含む前記スナップショットを生成させ、前記取得部には、前記障害データと、前記障害データが格納される前記記録部の仮想アドレスとを取得させ、前記比較部には、前記スナップショットに含まれる前記変換テーブルに基づいて、前記取得部により取得された前記仮想アドレスを、前記記録部の前記物理アドレスに変換させるとともに、前記スナップショットに含まれている、変換により得られた前記物理アドレスの前記比較データと、前記障害データとを比較させることができる。
【0012】
前記スナップショット生成部には、前記指定プログラムが複数のプロセスごとのプログラムから構成される場合、前記スナップショットの生成時に実行されている前記プロセスのコンテキストを特定するコンテキストIDをスナップショット名とする前記スナップショットを生成させ、前記取得部には、前記障害の発生時に実行されていた前記プロセスの前記コンテキストの前記コンテキストIDをさらに取得させ、前記比較部には、前記取得部により取得された前記コンテキストIDをスナップショット名とする前記スナップショットについて、前記比較データと前記障害データとを比較させることができる。
【0013】
前記スナップショット生成部には、前記指定プログラムが複数のプロセスごとのプログラムから構成され、前記障害が発生する前記プロセスの前記プログラムが既知である場合、前記障害が発生する前記プロセスの前記プログラムが実行されているときにのみ、前記スナップショットを生成させることができる。
【0014】
本技術の一側面の情報処理方法またはプログラムは、指定プログラムの実行中に、各時刻のスナップショットを生成し、前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得し、前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定するステップを含む。
【0015】
本技術の一側面においては、指定プログラムの実行中に、各時刻のスナップショットが生成され、前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとが取得され、前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとが比較され、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットが特定される。
【発明の効果】
【0016】
本技術の一側面によれば、デバッグ工数を低減させることができる。
【図面の簡単な説明】
【0017】
【図1】情報処理装置のハードウェアの構成例を示す図である。
【図2】情報処理装置の機能的な構成例を示す図である。
【図3】プログラム実行処理を説明するフローチャートである。
【図4】プログラム実行処理の具体的な処理例を説明する図である。
【図5】情報処理装置の他の機能的な構成例を示す図である。
【図6】プログラム実行処理を説明するフローチャートである。
【図7】論物変換テーブルの一例を示す図である。
【図8】プログラム実行処理を説明するフローチャートである。
【図9】スナップショットの取得について説明する図である。
【図10】プログラム実行処理を説明するフローチャートである。
【図11】スナップショットの取得について説明する図である。
【発明を実施するための形態】
【0018】
以下、図面を参照して、本技術を適用した実施の形態について説明する。
【0019】
〈第1の実施の形態〉
[情報処理装置のハードウェアの構成例]
図1は、本技術を適用した情報処理装置の一実施の形態の構成例を示す図である。
【0020】
この情報処理装置11は、例えばコンピュータなどからなり、情報処理装置11では、CPU(Central Processing Unit)21,ROM(Read Only Memory)22,RAM(Random Access Memory)23が、バス24により相互に接続されている。
【0021】
バス24には、さらに、入出力インターフェース25が接続されている。入出力インターフェース25には、キーボード、マウス、マイクロホンなどよりなる入力部26、ディスプレイ、スピーカなどよりなる出力部27、ハードディスクや不揮発性のメモリなどよりなる記録部28、ネットワークインターフェースなどよりなる通信部29、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア31を駆動するドライブ30が接続されている。
【0022】
例えば、情報処理装置11では、CPU21が、記録部28に記録されているプログラムを、入出力インターフェース25及びバス24を介して、RAM23にロードして実行することにより、各種の処理が行われる。
【0023】
[情報処理装置の機能的構成例]
また、図2は情報処理装置11の機能的な構成例を示す図である。すなわち、情報処理装置11は、制御部61、プログラム実行部62、メモリ63、スナップショット生成部64、比較部65、および補助記録装置66から構成される。
【0024】
例えば、情報処理装置11がホストマシンとして所定の処理をプログラムの実行により行なう場合、制御部61乃至比較部65からなる仮想マシンを起動させ、仮想マシンにプログラムの処理を実行させる。
【0025】
このとき、仮想マシンは、定期的に各時刻のスナップショットを取得し、補助記録装置66に記録させておく。そして、仮想マシンは、プログラムの実行中に障害が発生した場合、補助記録装置66に記録されているスナップショットに基づいて、障害発生の要因となった処理が行なわれた直前の時刻のスナップショットを特定する。さらに、仮想マシンは、特定されたスナップショットに基づいてシステムを回復させ、デバッグを行なう。なお、以下においては、プログラムの実行中に発生する障害の要因は、メモリ63へのデータの上書きであるものとして説明を続ける。
【0026】
このような仮想マシンを構成する制御部61は、仮想マシン全体の動作を制御する。例えば、プログラム実行部62は、制御部61の制御にしたがってプログラムの処理を実行し、プログラムの実行に必要なデータを、メモリ63に記録させたり、メモリ63から読み出したりする。また、プログラム実行部62は、プログラム実行中に障害が発生すると、障害発生の要因となったデータが記録されているメモリ63のアドレスを特定し、特定されたアドレスと、そのアドレスに記録されていたデータとを制御部61を介して比較部65に供給する。
【0027】
なお、以下、メモリ63の所定のアドレスの領域に記録されているデータを、単にアドレスの値とも称することとする。また、障害発生の要因となったデータが記録されているメモリ63のアドレスを障害発生アドレスとも称し、障害発生アドレスの値を障害発生アドレス値とも称することとする。
【0028】
メモリ63は、例えばRAM23などの揮発性のメモリから構成され、プログラム実行部62から供給されたデータを記録したり、記録されているデータをプログラム実行部62に供給したりする。スナップショット生成部64は、制御部61の制御にしたがって、定期的にメモリ63に記録されているデータの内容や、CPU21のレジスタの値等を取得してスナップショットを生成し、補助記録装置66に供給して記録させる。例えば、補助記録装置66は、記録部28やリムーバブルメディア31などの不揮発性の記録媒体から構成される。
【0029】
比較部65は、プログラムの実行中に障害が発生すると、補助記録装置66に記録されているスナップショットと、制御部61から供給された障害発生アドレスおよび障害発生アドレス値とに基づいて、障害発生の要因となった処理が行なわれる直前のスナップショットを特定する。なお、以下、障害発生の要因となった処理の直前のスナップショットを、直前スナップショットと称する。
【0030】
[プログラム実行処理の説明]
次に、情報処理装置11の動作について説明する。情報処理装置11は、所定のプログラムが指定されて、そのプログラムの実行が指示されると、プログラム実行処理を行なって、指定されたプログラムを実行する。以下、図3のフローチャートを参照して、情報処理装置11によるプログラム実行処理について説明する。
【0031】
なお、この例では、情報処理装置11には、例えばMMU(Memory Management Unit)等のメモリ管理部が設けられておらず、プログラム実行中に障害が発生することが予め分かっているものとする。
【0032】
ステップS11において、情報処理装置11は仮想マシンを起動させる。例えば、CPU21が所定のプログラムを実行することで、仮想マシンを構成する制御部61乃至比較部65を実現させる。
【0033】
ステップS12において、プログラム実行部62は、制御部61の制御にしたがってユーザにより指定されたプログラムを実行する。このときプログラム実行部62は、必要に応じてデータをメモリ63に供給して、メモリ63の所定の物理アドレスの領域にデータを記録させたり、メモリ63の所定の物理アドレスの領域からデータを読み出したりする。
【0034】
ステップS13において、スナップショット生成部64は、スナップショットを生成する。例えばスナップショット生成部64は、メモリ63の各物理アドレスのデータや、CPU21のレジスタの値等を取得してスナップショットを生成し、補助記録装置66に供給する。補助記録装置66は、スナップショット生成部64から供給されたスナップショットを時刻順に順序付けて記録する。
【0035】
このようにして得られたスナップショットは、プログラムの処理工程のうち、スナップショットが取得された時点におけるメモリ63の状態等を復元し、その時点からプログラムを再実行できるようにするためのものである。
【0036】
ステップS14において、制御部61はプログラムの実行中に障害が発生したか否かを判定する。ステップS14において、障害が発生していないと判定された場合、処理はステップS13に戻り、上述した処理が繰り返される。すなわち、次の時刻のスナップショットが取得され、補助記録装置66に記録される。
【0037】
これに対して、ステップS14において、障害が発生したと判定された場合、ステップS15において、プログラム実行部62は、障害箇所を特定する。
【0038】
具体的には、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の物理アドレスを障害発生アドレスとして特定し、その障害発生アドレスと障害発生アドレス値を制御部61に供給する。
【0039】
プログラム実行部62から制御部61に障害発生アドレスと障害発生アドレス値が供給されると、ステップS16において、制御部61は、プログラム実行部62を制御してプログラムの実行を停止させる。これにより、実行中のプログラムが停止される。すると、制御部61は、プログラム実行部62から供給された障害発生アドレスと障害発生アドレス値とを比較部65に供給し、障害発生の要因となる処理の実行直前に取得された直前スナップショットの特定を指示する。
【0040】
ステップS17において、比較部65は、補助記録装置66からこれまでに取得されたスナップショットを読み出して、それらのスナップショットのうちの1つを選択する。例えば、最後に取得されたスナップショット、つまり取得された時刻の最も新しいスナップショットから、最初に取得されたスナップショットまで、時刻の新しい順に1つずつスナップショットが選択されていく。
【0041】
ステップS18において、比較部65は、選択したスナップショットに含まれているメモリ63の物理アドレスの値のうち、制御部61から供給された障害発生アドレスと同じ物理アドレスの値と、制御部61から供給された障害発生アドレス値とを比較する。なお、以下、スナップショット(スナップショットイメージ)に含まれている、メモリ63上の障害発生アドレスと同じ物理アドレスの値を、比較アドレス値とも称することとする。
【0042】
ステップS19において、比較部65は、ステップS18の処理で比較した、障害発生アドレス値と比較アドレス値とが異なる値であるか否かを判定する。
【0043】
ここで、ステップS18の処理で障害発生アドレス値と比較された、処理対象のスナップショットの比較アドレス値は、そのスナップショットを取得した時刻において、メモリ63上の障害発生アドレスに格納されていた値(データ)である。
【0044】
この例では、プログラム実行における障害は、メモリ63の所定のアドレスに格納されている値(データ)が、不適切な値に書き換えられることにより生じる。また、障害発生アドレス値は、障害発生時点において障害発生アドレスに格納されている値、すなわち障害発生の要因となった不適切な値である。
【0045】
そのため、処理対象のスナップショットの比較アドレス値が、障害発生アドレス値と同じ値であれば、その比較アドレス値が含まれるスナップショットは、障害発生の要因となった処理により障害発生箇所のアドレス値が上書きされた後の時刻のものである。つまり、目的とする直前スナップショットの取得時刻よりも後の時刻のスナップショットである。
【0046】
これに対して、処理対象のスナップショットの比較アドレス値が、障害発生アドレス値と異なる値であれば、その比較アドレス値が含まれるスナップショットは、障害発生要因の処理により障害発生箇所のアドレス値が上書きされる前の時刻のものである。
【0047】
したがって、各時刻のスナップショットを時刻の新しい順に選択し、比較アドレス値と障害発生アドレス値を比較していったときに、最初に障害発生アドレス値と異なる値となった比較アドレス値が含まれるスナップショットが、直前スナップショットとなる。このように、上述したステップS18では、スナップショットの静的な解析により直前スナップショットを特定することを目的として、比較アドレス値と障害発生アドレス値との比較が行なわれる。
【0048】
ステップS19において、比較アドレス値と障害発生アドレス値が異なる値でないと判定された場合、処理対象のスナップショットは直前スナップショットよりも後の時刻のスナップショットであるので、処理はステップS17に戻り、上述した処理が繰り返される。すなわち、まだ処理対象とされていないスナップショットのうち、最も新しい時刻のスナップショットが新たに選択され、そのスナップショットが直前スナップショットであるかの特定が行なわれる。
【0049】
一方、ステップS19において、比較アドレス値と障害発生アドレス値が異なる値であると判定された場合、比較部65は、処理対象となっているスナップショットを直前スナップショットとして制御部61に供給し、処理はステップS20に進む。
【0050】
ステップS20において、制御部61は、比較部65からの直前スナップショットに基づいてシステムを回復させ、デバッグを行なう。すなわち、制御部61は直前スナップショットに基づいて仮想マシンの各部を制御し、メモリ63やCPU21内のレジスタを直前スナップショットが取得された時点の状態に戻し、デバッグを行なう。そしてデバッグが行なわれると、プログラム実行処理は終了する。
【0051】
以上において説明したプログラム実行処理を具体的な例により説明すると、例えば図4の矢印A11に示すように仮想マシンが起動される。この工程は図3のステップS11の処理に対応する。
【0052】
次に、矢印A12に示すように指定されたプログラムの実行が開始され、その後、定期的にスナップショットが取得されて補助記録装置66に記録されていく。この矢印A12に示す工程は図3のステップS12の処理に対応する。
【0053】
さらに、プログラムの実行が開始され、矢印A13に示すようにプログラムの処理において、所定のポインタpの初期値として所定の値xにより示されるメモリ63上のアドレスの値が設定される。例えば、値xにより示されるアドレスは、メモリ63の物理アドレス「0x80000000」であり、この時点ではこのアドレスの領域には、ポインタpの値として適切な値が格納されているとする。
【0054】
このような矢印A12に示す工程から矢印A13に示す工程の間に、矢印A14に示すように、各時刻のスナップショットSP1乃至スナップショットSP25が取得されたとする。
【0055】
また、ポインタpの初期値が設定されると、続いて矢印A15に示すように、ポインタpの値が初期値から「0」に上書きされる。すなわち、ポインタpの値が格納されているメモリ63上の物理アドレス「0x80000000」の領域の値が、これまで記録されていた値から「0」に書き換えられる。
【0056】
ここで、上書きされた新たなポインタpの値「0」が不適切な値であり、この上書き処理が障害発生の要因となるとする。したがって、上書きされた物理アドレス「0x80000000」が障害発生アドレスとなり、この物理アドレスに格納されている値「0」が障害発生アドレス値となる。
【0057】
このように矢印A13に示したポインタpの初期値の設定から、矢印A15に示したポインタpの上書きが行なわれる間に、矢印A16に示すように、各時刻のスナップショットSP26乃至スナップショットSP50が取得されたとする。
【0058】
さらに、ポインタpの値の上書き後、矢印A17に示すように、所定の値yとして、ポインタpが示す変数の値が設定される。ところが、この時点におけるポインタpの値「0」は値yとして不適切な値であるため、ここで障害が発生する。なお、矢印A15に示す工程から矢印A17に示す工程の間に、矢印A18に示すように、各時刻のスナップショットSP51乃至スナップショットSP100が取得されたとする。
【0059】
矢印A17に示す工程で障害が発生すると、矢印A19に示すように障害発生箇所が特定される。この場合、障害発生の要因となったポインタpが特定され、ポインタpの値が格納されているメモリ63上の物理アドレス「0x80000000」と、そのアドレスの値「0」とが、それぞれ障害発生アドレスおよび障害発生アドレス値として取得される。この工程は図3のステップS15の処理に対応する。
【0060】
そして、障害箇所が特定されると、スナップショットの取得が停止され、矢印A20に示すように、これまで行なわれていたプログラムの実行が停止される。
【0061】
さらに、矢印A21に示すように、これまで取得されたスナップショットが、スナップショットSP100乃至スナップショットSP1の順番で処理対象のスナップショットとされて、スナップショットの静的な解析が行なわれる。この処理が図3のステップS17乃至ステップS19の処理に対応する。
【0062】
具体的には、処理対象のスナップショットに含まれる、障害発生アドレスである物理アドレス「0x80000000」の値が比較アドレス値とされて、比較アドレス値と障害発生アドレス値「0」との比較が行なわれ、直前スナップショットが特定される。この処理により、直前スナップショットとして、障害発生要因となる矢印A15の工程の処理直前に取得されたスナップショットSP50が特定されることになる。
【0063】
以上のようにして、情報処理装置11は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63のアドレスの値を用いた、スナップショットの静的な解析により直前スナップショットを特定する。
【0064】
このように情報処理装置11では、スナップショットの静的な解析という簡単な処理によって迅速に直前スナップショットを特定することができ、これによりデバッグ工数を低減させることができる。すなわち、スナップショットによりシステムを回復させてデバッガによりメモリの値を確認するという動的な処理を、スナップショットごとに行なう必要がなくなるので、障害発生の原因調査のための工数を大幅に短縮させることができる。
【0065】
〈第2の実施の形態〉
[情報処理装置の機能的構成例]
なお、以上においては、情報処理装置11にメモリ管理部が設けられていない場合を例として説明したが、情報処理装置にメモリ管理部が設けられていてもよい。そのような場合、情報処理装置は、例えば図5に示すように構成される。
【0066】
図5は、MMUなどのメモリ管理部が設けられている場合における情報処理装置の機能的な構成例を示す図である。なお、図5において、図2における場合と対応する部分には同一の符号を付してあり、その説明は適宜省略する。
【0067】
情報処理装置91は、制御部61、プログラム実行部62、メモリ63、スナップショット生成部64、比較部65、補助記録装置66、およびメモリ管理部101から構成される。すなわち、図5の情報処理装置91は、図2の情報処理装置11に新たにメモリ管理部101が設けられた構成となっている。
【0068】
情報処理装置91では、プログラム実行部62は、メモリ管理部101を介してメモリ63とのデータの授受を行なう。また、プログラム実行部62は、プログラムの実行中に授受されるデータの格納場所として、メモリ63上の記録領域の仮想的なアドレス(以下、仮想アドレスと称する)を指定する。
【0069】
メモリ管理部101は、例えばメモリ63における記録領域のアドレス管理を行なうMMUなどからなり、メモリ63の物理アドレスと仮想アドレス(論理アドレス)の間のアドレス変換を行なう論物変換テーブルを保持している。また、メモリ管理部101は、保持している論物変換テーブルを用いて、プログラム実行部62とメモリ63との間のデータの授受を管理する。
【0070】
さらに、情報処理装置91では、スナップショット生成部64は、メモリ63に記録されているデータの内容や、CPUのレジスタの値等とともに、メモリ管理部101の論物変換テーブルも取得してスナップショットを生成し、補助記録装置66に供給する。
【0071】
なお、情報処理装置91のハードウェアの構成は、図1に示した情報処理装置11の構成と同様であるので、その図示および説明は省略する。
【0072】
[プログラム実行処理の説明]
次に、図6のフローチャートを参照して、情報処理装置91により行われるプログラム実行処理について説明する。なお、この例では、情報処理装置91により実行されるプログラムはシングルコンテキストであり、プログラム実行中に障害が発生することが予め分かっているものとする。
【0073】
ステップS51において、情報処理装置91は仮想マシンを起動させる。例えば、制御部61乃至比較部65およびメモリ管理部101からなる仮想マシンが起動される。
【0074】
ステップS52において、プログラム実行部62は、制御部61の制御にしたがってユーザにより指定されたプログラムを実行する。
【0075】
このとき、例えばプログラム実行部62はメモリ管理部101に対して、メモリ63の仮想アドレスを指定するとともに、その仮想アドレスに記録させるデータを供給する。するとメモリ管理部101は、指定された仮想アドレスを保持している論物変換テーブルにより物理アドレスに変換する。
【0076】
例えば、メモリ管理部101は図7に示す論物変換テーブルを保持しており、プログラム実行部62により仮想アドレス「0xc0000000」が指定されると、その仮想アドレスを対応する物理アドレス「0x80000000」に変換する。
【0077】
指定された仮想アドレスを物理アドレスに変換すると、メモリ管理部101は、プログラム実行部62から供給されたデータをメモリ63に供給して、そのデータを変換で得られたメモリ63上の物理アドレスに記録させる。
【0078】
また、例えばプログラム実行部62は、メモリ管理部101に対してメモリ63上の仮想アドレスを指定し、その仮想アドレスに格納されているデータの読み出しを指示する。すると、メモリ管理部101は、プログラム実行部62により指定された仮想アドレスを保持している論物変換テーブルを用いて物理アドレスに変換し、その結果得られたメモリ63の物理アドレスからデータを読み出してプログラム実行部62に供給する。
【0079】
ステップS53において、スナップショット生成部64は、スナップショットを生成する。例えばスナップショット生成部64は、メモリ63の各物理アドレスのデータや、CPUのレジスタの値、メモリ管理部101に保持されている論物変換テーブル等を取得してスナップショットを生成し、補助記録装置66に供給する。したがって、補助記録装置66には、論物変換テーブルが含まれるスナップショットが記録されることになる。
【0080】
ステップS54において、制御部61はプログラムの実行中に障害が発生したか否かを判定する。ステップS54において、障害が発生していないと判定された場合、処理はステップS53に戻り、上述した処理が繰り返される。
【0081】
これに対して、ステップS54において、障害が発生したと判定された場合、ステップS55において、プログラム実行部62は、障害箇所を特定する。
【0082】
具体的には、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の仮想アドレス(以下、障害発生仮想アドレスと称する)を特定し、その仮想アドレスと、その仮想アドレスの値である障害発生アドレス値を制御部61に供給する。ここで、障害発生仮想アドレスは、障害発生の要因となったデータが実際に記録されているメモリ63の物理アドレス、つまり障害発生アドレスを示す仮想アドレスである。
【0083】
障害発生仮想アドレスと障害発生アドレス値が制御部61に供給されると、その後、ステップS56およびステップS57の処理が行われるが、これらの処理は図3のステップS16およびステップS17の処理と同様であるので、その説明は省略する。
【0084】
但し、ステップS56では、制御部61は、プログラム実行部62から供給された障害発生仮想アドレスと障害発生アドレス値とを比較部65に供給し、直前スナップショットの特定を指示する。
【0085】
ステップS58において、比較部65は、処理対象のスナップショットに含まれる論物変換テーブルを用いて、制御部61から供給された仮想アドレスである障害発生仮想アドレスを、物理アドレスである障害発生アドレスに変換する。これにより、制御部61から比較部65に供給された障害発生アドレス値が実際に記録されている、メモリ63の物理アドレスが特定される。
【0086】
障害発生アドレスが特定されると、その後、ステップS59乃至ステップS61の処理が行われてプログラム実行処理は終了するが、これらの処理は図3のステップS18乃至ステップS20の処理と同様であるので、その説明は省略する。すなわち、各時刻のスナップショットから障害発生アドレスの値が比較アドレス値として抽出され、比較アドレス値と障害発生アドレス値とが比較されて、直前スナップショットが特定される。
【0087】
以上において説明したプログラム実行処理では、例えば図4に示した矢印A11乃至矢印A17に示す工程で、情報処理装置11による処理と同様の処理が行われる。但し、プログラム実行部62により仮想アドレスが指定されて処理が行なわれる。
【0088】
そして、プログラム実行中に障害が発生すると、矢印A19に示す工程では、障害発生要因のポインタpが特定される。また、ポインタpの値が格納されているメモリ63の仮想アドレス「0xc0000000」と、その仮想アドレスの値「0」とが、それぞれ障害発生仮想アドレスおよび障害発生アドレス値として取得される。この工程は図6のステップS55の処理に対応する。
【0089】
障害箇所が特定されると、矢印A20に示す工程でプログラムの実行が停止され、矢印A21に示す工程でスナップショットの静的な解析が行なわれる。具体的には、取得されたスナップショットが、スナップショットSP100乃至スナップショットSP1の順番で処理対象のスナップショットとされる。
【0090】
また、例えばスナップショットに含まれる図7の論物変換テーブルから、障害発生仮想アドレス「0xc0000000」が、障害発生アドレス「0x80000000」に変換される。つまり、仮想アドレスから物理アドレスへの変換が行なわれる。
【0091】
さらに、処理対象のスナップショットに含まれる、障害発生アドレス「0x80000000」の値が比較アドレス値とされて、比較アドレス値と障害発生アドレス値「0」との比較が行なわれ、直前スナップショットが特定される。
【0092】
以上のようにして、情報処理装置91は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63の仮想アドレスを物理アドレスに変換し、アドレス値の比較により直前スナップショットを特定する。このように仮想アドレスによりデータが管理される場合であっても、スナップショットの静的な解析という簡単な処理で迅速に直前スナップショットを特定し、デバッグ工数を低減させることができる。
【0093】
〈第3の実施の形態〉
[プログラム実行処理の説明]
さらに、第2の実施の形態では、情報処理装置91が実行するプログラムが、シングルコンテキストのプログラムである場合を例として説明したが、実行されるプログラムがマルチコンテキストであってもよい。
【0094】
例えば、マルチコンテキストのプログラムが実行され、そのプログラムを構成する各プロセスのプログラムのうちの障害が発生するプログラムが未知である場合、情報処理装置91は図8に示すプログラム実行処理を行う。この場合においてもプログラム実行中に障害が発生することが予め分かっているものとする。
【0095】
以下、図8のフローチャートを参照して、情報処理装置91によるプログラム実行処理について説明する。なお、ステップS91およびステップS92の処理は図6のステップS51およびステップS52の処理と同様であるので、その説明は省略する。
【0096】
ステップS93において、スナップショット生成部64は、スナップショットを生成する。例えばスナップショット生成部64は、ステップS92で実行を開始したマルチコンテキストのプログラムの各プロセスのうち、現時点で実行されているプロセスのコンテキストを特定する情報を、コンテキストIDとして取得する。具体的には、コンテキストIDは、実行中のプロセスが使用している仮想空間を識別するためにオペレーティングシステムが付与するIDなどである。
【0097】
さらに、スナップショット生成部64は、メモリ63の各物理アドレスのデータや、CPUのレジスタの値、メモリ管理部101に保持されている論物変換テーブル等を取得し、スナップショット名がコンテキストIDであるスナップショットを生成する。スナップショット生成部64は、このようにして得られたスナップショットを補助記録装置66に供給し、記録させる。
【0098】
例えば、図9に示すように、プログラムの実行中、各時刻ti(但し、0≦i≦n)において、スナップショットSPi(但し、0≦i≦n)が取得される。そして、それらのスナップショットSPiの名前が、スナップショットSPiの取得時に実行されていたプロセスのコンテキストIDとされる。
【0099】
図9の例では、各スナップショットを表す四角形内の文字が、そのスナップショットの名前となっており、例えば、時刻t1に取得されたスナップショットSP1の名前は、そのときに実行されていたプロセスのコンテキストIDである「pid1」とされている。
【0100】
ステップS93では、スナップショットが取得される時点で実行されているプロセスのコンテキストIDをスナップショット名とすることで、得られたスナップショットがどのプロセスのプログラムについてのものであるかを容易に特定することができる。
【0101】
スナップショットが取得されると、ステップS94において、制御部61はプログラムの実行中に障害が発生したか否かを判定する。ステップS94において、障害が発生していないと判定された場合、処理はステップS93に戻り、上述した処理が繰り返される。
【0102】
これに対して、ステップS94において、障害が発生したと判定された場合、ステップS95において、プログラム実行部62は、障害箇所を特定する。
【0103】
具体的には、プログラム実行部62は、障害発生時に実行していたプロセスのコンテキストのコンテキストIDを取得する。また、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の障害発生仮想アドレスを特定し、障害発生仮想アドレス、障害発生アドレス値、およびコンテキストIDを制御部61に供給する。
【0104】
障害発生仮想アドレス、障害発生アドレス値、およびコンテキストIDが制御部61を介して比較部65に供給されると、その後、ステップS96乃至ステップS101の処理が行なわれてプログラム実行処理は終了する。なお、これらの処理は図6のステップS56乃至ステップS61の処理と同様であるので、その説明は省略する。
【0105】
但し、ステップS97では、比較部65は、補助記録装置66に記録されている各時刻のスナップショットのうち、スナップショット名が、制御部61から供給されたコンテキストIDと同じであるスナップショットのみが選択される。つまり、障害が発生したプロセスのプログラム(コンテキスト)が特定されているので、そのプログラムのスナップショットのみを処理対象として解析すれば、迅速かつ確実に直前スナップショットを特定することができる。
【0106】
以上において説明したプログラム実行処理では、例えば図4の矢印A11乃至矢印A17に示す工程で、図6を参照して説明したプログラム実行処理の場合と同様の処理が行われる。但し、スナップショットの取得時には、その取得時に実行されていたプロセスのコンテキストのコンテキストIDが、スナップショット名とされる。
【0107】
そして、プログラム実行中に障害が発生すると、矢印A19の工程では、障害発生要因のポインタpが特定されるとともに、障害発生時に実行していたプロセスのコンテキストのコンテキストIDが取得される。
【0108】
また、ポインタpの値が格納されているメモリ63の仮想アドレス「0xc0000000」と、その仮想アドレスの値「0」とが、それぞれ障害発生仮想アドレスおよび障害発生アドレス値として取得される。この工程は図8のステップS95の処理に対応する。
【0109】
障害箇所が特定されると、矢印A20に示す工程でプログラムの実行が停止され、矢印A21に示す工程でスナップショットの静的な解析が行なわれる。
【0110】
具体的には、取得されたスナップショットSP1乃至スナップショットSP100のうち、矢印A19に示す工程で取得されたコンテキストIDがスナップショット名となっているスナップショットのみが抽出される。また、抽出されたスナップショットが、取得時刻が新しい順に処理対象のスナップショットとされる。
【0111】
さらに、例えばスナップショット内の論物変換テーブルから、障害発生仮想アドレス「0xc0000000」が、障害発生アドレス「0x80000000」に変換される。そして処理対象のスナップショットに含まれる、障害発生アドレス「0x80000000」の値が比較アドレス値とされて、比較アドレス値と障害発生アドレス値「0」との比較が行なわれ、直前スナップショットが特定される。
【0112】
以上のようにして、情報処理装置91は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63の仮想アドレスを物理アドレスに変換し、アドレス値の比較により直前スナップショットを特定する。このように仮想アドレスによりデータが管理される場合でも、スナップショットの静的な解析という簡単な処理で迅速に直前スナップショットを特定し、デバッグ工数を低減させることができる。
【0113】
特に、マルチコンテキストのプログラムを実行する場合でも、スナップショットの取得時に実行していたプロセスのコンテキストのコンテキストIDをスナップショット名とすれば、解析時に処理対象とすべきスナップショットを簡単に特定することができる。
【0114】
〈第4の実施の形態〉
[プログラム実行処理の説明]
第3の実施の形態では、情報処理装置91が実行するプログラムがマルチコンテキストのプログラムであり、障害が発生するプロセスのプログラムが未知である場合を例として説明した。そのため、第3の実施の形態では、各スナップショットが、どのプロセスのプログラムのものであるかを特定するために、コンテキストIDがスナップショット名とされていた。
【0115】
これに対して、実行するマルチコンテキストのプログラムを構成する各プロセスのプログラムのうち、どのプログラムで障害が発生するかが既知である場合もある。そのような場合、スナップショットを生成すべきプログラムが予め特定されているので、そのプログラムのみを対象としてスナップショットを取得するようにすればよい。
【0116】
例えば、マルチコンテキストのプログラムが実行され、そのプログラムを構成する各プロセスのプログラムのうちの障害が発生するプログラムが既知である場合、情報処理装置91は図10に示すプログラム実行処理を行う。
【0117】
以下、図10のフローチャートを参照して、情報処理装置91によるプログラム実行処理について説明する。
【0118】
ステップS131において、情報処理装置91は仮想マシンを起動させる。このとき情報処理装置91は、ユーザにより実行が指定されたプログラムの各プロセスのうち、障害が発生するプロセスのコンテキストのコンテキストIDを、パラメータとして設定し、仮想マシンを起動させる。
【0119】
仮想マシンが起動されると、その後、ステップS132乃至ステップS134の処理が行われるが、これらの処理は図6のステップS52乃至ステップS54の処理と同様であるので、その説明は省略する。
【0120】
但し、ステップS133において、スナップショット生成部64は、仮想マシンの起動時にパラメータとして設定されたコンテキストIDにより特定されるコンテキストを使用するプロセスのプログラムが実行されているときのみスナップショットを取得する。
【0121】
例えば、図11に示すように、障害が発生するプロセスのコンテキストIDが「168」である場合、コンテキストID「168」により特定されるコンテキストのプロセスが実行されているときにだけ、スナップショットが取得される。
【0122】
すなわち、プログラムの実行中、各時刻ti(但し、0≦i≦n)において、コンテキストID「168」により特定されるコンテキスト(プログラム)のスナップショットSPi(但し、0≦i≦n)が取得される。図11の例では、各スナップショットを表す四角形内の文字が、そのスナップショットが取得されたときに実行されていたプロセスのコンテキストIDを示しており、それらのコンテキストIDは全て「168」となっている。
【0123】
このように、ステップS133では、予め指定されたコンテキストIDにより特定される、障害が発生するプロセスのプログラムのスナップショットだけが生成される。これにより、必要なスナップショットだけを生成することができ、処理効率を向上させることができる。
【0124】
ステップS132乃至ステップS134の処理が行われると、ステップS135において、プログラム実行部62は障害箇所を特定する。
【0125】
具体的には、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の障害発生仮想アドレスを特定し、障害発生仮想アドレス、および障害発生アドレス値を制御部61に供給する。
【0126】
障害発生仮想アドレスと障害発生アドレス値が制御部61を介して比較部65に供給されると、その後、ステップS136乃至ステップS141の処理が行なわれてプログラム実行処理は終了する。なお、これらの処理は図6のステップS56乃至ステップS61の処理と同様であるので、その説明は省略する。
【0127】
以上において説明したプログラム実行処理では、例えば図4に示した矢印A11に示す工程で、各プロセスのうち、障害が発生するプロセスのコンテキストID「168」がパラメータとして設定され、仮想マシンが起動される。
【0128】
そして、その後、矢印A12、矢印A13、矢印A15、および矢印A17乃至矢印A21に示す工程が順番に行なわれ、直前スナップショットが特定される。これらの工程では、図6を参照して説明したプログラム実行処理の場合と同様の処理が行われる。
【0129】
但し、プログラムの実行時には、コンテキストID「168」により特定される、障害が発生するプロセスのプログラムが実行されているときにだけ、スナップショットが取得される。これにより、矢印A14、矢印A16、および矢印A18に示すように、スナップショットSP1乃至スナップショットSP100が取得される。
【0130】
以上のようにして、情報処理装置91は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63の仮想アドレスを物理アドレスに変換し、アドレス値の比較により直前スナップショットを特定する。このように仮想アドレスによりデータが管理される場合でも、スナップショットの静的な解析という簡単な処理で迅速に直前スナップショットを特定し、デバッグ工数を低減させることができる。
【0131】
特に、マルチコンテキストのプログラムを実行する場合、障害が発生するプロセスのプログラムが既知であるときには、そのプログラムの実行時にのみスナップショットを取得すれば、解析に必要となるスナップショットだけを簡単に得ることができる。
【0132】
上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
【0133】
コンピュータが実行するプログラムは、例えば、磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)等)、光磁気ディスク、もしくは半導体メモリなどよりなるパッケージメディアである図1のリムーバブルメディア31に記録して、あるいは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の伝送媒体を介して提供される。
【0134】
そして、プログラムは、リムーバブルメディア31をドライブ30に装着することにより、入出力インターフェース25を介して、記録部28にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部29で受信し、記録部28にインストールすることができる。その他、プログラムは、ROM22や記録部28に、あらかじめインストールしておくことができる。
【0135】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【0136】
また、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【0137】
さらに、本技術は、以下の構成とすることも可能である。
【0138】
[1]
指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部と
を備える情報処理装置。
[2]
前記比較部は、前記スナップショットの生成時刻が新しい順に、前記スナップショットに含まれる前記比較データと、前記障害データとを比較していき、前記アドレスの前記比較データが前記障害データとは異なる最初の前記スナップショットを、前記直前に生成された前記スナップショットとする
[1]に記載の情報処理装置。
[3]
前記アドレスは前記記録部の物理アドレスである
[1]または[2]に記載の情報処理装置。
[4]
保持している変換テーブルを用いて、前記記録部の物理アドレスと仮想アドレスの変換を行なうメモリ管理部をさらに備え、
前記スナップショット生成部は、前記記録部の物理アドレスに格納されているデータと、前記メモリ管理部に保持されている前記変換テーブルとを含む前記スナップショットを生成し、
前記取得部は、前記障害データと、前記障害データが格納される前記記録部の仮想アドレスとを取得し、
前記比較部は、前記スナップショットに含まれる前記変換テーブルに基づいて、前記取得部により取得された前記仮想アドレスを、前記記録部の前記物理アドレスに変換するとともに、前記スナップショットに含まれている、変換により得られた前記物理アドレスの前記比較データと、前記障害データとを比較する
[1]または[2]に記載の情報処理装置。
[5]
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成される場合、前記スナップショットの生成時に実行されている前記プロセスのコンテキストを特定するコンテキストIDをスナップショット名とする前記スナップショットを生成し、
前記取得部は、前記障害の発生時に実行されていた前記プロセスの前記コンテキストの前記コンテキストIDをさらに取得し、
前記比較部は、前記取得部により取得された前記コンテキストIDをスナップショット名とする前記スナップショットについて、前記比較データと前記障害データとを比較する
[4]に記載の情報処理装置。
[6]
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成され、前記障害が発生する前記プロセスの前記プログラムが既知である場合、前記障害が発生する前記プロセスの前記プログラムが実行されているときにのみ、前記スナップショットを生成する
[4]に記載の情報処理装置。
【符号の説明】
【0139】
11 情報処理装置, 61 制御部, 62 プログラム実行部, 63 メモリ, 64 スナップショット生成部, 65 比較部, 66 補助記録装置, 91 情報処理装置, 101 メモリ管理部
【技術分野】
【0001】
本技術は情報処理装置および方法、並びにプログラムに関し、特に、デバッグ工数を低減させることができるようにした情報処理装置および方法、並びにプログラムに関する。
【背景技術】
【0002】
従来、プログラムの実行中に障害が発生した場合などに、システムを回復させるためにスナップショットと呼ばれる情報が利用されている(例えば、特許文献1参照)。スナップショットは、プログラムの実行中に、定期的にメモリ内の情報などシステムの回復に必要となる情報、つまりプログラムの再実行に必要となる情報をファイルに格納することで生成される。
【0003】
例えば、スナップショットを用いてシステムを回復させれば、障害発生によるプログラムの異常終了地点、より詳細には、障害が発生する要因となった処理が行なわれた地点を特定することができる。そのため、障害発生の原因を究明しようとする場合に、異常終了地点から最も近い地点に戻って処理を実行することにより、プログラムの実行を最初から実施しなくてすむことになる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開昭58−201152号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上述した技術では、障害発生の原因調査に多くの工数がかかっていた。
【0006】
すなわち、スナップショットを利用してプログラムの異常終了地点を特定しようとする場合、最後に取得されたスナップショットから順番に、スナップショットを用いてシステムを回復させてプログラムを再実行する処理を繰り返し行なう必要があった。このようにスナップショットごとに、システムの回復とプログラムの再実行を行なうと異常終了地点の特定に時間がかかり、デバッグ工数が多くなってしまう。
【0007】
本技術は、このような状況に鑑みてなされたものであり、デバッグ工数を低減させることができるようにするものである。
【課題を解決するための手段】
【0008】
本技術の一側面の情報処理装置は、指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部とを備える。
【0009】
前記比較部には、前記スナップショットの生成時刻が新しい順に、前記スナップショットに含まれる前記比較データと、前記障害データとを比較させていき、前記アドレスの前記比較データが前記障害データとは異なる最初の前記スナップショットを、前記直前に生成された前記スナップショットとさせることができる。
【0010】
前記アドレスを前記記録部の物理アドレスとすることができる。
【0011】
情報処理装置には、保持している変換テーブルを用いて、前記記録部の物理アドレスと仮想アドレスの変換を行なうメモリ管理部をさらに設け、前記スナップショット生成部には、前記記録部の物理アドレスに格納されているデータと、前記メモリ管理部に保持されている前記変換テーブルとを含む前記スナップショットを生成させ、前記取得部には、前記障害データと、前記障害データが格納される前記記録部の仮想アドレスとを取得させ、前記比較部には、前記スナップショットに含まれる前記変換テーブルに基づいて、前記取得部により取得された前記仮想アドレスを、前記記録部の前記物理アドレスに変換させるとともに、前記スナップショットに含まれている、変換により得られた前記物理アドレスの前記比較データと、前記障害データとを比較させることができる。
【0012】
前記スナップショット生成部には、前記指定プログラムが複数のプロセスごとのプログラムから構成される場合、前記スナップショットの生成時に実行されている前記プロセスのコンテキストを特定するコンテキストIDをスナップショット名とする前記スナップショットを生成させ、前記取得部には、前記障害の発生時に実行されていた前記プロセスの前記コンテキストの前記コンテキストIDをさらに取得させ、前記比較部には、前記取得部により取得された前記コンテキストIDをスナップショット名とする前記スナップショットについて、前記比較データと前記障害データとを比較させることができる。
【0013】
前記スナップショット生成部には、前記指定プログラムが複数のプロセスごとのプログラムから構成され、前記障害が発生する前記プロセスの前記プログラムが既知である場合、前記障害が発生する前記プロセスの前記プログラムが実行されているときにのみ、前記スナップショットを生成させることができる。
【0014】
本技術の一側面の情報処理方法またはプログラムは、指定プログラムの実行中に、各時刻のスナップショットを生成し、前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得し、前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定するステップを含む。
【0015】
本技術の一側面においては、指定プログラムの実行中に、各時刻のスナップショットが生成され、前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとが取得され、前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとが比較され、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットが特定される。
【発明の効果】
【0016】
本技術の一側面によれば、デバッグ工数を低減させることができる。
【図面の簡単な説明】
【0017】
【図1】情報処理装置のハードウェアの構成例を示す図である。
【図2】情報処理装置の機能的な構成例を示す図である。
【図3】プログラム実行処理を説明するフローチャートである。
【図4】プログラム実行処理の具体的な処理例を説明する図である。
【図5】情報処理装置の他の機能的な構成例を示す図である。
【図6】プログラム実行処理を説明するフローチャートである。
【図7】論物変換テーブルの一例を示す図である。
【図8】プログラム実行処理を説明するフローチャートである。
【図9】スナップショットの取得について説明する図である。
【図10】プログラム実行処理を説明するフローチャートである。
【図11】スナップショットの取得について説明する図である。
【発明を実施するための形態】
【0018】
以下、図面を参照して、本技術を適用した実施の形態について説明する。
【0019】
〈第1の実施の形態〉
[情報処理装置のハードウェアの構成例]
図1は、本技術を適用した情報処理装置の一実施の形態の構成例を示す図である。
【0020】
この情報処理装置11は、例えばコンピュータなどからなり、情報処理装置11では、CPU(Central Processing Unit)21,ROM(Read Only Memory)22,RAM(Random Access Memory)23が、バス24により相互に接続されている。
【0021】
バス24には、さらに、入出力インターフェース25が接続されている。入出力インターフェース25には、キーボード、マウス、マイクロホンなどよりなる入力部26、ディスプレイ、スピーカなどよりなる出力部27、ハードディスクや不揮発性のメモリなどよりなる記録部28、ネットワークインターフェースなどよりなる通信部29、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア31を駆動するドライブ30が接続されている。
【0022】
例えば、情報処理装置11では、CPU21が、記録部28に記録されているプログラムを、入出力インターフェース25及びバス24を介して、RAM23にロードして実行することにより、各種の処理が行われる。
【0023】
[情報処理装置の機能的構成例]
また、図2は情報処理装置11の機能的な構成例を示す図である。すなわち、情報処理装置11は、制御部61、プログラム実行部62、メモリ63、スナップショット生成部64、比較部65、および補助記録装置66から構成される。
【0024】
例えば、情報処理装置11がホストマシンとして所定の処理をプログラムの実行により行なう場合、制御部61乃至比較部65からなる仮想マシンを起動させ、仮想マシンにプログラムの処理を実行させる。
【0025】
このとき、仮想マシンは、定期的に各時刻のスナップショットを取得し、補助記録装置66に記録させておく。そして、仮想マシンは、プログラムの実行中に障害が発生した場合、補助記録装置66に記録されているスナップショットに基づいて、障害発生の要因となった処理が行なわれた直前の時刻のスナップショットを特定する。さらに、仮想マシンは、特定されたスナップショットに基づいてシステムを回復させ、デバッグを行なう。なお、以下においては、プログラムの実行中に発生する障害の要因は、メモリ63へのデータの上書きであるものとして説明を続ける。
【0026】
このような仮想マシンを構成する制御部61は、仮想マシン全体の動作を制御する。例えば、プログラム実行部62は、制御部61の制御にしたがってプログラムの処理を実行し、プログラムの実行に必要なデータを、メモリ63に記録させたり、メモリ63から読み出したりする。また、プログラム実行部62は、プログラム実行中に障害が発生すると、障害発生の要因となったデータが記録されているメモリ63のアドレスを特定し、特定されたアドレスと、そのアドレスに記録されていたデータとを制御部61を介して比較部65に供給する。
【0027】
なお、以下、メモリ63の所定のアドレスの領域に記録されているデータを、単にアドレスの値とも称することとする。また、障害発生の要因となったデータが記録されているメモリ63のアドレスを障害発生アドレスとも称し、障害発生アドレスの値を障害発生アドレス値とも称することとする。
【0028】
メモリ63は、例えばRAM23などの揮発性のメモリから構成され、プログラム実行部62から供給されたデータを記録したり、記録されているデータをプログラム実行部62に供給したりする。スナップショット生成部64は、制御部61の制御にしたがって、定期的にメモリ63に記録されているデータの内容や、CPU21のレジスタの値等を取得してスナップショットを生成し、補助記録装置66に供給して記録させる。例えば、補助記録装置66は、記録部28やリムーバブルメディア31などの不揮発性の記録媒体から構成される。
【0029】
比較部65は、プログラムの実行中に障害が発生すると、補助記録装置66に記録されているスナップショットと、制御部61から供給された障害発生アドレスおよび障害発生アドレス値とに基づいて、障害発生の要因となった処理が行なわれる直前のスナップショットを特定する。なお、以下、障害発生の要因となった処理の直前のスナップショットを、直前スナップショットと称する。
【0030】
[プログラム実行処理の説明]
次に、情報処理装置11の動作について説明する。情報処理装置11は、所定のプログラムが指定されて、そのプログラムの実行が指示されると、プログラム実行処理を行なって、指定されたプログラムを実行する。以下、図3のフローチャートを参照して、情報処理装置11によるプログラム実行処理について説明する。
【0031】
なお、この例では、情報処理装置11には、例えばMMU(Memory Management Unit)等のメモリ管理部が設けられておらず、プログラム実行中に障害が発生することが予め分かっているものとする。
【0032】
ステップS11において、情報処理装置11は仮想マシンを起動させる。例えば、CPU21が所定のプログラムを実行することで、仮想マシンを構成する制御部61乃至比較部65を実現させる。
【0033】
ステップS12において、プログラム実行部62は、制御部61の制御にしたがってユーザにより指定されたプログラムを実行する。このときプログラム実行部62は、必要に応じてデータをメモリ63に供給して、メモリ63の所定の物理アドレスの領域にデータを記録させたり、メモリ63の所定の物理アドレスの領域からデータを読み出したりする。
【0034】
ステップS13において、スナップショット生成部64は、スナップショットを生成する。例えばスナップショット生成部64は、メモリ63の各物理アドレスのデータや、CPU21のレジスタの値等を取得してスナップショットを生成し、補助記録装置66に供給する。補助記録装置66は、スナップショット生成部64から供給されたスナップショットを時刻順に順序付けて記録する。
【0035】
このようにして得られたスナップショットは、プログラムの処理工程のうち、スナップショットが取得された時点におけるメモリ63の状態等を復元し、その時点からプログラムを再実行できるようにするためのものである。
【0036】
ステップS14において、制御部61はプログラムの実行中に障害が発生したか否かを判定する。ステップS14において、障害が発生していないと判定された場合、処理はステップS13に戻り、上述した処理が繰り返される。すなわち、次の時刻のスナップショットが取得され、補助記録装置66に記録される。
【0037】
これに対して、ステップS14において、障害が発生したと判定された場合、ステップS15において、プログラム実行部62は、障害箇所を特定する。
【0038】
具体的には、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の物理アドレスを障害発生アドレスとして特定し、その障害発生アドレスと障害発生アドレス値を制御部61に供給する。
【0039】
プログラム実行部62から制御部61に障害発生アドレスと障害発生アドレス値が供給されると、ステップS16において、制御部61は、プログラム実行部62を制御してプログラムの実行を停止させる。これにより、実行中のプログラムが停止される。すると、制御部61は、プログラム実行部62から供給された障害発生アドレスと障害発生アドレス値とを比較部65に供給し、障害発生の要因となる処理の実行直前に取得された直前スナップショットの特定を指示する。
【0040】
ステップS17において、比較部65は、補助記録装置66からこれまでに取得されたスナップショットを読み出して、それらのスナップショットのうちの1つを選択する。例えば、最後に取得されたスナップショット、つまり取得された時刻の最も新しいスナップショットから、最初に取得されたスナップショットまで、時刻の新しい順に1つずつスナップショットが選択されていく。
【0041】
ステップS18において、比較部65は、選択したスナップショットに含まれているメモリ63の物理アドレスの値のうち、制御部61から供給された障害発生アドレスと同じ物理アドレスの値と、制御部61から供給された障害発生アドレス値とを比較する。なお、以下、スナップショット(スナップショットイメージ)に含まれている、メモリ63上の障害発生アドレスと同じ物理アドレスの値を、比較アドレス値とも称することとする。
【0042】
ステップS19において、比較部65は、ステップS18の処理で比較した、障害発生アドレス値と比較アドレス値とが異なる値であるか否かを判定する。
【0043】
ここで、ステップS18の処理で障害発生アドレス値と比較された、処理対象のスナップショットの比較アドレス値は、そのスナップショットを取得した時刻において、メモリ63上の障害発生アドレスに格納されていた値(データ)である。
【0044】
この例では、プログラム実行における障害は、メモリ63の所定のアドレスに格納されている値(データ)が、不適切な値に書き換えられることにより生じる。また、障害発生アドレス値は、障害発生時点において障害発生アドレスに格納されている値、すなわち障害発生の要因となった不適切な値である。
【0045】
そのため、処理対象のスナップショットの比較アドレス値が、障害発生アドレス値と同じ値であれば、その比較アドレス値が含まれるスナップショットは、障害発生の要因となった処理により障害発生箇所のアドレス値が上書きされた後の時刻のものである。つまり、目的とする直前スナップショットの取得時刻よりも後の時刻のスナップショットである。
【0046】
これに対して、処理対象のスナップショットの比較アドレス値が、障害発生アドレス値と異なる値であれば、その比較アドレス値が含まれるスナップショットは、障害発生要因の処理により障害発生箇所のアドレス値が上書きされる前の時刻のものである。
【0047】
したがって、各時刻のスナップショットを時刻の新しい順に選択し、比較アドレス値と障害発生アドレス値を比較していったときに、最初に障害発生アドレス値と異なる値となった比較アドレス値が含まれるスナップショットが、直前スナップショットとなる。このように、上述したステップS18では、スナップショットの静的な解析により直前スナップショットを特定することを目的として、比較アドレス値と障害発生アドレス値との比較が行なわれる。
【0048】
ステップS19において、比較アドレス値と障害発生アドレス値が異なる値でないと判定された場合、処理対象のスナップショットは直前スナップショットよりも後の時刻のスナップショットであるので、処理はステップS17に戻り、上述した処理が繰り返される。すなわち、まだ処理対象とされていないスナップショットのうち、最も新しい時刻のスナップショットが新たに選択され、そのスナップショットが直前スナップショットであるかの特定が行なわれる。
【0049】
一方、ステップS19において、比較アドレス値と障害発生アドレス値が異なる値であると判定された場合、比較部65は、処理対象となっているスナップショットを直前スナップショットとして制御部61に供給し、処理はステップS20に進む。
【0050】
ステップS20において、制御部61は、比較部65からの直前スナップショットに基づいてシステムを回復させ、デバッグを行なう。すなわち、制御部61は直前スナップショットに基づいて仮想マシンの各部を制御し、メモリ63やCPU21内のレジスタを直前スナップショットが取得された時点の状態に戻し、デバッグを行なう。そしてデバッグが行なわれると、プログラム実行処理は終了する。
【0051】
以上において説明したプログラム実行処理を具体的な例により説明すると、例えば図4の矢印A11に示すように仮想マシンが起動される。この工程は図3のステップS11の処理に対応する。
【0052】
次に、矢印A12に示すように指定されたプログラムの実行が開始され、その後、定期的にスナップショットが取得されて補助記録装置66に記録されていく。この矢印A12に示す工程は図3のステップS12の処理に対応する。
【0053】
さらに、プログラムの実行が開始され、矢印A13に示すようにプログラムの処理において、所定のポインタpの初期値として所定の値xにより示されるメモリ63上のアドレスの値が設定される。例えば、値xにより示されるアドレスは、メモリ63の物理アドレス「0x80000000」であり、この時点ではこのアドレスの領域には、ポインタpの値として適切な値が格納されているとする。
【0054】
このような矢印A12に示す工程から矢印A13に示す工程の間に、矢印A14に示すように、各時刻のスナップショットSP1乃至スナップショットSP25が取得されたとする。
【0055】
また、ポインタpの初期値が設定されると、続いて矢印A15に示すように、ポインタpの値が初期値から「0」に上書きされる。すなわち、ポインタpの値が格納されているメモリ63上の物理アドレス「0x80000000」の領域の値が、これまで記録されていた値から「0」に書き換えられる。
【0056】
ここで、上書きされた新たなポインタpの値「0」が不適切な値であり、この上書き処理が障害発生の要因となるとする。したがって、上書きされた物理アドレス「0x80000000」が障害発生アドレスとなり、この物理アドレスに格納されている値「0」が障害発生アドレス値となる。
【0057】
このように矢印A13に示したポインタpの初期値の設定から、矢印A15に示したポインタpの上書きが行なわれる間に、矢印A16に示すように、各時刻のスナップショットSP26乃至スナップショットSP50が取得されたとする。
【0058】
さらに、ポインタpの値の上書き後、矢印A17に示すように、所定の値yとして、ポインタpが示す変数の値が設定される。ところが、この時点におけるポインタpの値「0」は値yとして不適切な値であるため、ここで障害が発生する。なお、矢印A15に示す工程から矢印A17に示す工程の間に、矢印A18に示すように、各時刻のスナップショットSP51乃至スナップショットSP100が取得されたとする。
【0059】
矢印A17に示す工程で障害が発生すると、矢印A19に示すように障害発生箇所が特定される。この場合、障害発生の要因となったポインタpが特定され、ポインタpの値が格納されているメモリ63上の物理アドレス「0x80000000」と、そのアドレスの値「0」とが、それぞれ障害発生アドレスおよび障害発生アドレス値として取得される。この工程は図3のステップS15の処理に対応する。
【0060】
そして、障害箇所が特定されると、スナップショットの取得が停止され、矢印A20に示すように、これまで行なわれていたプログラムの実行が停止される。
【0061】
さらに、矢印A21に示すように、これまで取得されたスナップショットが、スナップショットSP100乃至スナップショットSP1の順番で処理対象のスナップショットとされて、スナップショットの静的な解析が行なわれる。この処理が図3のステップS17乃至ステップS19の処理に対応する。
【0062】
具体的には、処理対象のスナップショットに含まれる、障害発生アドレスである物理アドレス「0x80000000」の値が比較アドレス値とされて、比較アドレス値と障害発生アドレス値「0」との比較が行なわれ、直前スナップショットが特定される。この処理により、直前スナップショットとして、障害発生要因となる矢印A15の工程の処理直前に取得されたスナップショットSP50が特定されることになる。
【0063】
以上のようにして、情報処理装置11は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63のアドレスの値を用いた、スナップショットの静的な解析により直前スナップショットを特定する。
【0064】
このように情報処理装置11では、スナップショットの静的な解析という簡単な処理によって迅速に直前スナップショットを特定することができ、これによりデバッグ工数を低減させることができる。すなわち、スナップショットによりシステムを回復させてデバッガによりメモリの値を確認するという動的な処理を、スナップショットごとに行なう必要がなくなるので、障害発生の原因調査のための工数を大幅に短縮させることができる。
【0065】
〈第2の実施の形態〉
[情報処理装置の機能的構成例]
なお、以上においては、情報処理装置11にメモリ管理部が設けられていない場合を例として説明したが、情報処理装置にメモリ管理部が設けられていてもよい。そのような場合、情報処理装置は、例えば図5に示すように構成される。
【0066】
図5は、MMUなどのメモリ管理部が設けられている場合における情報処理装置の機能的な構成例を示す図である。なお、図5において、図2における場合と対応する部分には同一の符号を付してあり、その説明は適宜省略する。
【0067】
情報処理装置91は、制御部61、プログラム実行部62、メモリ63、スナップショット生成部64、比較部65、補助記録装置66、およびメモリ管理部101から構成される。すなわち、図5の情報処理装置91は、図2の情報処理装置11に新たにメモリ管理部101が設けられた構成となっている。
【0068】
情報処理装置91では、プログラム実行部62は、メモリ管理部101を介してメモリ63とのデータの授受を行なう。また、プログラム実行部62は、プログラムの実行中に授受されるデータの格納場所として、メモリ63上の記録領域の仮想的なアドレス(以下、仮想アドレスと称する)を指定する。
【0069】
メモリ管理部101は、例えばメモリ63における記録領域のアドレス管理を行なうMMUなどからなり、メモリ63の物理アドレスと仮想アドレス(論理アドレス)の間のアドレス変換を行なう論物変換テーブルを保持している。また、メモリ管理部101は、保持している論物変換テーブルを用いて、プログラム実行部62とメモリ63との間のデータの授受を管理する。
【0070】
さらに、情報処理装置91では、スナップショット生成部64は、メモリ63に記録されているデータの内容や、CPUのレジスタの値等とともに、メモリ管理部101の論物変換テーブルも取得してスナップショットを生成し、補助記録装置66に供給する。
【0071】
なお、情報処理装置91のハードウェアの構成は、図1に示した情報処理装置11の構成と同様であるので、その図示および説明は省略する。
【0072】
[プログラム実行処理の説明]
次に、図6のフローチャートを参照して、情報処理装置91により行われるプログラム実行処理について説明する。なお、この例では、情報処理装置91により実行されるプログラムはシングルコンテキストであり、プログラム実行中に障害が発生することが予め分かっているものとする。
【0073】
ステップS51において、情報処理装置91は仮想マシンを起動させる。例えば、制御部61乃至比較部65およびメモリ管理部101からなる仮想マシンが起動される。
【0074】
ステップS52において、プログラム実行部62は、制御部61の制御にしたがってユーザにより指定されたプログラムを実行する。
【0075】
このとき、例えばプログラム実行部62はメモリ管理部101に対して、メモリ63の仮想アドレスを指定するとともに、その仮想アドレスに記録させるデータを供給する。するとメモリ管理部101は、指定された仮想アドレスを保持している論物変換テーブルにより物理アドレスに変換する。
【0076】
例えば、メモリ管理部101は図7に示す論物変換テーブルを保持しており、プログラム実行部62により仮想アドレス「0xc0000000」が指定されると、その仮想アドレスを対応する物理アドレス「0x80000000」に変換する。
【0077】
指定された仮想アドレスを物理アドレスに変換すると、メモリ管理部101は、プログラム実行部62から供給されたデータをメモリ63に供給して、そのデータを変換で得られたメモリ63上の物理アドレスに記録させる。
【0078】
また、例えばプログラム実行部62は、メモリ管理部101に対してメモリ63上の仮想アドレスを指定し、その仮想アドレスに格納されているデータの読み出しを指示する。すると、メモリ管理部101は、プログラム実行部62により指定された仮想アドレスを保持している論物変換テーブルを用いて物理アドレスに変換し、その結果得られたメモリ63の物理アドレスからデータを読み出してプログラム実行部62に供給する。
【0079】
ステップS53において、スナップショット生成部64は、スナップショットを生成する。例えばスナップショット生成部64は、メモリ63の各物理アドレスのデータや、CPUのレジスタの値、メモリ管理部101に保持されている論物変換テーブル等を取得してスナップショットを生成し、補助記録装置66に供給する。したがって、補助記録装置66には、論物変換テーブルが含まれるスナップショットが記録されることになる。
【0080】
ステップS54において、制御部61はプログラムの実行中に障害が発生したか否かを判定する。ステップS54において、障害が発生していないと判定された場合、処理はステップS53に戻り、上述した処理が繰り返される。
【0081】
これに対して、ステップS54において、障害が発生したと判定された場合、ステップS55において、プログラム実行部62は、障害箇所を特定する。
【0082】
具体的には、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の仮想アドレス(以下、障害発生仮想アドレスと称する)を特定し、その仮想アドレスと、その仮想アドレスの値である障害発生アドレス値を制御部61に供給する。ここで、障害発生仮想アドレスは、障害発生の要因となったデータが実際に記録されているメモリ63の物理アドレス、つまり障害発生アドレスを示す仮想アドレスである。
【0083】
障害発生仮想アドレスと障害発生アドレス値が制御部61に供給されると、その後、ステップS56およびステップS57の処理が行われるが、これらの処理は図3のステップS16およびステップS17の処理と同様であるので、その説明は省略する。
【0084】
但し、ステップS56では、制御部61は、プログラム実行部62から供給された障害発生仮想アドレスと障害発生アドレス値とを比較部65に供給し、直前スナップショットの特定を指示する。
【0085】
ステップS58において、比較部65は、処理対象のスナップショットに含まれる論物変換テーブルを用いて、制御部61から供給された仮想アドレスである障害発生仮想アドレスを、物理アドレスである障害発生アドレスに変換する。これにより、制御部61から比較部65に供給された障害発生アドレス値が実際に記録されている、メモリ63の物理アドレスが特定される。
【0086】
障害発生アドレスが特定されると、その後、ステップS59乃至ステップS61の処理が行われてプログラム実行処理は終了するが、これらの処理は図3のステップS18乃至ステップS20の処理と同様であるので、その説明は省略する。すなわち、各時刻のスナップショットから障害発生アドレスの値が比較アドレス値として抽出され、比較アドレス値と障害発生アドレス値とが比較されて、直前スナップショットが特定される。
【0087】
以上において説明したプログラム実行処理では、例えば図4に示した矢印A11乃至矢印A17に示す工程で、情報処理装置11による処理と同様の処理が行われる。但し、プログラム実行部62により仮想アドレスが指定されて処理が行なわれる。
【0088】
そして、プログラム実行中に障害が発生すると、矢印A19に示す工程では、障害発生要因のポインタpが特定される。また、ポインタpの値が格納されているメモリ63の仮想アドレス「0xc0000000」と、その仮想アドレスの値「0」とが、それぞれ障害発生仮想アドレスおよび障害発生アドレス値として取得される。この工程は図6のステップS55の処理に対応する。
【0089】
障害箇所が特定されると、矢印A20に示す工程でプログラムの実行が停止され、矢印A21に示す工程でスナップショットの静的な解析が行なわれる。具体的には、取得されたスナップショットが、スナップショットSP100乃至スナップショットSP1の順番で処理対象のスナップショットとされる。
【0090】
また、例えばスナップショットに含まれる図7の論物変換テーブルから、障害発生仮想アドレス「0xc0000000」が、障害発生アドレス「0x80000000」に変換される。つまり、仮想アドレスから物理アドレスへの変換が行なわれる。
【0091】
さらに、処理対象のスナップショットに含まれる、障害発生アドレス「0x80000000」の値が比較アドレス値とされて、比較アドレス値と障害発生アドレス値「0」との比較が行なわれ、直前スナップショットが特定される。
【0092】
以上のようにして、情報処理装置91は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63の仮想アドレスを物理アドレスに変換し、アドレス値の比較により直前スナップショットを特定する。このように仮想アドレスによりデータが管理される場合であっても、スナップショットの静的な解析という簡単な処理で迅速に直前スナップショットを特定し、デバッグ工数を低減させることができる。
【0093】
〈第3の実施の形態〉
[プログラム実行処理の説明]
さらに、第2の実施の形態では、情報処理装置91が実行するプログラムが、シングルコンテキストのプログラムである場合を例として説明したが、実行されるプログラムがマルチコンテキストであってもよい。
【0094】
例えば、マルチコンテキストのプログラムが実行され、そのプログラムを構成する各プロセスのプログラムのうちの障害が発生するプログラムが未知である場合、情報処理装置91は図8に示すプログラム実行処理を行う。この場合においてもプログラム実行中に障害が発生することが予め分かっているものとする。
【0095】
以下、図8のフローチャートを参照して、情報処理装置91によるプログラム実行処理について説明する。なお、ステップS91およびステップS92の処理は図6のステップS51およびステップS52の処理と同様であるので、その説明は省略する。
【0096】
ステップS93において、スナップショット生成部64は、スナップショットを生成する。例えばスナップショット生成部64は、ステップS92で実行を開始したマルチコンテキストのプログラムの各プロセスのうち、現時点で実行されているプロセスのコンテキストを特定する情報を、コンテキストIDとして取得する。具体的には、コンテキストIDは、実行中のプロセスが使用している仮想空間を識別するためにオペレーティングシステムが付与するIDなどである。
【0097】
さらに、スナップショット生成部64は、メモリ63の各物理アドレスのデータや、CPUのレジスタの値、メモリ管理部101に保持されている論物変換テーブル等を取得し、スナップショット名がコンテキストIDであるスナップショットを生成する。スナップショット生成部64は、このようにして得られたスナップショットを補助記録装置66に供給し、記録させる。
【0098】
例えば、図9に示すように、プログラムの実行中、各時刻ti(但し、0≦i≦n)において、スナップショットSPi(但し、0≦i≦n)が取得される。そして、それらのスナップショットSPiの名前が、スナップショットSPiの取得時に実行されていたプロセスのコンテキストIDとされる。
【0099】
図9の例では、各スナップショットを表す四角形内の文字が、そのスナップショットの名前となっており、例えば、時刻t1に取得されたスナップショットSP1の名前は、そのときに実行されていたプロセスのコンテキストIDである「pid1」とされている。
【0100】
ステップS93では、スナップショットが取得される時点で実行されているプロセスのコンテキストIDをスナップショット名とすることで、得られたスナップショットがどのプロセスのプログラムについてのものであるかを容易に特定することができる。
【0101】
スナップショットが取得されると、ステップS94において、制御部61はプログラムの実行中に障害が発生したか否かを判定する。ステップS94において、障害が発生していないと判定された場合、処理はステップS93に戻り、上述した処理が繰り返される。
【0102】
これに対して、ステップS94において、障害が発生したと判定された場合、ステップS95において、プログラム実行部62は、障害箇所を特定する。
【0103】
具体的には、プログラム実行部62は、障害発生時に実行していたプロセスのコンテキストのコンテキストIDを取得する。また、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の障害発生仮想アドレスを特定し、障害発生仮想アドレス、障害発生アドレス値、およびコンテキストIDを制御部61に供給する。
【0104】
障害発生仮想アドレス、障害発生アドレス値、およびコンテキストIDが制御部61を介して比較部65に供給されると、その後、ステップS96乃至ステップS101の処理が行なわれてプログラム実行処理は終了する。なお、これらの処理は図6のステップS56乃至ステップS61の処理と同様であるので、その説明は省略する。
【0105】
但し、ステップS97では、比較部65は、補助記録装置66に記録されている各時刻のスナップショットのうち、スナップショット名が、制御部61から供給されたコンテキストIDと同じであるスナップショットのみが選択される。つまり、障害が発生したプロセスのプログラム(コンテキスト)が特定されているので、そのプログラムのスナップショットのみを処理対象として解析すれば、迅速かつ確実に直前スナップショットを特定することができる。
【0106】
以上において説明したプログラム実行処理では、例えば図4の矢印A11乃至矢印A17に示す工程で、図6を参照して説明したプログラム実行処理の場合と同様の処理が行われる。但し、スナップショットの取得時には、その取得時に実行されていたプロセスのコンテキストのコンテキストIDが、スナップショット名とされる。
【0107】
そして、プログラム実行中に障害が発生すると、矢印A19の工程では、障害発生要因のポインタpが特定されるとともに、障害発生時に実行していたプロセスのコンテキストのコンテキストIDが取得される。
【0108】
また、ポインタpの値が格納されているメモリ63の仮想アドレス「0xc0000000」と、その仮想アドレスの値「0」とが、それぞれ障害発生仮想アドレスおよび障害発生アドレス値として取得される。この工程は図8のステップS95の処理に対応する。
【0109】
障害箇所が特定されると、矢印A20に示す工程でプログラムの実行が停止され、矢印A21に示す工程でスナップショットの静的な解析が行なわれる。
【0110】
具体的には、取得されたスナップショットSP1乃至スナップショットSP100のうち、矢印A19に示す工程で取得されたコンテキストIDがスナップショット名となっているスナップショットのみが抽出される。また、抽出されたスナップショットが、取得時刻が新しい順に処理対象のスナップショットとされる。
【0111】
さらに、例えばスナップショット内の論物変換テーブルから、障害発生仮想アドレス「0xc0000000」が、障害発生アドレス「0x80000000」に変換される。そして処理対象のスナップショットに含まれる、障害発生アドレス「0x80000000」の値が比較アドレス値とされて、比較アドレス値と障害発生アドレス値「0」との比較が行なわれ、直前スナップショットが特定される。
【0112】
以上のようにして、情報処理装置91は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63の仮想アドレスを物理アドレスに変換し、アドレス値の比較により直前スナップショットを特定する。このように仮想アドレスによりデータが管理される場合でも、スナップショットの静的な解析という簡単な処理で迅速に直前スナップショットを特定し、デバッグ工数を低減させることができる。
【0113】
特に、マルチコンテキストのプログラムを実行する場合でも、スナップショットの取得時に実行していたプロセスのコンテキストのコンテキストIDをスナップショット名とすれば、解析時に処理対象とすべきスナップショットを簡単に特定することができる。
【0114】
〈第4の実施の形態〉
[プログラム実行処理の説明]
第3の実施の形態では、情報処理装置91が実行するプログラムがマルチコンテキストのプログラムであり、障害が発生するプロセスのプログラムが未知である場合を例として説明した。そのため、第3の実施の形態では、各スナップショットが、どのプロセスのプログラムのものであるかを特定するために、コンテキストIDがスナップショット名とされていた。
【0115】
これに対して、実行するマルチコンテキストのプログラムを構成する各プロセスのプログラムのうち、どのプログラムで障害が発生するかが既知である場合もある。そのような場合、スナップショットを生成すべきプログラムが予め特定されているので、そのプログラムのみを対象としてスナップショットを取得するようにすればよい。
【0116】
例えば、マルチコンテキストのプログラムが実行され、そのプログラムを構成する各プロセスのプログラムのうちの障害が発生するプログラムが既知である場合、情報処理装置91は図10に示すプログラム実行処理を行う。
【0117】
以下、図10のフローチャートを参照して、情報処理装置91によるプログラム実行処理について説明する。
【0118】
ステップS131において、情報処理装置91は仮想マシンを起動させる。このとき情報処理装置91は、ユーザにより実行が指定されたプログラムの各プロセスのうち、障害が発生するプロセスのコンテキストのコンテキストIDを、パラメータとして設定し、仮想マシンを起動させる。
【0119】
仮想マシンが起動されると、その後、ステップS132乃至ステップS134の処理が行われるが、これらの処理は図6のステップS52乃至ステップS54の処理と同様であるので、その説明は省略する。
【0120】
但し、ステップS133において、スナップショット生成部64は、仮想マシンの起動時にパラメータとして設定されたコンテキストIDにより特定されるコンテキストを使用するプロセスのプログラムが実行されているときのみスナップショットを取得する。
【0121】
例えば、図11に示すように、障害が発生するプロセスのコンテキストIDが「168」である場合、コンテキストID「168」により特定されるコンテキストのプロセスが実行されているときにだけ、スナップショットが取得される。
【0122】
すなわち、プログラムの実行中、各時刻ti(但し、0≦i≦n)において、コンテキストID「168」により特定されるコンテキスト(プログラム)のスナップショットSPi(但し、0≦i≦n)が取得される。図11の例では、各スナップショットを表す四角形内の文字が、そのスナップショットが取得されたときに実行されていたプロセスのコンテキストIDを示しており、それらのコンテキストIDは全て「168」となっている。
【0123】
このように、ステップS133では、予め指定されたコンテキストIDにより特定される、障害が発生するプロセスのプログラムのスナップショットだけが生成される。これにより、必要なスナップショットだけを生成することができ、処理効率を向上させることができる。
【0124】
ステップS132乃至ステップS134の処理が行われると、ステップS135において、プログラム実行部62は障害箇所を特定する。
【0125】
具体的には、プログラム実行部62は、障害発生の要因となったデータが記録されているメモリ63の障害発生仮想アドレスを特定し、障害発生仮想アドレス、および障害発生アドレス値を制御部61に供給する。
【0126】
障害発生仮想アドレスと障害発生アドレス値が制御部61を介して比較部65に供給されると、その後、ステップS136乃至ステップS141の処理が行なわれてプログラム実行処理は終了する。なお、これらの処理は図6のステップS56乃至ステップS61の処理と同様であるので、その説明は省略する。
【0127】
以上において説明したプログラム実行処理では、例えば図4に示した矢印A11に示す工程で、各プロセスのうち、障害が発生するプロセスのコンテキストID「168」がパラメータとして設定され、仮想マシンが起動される。
【0128】
そして、その後、矢印A12、矢印A13、矢印A15、および矢印A17乃至矢印A21に示す工程が順番に行なわれ、直前スナップショットが特定される。これらの工程では、図6を参照して説明したプログラム実行処理の場合と同様の処理が行われる。
【0129】
但し、プログラムの実行時には、コンテキストID「168」により特定される、障害が発生するプロセスのプログラムが実行されているときにだけ、スナップショットが取得される。これにより、矢印A14、矢印A16、および矢印A18に示すように、スナップショットSP1乃至スナップショットSP100が取得される。
【0130】
以上のようにして、情報処理装置91は、プログラムの実行中に障害が発生すると、障害発生要因である上書き処理が行なわれたメモリ63の仮想アドレスを物理アドレスに変換し、アドレス値の比較により直前スナップショットを特定する。このように仮想アドレスによりデータが管理される場合でも、スナップショットの静的な解析という簡単な処理で迅速に直前スナップショットを特定し、デバッグ工数を低減させることができる。
【0131】
特に、マルチコンテキストのプログラムを実行する場合、障害が発生するプロセスのプログラムが既知であるときには、そのプログラムの実行時にのみスナップショットを取得すれば、解析に必要となるスナップショットだけを簡単に得ることができる。
【0132】
上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
【0133】
コンピュータが実行するプログラムは、例えば、磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)等)、光磁気ディスク、もしくは半導体メモリなどよりなるパッケージメディアである図1のリムーバブルメディア31に記録して、あるいは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の伝送媒体を介して提供される。
【0134】
そして、プログラムは、リムーバブルメディア31をドライブ30に装着することにより、入出力インターフェース25を介して、記録部28にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部29で受信し、記録部28にインストールすることができる。その他、プログラムは、ROM22や記録部28に、あらかじめインストールしておくことができる。
【0135】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【0136】
また、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【0137】
さらに、本技術は、以下の構成とすることも可能である。
【0138】
[1]
指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部と
を備える情報処理装置。
[2]
前記比較部は、前記スナップショットの生成時刻が新しい順に、前記スナップショットに含まれる前記比較データと、前記障害データとを比較していき、前記アドレスの前記比較データが前記障害データとは異なる最初の前記スナップショットを、前記直前に生成された前記スナップショットとする
[1]に記載の情報処理装置。
[3]
前記アドレスは前記記録部の物理アドレスである
[1]または[2]に記載の情報処理装置。
[4]
保持している変換テーブルを用いて、前記記録部の物理アドレスと仮想アドレスの変換を行なうメモリ管理部をさらに備え、
前記スナップショット生成部は、前記記録部の物理アドレスに格納されているデータと、前記メモリ管理部に保持されている前記変換テーブルとを含む前記スナップショットを生成し、
前記取得部は、前記障害データと、前記障害データが格納される前記記録部の仮想アドレスとを取得し、
前記比較部は、前記スナップショットに含まれる前記変換テーブルに基づいて、前記取得部により取得された前記仮想アドレスを、前記記録部の前記物理アドレスに変換するとともに、前記スナップショットに含まれている、変換により得られた前記物理アドレスの前記比較データと、前記障害データとを比較する
[1]または[2]に記載の情報処理装置。
[5]
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成される場合、前記スナップショットの生成時に実行されている前記プロセスのコンテキストを特定するコンテキストIDをスナップショット名とする前記スナップショットを生成し、
前記取得部は、前記障害の発生時に実行されていた前記プロセスの前記コンテキストの前記コンテキストIDをさらに取得し、
前記比較部は、前記取得部により取得された前記コンテキストIDをスナップショット名とする前記スナップショットについて、前記比較データと前記障害データとを比較する
[4]に記載の情報処理装置。
[6]
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成され、前記障害が発生する前記プロセスの前記プログラムが既知である場合、前記障害が発生する前記プロセスの前記プログラムが実行されているときにのみ、前記スナップショットを生成する
[4]に記載の情報処理装置。
【符号の説明】
【0139】
11 情報処理装置, 61 制御部, 62 プログラム実行部, 63 メモリ, 64 スナップショット生成部, 65 比較部, 66 補助記録装置, 91 情報処理装置, 101 メモリ管理部
【特許請求の範囲】
【請求項1】
指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部と
を備える情報処理装置。
【請求項2】
前記比較部は、前記スナップショットの生成時刻が新しい順に、前記スナップショットに含まれる前記比較データと、前記障害データとを比較していき、前記アドレスの前記比較データが前記障害データとは異なる最初の前記スナップショットを、前記直前に生成された前記スナップショットとする
請求項1に記載の情報処理装置。
【請求項3】
前記アドレスは前記記録部の物理アドレスである
請求項2に記載の情報処理装置。
【請求項4】
保持している変換テーブルを用いて、前記記録部の物理アドレスと仮想アドレスの変換を行なうメモリ管理部をさらに備え、
前記スナップショット生成部は、前記記録部の物理アドレスに格納されているデータと、前記メモリ管理部に保持されている前記変換テーブルとを含む前記スナップショットを生成し、
前記取得部は、前記障害データと、前記障害データが格納される前記記録部の仮想アドレスとを取得し、
前記比較部は、前記スナップショットに含まれる前記変換テーブルに基づいて、前記取得部により取得された前記仮想アドレスを、前記記録部の前記物理アドレスに変換するとともに、前記スナップショットに含まれている、変換により得られた前記物理アドレスの前記比較データと、前記障害データとを比較する
請求項2に記載の情報処理装置。
【請求項5】
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成される場合、前記スナップショットの生成時に実行されている前記プロセスのコンテキストを特定するコンテキストIDをスナップショット名とする前記スナップショットを生成し、
前記取得部は、前記障害の発生時に実行されていた前記プロセスの前記コンテキストの前記コンテキストIDをさらに取得し、
前記比較部は、前記取得部により取得された前記コンテキストIDをスナップショット名とする前記スナップショットについて、前記比較データと前記障害データとを比較する
請求項4に記載の情報処理装置。
【請求項6】
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成され、前記障害が発生する前記プロセスの前記プログラムが既知である場合、前記障害が発生する前記プロセスの前記プログラムが実行されているときにのみ、前記スナップショットを生成する
請求項4に記載の情報処理装置。
【請求項7】
指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部と
を備える情報処理装置の情報処理方法であって、
前記スナップショット生成部が前記スナップショットを生成し、
前記取得部が前記障害データと前記アドレスを取得し、
前記比較部が前記比較データと前記障害データとを比較する
ステップを含む情報処理方法。
【請求項8】
指定プログラムの実行中に、各時刻のスナップショットを生成し、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得し、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する
ステップを含む処理をコンピュータに実行させるプログラム。
【請求項1】
指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部と
を備える情報処理装置。
【請求項2】
前記比較部は、前記スナップショットの生成時刻が新しい順に、前記スナップショットに含まれる前記比較データと、前記障害データとを比較していき、前記アドレスの前記比較データが前記障害データとは異なる最初の前記スナップショットを、前記直前に生成された前記スナップショットとする
請求項1に記載の情報処理装置。
【請求項3】
前記アドレスは前記記録部の物理アドレスである
請求項2に記載の情報処理装置。
【請求項4】
保持している変換テーブルを用いて、前記記録部の物理アドレスと仮想アドレスの変換を行なうメモリ管理部をさらに備え、
前記スナップショット生成部は、前記記録部の物理アドレスに格納されているデータと、前記メモリ管理部に保持されている前記変換テーブルとを含む前記スナップショットを生成し、
前記取得部は、前記障害データと、前記障害データが格納される前記記録部の仮想アドレスとを取得し、
前記比較部は、前記スナップショットに含まれる前記変換テーブルに基づいて、前記取得部により取得された前記仮想アドレスを、前記記録部の前記物理アドレスに変換するとともに、前記スナップショットに含まれている、変換により得られた前記物理アドレスの前記比較データと、前記障害データとを比較する
請求項2に記載の情報処理装置。
【請求項5】
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成される場合、前記スナップショットの生成時に実行されている前記プロセスのコンテキストを特定するコンテキストIDをスナップショット名とする前記スナップショットを生成し、
前記取得部は、前記障害の発生時に実行されていた前記プロセスの前記コンテキストの前記コンテキストIDをさらに取得し、
前記比較部は、前記取得部により取得された前記コンテキストIDをスナップショット名とする前記スナップショットについて、前記比較データと前記障害データとを比較する
請求項4に記載の情報処理装置。
【請求項6】
前記スナップショット生成部は、前記指定プログラムが複数のプロセスごとのプログラムから構成され、前記障害が発生する前記プロセスの前記プログラムが既知である場合、前記障害が発生する前記プロセスの前記プログラムが実行されているときにのみ、前記スナップショットを生成する
請求項4に記載の情報処理装置。
【請求項7】
指定プログラムの実行中に、各時刻のスナップショットを生成するスナップショット生成部と、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得する取得部と、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する比較部と
を備える情報処理装置の情報処理方法であって、
前記スナップショット生成部が前記スナップショットを生成し、
前記取得部が前記障害データと前記アドレスを取得し、
前記比較部が前記比較データと前記障害データとを比較する
ステップを含む情報処理方法。
【請求項8】
指定プログラムの実行中に、各時刻のスナップショットを生成し、
前記指定プログラムの実行中に障害が発生した場合、前記障害の発生要因となった障害データと、前記障害データが格納される記録部のアドレスとを取得し、
前記スナップショットに含まれる前記アドレスの比較データと、前記障害データとを比較し、前記障害の発生要因となった処理が行われる直前に生成された前記スナップショットを特定する
ステップを含む処理をコンピュータに実行させるプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2012−256279(P2012−256279A)
【公開日】平成24年12月27日(2012.12.27)
【国際特許分類】
【出願番号】特願2011−130005(P2011−130005)
【出願日】平成23年6月10日(2011.6.10)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
【公開日】平成24年12月27日(2012.12.27)
【国際特許分類】
【出願日】平成23年6月10日(2011.6.10)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
[ Back to top ]