(57)【要約】【課題】特定のメモリ領域のアドレストレースを高速に採取すること。【解決手段】プロテクトされたメモリ領域のアドレストレースを採取するアドレストレース採取装置において、インストラクションが前記メモリ領域にアクセスしようとした場合に発生するセグメンテーションフォールトを捕捉するセグメンテーションフォールト捕捉機構と、前記メモリ領域のプロテクトを一時的に解除するためのメモリプロテクション解除機構と、前記インストラクションを模擬実行するインストラクション模擬実行機構と、模擬実行されたインストラクションがアクセスしたメモリ領域のアドレストレースを出力するアドレストレース出力機構と、前記メモリプロテクション解除機構により一時的に解除された前記メモリ領域のプロテクトを再度プロテクトするメモリプロテクション機構と、を具備する。【選択図】図１
2007140837.tif 000002
【特許請求の範囲】
【請求項１】
プロテクトされたメモリ領域のアドレストレースを採取するアドレストレース採取装置において、
インストラクションが前記メモリ領域にアクセスしようとした場合に発生するセグメンテーションフォールトを捕捉するセグメンテーションフォールト捕捉機構と、
前記メモリ領域のプロテクトを一時的に解除するためのメモリプロテクション解除機構と、
前記インストラクションを模擬実行するインストラクション模擬実行機構と、
模擬実行されたインストラクションがアクセスしたメモリ領域のアドレストレースを出力するアドレストレース出力機構と、
前記メモリプロテクション解除機構により一時的に解除された前記メモリ領域のプロテクトを再度プロテクトするメモリプロテクション機構と、
を具備することを特徴とするアドレストレース採取装置。
【請求項２】
前記インストラクション模擬実行機構は、
前記インストラクションをデコードし、該インストラクションのデコード結果に応じて、レジスタの値またはメモリの値の取得、取得したレジスタの値またはメモリの値を用いた計算、計算結果に応じたフラグ処理、およびレジスタの値またはメモリの値の更新の少なくともいずれかを行うことを特徴とする請求項１記載のアドレストレース採取装置。
【請求項３】
プロテクトされたメモリ領域のアドレストレースを採取するアドレストレース採取方法において、
インストラクションが前記メモリ領域にアクセスしようとした場合に発生するセグメンテーションフォールトを捕捉するステップと、
前記メモリ領域のプロテクトを一時的に解除するステップと、
前記インストラクションを模擬実行するステップと、
模擬実行されたインストラクションがアクセスしたメモリ領域のアドレストレースを出力するステップと、
一時的に解除された前記メモリ領域のプロテクトを再度プロテクトするステップと、
プログラムカウンタを次に実行すべきインストラクションへ進めるステップと、
前記次に実行すべきインストラクションからの実行を再開するステップと、
を有することを特徴とするアドレストレース採取方法。
【請求項４】
前記インストラクションの模擬実行において、
前記インストラクションをデコードし、
該インストラクションのデコード結果に応じて、レジスタの値またはメモリの値の取得、取得したレジスタの値またはメモリの値を用いた計算、計算結果に応じたフラグ処理、およびレジスタの値またはメモリの値の更新の少なくともいずれかを行うことを特徴とする請求項３記載のアドレストレース採取方法。
【請求項５】
プロテクトされたメモリ領域のアドレストレースを採取するアドレストレース採取プログラムにおいて、
インストラクションが前記メモリ領域にアクセスしようとした場合に発生するセグメンテーションフォールトを捕捉する手順と、
前記メモリ領域のプロテクトを一時的に解除する手順と、
前記インストラクションを模擬実行する手順と、
模擬実行されたインストラクションがアクセスしたメモリ領域のアドレストレースを出力する手順と、
一時的に解除された前記メモリ領域のプロテクトを再度プロテクトする手順と、
プログラムカウンタを次に実行すべきインストラクションへ進める手順と、
前記次に実行すべきインストラクションからの実行を再開する手順と、
をコンピュータに実行させるためのアドレストレース採取プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は例えば組み込みシステムなどにおいてアドレストレースを採取するための装置、方法、及びプログラムに関する。
【背景技術】
【０００２】
アドレストレースは、実行中のプロセス（ソフトウェア）がメモリのどのアドレスにアクセスしたかの履歴である。コンパイラによる分岐予測の解析、キャッシュ構成の探索など、ソフトウェアやハードウェアの最適化のためのプロファイルデータとしてアドレストレースは頻繁に利用される。プロセスがアクセスする全てのデータを対象とするアドレストレースは、特定のアーキテクチャをシミュレートするインストラクションセット・シミュレータ上での実行履歴に基づいて採取可能である。あるいは、専用ハードウェアによりアドレスバスを監視することによっても採取可能である。
【０００３】
近年、大量のデータを処理するマルチメディア処理が一般的になり、プロセス内の特定のメモリ領域だけに対するアドレストレースを採取する必要が生じている。この種のアドレストレース採取方法としては、例えばＵＮＩＸ（登録商標）システムで一般的に使用される、ＧＮＵ  ＧＤＢなどのデバッガで使われている手法を応用する方法がある（例えば下記非特許文献１を参照）。この方法では、デバッガプロセスがターゲットプロセスをアタッチし、アドレス空間の操作や実行の制御を行う。
【０００４】
従来の方法によるアドレストレース採取の具体的な処理の手順は例えば以下の通りである。
【０００５】
１．ユーザがアドレストレース採取を開始する時に、アドレストレースを採取するメモリ領域をプロテクトする。
【０００６】
２．ターゲットプロセスが、プロテクトされているメモリ領域へアクセスするインストラクションを実行しようとすると、セグメンテーションフォールトが発生する。これをデバッガプロセスが捕捉し、例外処理へ遷移する。
【０００７】
３．デバッガプロセスが、セグメンテーションフォールトが発生したメモリ領域の、プロテクトを解除する。
【０００８】
４．デバッガプロセスが、アクセス前のメモリ領域の状態を取得する。
【０００９】
５．デバッガプロセスが、ターゲットプロセスをシングルステップ実行モードに切替え、一旦、通常処理へ遷移する。
【００１０】
６．ターゲットプロセスで、インストラクションを１つ実行した直後に、ＳＩＧＴＲＡＰが発生する。再び、デバッガプロセスがこれを捕捉し、例外処理へ遷移する。
【００１１】
７．デバッガプロセスが、アクセス後のメモリ領域の状態を取得する。
【００１２】
８．デバッガプロセスが、アクセス前後のメモリ領域の状態を比較し、アドレストレースを出力する。
【００１３】
９．デバッガプロセスが、３．でプロテクトを解除したメモリ領域を再度、プロテクトする。
【００１４】
１０．デバッガプロセスが、ターゲットプロセスのシングルステップ実行モードを終了させる。
【００１５】
１１．通常処理へ遷移し、セグメンテーションフォールトを発生させた次のインストラクションから実行を再開する。
【００１６】
この方法は、例外処理への遷移が最低２回発生する。また、例外処理はデバッガプロセスで行わなければならないため、プロセス切替えが最低４回発生する。したがって、処理が低速である。
【非特許文献１】中村明，相田仁，計  宇生，小池汎平  共訳，「ＵＮＩＸ４．３ＢＳＤの設計と実装」，ｐｐ．１０６−１０８，丸善株式会社，ＩＳＢＮ４−６２１−０３６０７−６，１９９１．(原著:S.J.Leffler, M.K.McKusick, M.J.Karels, and J.S. Quarterman,"The Design and Implementation of the 4.3BSD UNIX Operating System," Addison-Wesley, ISBN 0-201-06196-1, 1989.)
【発明の開示】
【発明が解決しようとする課題】
【００１７】
例外処理への遷移を１回で済ませることができ、例外処理を一つのプロセス内で行うことができれば、プロセス切替えが不要となり好ましい。
【００１８】
このような観点から本発明は、例外処理への遷移を１回で済ませることによりアドレストレースを高速に採取することのできるアドレストレース採取装置、方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１９】
本発明の一態様に係るアドレストレース採取装置は、プロテクトされたメモリ領域のアドレストレースを採取するアドレストレース採取装置において、インストラクションが前記メモリ領域にアクセスしようとした場合に発生するセグメンテーションフォールトを捕捉するセグメンテーションフォールト捕捉機構と、前記メモリ領域のプロテクトを一時的に解除するためのメモリプロテクション解除機構と、前記インストラクションを模擬実行するインストラクション模擬実行機構と、模擬実行されたインストラクションがアクセスしたメモリ領域のアドレストレースを出力するアドレストレース出力機構と、前記メモリプロテクション解除機構により一時的に解除された前記メモリ領域のプロテクトを再度プロテクトするメモリプロテクション機構と、を具備することを特徴とするアドレストレース採取装置である。
【発明の効果】
【００２０】
本発明によれば、アドレストレースを高速に採取することのできるアドレストレース採取装置、方法、及びプログラムを提供できる。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照しながら本発明の実施形態を説明する。
【００２２】
図１は、本発明の一実施形態に係るコンピュータシステムの構成を示すブロック図である。同図に示されるように、本発明に係るアドレストレース採取を実現するための機能実現手段としてアドレストレース採取ライブラリ１を具備する。 
アドレストレース採取ライブラリ１は、大別するとメモリ管理機構３とアドレストレース採取機構４とを有する。メモリ管理機構３はメモリプロテクション解除機構３０とメモリプロテクション機構３１とを有する。アドレストレース採取機構４は、セグメンテーションフォールト捕捉機構４０と、アドレストレース出力機構４１と、インストラクション模擬実行機構４２とを有する。
【００２３】
アドレストレースを採取する対象のユーザプログラム２には、アドレストレース採取ライブラリ１（以下、「ライブラリ１」という）がリンクされ、アドレストレースの採取を行えるようにする。これによりアドレストレース採取の動作を同じプロセス内で行うことができる。
【００２４】
図２は、本発明の一実施形態に係るコンピュータシステムにおけるアドレストレース採取の流れを示したものである。
【００２５】
１．ユーザがアドレストレース採取を開始する時に、ライブラリ１に対し、アドレストレースを採取するメモリ６内の特定の領域（以下「メモリ領域」という）を指示する。ライブラリ１は、指示されたメモリ領域をプロテクトする。
【００２６】
２．プロセスが、プロテクトされているメモリ領域へアクセスするインストラクションを実行しようとすると、セグメンテーションフォールトが発生する。ライブラリ１内のハンドラがこれを捕捉し、例外処理へ遷移する。
【００２７】
３．ライブラリ１は、セグメンテーションフォールトが発生したメモリ領域のプロテクトを解除する。
【００２８】
４．ライブラリ１が、セグメンテーションフォールトを発生させたインストラクションをデコードし、それを模擬実行する。
【００２９】
５．ライブラリ１が、そのインストラクションがアクセスしたメモリ領域のアドレスを把握し、アドレストレースを出力する。
【００３０】
６．ライブラリ１が、３．でプロテクト解除したメモリ領域を再度、プロテクトする。
【００３１】
７．通常処理へ遷移し、セグメンテーションフォールトを発生させたインストラクションの次のインストラクションから実行を再開する。
【００３２】
比較例として、従来の方法によるアドレストレース採取の流れを図３に示す。
【００３３】
以下、図１に示される構成を詳細に説明する。
【００３４】
・セグメンテーションフォールト捕捉機構  
プロテクトされているメモリ領域にアクセスするインスラクションを実行しようとすると、セグメンテーションフォールトが発生する。これにより本来の処理は停止し、例外処理へ遷移する。セグメンテーションフォールト捕捉機構４０は、予め設定した例外処理ハンドラにより、これを捕捉する。つまり、オペレーティング・システム（ＯＳ）５によって例外処理ハンドラが呼び出される。このハンドラ内でアドレストレースを採取する。また、アドレストレースを採取した後、通常処理へ再び遷移し、次のインストラクションから実行を再開させる。
【００３５】
図４は、セグメンテーションフォールト捕捉機構における処理手順を示すフローチャートである。
【００３６】
まず、メモリプロテクション解除機構３０はインストラクションがアクセスしようとしたメモリ領域のプロテクトを一旦解除する（ステップＳ４１）。これにより、インストラクションの模擬実行が行えるようになる。
【００３７】
次に、インストラクション模擬実行機構４２は模擬実行を行う（ステップＳ４２）。ここで、アドレストレース採取領域であるかを判定し（ステップＳ４３）、ＹＥＳであるならば、アドレストレース出力機構４１はアドレストレースを出力する（ステップＳ４４）。
【００３８】
次に、メモリプロテクション機構３１は、ステップＳ４１において一旦プロテクト解除されたメモリ領域を、再度、プロテクトする（ステップＳ４５）。
【００３９】
最後に、プログラムカウンタを、次に実行すべきインストラクションへ進め（ステップＳ４６）、例外処理ハンドラの処理を終了する。
【００４０】
例外処理が終わると、プログラム２は通常処理に戻り、次に実行すべきインストラクションから実行を再開する。
【００４１】
・インストラクション模擬実行機構  
インストラクション模擬実行機構４２は、セグメンテーションフォールトを起こしたインストラクションをデコードする。そして、その処理を模擬し、レジスタやメモリ領域に、そのインストラクションによって起こる変化を反映させる。
【００４２】
図５及び図６は、インストラクションの構造の例である。インストラクションは、オペコードとオペランドから成る。オペコードは、それがどのようなインストラクションかを示すビット列である。オペランドは、そのインストラクションの処理対象となるメモリ領域のアドレスや、レジスタを示すビット列である。オペランドには即値が指定される場合もある。即値は、数値が直接記述されているビット列である。
【００４３】
例外処理が行われている間、通常処理のコンテクストはメモリ６などの領域へ退避されている。模擬実行によりレジスタの値を取得・変更する場合、この退避されているコンテクストへアクセスする必要がある。例外処理が終わるとこのコンテクストは元に戻され、変更した内容が反映される。
【００４４】
図７は、インストラクション模擬実行機構における処理手順を示すフローチャートである。
【００４５】
まず、どのような処理を行うべきか把握するため、インストラクションをデコード（解析）する（ステップＳ７１）。
【００４６】
インストラクションをデコードした結果、レジスタ値が必要であることが判明した場合は、インストラクション模擬実行機構４２は通常処理のコンテクストからレジスタ値を取得する（ステップＳ７２＝ＹＥＳ，ステップＳ７３）。
【００４７】
インストラクションをデコードした結果、メモリ値が必要であることが判明した場合、インストラクション模擬実行機構４２はメモリ６へアクセスし、必要なメモリ値を取得する（ステップＳ７４＝ＹＥＳ，ステップＳ７５）。
【００４８】
インストラクションをデコードした結果、加減乗除や論理演算などの計算が必要であることが判明した場合、インストラクション模擬実行機構４２は上記ステップにおいて取得した値を用いて計算を実行する（ステップＳ７６＝ＹＥＳ，ステップＳ７７）。その計算によってフラグを変更する必要がある場合、インストラクション模擬実行機構４２はフラグレジスタ値を更新し、その値を、通常処理のコンテクストへ格納する（ステップＳ７８＝ＹＥＳ，ステップＳ７９）。
【００４９】
また、レジスタ値を更新する必要があれば、インストラクション模擬実行機構４２はその値を通常処理のコンテクストへ格納することによりレジスタ値を更新する（ステップＳ８０＝ＹＥＳ，ステップＳ８１）。
【００５０】
最後に、メモリ値を更新する必要があれば、インストラクション模擬実行機構４２は該当するメモリ領域の値を更新する。
【００５１】
インストラクション模擬実行の具体例をいくつか示す。
【００５２】
図８は、インストラクション模擬実行機構の処理手順の一例を示すフローチャートであって、この例では、“ＡＤＤ  （０ｘ８０００），ＥＡＸ”を模擬実行する。このインストラクションは、メモリ６の０ｘ８０００番地に格納されている値とＥＡＸレジスタに格納されている値とを加算し、結果を０ｘ８０００番地へ格納せよ、というものである。インストラクションの構造は図５に示したものと同様である。
【００５３】
（ステップＳ８１）オペコードのビット列をデコードすることにより、インストラクション“ＡＤＤ”を検出するとともに、オペランドのビット列をデコードすることにより、このインストラクションは、メモリ６の０ｘ８０００番地に格納されている値とＥＡＸレジスタに格納されている値とを加算するものであることを検出する。
【００５４】
（ステップＳ８２）メモリ６の０ｘ８０００番地に格納されている値を取得する。
【００５５】
（ステップＳ８３）通常処理のコンテクストから、ＥＡＸレジスタの値を取得する。
【００５６】
（ステップＳ８４）取得した０ｘ８０００番地に格納されている値とＥＡＸレジスタの値とを加算する（加算実行）。
【００５７】
（ステップＳ８５）加算結果の値により、フラグレジスタ値を更新し、その値を、通常処理のコンテクストへ格納する。例えば、結果がゼロならばゼロフラグを１にする、キャリーが発生したならばキャリーフラグを１にする、などの処理を行う。
【００５８】
（ステップＳ８６）加算結果の値をメモリ６の０ｘ８０００番地へ格納する。
【００５９】
図９はインストラクション模擬実行機構の処理手順の別の例を示すフローチャートであって、この例では、“ＡＤＤ  ＥＡＸ，（０ｘ８０００）”を模擬実行する。このインストラクションは、メモリ６の０ｘ８０００番地に格納されている値とＥＡＸレジスタに格納されている値を加算し、結果をＥＡＸレジスタへ格納せよ、というものである。インストラクションの構造は図５に示したものと同様である。
【００６０】
（ステップＳ９１）オペコードのビット列をデコードすることにより、インストラクション“ＡＤＤ”を検出するとともに、オペランドのビット列をデコードすることにより、このインストラクションは、ＥＡＸレジスタに格納されている値とメモリ６の０ｘ８０００番地に格納されている値とを加算するものであることを検出する。
【００６１】
（ステップＳ９２）メモリ６の０ｘ８０００番地に格納されている値を取得する。
【００６２】
（ステップＳ９３）通常処理のコンテクストから、ＥＡＸレジスタの値を取得する。
【００６３】
（ステップＳ９４）取得した０ｘ８０００番地に格納されている値とＥＡＸレジスタの値とを加算する（加算実行）。
【００６４】
（ステップＳ９５）加算結果の値により、フラグレジスタ値を更新し、その値を、通常処理のコンテクストへ格納する。例えば、結果がゼロならばゼロフラグを１にする、キャリーが発生したならばキャリーフラグを１にする、などの処理を行う。
【００６５】
（ステップＳ９６）加算結果の値を、ＥＡＸレジスタの値として、通常処理のコンテクストへ格納する。
【００６６】
図１０は、インストラクション模擬実行機構の処理手順のさらに別の例を示すフローチャートであって、この例では、“ＡＤＤ  （０ｘ８０００），１００”を模擬実行する。このインストラクションは、メモリ６の０ｘ８０００番地に格納されている値と即値「１００」とを加算し、結果を０ｘ８０００番地へ格納せよ、というものである。インストラクションの構造は図６に示したものと同様である。
【００６７】
（ステップＳ１０１）オペコードのビット列をデコードすることにより、インストラクション“ＡＤＤ”を検出するとともに、オペランドのビット列をデコードすることにより、このインストラクションは、メモリ６の０ｘ８０００番地に格納されている値と即値「１００」とを加算するものであることを検出する。
【００６８】
（ステップＳ１０２）メモリ６の０ｘ８０００番地に格納されている値を取得する。
【００６９】
（ステップＳ１０３）即値である「１００」という値を取得する。
【００７０】
（ステップＳ１０４）取得した０ｘ８０００番地に格納されている値と即値「１００」とを加算する（加算実行）。
【００７１】
（ステップＳ１０５）加算結果の値により、フラグレジスタ値を更新し、その値を、通常処理のコンテクストへ格納する。例えば、結果がゼロならばゼロフラグを１にする、キャリーが発生したならばキャリーフラグを１にする、などの処理を行う。
【００７２】
（ステップＳ１０６）加算結果の値をメモリ６の０ｘ８０００番地へ格納する。
【００７３】
図１１は、インストラクション模擬実行機構の処理手順のさらに別の例を示すフローチャートであって、この例では、“ＭＯＶ  （０ｘ８０００），ＥＡＸ”を模擬実行する。このインストラクションは、ＥＡＸレジスタに格納されている値を、メモリ６の０ｘ８０００番地へコピーせよ、というものである。インストラクションの構造は図５に示したものと同様である。
【００７４】
（ステップＳ１１１）オペコードのビット列をデコードすることにより、インストラクション“ＭＯＶ”を検出するとともに、オペランドのビット列をデコードすることにより、このインストラクションは、ＥＡＸレジスタに格納されている値を、メモリ６の０ｘ８０００番地へコピーするものであることを検出する。
【００７５】
（ステップＳ１１２）通常処理のコンテクストから、ＥＡＸレジスタの値を取得する。
【００７６】
（ステップＳ１１３）取得したＥＡＸレジスタの値をメモリ６の０ｘ８０００番地へ格納する。
【００７７】
図１２は、インストラクション模擬実行機構の処理手順のさらに別の例を示すフローチャートであって、この例では、“ＭＯＶ  ＥＡＸ，（０ｘ８０００）”を模擬実行する。このインストラクションは、メモリ６の０ｘ８０００番地に格納されている値をＥＡＸレジスタへコピーせよ、というものである。インストラクションの構造は図５に示したものと同様である。
【００７８】
（ステップＳ１２１）オペコードのビット列をデコードすることにより、インストラクション“ＭＯＶ”を検出するとともに、オペランドのビット列をデコードすることにより、このインストラクションは、メモリ６の０ｘ８０００番地に格納されている値をＥＡＸレジスタへコピーするものであることを検出する。
【００７９】
（ステップＳ１２２）メモリ６の０ｘ８０００番地に格納されている値を取得する。
【００８０】
（ステップＳ１２３）取得したメモリ６の０ｘ８０００番地に格納されている値をＥＡＸレジスタの値として、通常処理のコンテクストへ格納する。
【００８１】
図１３は、インストラクション模擬実行機構の処理手順のさらに別の例を示すフローチャートであって、この例では、“ＭＯＶ  （０ｘ８０００），１００”を模擬実行する。このインストラクションは、即値「１００」をメモリ６の０ｘ８０００番地へコピーせよ、というものである。インストラクションの構造は図６に示したものと同様である。
【００８２】
（ステップＳ１３１）オペコードのビット列をデコードすることにより、インストラクション“ＭＯＶ”を検出するとともに、オペランドのビット列をデコードすることにより、このインストラクションは、即値「１００」をメモリ６の０ｘ８０００番地へコピーするものであることを検出する。
【００８３】
（ステップＳ１３２）即値である「１００」という値を取得する。
【００８４】
（ステップＳ１３３）取得した即値をメモリ６の０ｘ８０００番地へ格納する。
【００８５】
・アドレストレース出力機構  
アドレストレース出力機構４１は、該当するメモリ領域がアドレストレース採取対象であるか否かを判断し、採取対象であればアドレストレースをファイルなどに出力する。メモリプロテクションは、システムによっては一定サイズ単位でしか行うことができない。その単位は、アドレストレース採取対象のメモリ領域とは必ずしも一致しない。ゆえに、アドレストレースの出力前に、このような判断を行う必要がある。
【００８６】
・メモリプロテクション機構  
メモリプロテクション機構３１は、ユーザプログラム２から呼び出される。ユーザが指示した、アドレストレースを採取したいメモリ領域をプロテクトする。なお、メモリプロテクション機構３１は、ユーザプログラム２のみならずセグメンテーションフォールト捕捉機構４０からも呼び出される。インストラクションの模擬を行うために、プロテクトを解除したメモリ領域を再度、プロテクトする。
【００８７】
・メモリプロテクション解除機構  
メモリプロテクション解除機構３０は、ユーザプログラム２から呼び出される。ユーザが指示した、アドレストレースの採取が不要となったメモリ領域のプロテクトを解除する。なお、メモリプロテクション解除機構３０は、ユーザプログラム２のみならずセグメンテーションフォールト捕捉機構４０からも呼び出される。インストラクションの模擬を行うために、そのインストラクションがアクセスしようとするメモリ領域のプロテクトを解除する。
【００８８】
以上説明した本発明の実施形態によれば、アドレストレースを採取する対象のユーザプログラム２に対し、アドレストレース採取ライブラリ１がリンクされ、アドレストレースの採取を行えることから、アドレストレース採取の動作を同じプロセス内で行うことができる。
【００８９】
また、セグメンテーションフォールト捕捉機構４０に連動するインストラクション模擬実行機構４２を備える本発明の実施形態では、図２と図３の比較からも明らかなように、アドレストレースを採取する例外処理と通常処理との間の状態遷移が少ないことから、本発明の実施形態においてはアドレストレース採取の処理を高速化できる。
【００９０】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００９１】
【図１】本発明の一実施形態に係るコンピュータシステムの構成を示すブロック図
【図２】本発明による、アドレストレース採取を説明するための図
【図３】従来の手法によるアドレストレース採取を説明するための図
【図４】セグメンテーションフォールト捕捉機構における処理手順を示すフローチャート
【図５】インストラクションの構造例を示す図
【図６】インストラクションの構造のうち、即値を持つ例を示す図
【図７】インストラクション模擬実行機構における処理手順を示すフローチャート
【図８】ＡＤＤ（レジスタからメモリへの代入）を処理する場合の、インストラクション模擬実行機構の処理手順を示すフローチャート
【図９】ＡＤＤ（メモリからレジスタへの代入）を処理する場合の、インストラクション模擬実行機構の処理手順を示すフローチャート
【図１０】ＡＤＤ（即値からメモリへの代入）を処理する場合の、インストラクション模擬実行機構の処理手順を示すフローチャート
【図１１】ＭＯＶ（レジスタからメモリへの代入）を処理する場合の、インストラクション模擬実行機構の処理手順を示すフローチャート
【図１２】ＭＯＶ（メモリからレジスタへの代入）を処理する場合の、インストラクション模擬実行機構の処理手順を示すフローチャート
【図１３】ＭＯＶ（即値からメモリへの代入）を処理する場合の、インストラクション模擬実行機構の処理手順を示すフローチャート
【符号の説明】
【００９２】
１…アドレストレース採取ライブラリ；
２…ユーザプログラム；
３…メモリ管理機構；
４…アドレストレース採取機構；
５…オペレーティング・システム（ＯＳ）；
６…メモリ
【図１】
2007140837.tif 000003
【図２】
2007140837.tif 000004
【図３】
2007140837.tif 000005
【図４】
2007140837.tif 000006
【図５】
2007140837.tif 000007
【図６】
2007140837.tif 000008
【図７】
2007140837.tif 000009
【図８】
2007140837.tif 000010
【図９】
2007140837.tif 000011
【図１０】
2007140837.tif 000012
【図１１】
2007140837.tif 000013
【図１２】
2007140837.tif 000014
【図１３】
2007140837.tif 000015