(57)【要約】【課題】ファームウェアとハードウェアの動作の時系列を明確にしたログを出力する技術を提供する。【解決手段】シミュレータ装置は、ファームウェアの命令をエミュレートし、ファームウェアからの入出力命令に応じて、時刻情報を取得し、時刻情報を入出力命令に付加し、入出力命令を実行する実行部と、時刻情報が付加された入出力命令の実行に応じて、第１の出力形式で出力される第１の動作情報と時刻情報とを関係付けて出力する第１の仮想デバイスと、時刻情報が付加された入出力命令の実行に応じて、第２の出力形式で出力される第２の動作情報と時刻情報とを関係付けて出力する第２の仮想デバイスと、時刻情報に基づいて、第１の動作情報と第２の動作情報とを時系列に配列した動作履歴情報を出力する統合部と、を備えることにより、上記課題の解決を図る。【選択図】図１
2015014931.tif 000002
【特許請求の範囲】
【請求項１】
ファームウェアの命令をエミュレートし、該ファームウェアからの入出力命令に応じて、実時刻に関する時刻情報を取得し、該時刻情報を該入出力命令に付加し、該入出力命令を実行する実行部と、
第１のデバイスの動作を仮想的に行い、前記時刻情報が付加された入出力命令の実行に応じて、第１の出力形式で出力される第１の動作情報と前記時刻情報とを関係付けて出力する第１の仮想デバイスと、
第２のデバイスの動作を仮想的に行い、前記時刻情報が付加された入出力命令の実行に応じて、第２の出力形式で出力される第２の動作情報と前記時刻情報とを関係付けて出力する第２の仮想デバイスと、
前記時刻情報に基づいて、前記第１の動作情報と前記第２の動作情報とを時系列に配列した動作履歴情報を出力する統合部と、
を備えることを特徴とするシミュレータ装置。
【請求項２】
前記第１の仮想デバイスまたは前記第２の仮想デバイスは、前記動作を実行後、前記時刻情報を取得し、取得した該時刻情報と、実行後の動作結果を示す動作情報とを関係付けて出力する
ことを特徴とする請求項１に記載のシミュレータ装置。
【請求項３】
前記第１の仮想デバイスは、前記第１の動作情報を文字単位で出力し、
前記第２の仮想デバイスは、前記第１の仮想デバイス以外の仮想デバイスであって、前記第２の動作情報を一括して出力する
ことを特徴とする請求項１または２に記載のシミュレータ装置。
【請求項４】
コンピュータに、
ファームウェアの命令をエミュレートし、該ファームウェアからの入出力命令に応じて、実時刻に関する時刻情報を取得し、該時刻情報を該入出力命令に付加し、該入出力命令を実行し、
第１のデバイスの動作を仮想的に行う第１の仮想デバイスに、前記時刻情報が付加された入出力命令の実行に応じて、第１の出力形式で出力される第１の動作情報と前記時刻情報とを関係付けて出力させ、
第２のデバイスの動作を仮想的に行う第２の仮想デバイスに、前記時刻情報が付加された入出力命令の実行に応じて、第２の出力形式で出力される第２の動作情報と前記時刻情報とを関係付けて出力させ、
前記時刻情報に基づいて、前記第１の動作情報と前記第２の動作情報とを時系列に配列した動作履歴情報を出力する、
処理を実行させることを特徴とするプログラム。
【請求項５】
コンピュータが、
ファームウェアの命令をエミュレートし、該ファームウェアからの入出力命令に応じて、実時刻に関する時刻情報を取得し、該時刻情報を該入出力命令に付加し、該入出力命令を実行し、
第１のデバイスの動作を仮想的に行う第１の仮想デバイスに、前記時刻情報が付加された入出力命令の実行に応じて、第１の出力形式で出力される第１の動作情報と前記時刻情報とを関係付けて出力させ、
第２のデバイスの動作を仮想的に行う第２の仮想デバイスに、前記時刻情報が付加された入出力命令の実行に応じて、第２の出力形式で出力される第２の動作情報と前記時刻情報とを関係付けて出力させ、
前記時刻情報に基づいて、前記第１の動作情報と前記第２の動作情報とを時系列に配列した動作履歴情報を出力する、
ことを特徴とするログ情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレータ装置のログ情報処理技術に関する。
【背景技術】
【０００２】
組み込みソフト（以下、Firmware（ＦＷ）という）のデバッグでは、実機（組み込みソフトを載せる装置）にて、ＩＣＥ（In-circuit emulator）を使用し動作させることにより、ＦＷのテストを行っている。しかし、障害テスト等のイリーガルな動作に対するデバッグでは、ＬＳＩ（Large Scale Integration）等のハードウェア部品（以下、Hardware（ＨＷ）という）のエラーに起因する場合、実際のＨＷを壊す、または、疑似故障専用の治具を作成する必要がある。
【０００３】
そこで、近年では実機の代わりにソフトエミュレータ（以下、「シミュレータ」という）を用いたデバッグ方法をとる事が多い。シミュレータを用いれば、仮想的なデバイス環境下で、デバッグを行うことができる。
【０００４】
シミュレータを用いてデバックを行っている際に予期しない障害が発生した場合、次のことを行う。すなわち、組込み機器の実機では内部記憶媒体を持っていないため、ＦＷが自分で動作状況を確認するためにデバッグ用のＴＴＹ（Tele-TYpewriter）コンソールへ出力しているログ（ＦＷログ）を確認し、動作解析を行う。近年シミュレータを使用することによりエミュレートしているＨＷの内部情報もログ（ＨＷログ）に格納し、ＦＷ不具合の解析に使用している。
【０００５】
ところで、デバッグにおいては、ログデータを解析する場合、ログデータの解析が容易なほど、デバッグに要する時間も短縮される。このようにログデータの解析の効率化を図る技術として以下の技術がある。
【０００６】
第１技術として、次の技術がある。まず、異なるセグメントに配置された第１及び第２システム可視化処理装置で同期用メッセージを個別に識別するキーワード及び受信時刻を含むログデータを生成し、第２システム可視化処理装置から第１システム可視化処理装置へログデータを送信する。第１システム可視化処理装置は、同一識別情報を含むログデータの受信時刻のずれに応じて他メッセージのログデータの受信時刻を補正する。重複するメッセージのログを削除した後に、全てのログデータを受信時刻でソートすれば、通常と同じログデータが得られるようになる。これにより、解析対象システムが複数のセグメントに分離されており且つ一部のメッセージが１つのセグメント内でのみ送信される場合においても解析対象システムにおけるトランザクションを可視化できる。
【０００７】
第２の技術として、次の技術がある。ログ出力装置が、ログ情報とログ情報のデータ構造情報とを含むログファイルを出力する。ログ変換装置が、ログ出力装置から取得したログファイルに含まれるログ情報及びログ情報のデータ構造情報に基づいて、ログ情報を特定のデータ構造を有する標準ログ情報に変換する。これにより、ログファイル中にデータ構造の異なる複数種類のログ情報が含まれていたとしても、ログ解析作業を効率的に行うことができる。
【０００８】
第３の技術として、次の技術がある。それぞれ異なるファイルに格納された各時系列データを、ウィンドウ表示処理部により、各ファイル別のウィンドウに分けてスクロール可能に表示する。ユーザが任意のウィンドウを１つ選択してスクロールすると、スクロール処理手段により、そのウィンドウの先頭の時系列データの日時データに、他のウィンドウの先頭の時系列データの日時データが合うよう、他のウィンドウをスクロールする。その後、同期表示処理部により、このスクロールした各ウィンドウ内のそれぞれの時系列データを、それぞれに付与された日時データが同じ時系列データ同士が画面上で並ぶように配置して表示する。これにより、ログファイル等のように膨大な時系列データを有する、複数の時系列データファイルの各格納データを、相互に比較し易いように表示することができる。そのため、複数のログファイルのそれぞれのデータ間の評価・確認を効率よく行うことが可能となる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１１−１５４４８９号公報
【特許文献２】特開２０１１−３９８３４号公報
【特許文献３】特開２００１−２６５３１１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
シミュレータでは、ＦＷログが１文字ずつ出力（キャラクタデバイス）されるのに対して、ＨＷログは１行ずつ出力（ブロックデバイス）される。そのため、ＦＷログとＨＷログとを同一の格納場所に出力すると、ＦＷログ１文字１文字の間にＨＷログ情報が入り、ＦＷログとＨＷログとが混在してしまう。
【００１１】
また、ファームウェアとハードウェアの動作の時間的な先後関係を判別しようにも、以下の理由よりその判別が難しい。すなわち、ファームウェアが認識する時間はシミュレータ上で動作している仮想時間である。一方、ハードウェアが認識する時間はシミュレータが動作しているホスト上の実時間である。このように、ファームウェアとハードウェアが認識する時間軸が異なっているため、ファームウェアとハードウェアの動作の時間的な先後関係を判別することは容易ではない。
【００１２】
また、第１〜第３の技術はいずれも、異なる時間軸のログを統合する技術ではないので、ファームウェアとハードウェアの動作の時間的な先後関係を判別することができない。
【００１３】
本発明は、一側面として、ファームウェアとハードウェアの動作の時系列を明確にしたログを出力する技術を提供する。
【課題を解決するための手段】
【００１４】
一側面として、本発明に係るシミュレータ装置は、実行部、第１の仮想デバイス、第２の仮想デバイス、統合部を含む。実行部は、ファームウェアの命令をエミュレートし、ファームウェアからの入出力命令に応じて、実時刻に関する時刻情報を取得し、時刻情報を入出力命令に付加し、入出力命令を実行する。第１の仮想デバイスは、第１のデバイスの動作を仮想的に行い、時刻情報が付加された入出力命令の実行に応じて、第１の出力形式で出力される第１の動作情報と時刻情報とを関係付けた第１の動作履歴情報を出力する。第２の仮想デバイスは、第２のデバイスの動作を仮想的に行い、時刻情報が付加された入出力命令の実行に応じて、第２の出力形式で出力される第２の動作情報と時刻情報とを関係付けた第２の動作履歴情報を出力する。統合部は、時刻情報に基づいて、第１の動作履歴情報と第２の動作履歴情報とを統合して、第１の動作情報と第２の動作情報とを時系列に配列した動作履歴情報を出力する。
【発明の効果】
【００１５】
本発明の一側面によれば、ファームウェアとハードウェアの動作の時系列を明確にしたログを出力することができる。
【図面の簡単な説明】
【００１６】
【図１】本実施形態におけるシミュレータ装置の一例を示す。
【図２】本実施形態におけるホスト装置の構成を示す。
【図３】本実施形態におけるＨＷログ情報及びＦＷログ情報の一例を示す。
【図４】本実施形態におけるマージログの一例を示す。
【図５】本実施形態における仮想ＣＰＵの命令実行についての処理フローを示す。
【図６】本実施形態における付加部の処理フローを示す。
【図７】本実施形態における仮想Ｉ／Ｏデバイス（仮想シリアルデバイス）の処理フローを示す。
【図８】本実施形態における仮想Ｉ／Ｏデバイス（仮想シリアルデバイス以外）の処理フローを示す。
【図９】本実施形態におけるログ生成部２１の処理フローを示す。
【図１０】本実施形態におけるマージ部の処理フローを示す。
【図１１】本実施形態に係るプログラムを実行するコンピュータのハードウェア環境の構成ブロック図である。
【発明を実施するための形態】
【００１７】
シミュレータにおいて、サーバやパーソナルコンピュータ（ＰＣ）等の動作しているマシン（ホスト）の外部にＦＷログが出力される。シミュレータの場合、ホスト上にＦＷログとＨＷログが出力される。しかしながら、ＦＷログとＨＷログの出力先は、次の理由のために、異なっている。同じ場所にＦＷログとＨＷログの両方のログが出力されると、ＦＷログが１文字ずつ出力（キャラクタデバイス）されるのに対して、ＨＷログは１行ずつ出力（ブロックデバイス）される。そのため、ＦＷログ１文字１文字の間にＨＷログ情報が入る結果、ＦＷログとＨＷログとが混在し、意味のある情報として読み取ることが困難になる。
【００１８】
上述の通り、ＦＷログとＨＷログは別々に出力されるため、ファームウェアとハードウェアの動作の順序や動作の時間的な先後が分からず、ファームウェアの不具合の解析に時間がかかる。例えばファームウェアが割り込みハンドラの登録に失敗した場合、次のことが考えられる。すなわち、HWログ（ＣＰＵが割り込み処理を行ったログ）、ＦＷログ（割り込みハンドラの実行ログ）にて、ＣＰＵが割り込み処理を行ったタイミングとファームウェアの割り込みハンドラが動作したタイミングとを判別することができない。その結果、ログを参照しても、割り込みの要因を示す番号であるベクタ番号と対応する割込みハンドラが正しく動作しているかを容易に判断することができない。
【００１９】
そこで、ＦＷログとＨＷログから、ファームウェアとハードウェアの動作の時間的な先後関係を得るためには、例えば、以下のような方法が考えられる。
（ｉ）ファームウェア及びハードウェアが、各々のログに対して時刻情報を付加し、その時刻情報が付加されたＦＷログ、ＨＷログをマージする。
（ｉｉ）ＦＷログおよびＨＷログを出力する際に、共通の時間軸から時刻情報を取得し、ＦＷログおよびＨＷログに付加する。
（ｉｉｉ）改行文字コードを基準にＦＷログも１行ずつ出力し、ＦＷログとＨＷログを同じ場所に出力する。すなわち、改行文字コードが出力されるまではＦＷログを一時的にバッファに保持し、改行文字コードをきっかけにバッファに保持していたＦＷログを一括で出力する。
【００２０】
しかしながら、上記（ｉ）〜（ｉｉｉ）の方法には下記に示す問題がある。
ＦＷログ、ＨＷログにそれぞれの時刻情報を付加してマージする場合（上記（ｉ）の場合）、ファームウェアが認識する時間はシミュレータ上で動作している仮想時間である。一方、ハードウェアが認識する時間はシミュレータが動作しているホスト上の実時間である。
【００２１】
仮想時間を用いて、シミュレータ上で速度の変更や日時を変えてファームウェアの動作確認を行うことがある。そのため、ファームウェアとハードウェアで認識する時間が異なり、単純に時間情報を付加するだけでは、ファームウェアとハードウェアの動作の時間的な先後関係を判別することができない。
【００２２】
次に、ＦＷログおよびＨＷログを出力する際に、共通の時間軸から時刻情報を取得し、付加する場合（上記（ｉｉ）の場合）、仮想シリアルデバイスからＦＷログ情報を受け取り、実時刻情報を取得してＦＷログ情報に付加する構成を追加することが考えられる。ここで、仮想シリアルデバイスとは、例えば、コンソール端末にシリアルに情報を出力するための仮想的なデバイスである。しかし、このような構成を用いた場合、割込みの発生等によって仮想シリアルデバイスが動作したタイミングとその追加した機構が実時刻情報を取得するタイミングとが大きく異なってしまう場合がある。そのため、ＦＷログを出力する際にＨＷログと共通の時間軸から時間情報を取得する処理を加えるという構成では、ファームウェアとハードウェアの正確な時間的な動作の先後関係を得ることができない。
【００２３】
また、改行文字コードを基準にＦＷログも１行ずつ出力し、ＦＷログとＨＷログを同じ場所に出力する場合（上記（ｉｉｉ）の場合）、ファームウェアとハードウェアの動作の順序は把握することができる。すなわち、改行文字コードが出力されるまではＦＷログを一時的にバッファに保持し、改行文字コードをきっかけにバッファに保持していたＦＷログを一括で出力するので、ＦＷログが保持され始めて改行文字コードが出力されるまでの時間が短ければ問題はない。
【００２４】
しかしながら、ＦＷログの出力に時間が掛かった場合、ＦＷログがバッファに保持され始めた時間から、一括出力が完了するまでの間にハードウェアではどのような動作が行われていたかを確認することができない。そのため、ＦＷログ出力中に、ある特定のＨＷデバイスが動作していると不具合が生じるようなケースの解析ができない。
【００２５】
そこで、本実施形態では、ＦＷログとＨＷログの各々に共通の時間軸から同じタイミング（仮想ＣＰＵから各仮想デバイスに対してＩ／Ｏ動作が発生したタイミング）で取得した実時刻情報を付加し、時系列に従ってＦＷログとＨＷログを見やすくマージする。
【００２６】
図１は、本実施形態におけるシミュレータ装置の一例を示す。シミュレータ装置１は、実行部２、第１の仮想デバイス３、第２の仮想デバイス４、統合部５を含む。
【００２７】
実行部２は、ファームウェアの命令をエミュレートし、ファームウェアからの入出力命令に応じて、実時刻に関する時刻情報を取得し、時刻情報を入出力命令に付加し、入出力命令を実行する。実行部２の一例としては、付加部１６が挙げられる。
【００２８】
第１の仮想デバイス３は、第１のデバイスの動作を仮想的に行い、時刻情報が付加された入出力命令の実行に応じて、第１の出力形式で出力される第１の動作情報と時刻情報とを関係付けて出力する。
【００２９】
第２の仮想デバイス４は、第２のデバイスの動作を仮想的に行い、時刻情報が付加された入出力命令の実行に応じて、第２の出力形式で出力される第２の動作情報と時刻情報とを関係付けて出力する。
【００３０】
統合部５は、時刻情報に基づいて、第１の動作情報と第２の動作情報とを時系列に配列した動作履歴情報を出力する。統合部５の一例として、マージ部２４が挙げられる。
【００３１】
第１の仮想デバイスまたは第２の仮想デバイスは、動作を実行後、時刻情報を取得し、取得した時刻情報と、実行後の動作結果を示す動作情報とを関係付けて出力する。また、第１の仮想デバイスは、第１の動作情報を文字単位で出力する。第２の仮想デバイスは、第１の仮想デバイス以外の仮想デバイスであって、第２の動作情報を一括して出力する。第１の仮想デバイス３の一例としては、仮想シリアルデバイス１７が挙げられる。第２の仮想デバイス４の一例としては、仮想ＬＡＮ１８、仮想タイマ１９、仮想割込コントローラ２０等の仮想Ｉ／Ｏデバイスが挙げられる。
【００３２】
このように構成することにより、ファームウェアとハードウェアの動作の時系列が明確になり、障害解析の効率化に必要なログ情報の収集が可能になる。
【００３３】
図２は、本実施形態におけるホスト装置の構成を示す。ホスト装置（以下、「ホスト」という）１１は、コンソール端末２７と接続されている。コンソール端末は、例えば、ＴＴＹコンソール端末である。ホスト１１上では、シミュレータ１２が起動している。タイマ２６は、ホスト１１上で起動しているＯＳ（Operating System）が有する機能であり、実時刻を管理する。
【００３４】
シミュレータ１２は、ファームウェア（ＦＷ）１４の命令をエミュレーションする。シミュレータ１２は、仮想メモリ１３、ファームウェア（ＦＷ）１４、仮想ＣＰＵ１５、付加部１６、仮想シリアルデバイス１７、仮想ＬＡＮ１８、仮想タイマ１９、仮想割込コントローラ２０、ログ生成部２１、マージ部２４を含む。
【００３５】
ＦＷ１４は、仮想メモリ１３に展開されて動作する。仮想ＣＰＵ（Central Processing Unit）１５は、各種割り込みを処理する。
【００３６】
仮想ＬＡＮ（Local Area Network）１８、仮想タイマ１９、仮想割込コントローラ２０等の仮想Ｉ／Ｏデバイスは、ＦＷ１４が発行する入出力（Input／Output（Ｉ／Ｏ））命令に従って各種Ｉ／Ｏデバイス動作を擬似する。仮想シリアルデバイス１７は、ＦＷ１４の動作状況情報を表示するためのＴＴＹインタフェースを擬似する。仮想ＬＡＮ１８は、外部の機器と通信可能なようにＬＡＮに接続するためのＬＡＮインタフェースを擬似する。仮想タイマ１９は、シミュレータ１２において、仮想時間を計測、管理する。仮想割込コントローラ２０は、シミュレータ１２内部のデバイに割込み要因が発生した場合、その割込み要因を判定し、その割込み要因の優先順位を判定し、仮想ＣＰＵ１５に割込み要求を通知する。
【００３７】
付加部１６は、仮想ＣＰＵ１５によってデコードされた命令が各仮想Ｉ／Ｏデバイスに対するＩ／Ｏ命令である場合、タイマ２６からその時点での実時刻を取得し、その取得した実時刻をタイムスタンプとしてＩ／Ｏ命令に付加する。そして、付加部１６は、そのＩ／Ｏ命令を実行する。
【００３８】
ログ生成部２１は、仮想Ｉ／Ｏデバイスが仮想シリアルデバイスである場合には、各仮想Ｉ／ＯデバイスのＩ／Ｏ動作の結果を、ＦＷログ情報２３としてメモリに格納・蓄積する。また、ログ生成部２１は、仮想Ｉ／Ｏデバイスが仮想シリアルデバイス以外のデバイスである場合には、各Ｉ／ＯデバイスのＩ／Ｏ動作の結果を、ＨＷログ情報２２としてメモリに格納・蓄積する。なお、ログ生成部２１は、仕様によっては、仮想Ｉ／Ｏデバイスの機能に含めてもよい。
【００３９】
マージ部２４は、格納・蓄積されたＨＷログ情報２２及びＦＷログ情報２３をメモリから読み出す。マージ部２４は、ＦＷログ情報２３については、最初に受け取った文字（動作開始から最初に受け取った文字、または、改行文字コードの次に受け取った文字）」を開始文字、「改行文字コード」を最終文字と判断する。また、マージ部２４は、開始文字から終了文字までの文字列を１個のＦＷログ情報として扱う。マージ部２４は、ＨＷログ情報２２に付加された実時刻と、ＦＷログ情報２３の開始文字に付加された実時刻とを比較し、それぞれのログ情報が実時間軸に沿って並列に並ぶように処理を行う。
【００４０】
マージ部２４は、１個のＦＷログ情報２３内のある特定の文字の実時刻と、その次の文字の実時刻との間の実時刻を持つＨＷログ情報２２を、その間に配置するように、ログ情報をマージすることにより、マージログ２５を作成する。
【００４１】
これにより、シミュレータ１２が稼働するホスト１１は、ターゲットシステムログ情報（シリアル出力）と、シミュレータシステムログ情報とを、発生順に時系列に並べて出力する。これにより、２つのログ情報の発生時刻の相対関係を明らかにすることができる。ここで、ターゲットシステムログ情報とは、ターゲットシステムが管理する時刻が付与されたターゲットシステム（被検証装置）が自ら出力するログ情報を表す。シミュレータシステムログ情報は、シミュレータシステムが管理する時刻が付与された、シミュレータ装置が採取するログ情報を表す。
【００４２】
図３は、本実施形態におけるＨＷログ情報及びＦＷログ情報の一例を示す。ＨＷログ情報２２は、「ＨＷログ時刻」２２ａと「ＨＷログ」２２ｂのデータ項目を含む。「ＨＷログ時刻」２２ａは、ＨＷログが発生した時刻を示す。「ＨＷログ」２２ｂは、ＨＷログの内容を示す。例えば、ＨＷログ「DeviceB (Initialize start)」は、デバイスＢの初期化を開始することを示す。また、例えば、ＨＷログ「DeviceC (Wait message)」は、デバイスＣがメッセージを待っている状態であることを示す。
【００４３】
ＦＷログ情報２３は、「ＦＷログ時刻」２３ａと「ＦＷログ（文字コード）」２３ｂのデータ項目を含む。「ＦＷログ時刻」２３ａは、ＦＷログが発生した時刻を示す。「ＦＷログ（文字コード）」２３ｂは、ＦＷログの内容（文字コード）を示す。
【００４４】
図４は、本実施形態におけるマージログの一例を示す。マージログ２５は、「時刻」２５ａ、「ＦＷログ」２５ｂ、「ＨＷログ」２５ｃのデータ項目を含む。「時刻」２５ａは、ＦＷログまたはＨＷログが発生した時刻を示す。「ＦＷログ」２５ｂは、ＦＷログの内容を示す。符号３１で示すログは、１個のＦＷログを示す。例えば、「DeviceA Init」という１個のＦＷログを出力する場合、「ＦＷログ」２５ｂにおいて、その出力するＦＷログに対応する開始時刻の前の行に、符号３２で示すように、ＦＷログの開始文字から終了文字までの全ての文字が出力される。その次の行以降は、符号３３で示すように、時刻ごとのＦＷログである。図４の例では、見やすいように、符号３１で示すログに含まれる文字に対応する文字の下にくるようにずらして文字が出力されている。「ＨＷログ」２２ｂは、「時刻」２５ａに出力された時刻におけるＨＷログの内容を示す。
【００４５】
以下では、シミュレータ１２の各部の動作について説明する。
図５は、本実施形態における仮想ＣＰＵの命令実行についての処理フローを示す。仮想ＣＰＵ１５は、ファームウェア１４からの命令をデコードし（Ｓ１）、デコードした命令がＩ／Ｏ命令か否かを判定する（Ｓ２）。デコードした命令がＩ／Ｏ命令でない場合（Ｓ２で「Ｎｏ」）、仮想ＣＰＵ１５は、その命令を実行する（Ｓ４）。デコードした命令がＩ／Ｏ命令である場合（Ｓ２で「Ｙｅｓ」）、仮想ＣＰＵ１５は、付加部１６にＩ／Ｏ命令のオペランドを渡す（Ｓ３）。このＩ／Ｏ命令のオペランドには、Ｉ／Ｏポート番号、書き込む値、読み込んだ値の格納先についての情報が含まれる。
【００４６】
図６は、本実施形態における付加部の処理フローを示す。仮想ＣＰＵ１５から各種仮想Ｉ／ＯデバイスへのＩ／Ｏ命令が発生した場合、すなわち、デコードした命令がＩ／Ｏ命令である場合、付加部１６は、仮想ＣＰＵ１５からＩ／Ｏ命令のオペランドを受け取って次の動作をする。
【００４７】
まず、付加部１６は、タイマ２６から実時刻情報を取得する（Ｓ１１）。付加部１６は、仮想ＣＰＵ１５から受け取ったＩ／Ｏ命令のオペランドに、取得した実時刻情報を追加する（Ｓ１２）。そして、付加部１６は、Ｉ／Ｏ命令のオペランドに基づいて、Ｉ／Ｏ命令を実行する（Ｓ１３）。
【００４８】
図７は、本実施形態における仮想Ｉ／Ｏデバイス（仮想シリアルデバイス）の処理フローを示す。付加部１６によりＩ／Ｏ命令が実行されたことにより、仮想シリアルデバイス１７に対するＩ／Ｏ動作命令が発生した場合、仮想シリアルデバイス１７は、付加部１６から実時刻情報を取得し、そのＩ／Ｏ動作命令に基づいて動作を行う。具体的には、仮想シリアルデバイス１７は、Ｉ／Ｏ動作命令に含まれる文字コードを取得し、コンソール端末２７にその文字コードに対応する文字を出力する（Ｓ２１）。そして、仮想シリアルデバイス１７は、実時刻情報と、文字コード、フラグ＝１をログ生成部２１に渡す（Ｓ２２）。ここで、フラグは、仮想シリアルデバイスの動作結果であるか否かを示す情報である。フラグ＝１は、仮想シリアルデバイスの動作結果であることを示す。フラグ＝０は、仮想シリアルデバイス以外の仮想Ｉ／Ｏデバイスの動作結果であることを示す。
【００４９】
なお、本実施形態では、仮想シリアルデバイス１７は付加部１６より実時刻情報を取得したが、これに限定されず、仮想シリアルデバイス１７がタイマ２６から実時刻情報を取得してもよい。
【００５０】
図８は、本実施形態における仮想Ｉ／Ｏデバイス（仮想シリアルデバイス以外）の処理フローを示す。仮想シリアルデバイス以外の仮想Ｉ／Ｏデバイスとは、例えば、仮想ＬＡＮ１８、仮想タイマ１９、仮想割込みコントローラ２０等である。
【００５１】
付加部１６によりＩ／Ｏ命令が実行されたことにより、仮想Ｉ／Ｏデバイス（仮想シリアルデバイス以外）に対するＩ／Ｏ動作命令が発生した場合、その仮想Ｉ／Ｏデバイスは、受け取った実時刻情報と、Ｉ／Ｏ動作情報とを、ログ生成部２１に渡す（Ｓ３１）。ここで、Ｉ／Ｏ動作情報は、自デバイス名及びこれから実行する処理内容を含む。
【００５２】
仮想Ｉ／Ｏデバイス（仮想シリアルデバイス以外）は、Ｉ／Ｏ動作を実行する（Ｓ３２）。Ｉ／Ｏ動作実行後、仮想Ｉ／Ｏデバイス（仮想シリアルデバイス以外）は、タイマ２６より実時刻情報を取得する（Ｓ３３）。仮想Ｉ／Ｏデバイス（仮想シリアルデバイス以外）は、Ｓ３３で取得した実時刻情報、Ｉ／Ｏ動作結果、フラグ＝０をログ生成部２１に渡す（Ｓ３４）。Ｉ／Ｏ動作結果は、補足情報として通知される。
【００５３】
Ｓ３３，Ｓ３４において、再度、実時刻情報を取得して、その取得した実時刻と、Ｉ／Ｏ動作結果とをログ生成部２１に渡すのは、次の理由による。すなわち、仮想シリアルデバイス以外の仮想Ｉ／Ｏデバイスは、他のデバイスと通信して処理を依頼しその処理結果を待つ場合もあり、仮想シリアルデバイスに比べて、処理に時間がかかるので、その処理後に再度、ログを取得するためである。
【００５４】
図９は、本実施形態におけるログ生成部２１の処理フローを示す。ログ生成部２１は、各仮想Ｉ／Ｏデバイス（仮想シリアルデバイスも含む）から実時刻情報とＩ／Ｏ動作結果と、フラグを受け取って、次の動作をする。
【００５５】
ログ生成部２１は、フラグに基づいて、受け取ったＩ／Ｏ動作結果が仮想シリアルデバイスより出力されたものであるかを判定する（Ｓ４１）。受け取ったＩ／Ｏ動作結果が仮想シリアルデバイスより出力されたものである場合、すなわちフラグ＝１の場合（Ｓ４１で「Ｙｅｓ」）、ログ生成部２１は、メモリにあるＦＷログ情報２３に、実時刻情報、及び文字コードを出力（格納）する（Ｓ４２、Ｓ４３）。
【００５６】
受け取ったＩ／Ｏ動作結果が仮想シリアルデバイスより出力されたものでない場合、すなわちフラグ＝０の場合（Ｓ４１で「Ｎｏ」）、ログ生成部２１は、メモリにあるＨＷログ情報２２に、各仮想Ｉ／Ｏデバイスから取得した実時刻情報を出力する。さらに、ログ生成部２１は、メモリにあるＨＷログ情報２２に、Ｉ／Ｏ動作情報またはＩ／Ｏ動作結果を出力（格納）する（Ｓ４４、Ｓ４５）。
【００５７】
図１０は、本実施形態におけるマージ部の処理フローを示す。マージ部２４は、メモリに格納されたＦＷログ情報２３からＦＷログの１文字目の出力時刻（ＦＷ時刻）を取得する（Ｓ５１）。マージ部２４は、メモリに格納されたＨＷログ情報２２からＨＷログの出力時刻（ＨＷ時刻）を取得する（Ｓ５２）。
【００５８】
取得したＨＷ時刻の方が、取得したＦＷ時刻よりも前である場合（Ｓ５３で「Ｙｅｓ」）、マージ部２４は、メモリ上の新たな領域に、そのＨＷ時刻を出力する（Ｓ５４）。ここで、メモリ上の新たな領域に出力された情報をマージログ２５という。マージ部２４は、そのマージログ２５に、そのＨＷ時刻に対応するＨＷログを出力する（Ｓ５５）。マージ部２４は、メモリに格納されたＨＷログ情報２２から次のＨＷログのＨＷ時刻を取得し（Ｓ５６）、Ｓ５３の処理へ戻る。
【００５９】
取得したＨＷ時刻の方が、取得したＦＷ時刻と同じまたは取得したＦＷ時刻よりも後である場合（Ｓ５３で「Ｎｏ」）、マージ部２４は、取得したＦＷ時刻に対応する文字が、ＦＷログの１文字目か否かを判定する（Ｓ５７）。マージ部２４は、Ｓ５１で最初に取得した時刻の文字と、後述するＳ６３にて改行文字の出力後に取得された時刻に対応する文字を、ＦＷログの１文字目と判定する。
【００６０】
取得したＦＷ時刻に対応する文字が、ＦＷログの１文字目である場合（Ｓ５７で「Ｙｅｓ」）、マージ部２４は、図４の符号３２に示すように、マージログ２５にＦＷログ（開始文字から終了文字まで）を出力する。（Ｓ５８）さらに、マージ部２４は、マージログの次の行に、ＦＷ時刻及びＦＷログ（１文字）を出力する（Ｓ６０、Ｓ６１）。
【００６１】
取得したＦＷ時刻に対応する文字が、ＦＷログの１文字目でない場合（Ｓ５７で「Ｎｏ」）、マージ部２４は、直前に出力したログがＨＷログか否かを判定する（Ｓ５９）。
【００６２】
直前に出力したログがＨＷログでない場合（Ｓ５９で「Ｎｏ」）、マージ部２４は、マージログに、ＦＷログ（１文字）を出力する（Ｓ６１）。
【００６３】
マージログに出力した文字が改行文字でない場合（Ｓ６２で「Ｎｏ」）、マージ部２４は、ＦＷログ情報２３から、ＦＷログの次の文字のＦＷ時刻を取得する（Ｓ６４）。
【００６４】
マージログに出力した文字が改行文字である場合（Ｓ６２で「Ｙｅｓ」）、マージ部２４は、ＦＷログ情報２３から、次のＦＷログの１文字目のＦＷ時刻を取得する（Ｓ６４）。
【００６５】
図１１は、本実施形態に係るプログラムを実行するコンピュータのハードウェア環境の構成ブロック図である。コンピュータ４０は、サーバ１５である。コンピュータ４０は、ＣＰＵ４２、ＲＯＭ４３、ＲＡＭ４６、通信Ｉ／Ｆ４４、記憶装置４７、出力Ｉ／Ｆ４１、入力Ｉ／Ｆ４５、読み取り装置４８、バス４９、出力機器５１、入力機器５２によって構成されている。
【００６６】
ここで、ＣＰＵは、中央演算装置を示す。ＲＯＭは、リードオンリメモリを示す。ＲＡＭは、ランダムアクセスメモリを示す。Ｉ／Ｆは、インタフェースを示す。バス４９には、ＣＰＵ４２、ＲＯＭ４３、ＲＡＭ４６、通信Ｉ／Ｆ４４、記憶装置４７、出力Ｉ／Ｆ４１、入力Ｉ／Ｆ４５、及び読み取り装置４８が接続されている。読み取り装置４８は、可搬型記録媒体を読み出す装置である。出力機器５１は、出力Ｉ／Ｆ４１に接続されている。入力機器５２は、入力Ｉ／Ｆ４５に接続にされている。
【００６７】
記憶装置４７としては、ハードディスク、フラッシュメモリ、磁気ディスクなど様々な形式の記憶装置を使用することができる。記憶装置４７またはＲＯＭ４３には、本実施形態にかかる処理を行うプログラム及びデータが格納されている。
【００６８】
ＣＰＵ４２は、記憶装置４７等に格納した上記実施形態で説明した処理を実現するプログラムを読み出し、当該プログラムを実行する。
【００６９】
上記実施形態で説明した処理を実現するプログラムは、プログラム提供者側から通信ネットワーク５０、および通信Ｉ／Ｆ４４を介して、例えば記憶装置４７に格納されてもよい。また、上記実施形態で説明した処理を実現するプログラムは、市販され、流通している可搬型記憶媒体に格納されていてもよい。この場合、この可搬型記憶媒体は読み取り装置４８にセットされて、ＣＰＵ４２によってそのプログラムが読み出されて、実行されてもよい。可搬型記憶媒体としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＩＣカード、ＵＳＢメモリ装置など様々な形式の記憶媒体を使用することができる。このような記憶媒体に格納されたプログラムが読み取り装置４８によって読み取られる。
【００７０】
また、入力機器５２には、キーボード、マウス、電子カメラ、ウェブカメラ、マイク、スキャナ、センサ、タブレットなどを用いることが可能である。また、出力機器５１には、ディスプレイ、プリンタ、スピーカなどを用いることが可能である。また、ネットワーク５０は、インターネット、ＬＡＮ、ＷＡＮ、専用線、有線、無線等の通信網であってよい。
【００７１】
本実施形態によれば、ＦＷとＨＷの動作の時系列が明確になり、障害解析の時間を短縮できる。例えば、障害が発生した場合、ＦＷのどのタイミングでどのＨＷがどのような動作をしていたかを把握することができる。そのため、障害の発生したポイントから正確に原因発生箇所までトレースする事ができ、障害解析の時間を短縮できる。
【００７２】
なお、本発明は、以上に述べた実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【００７３】
１      シミュレータ装置
２      実行部
３      第１の仮想デバイス
４      第２の仮想デバイス
５      統合部
１１    ホスト
１２    シミュレータ
１３    仮想メモリ
１４    ファームウェア（ＦＷ）
１５    仮想ＣＰＵ
１６    付加部
１７    仮想シリアルデバイス
１８    仮想ＬＡＮ
１９    仮想タイマ
２０    仮想割込コントローラ
２１    ログ生成部
２２    ＨＷログ情報
２３    ＦＷログ情報
２４    マージ部
２５    マージログ
２６    タイマ
２７    コンソール端末
【図１】
2015014931.tif 000003
【図２】
2015014931.tif 000004
【図３】
2015014931.tif 000005
【図４】
2015014931.tif 000006
【図５】
2015014931.tif 000007
【図６】
2015014931.tif 000008
【図７】
2015014931.tif 000009
【図８】
2015014931.tif 000010
【図９】
2015014931.tif 000011
【図１０】
2015014931.tif 000012
【図１１】
2015014931.tif 000013