(57)【要約】      （修正有）【課題】メモリ破壊の原因を容易に判断する。【解決手段】ＣＰＵインターフェース３５２は、仮想ＣＰＵから制御情報を受信して、監視アドレス先頭レジスタ３５３、監視サイズレジスタ３５４、およびログ出力制御フラグレジスタ３５５に格納する。ログ出力制御回路３５６は、仮想ＣＰＵ、仮想ＤＭＡコントローラ、および仮想デバイスからメモリアクセス情報を受信し、ログ出力制御フラグレジスタ３５５に格納された制御フラグに応じて、ログ４０１を出力すると判定した場合、監視アドレス先頭レジスタおよび監視サイズレジスタから、監視先頭アドレスおよび監視サイズを取得し、メモリアクセス情報に含まれるライトアドレスが監視先頭アドレスから監視アドレスに監視サイズを加算した値の範囲（監視領域）に含まれている場合、メモリアクセス情報をログ４０１として出力する。【選択図】図２
2013196241.tif 000002
【特許請求の範囲】
【請求項１】
処理装置と、仮想マシンに割り当てられた仮想メモリを含むメモリと、を備える情報処理装置であって、
前記処理装置は、
プログラムを実行し、前記仮想メモリに対して書き込みを行い、前記仮想メモリに対する書き込みに関する第１のメモリアクセス情報を出力する仮想処理部と、
前記仮想処理部から書き込み命令を受信し、前記仮想メモリに対して書き込みを行い、前記仮想メモリに対する書き込みに関する第２のメモリアクセス情報を出力する仮想デバイス部と、
前記第１および前記第２のメモリアクセス情報を受信し、前記第１および前記第２のメモリアクセス情報をログとして出力するログ出力制御部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記第１および前記第２のメモリアクセス情報は、前記仮想メモリに対する書き込みのライトアドレスを含み、
前記仮想処理部は、前記ログ出力制御部が監視する仮想メモリの領域を示す領域情報を出力し、
前記ログ出力制御部は、前記領域情報を格納し、前記ライトアドレスが前記領域情報で示される領域内である場合に、前記１および前記第２のメモリアクセス情報を出力することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記仮想処理部は、前記プログラムが動的に確保した領域を示す情報を前記領域情報として出力することを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
前記第１のメモリアクセス情報は、プログラムカウンタ値、命令コード、およびライトデータをさらに含み、
前記第２のメモリアクセス情報は、ライトデータ、該ライトデータのサイズ、および前記仮想デバイスを示す情報をさらに含むことを特徴とする請求項２または３記載の情報処理装置。
【請求項５】
仮想マシンに割り当てられた仮想メモリを含むメモリを備える情報処理装置が実行するログ取得方法であって、
プログラムを実行し、前記仮想メモリに対して書き込みを行い、前記仮想メモリに対する書き込みに関する第１のメモリアクセス情報を出力し、
前記仮想メモリに対して書き込みを行い、前記仮想メモリに対する書き込みに関する第２のメモリアクセス情報を出力し、
前記第１および前記第２のメモリアクセス情報を受信し、前記第１および前記第２のメモリアクセス情報をログとして出力する
ことを特徴とするログ取得方法。
【請求項６】
前記第１および前記第２のメモリアクセス情報は、前記仮想メモリに対する書き込みのライトアドレスを含み、
前記第１および前記第２のメモリアクセス情報をログとして出力する処理において、監視する仮想メモリの領域を示す領域情報を参照し、前記ライトアドレスが前記領域情報で示される領域内である場合に、前記１および前記第２のメモリアクセス情報を出力することを特徴とする請求項５記載のログ取得方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびログ取得方法に関する。
【背景技術】
【０００２】
プログラム開発において、調査・解析が長期化する障害の一つに不正なメモリ操作等によるデータの改変、いわゆるメモリ破壊がある。
監視するべきメモリアドレスが特定できるケースでは、そのアドレスに着目して動作ログを収集・蓄積して解析できるが、バッファのように動的にリソースを獲得して使用するようなメモリの場合は、メモリアドレスが特定できず、動的に使用するメモリリソースを使用する全てのプログラムを対象に調査する必要がある。また、ログ領域の制約があるため、調査対象をプログラム１つに絞って動作確認を繰り返し、原因元をつぶし込む調査方法を採っている。
【０００３】
マルチプロセスや、マルチスレッド等、複数のプロセスを制御するようなプログラムでは、個々のプロセスでメモリ操作を行うため、一つのスレッドの中身を追いかけていても、問題(障害)を特定出来ないケースがあった。
【０００４】
また、Central Processing Unit（ＣＰＵ）以外にもメモリ操作が出来るデバイス、例えばDirect Memory Access（ＤＭＡ）コントローラ等が存在するため、調査する範囲が広域化し、原因を特定する有効な手段が存在しない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−１９９８４５号公報
【特許文献２】特開２００７−２７２３０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
１つの側面では、本発明は、メモリ破壊の原因を容易に判断可能とすることを目的とする。
【課題を解決するための手段】
【０００７】
実施の形態の情報処理装置は、処理装置と、仮想マシンに割り当てられた仮想メモリを含むメモリと、を備える。
前記処理装置は、仮想処理部と、仮想デバイス部と、ログ出力制御部と、を備える。
【０００８】
仮想処理部は、プログラムを実行し、前記仮想メモリに対して書き込みを行い、前記仮想メモリに対する書き込みに関する第１のメモリアクセス情報を出力する。
仮想デバイス部は、前記処理部から書き込み命令を受信し、前記仮想メモリに対して書き込みを行い、前記仮想メモリに対する書き込みに関する第２のメモリアクセス情報を出力する。
【０００９】
ログ出力制御部は、前記第１および前記第２のメモリアクセス情報を受信し、前記第１および前記第２のメモリアクセス情報をログとして出力する。
【発明の効果】
【００１０】
実施の形態の情報処理装置によれば、メモリ破壊の原因を容易に判断することが出来る。
【図面の簡単な説明】
【００１１】
【図１】実施の形態に係る情報処理装置の構成図である。
【図２】実施の形態に係るログ出力制御部の構成図である。
【図３】ログの例を示す図である。
【図４】出力制御指示のライブラリを示す図である。
【図５Ａ】仮想ＣＰＵの処理のフローチャートである。
【図５Ｂ】仮想ＤＭＡコントローラの処理のフローチャートである。
【図５Ｃ】仮想デバイスの処理のフローチャートである。
【図６】実施の形態に係るログ出力制御部の処理のフローチャートである。
【図７】情報処理装置（コンピュータ）の構成図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら実施の形態について説明する。
図１は、実施の形態に係る情報処理装置の構成図である。
情報処理装置１０１は、ホストOperating System（ＯＳ）２０１、仮想マシン３０１を備える。
【００１３】
情報処理装置１０１は、例えば、パーソナルコンピュータ等のコンピュータである。
ホストＯＳ２０１は、情報処理装置１０１にインストールされたＯＳである。
【００１４】
仮想マシン３０１は、ホストＯＳ２０１上で動作する仮想的なコンピュータであり、コンピュータをエミュレートするソフトウェアにより実現される。仮想マシン３０１は、情報処理装置１０１が備えるCentral Processing Unit（ＣＰＵ）がコンピュータをエミュレートするソフトウェアを読み出して、実行することにより実現される。
【００１５】
仮想マシン３０１は、仮想ＣＰＵ３１１、仮想ＤＭＡコントローラ３２１、仮想デバイス３３１、仮想アービター３４１、ログ出力制御部３５１、仮想メモリ３６１、および仮想バス３７１を備える。
【００１６】
仮想ＣＰＵ３１１、仮想ＤＭＡコントローラ３２１、仮想デバイス３３１、仮想アービター３４１、ログ出力制御部３５１、および仮想メモリ３６１は、仮想バス３７１を介して接続されている。
【００１７】
仮想ＣＰＵ３１１は、プログラムを仮想メモリ３６１から読み出して実行し、仮想メモリへのアクセス（書き込みおよび読み出し）を行う。
【００１８】
仮想ＣＰＵ３１１は、仮想ＤＭＡコントローラ３２１および仮想デバイス３３１に仮想メモリ３６１へのアクセス命令を出力する。
【００１９】
仮想ＣＰＵ３１１は、ログ出力制御部３５１に制御情報を出力する。制御情報には、監視先頭アドレス、監視サイズ、制御フラグが含まれる。
【００２０】
仮想ＣＰＵ３１１は、仮想メモリ３６１に対して書き込みを行う際の情報（メモリアクセス情報）を出力する。仮想ＣＰＵ３１１が出力するメモリアクセス情報には、書込みが発生したときのプログラムカウンタ（ＰＣ）値、命令コード、ライトアドレス、およびライトデータが含まれる。
【００２１】
ＰＣ値は、仮想ＣＰＵ３１１が次に実行する命令が格納されたメモリのアドレスである。
命令コードは、仮想ＣＰＵ３１１が実行した命令コードである。
【００２２】
ライトアドレスは、書き込み先の仮想メモリ３６１のアドレスである。
ライトデータは、書き込んだデータの値である。
【００２３】
仮想ＤＭＡコントローラ３２１は、仮想ＣＰＵ３１１から仮想メモリ３６１へのアクセス命令を受信し、仮想ＣＰＵ３１１を介さずに仮想メモリ３６１へのアクセス（書き込みおよび読み出し）を行う。仮想ＤＭＡコントローラ３２１は、仮想メモリ３６１に対して書き込みを行う際の情報（メモリアクセス情報）を出力する。仮想ＤＭＡコントローラ３２１が出力するメモリアクセス情報には、ライトアドレス、ライトデータ、データサイズ、アクセス元情報、およびソースの行番号が含まれる。
【００２４】
ライトアドレスは、書き込み先の仮想メモリ３６１のアドレスである。
ライトデータは、書き込んだデータの値である。
データサイズは、ライトデータのサイズである。
【００２５】
アクセス元情報は、例えば、デバイス名などの仮想ＤＭＡコントローラ３２１を示す情報である。
ソースの行番号は、仮想メモリ３６１への書き込み時において実行された仮想ＤＭＡコントローラ３２１をエミュレートしているプログラムの行番号である。
【００２６】
仮想デバイス３３１は、仮想マシン３０１が備える周辺デバイス（例えば、Serial Advanced Technology Attachment（SATA）コントローラ）である。仮想デバイス３３１は、仮想ＣＰＵ３１１から仮想メモリ３６１へのアクセス命令を受信し、仮想ＣＰＵ３１１を介さずに仮想メモリ３６１へのアクセス（書き込みおよび読み出し）を行う。
【００２７】
仮想デバイス３３１は、仮想メモリ３６１に対して書き込みを行う際の情報（メモリアクセス情報）を出力する。
【００２８】
仮想デバイス３３１が出力するメモリアクセス情報には、ライトアドレス、ライトデータ、データサイズ、アクセス元情報（例えば、デバイス名などの仮想デバイス３３１を示す情報）、およびソースの行番号が含まれる。
【００２９】
ライトアドレスは、書き込み先の仮想メモリ３６１のアドレスである。
ライトデータは、書き込んだデータの値である。
データサイズは、ライトデータのサイズである。
【００３０】
アクセス元情報は、例えば、デバイス名などの仮想デバイス３３１を示す情報である。
ソースの行番号は、仮想メモリ３６１への書き込み時において実行された仮想デバイス３３１をエミュレートしているプログラムの行番号である。
【００３１】
仮想アービター３４１は、仮想ＣＰＵ３１１、仮想ＤＭＡコントローラ３２１、および仮想デバイス３１１に対する仮想メモリ３６１への書き込みの許可制御を行う。
【００３２】
ログ出力制御部３５１は、受信したメモリアクセス情報をログ４０１として出力する。出力されたログ４０１は、例えば、情報処理装置が備える記憶装置、例えば、磁気ディスク装置や半導体記憶装置に格納される。また、ログ４０１の内容は、以前に出力されたログに追加されていく。
【００３３】
情報処理装置１０１が備える記憶装置に格納されたログは、情報処理装置１０１が出力指示を受けたことを契機として、情報処理装置１０１が備えるディスプレイ装置等に表示される。
【００３４】
仮想メモリ３６１は、仮想マシン３０１に割り当てられた仮想メモリである。仮想メモリ３６１は、情報処理装置１０１が備える（物理）メモリの一部である。
【００３５】
図２は、実施の形態に係るログ出力制御部の構成図である。
ログ出力制御部３５１は、ＣＰＵインターフェース３５２、監視アドレス先頭レジスタ３５３、監視サイズレジスタ３５４、ログ出力制御フラグレジスタ３５５、およびログ出力制御回路３５６を備える。
【００３６】
ＣＰＵインターフェース３５２は、仮想ＣＰＵ３１１から制御情報を受信する。制御情報には、監視先頭アドレス、監視サイズ、制御フラグが含まれる。
【００３７】
監視アドレス先頭レジスタ３５３は、ログ出力制御回路３５６が監視する仮想メモリ３６１の領域の先頭のアドレス値（監視先頭アドレス）を格納する。
【００３８】
監視サイズレジスタ３５４は、ログ出力制御回路３５６が監視する仮想メモリ３６１の領域のサイズ情報（監視サイズ）を格納する。
【００３９】
ログ出力制御フラグレジスタ３５５は、ログ出力制御回路３５６の動作を制御する制御フラグを格納する。
【００４０】
ログ出力制御回路３５６は、仮想ＣＰＵ３１１、仮想ＤＭＡコントローラ３２１、および仮想デバイス３３１からメモリアクセス情報を受信する。
【００４１】
ログ出力制御回路３５６は、ログ出力制御フラグレジスタ３５５を参照し、ログ出力制御フラグレジスタ３５５に格納された制御フラグに応じて、ログ４０１を出力するか否か判定する。例えば、ログ出力制御フラグレジスタ３５５に制御フラグとして“１”が格納されている場合、ログ出力制御回路３５６はログを出力すると判定し、“０”が格納されている場合、ログ出力制御回路３５６はログを出力しないと判定する。
【００４２】
ログ出力制御回路３５６は、ログを出力すると判定した場合、監視アドレス先頭レジスタ３５３および監視サイズレジスタ３５４を参照し、監視先頭アドレスおよび監視サイズを取得する。ログ出力制御回路３５６は、メモリアクセス情報に含まれるライトアドレスが監視先頭アドレスから監視アドレスに監視サイズを加算した値の範囲（監視領域）に含まれるか否か判定する。そして、ライトアドレスが監視領域に含まれている場合、メモリアクセス情報をログ４０１として出力する。尚、監視先頭アドレスおよび監視サイズがNULLの場合、すなわち監視領域が指定されていない場合、ログ出力制御回路３５６は、メモリアクセス情報をログ４０１として出力する。
【００４３】
図３は、ログの例を示す図である。
図３に示すログ４０１の１および２行目には仮想ＣＰＵ３１１から受信したアクセス情報が記述され、３および４行目には仮想ＤＭＡコントローラ３２１から受信したアクセス情報が記述され、５〜７行目には仮想デバイス３３１から受信したアクセス情報が記述されている。
【００４４】
ログ４０１の１および２行目には、プログラムカウンタ（ＰＣ）値、命令コード、ライトアドレス、およびライトデータが記述されている。PC、op_code、addr、およびvalは、それぞれ、ＰＣ値、命令コード、ライトアドレス、およびライトデータを示す。
【００４５】
ログ４０１の３〜７行目には、ライトアドレス、ライトデータ、データサイズ、アクセス元情報、およびソースの行番号が記述されている。addr、val、およびlenは、それぞれ、ライトアドレス、ライトデータ、およびデータサイズを示す。
【００４６】
尚、アクセス元情報として記述されているdev.cは、仮想デバイス３３１を示し、dma.cは仮想ＤＭＡコントローラ３２１を示している。
【００４７】
次に、仮想マシン３０１で実行する検証対象となるプログラム（被検証対象プログラム）について説明する。
【００４８】
被検証対象プログラムには、ログ出力制御部３５１へ制御情報を出力する出力制御指示が含まれている。
【００４９】
図４は、出力制御指示のライブラリを示す図である。
出力制御指示（log_ctl）には、引数として、監視先頭アドレス(start_addr)、監視サイズ(size)、制御フラグ（trace_flag）が与えられる。
【００５０】
監視先頭アドレスは、ログ出力制御回路３５６が監視する仮想メモリ３６１の領域の先頭のアドレス値である。
【００５１】
監視サイズは、ログ出力制御回路３５６が監視する仮想メモリ３６１の領域のサイズである。
制御フラグは、ログ出力制御回路３５６の動作を制御するフラグである。
【００５２】
log_ctlは、以下の３つのステップを実行する。
（１）ログ出力制御部３５１の監視アドレス先頭レジスタ３５３に監視先頭アドレス(start_addr)を書き込む。
（２）ログ出力制御部３５１の監視サイズレジスタ３５４に監視サイズ(size)を書き込む。
（３）ログ出力制御部３５１のログ出力制御フラグレジスタ３５５に制御フラグ（trace_flag）を書き込む。
【００５３】
出力制御指示（log_ctl）を用いた実施の形態に係るログ取得の方法について説明する。ユーザは、log_ctlを呼び出す関数を被検証プログラムに追加する。
【００５４】
ログ出力制御回路３５６にログの出力を開始させたい場合、すなわちログ出力開始指示を行いたい場合、log_ctlの引数の制御フラグに“１”を与える。
【００５５】
ログ出力制御回路３５６にログの出力を終了させたい場合、すなわち、ログ出力終了指示を行いたい場合、log_ctlの引数の制御フラグに“０”を与える。
ユーザは、被検証対象プログラムの調査対象箇所（例えば、メモリ破壊の被疑箇所）の開始ステップの前に、「ログ出力開始指示」を予め記述しておく。
【００５６】
また、ユーザは、被検証対象プログラムの調査対象箇所（例えば、メモリ破壊の被疑箇所）の終了ステップの前に、「ログ出力終了指示」を予め記述しておく。
【００５７】
「ログ出力開始指示」および「ログ出力終了指示」では、監視先頭アドレス(start_addr)として、動的に獲得して使用するメモリリソースを特定する変数を与え、監視サイズ(size)として、監視したい領域のサイズを与える。
【００５８】
例えば、「ログ出力開始指示」を実行させたい場合、被検証対象プログラムの調査対象箇所の開始ステップの前に、下記命令を記述する。
log_ctl(&variable, size, 1)
【００５９】
“&variable”は監視先頭アドレス、 “size”は監視サイズ、 “1”は制御フラグを示す。“&variable”は、被検証プログラムで確保された仮想メモリ３６１の領域の先頭のアドレスを示す。
【００６０】
また、監視する領域が特定できていない場合、ユーザは被検証プログラムに「ログ出力開始指示」として
log_ctl(NULL, NULL, 1)
を記述し、
「ログ出力終了指示」として
log_ctl(NULL, NULL, 0)
を記述する。
【００６１】
このように、監視先頭アドレス(start_addr)および監視サイズ(size)にNULLを指定することで、ログ出力制御回路３５６は、受信した全てのメモリアクセス情報をログ４０１として出力する。
【００６２】
また、被検証プログラムにおいて、「malloc」や「free」等の関数を用いて動的にメモリ領域の確保および解放された領域に対するログをログ出力制御回路３５６に出力させたい場合、下記のような命令を被検証プログラムに追加する。
ptr = malloc(SIZE);
log_ctl( ptr, SIZE, 1)
…
…
log_ctl( ptr, SIZE, 0)
free(ptr)
【００６３】
上記命令について説明すると、先ずmalloc(SIZE)により、サイズが“SIZE”である領域が確保され、該領域の先頭のアドレスを示すポインタがptrに格納される。
【００６４】
log_ctl( ptr, SIZE, 1)により、「ログ出力開始指示」が行われ、ログ出力制御回路３５６は、ptrからSIZE分の領域に対するメモリアクセス情報をログとして出力する。
【００６５】
log_ctl( ptr, SIZE, 0)により、「ログ出力終了指示」が行われ、ログ出力制御回路３５６は、ptrからSIZE分の領域に対するメモリアクセス情報の出力を停止する。
【００６６】
free(ptr)により、ptrで示される領域が解放される。
上記のような、出力制御指示（log_ctl）を被検証プログラムに記述することで、動的に確保された領域に対する監視を行うことが出来る。
【００６７】
図５Ａは、仮想ＣＰＵの処理のフローチャートである。
仮想ＣＰＵ３１１は、被検証対象プログラムに記述された命令をリードし、該命令を実行する（ステップＳ６０１）。命令としては、例えば、上述の出力制御指示、仮想メモリ３６１に対するデータの書き込み、仮想ＤＭＡコントローラ３２１または仮想デバイス３３１へ仮想メモリ３６１へのアクセス命令がある。尚、仮想ＣＰＵ３１１は、仮想メモリ３６１に対して書き込みを行う場合、メモリアクセス情報を出力する。
【００６８】
仮想ＣＰＵ３１１は、割り込み処理等を行い（ステップＳ６０２）、ディスパッチ処理（ステップＳ６０３）を行う。
【００６９】
図５Ｂは、仮想ＤＭＡコントローラの処理のフローチャートである。
仮想ＤＭＡコントローラ３２１は、仮想ＣＰＵ３１１から仮想メモリ３６１へのアクセス命令を受信し、転送元の仮想メモリ３６１からデータをリードし、転送先の仮想メモリ３６１へデータを書き込む。尚、仮想ＤＭＡコントローラ３２１は、仮想メモリ３６１に対して書き込みを行う場合、メモリアクセス情報を出力する。仮想ＤＭＡコントローラ３２１は、割り込み処理等を行う（ステップＳ６１１）。
【００７０】
図５Ｃは、仮想デバイスの処理のフローチャートである。
仮想デバイス３３１は、仮想ＣＰＵ３１１から仮想メモリ３６１へのアクセス命令を受信し、転送先の仮想メモリ３６１へデータを書き込み、割り込み処理等を行う（ステップＳ６２１）。尚、仮想デバイス３３１は、仮想メモリ３６１に対して書き込みを行う場合、メモリアクセス情報を出力する。
【００７１】
図６は、実施の形態に係るログ出力制御部の処理のフローチャートである。
ステップＳ５０１において、ログ出力制御回路３５６は、仮想ＣＰＵ３１１、仮想ＤＭＡコントローラ３２１、または仮想デバイス３１１からメモリアクセス情報を受信する。
【００７２】
ステップＳ５０２において、ログ出力制御回路３５６は、ログ出力制御フラグ３５５に格納されている制御フラグが“１”であるか否かチェックする。制御フラグが“１”である場合、制御はステップＳ５０３に進み、制御フラグが“０”である場合、制御はステップＳ５０１に戻る。また、制御フラグが“０”である場合、ログ出力制御回路３５６は、受信したアクセス情報を破棄する。
【００７３】
ステップＳ５０３において、ログ出力制御回路３５６は、メモリアクセス情報に含まれるライトアドレスを参照する。
【００７４】
ステップＳ５０４において、ログ出力制御回路３５６は、監視アドレス先頭レジスタ３５３および監視サイズレジスタ３５４を参照し、監視先頭アドレスおよび監視サイズを取得する。そして、ログ出力制御回路３５６は、メモリアクセス情報に含まれるライトアドレスが監視先頭アドレスから監視アドレスに監視サイズを加算した値の範囲（監視領域）に含まれるか否か判定する。
【００７５】
ライトアドレスが監視領域に含まれている場合、制御はステップＳ５０５に進み、ライトアドレスが監視領域外の場合、制御はステップＳ５０１に戻る。また、監視先頭アドレスおよび監視サイズがNULLの場合、すなわち監視領域が指定されていない場合、制御はステップＳ５０５に進む。
【００７６】
ステップＳ５０５において、ログ出力制御回路３５６は、メモリアクセス情報をログ４０１として出力する。
【００７７】
実施の形態の情報処理装置によれば、メモリにアクセスする全てのデバイス（ＣＰＵ、ＤＭＡコントローラ等）をトレースし、１つのログファイルに出力している。ユーザは、該ログファイルを検証することで破壊元を容易に判断することが出来、障害解析時間を短縮することが出来る。
【００７８】
実施の形態の情報処理装置によれば、ログ出力制御部への制御情報で仮想メモリの監視領域を限定することで、ログ出力制御部が出力するログのサイズが小さくなる。また、ログ出力制御部の処理が限定化するので、情報処理装置１０１の負荷が小さくなり、エミュレーション時間が大きく増えないという効果がある。
【００７９】
図７は、情報処理装置（コンピュータ）の構成図である。
実施の形態の情報処理装置１０１は、例えば、図７に示すような情報処理装置１によって実現される。
【００８０】
情報処理装置１は、CPU２、メモリ３、入力部４、出力部５、記憶部６、記録媒体駆動部７、およびネットワーク接続部８を備え、それらはバス９により互いに接続されている。
【００８１】
CPU２は、情報処理装置１全体を制御する中央処理装置である。CPU２は、仮想ＣＰＵ３１１、仮想ＤＭＡコントローラ３２１、仮想デバイス３３１、仮想アービター３４１、ログ出力制御部３５１に対応する。
【００８２】
メモリ３は、プログラム実行の際に、記憶部６（あるいは可搬記録媒体１０）に記憶されているプログラムあるいはデータを一時的に格納するRead Only Memory(ROM)やRandom Access Memory(RAM)等のメモリである。CPU２は、メモリ３を利用してプログラムを実行することにより、上述した各種処理を実行する。
【００８３】
この場合、可搬記録媒体１０等から読み出されたプログラムコード自体が実施の形態の機能を実現する。
【００８４】
入力部４は、例えば、キーボード、マウス、タッチパネル等である。
出力部５は、例えば、ディスプレイ、プリンタ等である。
記憶部６は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等である。情報処理装置１は、記憶部６に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【００８５】
メモリ３は、仮想メモリ３６１の領域を含む。
記録媒体駆動部７は、可搬記録媒体１０を駆動し、その記録内容にアクセスする。可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(CD-ROM)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１０に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【００８６】
ネットワーク接続部８は、LAN等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う。
【符号の説明】
【００８７】
１０１    情報処理装置
２０１    ホストOS
３０１    仮想マシン
３１１    仮想ＣＰＵ
３２１    仮想ＤＭＡ
３３１    仮想デバイス
３４１    仮想アービター
３５１    ログ出力制御部
３５２    ＣＰＵインターフェース
３５３    監視アドレス先頭レジスタ
３５４    監視サイズレジスタ
３５５    ログ出力制御フラグレジスタ
３５６    ログ出力制御回路
３６１    仮想メモリ
３７１    仮想バス
【図１】
2013196241.tif 000003
【図２】
2013196241.tif 000004
【図３】
2013196241.tif 000005
【図４】
2013196241.tif 000006
【図５Ａ】
2013196241.tif 000007
【図５Ｂ】
2013196241.tif 000008
【図５Ｃ】
2013196241.tif 000009
【図６】
2013196241.tif 000010
【図７】
2013196241.tif 000011