(57)【要約】【課題】システム負荷を増大させることなく、複数のアプリケーションの処理を同期させるシミュレーション同期装置及びその制御方法を提供する。【解決手段】本シミュレーション同期装置は、それぞれ固有の仮想時間を有し、独立して動作する複数のアプリケーションと、各アプリケーションの処理をシステム全体の仮想時間に同期させるとともに、アプリケーション間で送受信されるイベントを中継する同期手段とを備える。また、シミュレーション同期装置は、全てのアプリケーションの処理を同期させるとともに、特定のアプリケーション間で送信されるイベントに対して、当該イベントの送信先及び送信元のアプリケーションにおける処理を同期させる。【選択図】図３
2008310449.tif 000002
【特許請求の範囲】
【請求項１】
シミュレーション同期装置であって、
それぞれ固有の仮想時間を有し、独立して動作する複数のシミュレーション実行手段と、
各シミュレーション実行手段の仮想時間の進行を同期させ、かつ、複数のシミュレーション実行手段に含まれる第１のシミュレーション実行手段と第２のシミュレーション実行手段との間で送受信される同期イベント及び応答イベントを中継する同期手段とを備え、
前記第１のシミュレーション実行手段は、
前記同期手段を中継して前記第２のシミュレーション実行手段に前記同期イベントを送信する同期イベント送信手段と、
前記同期イベントの送信に伴って、該第１のシミュレーション実行手段における仮想時間の進行を停止させる停止手段とを備え、
前記同期手段は、
前記第１のシミュレーション実行手段から送信される同期イベントを受信し、前記第２のシミュレーション実行手段に送信する中継手段を備え、
前記第２のシミュレーション実行手段は、
前記同期イベントを前記同期手段から受信して、前記同期イベントに対する処理を行う処理手段と、
前記同期手段から受信した前記同期イベントに対応する前記応答イベントを前記同期手段に送信する応答イベント送信手段とを備え、
前記同期手段は、さらに、
前記第２のシミュレーション実行手段から、前記応答イベントを受信する応答イベント受信手段と、
前記受信した応答イベントに基づいて、前記第１のシミュレーション実行手段で処理を行うべき処理時間を決定する決定手段と、
前記決定された処理時間を前記第１のシミュレーション実行手段へ送信する処理時間送信手段とを備え、
前記第１のシミュレーション実行手段は、さらに、
前記同期手段から受信した前記処理時間の処理を行うために、停止中の仮想時間の進行を再開させる再開手段と、
前記処理時間の処理を終了した後に処理の終了を通知する通知手段とを備え、
前記中継手段は、
前記通知手段で通知された処理の終了に応じて前記第２のシミュレーション実行手段から受信した応答イベントを、前記第１びシミュレーション実行手段に送信することを特徴とするシミュレーション同期装置。
【請求項２】
応答イベント送信手段は、
前記処理手段による処理が完了した後に、応答イベントを送信し、
前記決定手段は、
前記第２のシミュレーション実行手段へ前記同期イベントを送信してから、該第２のシミュレーション実行手段から前記応答イベントを受信するまでの時間を計時する計時手段を備え、
前記計時された時間を前記処理時間として決定することを特徴とする請求項１に記載のシミュレーション同期装置。
【請求項３】
前記第２のシミュレーション実行手段は、
前記応答イベントを送信してから前記第１のシミュレーション実行手段へ該応答イベントが送信されるまで仮想時間の進行を停止させる手段をさらに備えることを特徴とする請求項２に記載のシミュレーション同期装置。
【請求項４】
前記第２のシミュレーション実行手段は、
前記同期イベントを受信すると、該同期イベントに対する処理が完了する予定時間を算出する算出手段をさらに備え、
前記応答イベント送信手段は、
前記処理手段による処理が実行される前に、前記算出された予定時間を付加した応答イベントを送信し、
前記決定手段は、
前記受信した応答イベントに付加されている予定時間を前記処理時間として決定することを特徴とする請求項１に記載のシミュレーション同期装置。
【請求項５】
前記処理時間送信手段は、前記第１のシミュレーション実行手段に加えて、前記第２のシミュレーション実行手段に前記決定された処理時間を送信し、
第１及び第２のシミュレーション実行手段は、前記処理時間が通知されると処理を開始し、前記処理時間の処理が終了してから他のシミュレーション実行手段が前記処理時間の処理を終了するまで仮想時間の進行を停止させる手段をさらに備えることを特徴とする請求項４に記載のシミュレーション同期装置。
【請求項６】
前記同期手段は、
前記複数のシミュレーション実行手段を同期させるための基準となる基準同期時間を導出する導出手段と、
前記導出された基準同期時間に従って各シミュレーション実行手段での処理を開始させるための開始手段とをさらに備えることを特徴とする請求項１乃至５の何れか１項に記載のシミュレーション同期装置。
【請求項７】
それぞれ固有の仮想時間を有し、独立して動作する複数のシミュレーション実行手段と、各シミュレーション実行手段の仮想時間の進行を同期させ、かつ、複数のシミュレーション実行手段に含まれる第１のシミュレーション実行手段と第２のシミュレーション実行手段との間で送受信される同期イベント及び応答イベントを中継する同期手段とを備えるシミュレーション同期装置の制御方法であって、
前記第１のシミュレーション実行手段は、
前記同期手段を中継して前記第２のシミュレーション実行手段に前記同期イベントを送信するステップと、
前記同期イベントの送信に伴って、該第１のシミュレーション実行手段における仮想時間の進行を停止させるステップとを実行し、
前記同期手段は、
前記第１のシミュレーション実行手段から送信される前記同期イベントを受信し、前記第２のシミュレーション実行手段に送信する中継ステップを実行し、
前記第２のシミュレーション実行手段は、
前記同期イベントを前記同期手段から受信して、前記同期イベントに対する処理を行うステップと、
前記同期手段から受信した同期イベントに対応する前記応答イベントを前記同期手段に送信するステップとを実行し、
前記同期手段は、さらに、
前記第２のシミュレーション実行手段から、前記応答イベントを受信するステップと、
前記受信した応答イベントに基づいて、前記第１のシミュレーション実行手段で処理を行うべき処理時間を決定するステップと、
前記決定された処理時間を前記第１のシミュレーション実行手段へ送信するステップとを実行し、
前記第１のシミュレーション実行手段は、さらに、
前記同期手段から受信した処理時間の処理を行うために、停止中の仮想時間の進行を再開させるステップと、
前記処理時間の処理を終了した後に処理の終了を通知するステップとを実行し、
前記中継ステップは、
前記通知された処理の終了に応じて前記第２のシミュレーション実行手段から受信した応答イベントを、前記第１のシミュレーション実行手段に送信することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の独立してシミュレーションを実行するアプリケーションを１つのシステムとして同期実行させるシミュレーション同期装置及びその制御方法に関する。
【背景技術】
【０００２】
ソフトウェアを開発する際には、一般に、バグを検出して修正するデバッグ作業が行われる。デバッグ作業では、仮想的にソフトウェアを実行するＣＰＵシミュレータ（シミュレーションデバッガ）やメカシミュレータ等が利用されている。これらのシミュレータは、ＣＰＵによるプログラム実行処理、仮想メカ部品の動作のシミュレーションにおいて仮想時間の概念を持つ。
【０００３】
例えば、シミュレータ上で動作させる機構部品は、実際の速度とは異なる動作で実行される。その理由は様々であるが、コンピュータシステム（パーソナルコンピュータ、ワークステーション等）の処理能力によって実物と同じ速度の再現が困難である場合や、逆に効率的な解析のために敢えて実物よりも高速に動作させる場合がある。そのため、シミュレータ上で動作させる複数のアプリケーションは、それぞれ実時間とは異なる仮想時間の概念を持っている。したがって、複数のアプリケーションを連携させて１つのシステムとして動作させる場合には、それぞれの仮想時間を１つの仮想時間に同期させる必要がある。現行のシミュレータでは、システム全体の基準同期時間に従って複数のアプリケーションを同期させる方法が考えられている。
【０００４】
特許文献１は、ソフトウェアデバッガ、メカ論理動作シミュレータ及びハードウェアモデルを接続して協調動作させるソフトウェアデバッグ装置を示している。特許文献１に記載のソフトウェアデバッグ装置は、メカ等を協調動作させるため、デバッグ中にメカの動作をアニメーションで確認するのに有効である。
【特許文献１】特開平１１−３２７９５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述した従来技術によれば、システムを構成する各アプリケーションにおいて、仮想時間の進行を同期させることができる。しかし、同期の精度は予め定められた同期間隔のみに限定される。したがって、同期間隔より短いタイミングでは、アプリケーション間でのイベントの伝達タイミングを同期させることができない。
【０００６】
デバッグ作業においては、例えば、ＣＰＵシミュレータからメカシミュレータへの出力信号に対して、一定時間経過後にメカシミュレータからＣＰＵシミュレータへの応答信号が出力される状況を正確にシミュレーションしたい場合がある。この場合、ＣＰＵシミュレータとメカシミュレータとの仮想時間を所望の精度で一致させる必要がある。
【０００７】
しかしながら、従来技術の同期方法では同期時間を所望の精度以下に短くする必要がある。このように、同期時間を短くすると、同期を行うために必要となる処理の時間が増大し、システムの動作速度が低下してしまう。また、一定時間毎の同期ではなく全てのイベントを対象としたイベントのみによる同期方法も考えられる。しかし、この方法でも発生イベント全てに対して同期をとる必要があるため、システム負荷を増大させてしまう。
【０００８】
本発明は、上述の問題に鑑みて成されたものであり、システム負荷を増大させることなく、複数のアプリケーションの処理を同期させるシミュレーション同期装置及びその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、例えば、シミュレーション同期装置として実現できる。本シミュレーション同期装置は、それぞれ固有の仮想時間を有し、独立して動作する複数のシミュレーション実行手段と、各シミュレーション実行手段の仮想時間の進行を同期させ、かつ、複数のシミュレーション実行手段に含まれる第１のシミュレーション実行手段と第２のシミュレーション実行手段との間で送受信される同期イベント及び応答イベントを中継する同期手段とを備え、第１のシミュレーション実行手段は、同期手段を中継して第２のシミュレーション実行手段に同期イベントを送信する同期イベント送信手段と、同期イベントの送信に伴って、第１のシミュレーション実行手段における仮想時間の進行を停止させる停止手段とを備え、同期手段は、第１のシミュレーション実行手段から送信される同期イベントを受信し、第２のシミュレーション実行手段に送信する中継手段を備え、第２のシミュレーション実行手段は、同期イベントを同期手段から受信して、同期イベントに対する処理を行う処理手段と、同期手段から受信した同期イベントに対応する応答イベントを同期手段に送信する応答イベント送信手段とを備え、同期手段は、さらに、第２のシミュレーション実行手段から、応答イベントを受信する応答イベント受信手段と、受信した応答イベントに基づいて、第１のシミュレーション実行手段で処理を行うべき処理時間を決定する決定手段と、決定された処理時間を第１のシミュレーション実行手段へ送信する処理時間送信手段とを備え、第１のシミュレーション実行手段は、さらに、同期手段から受信した処理時間の処理を行うために、停止中の仮想時間の進行を再開させる再開手段と、処理時間の処理を終了した後に処理の終了を通知する通知手段とを備え、中継手段は、通知手段で通知された処理の終了に応じて第２のシミュレーション実行手段から受信した応答イベントを、第１びシミュレーション実行手段に送信することを特徴とする。
【００１０】
また、本発明は、例えば、それぞれ固有の仮想時間を有し、独立して動作する複数のシミュレーション実行手段と、各シミュレーション実行手段の仮想時間の進行を同期させ、かつ、複数のシミュレーション実行手段に含まれる第１のシミュレーション実行手段と第２のシミュレーション実行手段との間で送受信される同期イベント及び応答イベントを中継する同期手段とを備えるシミュレーション同期装置の制御方法として実現できる。本制御方法において、前記第１のシミュレーション実行手段は、前記同期手段を中継して前記第２のシミュレーション実行手段に前記同期イベントを送信するステップと、前記同期イベントの送信に伴って、該第１のシミュレーション実行手段における仮想時間の進行を停止させるステップとを実行し、前記同期手段は、前記第１のシミュレーション実行手段から送信される前記同期イベントを受信し、前記第２のシミュレーション実行手段に送信する中継ステップを実行し、前記第２のシミュレーション実行手段は、前記同期イベントを前記同期手段から受信して、前記同期イベントに対する処理を行うステップと、前記同期手段から受信した同期イベントに対応する前記応答イベントを前記同期手段に送信するステップとを実行し、前記同期手段は、さらに、前記第２のシミュレーション実行手段から、前記応答イベントを受信するステップと、前記受信した応答イベントに基づいて、前記第１のシミュレーション実行手段で処理を行うべき処理時間を決定するステップと、前記決定された処理時間を前記第１のシミュレーション実行手段へ送信するステップとを実行し、前記第１のシミュレーション実行手段は、さらに、前記同期手段から受信した処理時間の処理を行うために、停止中の仮想時間の進行を再開させるステップと、前記処理時間の処理を終了した後に処理の終了を通知するステップとを実行し、前記中継ステップは、前記通知された処理の終了に応じて前記第２のシミュレーション実行手段から受信した応答イベントを、前記第１のシミュレーション実行手段に送信することを特徴とする。
【発明の効果】
【００１１】
本発明は、例えば、システム負荷を増大させることなく、それぞれの仮想時間を有する複数のアプリケーションの処理を同期させるシミュレーション同期装置及びその制御方法を提供できる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明に係る実施形態について図面を用いて説明する。なお、以下の実施の形態は特許請求の範囲に記載された発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１３】
［第１の実施形態］
以下では、図１乃至図１０を参照して、第１の実施形態について説明する。本実施形態に係るシミュレーション同期装置は、それぞれ固有の仮想時間を有する複数のアプリケーションが独立して行うシミュレーション実行処理をシステム全体の仮想時間に同期させる。さらに、シミュレーション同期装置は、何れか１つのアプリケーションから予め定義された同期イベントが送信されると、当該同期イベントの送信元及び送信先のアプリケーション（第１のシミュレーション実行手段、第２のシミュレーション実行手段）のシミュレーション実行処理を同期させる。ここで、予め定義された同期イベントとは、アプリケーションが他のアプリケーションと同期して処理を実行したい場合に送信するイベントを示す。
【００１４】
また、以下の説明では、本発明のシミュレーション同期装置が１つの情報処理装置内で適用される場合について説明する。具体的に、制御手段として機能する制御部が各アプリケーションの処理をシステム全体の仮想時間に同期させる方法を一例として説明する。しかしながら、本発明は、各アプリケーションが実装された個別の情報処理装置（シミュレーション実行手段）として適用され、制御部が１つの情報処理装置（各情報処理装置間の同期処理を実行する装置、同期手段）として適用されてもよい。さらに、以下で説明する実施形態は、プリンタやファクシミリなどの画像形成装置のシミュレータに本発明を適用した例について説明する。
【００１５】
＜情報処理装置１００の構成＞
図１は、第１の実施形態に係るシミュレーション同期装置としての情報処理装置のハードウェア構成を示す図である。ここでは、主に本発明に関する構成要素について説明を記載する。即ち、本発明は、他の構成要素を含んで構成されてもよい。
【００１６】
情報処理装置１００は、制御手段として機能する中央処理装置（以下、ＣＰＵと称す）１０１を備える。ＣＰＵは、バス１１０を介して、ＲＯＭ１０２、ＲＡＭ１０３、入力インタフェース１０４、出力インタフェース１０６及び記憶装置インタフェース１０８と接続される。入力インタフェース１０４は、キーボード、マウス、タブレット等の入力装置１０５に接続され、操作者からの入力を取得する。出力インタフェース１０６は、ＣＲＴやＬＣＤなどの表示装置１０７ａ、プリンタやプロッタなどの出力装置１０７ｂに接続され、データ等の表示及び出力行う。記憶装置インタフェース１０８は、装置内部の記憶装置、例えば、ハードディスク１１１や、外部記憶装置、例えば、フロッピー（登録商標）ディスクなどの読み取り装置１１２に接続され、データの入出力を行う。
【００１７】
ＲＯＭ１０２は、バス１１０を介してＣＰＵ１０１からアクセス可能な読み出し専用のメモリである。ＲＡＭ１０３は、バス１１０を介してＣＰＵ１０１から読み書き可能なメモリである。ハードディスク１１１には、プリンタの各機能を実現した処理プログラム１１１ａ、シミュレーションのための各種設定データ１１１ｂ及びファームウェア１１１ｃを格納する。
【００１８】
プリンタのシミュレーションを行う場合、ＣＰＵ１０１は、処理プログラム１１１ａ、各種設定データ１１１ｂ、ファームウェア１１１ｃをＲＡＭ１０３にロードして実行する。また、情報処理装置１００の基本動作は、基本プログラムであるオペレーティングシステム（以下、ＯＳと称す）を介して実行される。本実施形態では、情報処理装置１００のＯＳとして、Ｍｉｃｒｏｓｏｆｔ社のＷｉｎｄｏｗｓ（登録商標）を適用する。しかし、本発明はＷｉｎｄｏｗｓ（登録商標）上のシステムに限定されるものではない。
【００１９】
図２は、第１の実施形態に係る情報処理装置１００の制御ブロックを示す図である。ここでは、本発明に関する制御ブロックについてのみ説明を記載する。したがって、本発明に係る情報処理装置１００は、他の制御ブロックを含んで構成されてもよい。
【００２０】
情報処理装置１００は、アプリケーションとして機能するＣＰＵシミュレータ２０１、メカシミュレータ２０２及びシミュレータアプリケーション２０３を含む。また、ＣＰＵ１０１は、各アプリケーションの処理を同期させるための制御手段として機能する制御部２０４を含む。また、各アプリケーションは、ハードディスク１１１又は読み取り装置１１２を介して外部記憶装置からＲＡＭ１０３にロードされて実行される。
【００２１】
＜各アプリケーションの詳細＞
以下では、各アプリケーションの詳細について説明する。ＣＰＵシミュレータ２０１、メカシミュレータ２０２及びシミュレータアプリケーション２０３は、それぞれがＷｉｎｄｏｗｓ（登録商標）上で個別に動作するアプリケーションであり、それぞれが独立したプロセスとして存在する。更に、シミュレータアプリケーション２０３は機能によって複数の独立したアプリケーション２２３ａ、２２３ｂで構成されてもよい。
【００２２】
ＣＰＵシミュレータ２０１は、シミュレーション対象となるＣＰＵ（以下、ターゲットＣＰＵと称す）の動作を情報処理装置１００上で実現するアプリケーションである。ここで、ターゲットＣＰＵとは、情報処理装置１００に搭載されているＣＰＵ１０１ではなく、シミュレーションの対象となる装置（本実施形態ではプリンタとなる。）に搭載され、当該プリンタを制御するためのＣＰＵを示す。ＣＰＵシミュレータ２０１は、ターゲットＣＰＵ２２１の制御プログラム（以下、ターゲットファームウエアと称す）に従って、ターゲットＣＰＵ２２１の端子に対応して定義された仮想入力端子の情報を読み込み、仮想出力端子を制御する。
【００２３】
メカシミュレータ２０２は、アクチュエータ、センサを含む複数の部品からなる機構モデルを情報処理装置１００上で擬似的に動作させるアプリケーションである。機構モデルの各要素（以下、機構部品と称す）は、操作者２３０により形状、種類、動作、機構部品間の干渉と連携条件等が定義される。さらに、センサ、アクチュエータについては外部信号定義が行われる。これら機構部品の定義は、ＣＡＤ図面から自動設定されるか、専用の機構モデル作成ソフトウェアを操作者２３０が操作して設定されるか、又は、その両方の組み合わせで設定される。
【００２４】
機構部品の種類としては、機能定義がなされるモータ、ソレノイド、クラッチ、センサ、歯車、カム、ローラ等や、単なる物体として定義される部品がある。また、機構部品には、シミュレーションの対象となる装置の構成要素ではなく、装置の動作シミュレーションに必要なものも含まれる。例えば、プリンタのシミュレーションの場合、用紙が該当する。これらの機構部品は、シミュレーションを実行する際に、情報処理装置１００の表示装置１０７ａ上に２次元、又は３次元のグラフィックとして表示される。
【００２５】
メカシミュレータ２０２は、ＣＰＵシミュレータ２０１から制御部２０４を介して送られてきたアクチュエータ動作信号に対応して、該当するアクチュエータの機構モデルを動作させる。さらに、機構定義に基づきアクチュエータに連結された機構部品をアクチュエータの動作に関連付けて動作させる。また、操作者２３０による入力に対する動作については、操作者２３０による入力装置１０５への操作を擬似的に再現し、擬似操作に応じて対象となる機構部品を動作させる。さらに、メカシミュレータ２０２は、機構部品間の干渉や連携定義に従って、関連する全ての機構部品の動作を再現する。これら機構部品の動作は、表示装置１０７ａに表示されたグラフィックとして再現されるとともに、機構モデルの動作の結果として発生する出力信号をＣＰＵシミュレータ２０１へ制御部２０４を介して送信する。例えば、機能モデルとして定義されたセンサでは、予め定義された作用が発生すると、作用に応じたセンサ信号を発生させる。
【００２６】
シミュレータアプリケーション２０３は、プリンタの各種試験を行うためのアプリケーションである。例えば、仮想装置に対する外的作用を設定したりシミュレーションの結果を解析、表示、保存する機能を有する。シミュレーションの対象となる実際の装置は、その装置を使用する操作者２３０やその装置に接続されたパーソナルコンピュータによって、外部から様々な作用を受けて動作する。したがって、シミュレータアプリケーション２０３は、これら外的作用の中で、メカシミュレータ２０２で設定される機構的な外的作用以外のものを擬似的に設定する機能を提供する。例えばプリンタの場合、機構的な外的作用としては、給紙カセットの操作や消耗部品の取り外し、取り付け等が挙げられる。一方、それ以外の外的作用としては、ホストＰＣからの各種命令の受信、操作者２３０によるオペレーションパネルの操作、環境温度の変化等が挙げられる。
【００２７】
さらに、シミュレータアプリケーション２０３は、これらの外的作用を設定するための専用のユーザインターフェース（以下、ＵＩと称す）を提供する。シミュレータアプリケーション２０３は、ＵＩによる設定に従って制御部２０４を介してＣＰＵシミュレータ２０１やメカシミュレータ２０２に所定の外的作用を与える。具体的に、シミュレータアプリケーション２０３は、図１に示すハードディスク１１１に格納された設定データ１１１ｂを読み出して、ＣＰＵシミュレータ２０１やメカシミュレータ２０２に対して一連の外的作用を与えてもよい。この場合、設定データ１１１ｂには、連続した外的作用の設定手順を記述したマクロ命令ファイルや一連の外的作用データを記述したファイルが格納されている。
【００２８】
また、シミュレータアプリケーション２０３は、上述の外的作用の設定機能のほかに、シミュレーションの結果として出力される各種データの解析、試験目的に応じた各種情報の表示、及びハードディスク１１１に保存する機能を有する。具体的には、各種信号の変化をタイミングチャートとして表示したり、一連の動作を予め想定された動作と比較してその正当性を評価する。また、正当性の評価結果を事象として可視的に表示する機能を有している。
【００２９】
これらのＣＰＵシミュレータ２０１、メカシミュレータ２０２及びシミュレータアプリケーション２０３は、それぞれが独立した仮想時間で動作を行う。したがって、複数のアプリケーションに関連する動作をシミュレーションする場合、システム全体としての仮想時間に同期させる必要がある。そのため、本実施形態に係る情報処理装置１００は、複数のアプリケーションの処理をシステム全体の仮想時間に同期させるとともに、アプリケーション間で送受信されるイベントを中継する制御部２０４を備える。
【００３０】
＜制御部２０４の詳細＞
以下では、制御部２０４の詳細について説明する。制御部２０４は、制御ブロックとして、配線部２０６、システム管理部２１０、決定部２１３、開始部２１２及び導出部２１５を備える。また、制御部２０４と各アプリケーションとは、それぞれＩ／Ｆ２０５（ａ〜ｄ）で接続される。Ｉ／Ｆ２０５（ａ〜ｄ）は、例えば、図１に示すバス１１０を利用して実現されてもよい。Ｉ／Ｆ２０５（ａ〜ｄ）は、制御部２０４と各アプリケーションとの接続を中継し、制御部２０４の外部インタフェースを各アプリケーションのインタフェース仕様に対応させる。制御部２０４は、これらの制御ブロックを統括的に制御して、各アプリケーション間でのデータ伝送管理、同期処理、データ伝送履歴（以下、ログと称す）の取得を行う。
【００３１】
システム管理部２１０は、ハードディスク１１１の設定データ１１１ｂに予め設定されたシステム構成の定義情報に従ってＩ／Ｆ２０５（ａ〜ｄ）の構成を管理する。配線部２０６は、配線データベースに予め設定された配線定義情報に基づき、各アプリケーション間の接続を仮想的に実現する。ここで配線データベースとは、アプリケーションと他のアプリケーションとを接続する信号線の設定を一元的に管理しているデータベースである。信号線は、例えば、一意な名称を持つ。したがって、配線部２０６は、この名称をキーにして各Ｉ／Ｆ２０５（ａ〜ｄ）に対して各アプリケーションの送受信を設定する。
【００３２】
また、配線部２０６は、各アプリケーションから送信されるイベントを中継して、送信先のアプリケーションへ送信する。そのため、配線部２０６は、送信部２０７、受信部２０８及び中継部２０９を備える。受信部２０８は、アプリケーションから送信されるイベントを受信する。例えば、受信部２０８は、アプリケーションから送信される同期イベントや応答イベントを受信する。送信部２０７は、送信元のアプリケーションから受信したイベントの送信、及び、各アプリケーションの処理タイミングを制御するための送信を行う。中継部２０９は、送信部２０７及び受信部２０８を制御して、各アプリケーションから送信されるイベントを送信先のアプリケーションに送信させる。また、後述のイベント同期処理における同期イベントの指定、同期イベントに対する応答イベントの指定は配線データベースに対して行う。ここで、イベント同期処理とは、あるアプリケーションと他のアプリケーションとを同期して処理を行わせる処理を示し、あるアプリケーションから送信される同期イベントによって処理を開始する。
【００３３】
導出部２１５及び開始部２１２は、複数の独立プロセスである各アプリケーションを組み合わせて動作させるために、それぞれの持つ仮想時間を同期させる制御ブロックである。ここでの同期処理（以下、全体同期処理と称す）は、イベント同期処理とは異なり、アプリケーション全体の処理を一定間隔で同期させる。したがって、イベント同期処理は、全体同期処理よりも詳細な同期処理となる。
【００３４】
導出部２１５は、導出手段として機能し、複数のアプリケーションを同期させるための基準となる基準同期時間を導出する。具体的に、導出部２１５は、各アプリケーションで適用されている仮想時間の情報を取得して、取得した仮想時間に基づいて基準同期時間を導出する。開始部２１２は、開始手段として機能し、導出された基準同期時間に従って各アプリケーションでの処理を開始させる。全体同期処理の詳細については、図４を用いて後述する。
【００３５】
決定部２１３は、上述したイベント同期処理を統括的に制御するための制御ブロックである。イベント同期処理は、何れか１つのアプリケーションから送信された同期イベントをトリガに、当該同期イベントに関連するアプリケーションの処理を同期させる。以下では、同期イベントを送信するアプリケーションを送信元のアプリケーション（第１のシミュレーション実行手段）と称し、同期イベントを受信するアプリケーションを送信先のアプリケーション（第２のシミュレーション実行手段）と称す。また、送信先のアプリケーションは、同期イベントに対する応答イベントを送信する。
【００３６】
本実施形態によれば、イベントに対する同期処理を実現するため、送信元のアプリケーションが同期イベントを送信してから応答イベントを受信するまでに、進行される送信元及び送信先のアプリケーションの仮想時間を一致させる。具体的に、送信元のアプリケーションは、同期イベントを送信すると、自身の仮想時間の進行を停止する。一方、送信先のアプリケーションは、同期イベントを受信すると、当該同期イベントに対する処理を自身の仮想時間に従って処理する。さらに、送信先のアプリケーションは、当該処理が完了すると、同期イベントに対する応答イベントを送信する。制御部２０４は、送信先のアプリケーションが同期イベントに対する処理を実行するために必要とした時間を送信元のアプリケーションへ通知する。送信元のアプリケーションは、受信した時間に従って停止している仮想時間の進行を再開させて処理を実行する。
【００３７】
上述のイベント同期処理を実現するため、決定部２１３は、決定手段として機能し、送信先のアプリケーションから受信した応答イベントに基づいて、送信元のアプリケーションで処理を行うべき処理時間を決定する。また、本実施形態によれば、決定部２１３は、計時手段として機能する計時部２１４を備える。計時部２１４は、送信先のアプリケーションへ同期イベントを送信してから、当送信先のアプリケーションから応答イベントを受信するまでの時間を計時する。したがって、決定部２１３は、計時部２１４によって計時された時間を処理時間として決定する。処理時間が決定されると、送信部２０７は、決定部２１３によって決定された処理時間を送信元のアプリケーションへ送信する。送信元のアプリケーションは、受信した処理時間に従って処理を実行する。
【００３８】
＜各アプリケーションの共通機能＞
次に、図３を参照して、イベント同期処理を行うために必要となる各アプリケーションの共通機能について説明する。図３は、第１の実施形態に係る各アプリケーションの共通の制御ブロックを示す図である。ここでは、イベント同期処理を行うための制御ブロックについてのみ説明を記載する。したがって、各アプリケーションは、他の制御ブロックを含んで構成されてもよい。また、ここでは、説明を容易にするため、ＣＰＵシミュレータ２０１、メカシミュレータ２０２及びシミュレータアプリケーション２０３を概念的に１つのブロックで説明する。さらに、ここで、説明するアプリケーションは、それぞれが同期イベントを送信するアプリケーション及び同期イベントを受信するアプリケーションとして機能する。
【００３９】
各アプリケーションは、通信部３０１、処理部３０２、停止部３０３及び再開部３０４を備える。通信部３０１は、送信部３０５及び受信部３０６を備え、制御部２０４との通信を制御する。停止部３０３及び再開部３０４は、イベント同期処理を実現するための制御ブロックとなる。処理部３０２は、処理手段として機能し、制御部２０４からみの指示により各種処理を実行する。
【００４０】
送信部３０５は、送信手段として機能し、例えば、他のアプリケーションと同期して処理を行いたい場合に、通信部３０１を介して制御部２０４へ同期イベントを送信する。停止部３０３は、同期イベントが送信されると自身の仮想時間の進行を停止させるとともに、実行中の処理を停止させる。ここで、停止部３０３は、再開部３０４に対して、仮想時間の進行を停止する際に処理されていたデータを通知することが望ましい。このデータは、再開部３０４が停止中の処理を再開するために必要となるデータを示す。したがって、再開部３０４は、停止中の仮想時間の進行を再開させるとともに、このデータを用いて停止中の処理を再開させる。具体的に、再開部３０４は、同期イベントの送信先のアプリケーションが当該同期イベントに対する処理を実行するために必要となる処理時間を制御部２０４から受信すると、停止中の処理を再開させる。
【００４１】
＜全体同期処理＞
次に、図４を参照して、本発明の前提となる各アプリケーションの処理を同期させる全体同期処理について説明する。図４は、各アプリケーションの処理を同期させる全体同期処理を説明する図である。
【００４２】
Ｔｓは、基準同期時間を示す。各アプリケーションは、開始部２１２によって通知される基準同期時間Ｔｓに従って処理を実行する。実線４０１は、各アプリケーションが個々の仮想時間に従って基準同期時間分の処理を実行している状態を示す。破線４０２は、当該アプリケーションが基準同期時間分の処理を完了し、他の全てのアプリケーションが基準同期時間分の処理を完了するまでに仮想時間の進行を停止している状態を示す。４０３は、各アプリケーションで基準同期時間Ｔｓに従った処理が開始されてから、全てのアプリケーションが基準同期時間分の処理を完了するまでの時間となる１同期単位を示す。４０４、４０５も同様に異なるパターンの一同期単位を示す。
【００４３】
図４に示すように、各アプリケーションは、同じ基準同期時間Ｔｓであっても、それぞれが持っている仮想時間に対応させて処理を行うと、処理を完了するまでの実時間が異なる。このような制御を実現するために各アプリケーションは、受信した基準同期時間分の処理が完了すると、他の全てのアプリケーションが処理を完了するまで仮想時間の進行を停止させる。例えば、１同期単位４０３においては、アプリケーション３が処理を完了するまで、他のアプリケーションは基準同期時間分の処理を完了した後に仮想時間を停止することとなる。全てのアプリケーションが基準同期時間分の処理を完了すると、開始部２１２は、全てのアプリケーションに対して再び基準同期時間Ｔｓに従った処理を開始させる信号を送信する。これにより、各アプリケーションは、再び基準同期時間Ｔｓに従って処理を開始する。このように、全体同期処理は、全てのアプリケーションの処理を一定の間隔で同期させる。
【００４４】
次に、図５及び図６を参照して、各アプリケーション及び制御部２０４の全体同期処理の制御について説明する。図５は、各アプリケーションにおける全体同期処理の制御手順について説明するフローチャートである。ここで説明する処理は、各アプリケーション、即ち、ＣＰＵシミュレータ２０１、メカシミュレータ２０２及びシミュレータアプリケーション２０３が行う全体同期処理の共通処理を示す。
【００４５】
まず、ステップＳ５０１において、アプリケーションは、仮想時間を停止する。具体的に、アプリケーションは、仮想時間を停止し、仮想時間に従って実行される処理も停止する。次に、ステップＳ５０２において、外部（ここでは、制御部２０４となる）から所定のＩ／Ｆを介して仮想時間の進行指示を受信したか否かを判定する。受信していなければ、定期的に判定を繰り返す。一方、受信すると、ステップＳ５０３において、アプリケーションは、仮想時間の進行を開始するとともに、仮想時間に従って実行される処理も開始する。
【００４６】
次に、ステップＳ５０４において、アプリケーションは、仮想時間の進行指示が時間指定（基準同期時間Ｔｓの指定）を伴っているか否かを判定する。時間指定を伴っている場合には、Ｓ５０５以下の時間限定処理に遷移する。一方、時間指定を伴っていない場合には、Ｓ５１１以下の連続実行処理に進む。
【００４７】
時間指定を伴う場合、ステップＳ５０５において、アプリケーションは、指定された時間（仮想上の時間）が経過しているか否かを判定する。指定時間が経過していない場合、ステップＳ５０６において、アプリケーションは、仮想時間に従って実行される処理上の内部イベント（外部に対して送信すべき変化）を確認する。内部イベントが発生している場合、ステップＳ５０７で内部イベントを仮想時間上のタイミング情報とともに外部に送信した後、Ｓ５０１に戻って仮想時間を停止する。
【００４８】
Ｓ５０６で内部イベントが発生していない場合、ステップＳ５０９において、アプリケーションは、外部からのイベントとなる外部イベントを受信している否かを通信部３０１によって確認する。外部イベントがあれば、ステップＳ５１０において、アプリケーションは、外部イベントに対する内部処理を行うとともに外部に対して外部イベント受付の仮想時間上のタイミングを送信した後、Ｓ５０１に戻って仮想時間を停止する。
【００４９】
Ｓ５０６で内部イベントが発生せず、Ｓ５０９で外部イベントも受信していない場合、指定された仮想時間が経過するまでＳ５０５以下の処理を継続する。
【００５０】
Ｓ５０５で指定された仮想時間の処理が経過すると、ステップＳ５０８において、アプリケーションは、外部に指定時間の処理終了を送信してＳ５０１に戻り仮想時間を停止する。
【００５１】
一方、Ｓ５０４で仮想時間の進行指示が時間指定を伴わない場合、ステップＳ５１１において、アプリケーションは、外部から処理の終了指示が通知されているか否かを判定する。終了指示が通知されていない場合、アプリケーションは、Ｓ５１１以下の処理で外部からの終了指示まで処理を繰り返し継続する。その間の、内外のイベントに対する処理（Ｓ５１２〜Ｓ５１５）は、時間指定時のＳ５０６〜Ｓ５１０と同様であるため説明を省略する。Ｓ５１１で、外部からの終了指示を受けている場合、Ｓ５１６でそのときの仮想時間上のタイミングを外部に送信し、Ｓ５０１に戻って仮想時間を停止する。
【００５２】
図６は、制御部２０４における全体同期処理の制御手順について説明するフローチャートである。ここでの処理は、制御部２０４によって統括的に制御される。
【００５３】
まず、ステップＳ６０１において、制御部２０４は、仮想上の基準同期時間Ｔｓの処理実行を各アプリケーションに指示する。次に、ステップＳ６０２において、制御部２０４は、全てのアプリケーションが基準同期時間Ｔｓに従った処理を終了したか否かを判定する。ここで、制御部２０４は、各アプリケーションから処理の終了を示す通知を受信しているか否かを判定する。全アプリケーションから終了通知を受信している場合、Ｓ６０１に処理を遷移させ、再び１同期分の処理を行わせる。
【００５４】
一方、Ｓ６０２で何れかのアプリケーションから終了通知を受信していない場合、ステップＳ６０３において、制御部２０４は、アプリケーションからのイベント受信をチェックする。何れかのアプリケーションからイベントを受信している場合、ステップＳ６０４において、制御部２０４は、送信先のアプリケーションにイベントを送信する。その後、ステップＳ６０５において、制御部２０４は、全アプリケーションに対して同期までの仮想上の残り時間（１同期時間からイベント発生、または、イベント送信間での仮想時間を引いた時間）分の処理実行を指示する。その後、制御部２０４は、処理をＳ６０２に遷移させる。一方、Ｓ６０３でアプリケーションからイベントを受信していないと判断した場合、制御部２０４は、処理をＳ６０２に遷移させる。
【００５５】
次に、図７を参照して、全体同期処理におけるシステム全体の状況について説明する。図７は、全体同期処理における制御部２０４及び各アプリケーションの連携状況を示す図である。ここでは、説明を容易にするため、アプリケーションを２つに想定する。しかしながら、全体同期処理は、同様の方法で３つ以上のアプリケーションに対して適用できる。また、ここでは、基準同期時間に従った処理の途中にアプリケーション１からアプリケーション２へイベントが送信される場合を想定している。図７に示す白丸は、制御部２０４又は各アプリケーションの処理を示す。各処理からの矢印は、情報の流れを示す。
【００５６】
ステップＳ７０１において、制御部２０４は、各アプリケーションに対して基準同期時間Ｔｓの処理実行を指示する。ステップＳ７０２、Ｓ７０３において、各アプリケーションは、処理実行の指示を受信すると、それぞれの仮想時間による基準同期時間分の処理を開始する。
【００５７】
基準同期時間に従った処理の実行中に、ステップＳ７０４において、アプリケーション１は、イベントを送信する。アプリケーション１が送信したイベントを受信すると、ステップＳ７０５において、制御部２０４は、アプリケーション２にイベントを送信するとともに、各アプリケーションに対して残りの基準同期時間分の処理実行を指示する。ステップＳ７０６において、アプリケーション２は、アプリケーション１が送信したイベントを受信する。続いて、ステップＳ７０７及びＳ７０８において、各アプリケーションは、制御部２０４からの処理実行の指示を受信し、処理を開始する。
【００５８】
ここで、残りの基準同期時間はアプリケーション１がＴｓ−Ｔ１、アプリケーション２がＴｓ−Ｔ２となる。基準同期時間に従った処理を開始してから各アプリケーションのイベント発生までの時間は実時間上は同じ時間になる。しかし、それぞれのアプリケーションの実時間に対する仮想時間の進行速度が異なるため、仮想時間Ｔ１、Ｔ２は異なる。
【００５９】
ステップＳ７０９乃至Ｓ７１３は、アプリケーション２からアプリケーション１へのイベントが発生した場合について示す。これらの処理は、Ｓ７０４乃至Ｓ７０８の処理と同様であるため、説明を省略する。
【００６０】
その後、ステップＳ７１４において、アプリケーション１は、指定時間分の処理を終了し、終了通知を制御部２０４へ送信し、仮想時間を停止させる。ステップＳ７１５において、制御部２０４は、アプリケーション１から送信された終了通知を受信する。一方、ステップＳ７１６において、アプリケーション２は、指定時間分の処理を終了し、終了通知を制御部２０４へ送信し、仮想時間を停止させる。ステップＳＳ７１７において、制御部２０４は、アプリケーション２から送信された終了通知を受信する。ここで、制御部２０４は、全てのアプリケーションから終了通知を受信したと判断し、各アプリケーションに対してＳ７０１と同様に基準同期時間Ｔｓの処理実行を指示する。その後、ステップＳ７１８及びＳ７１９において、各アプリケーションは、処理実行の指示を受信すると、再び、それぞれの仮想時間による基準同期時間分の処理を開始する。
【００６１】
このように、本実施形態に係る情報処理装置１００は、全体同期処理を実行する。しかしながら、全体同期処理だけでは１つのイベントに関連するアプリケーションの処理を同期させることは難しい。この問題について、図８を参照して説明する。図８は、全体同期処理を行っている間に発生するイベントが各アプリケーションの仮想時間上でどのようなタイミングとして捕らえられるかを説明する図である。
【００６２】
Ｓ７０４でアプリケーション１から送信されるイベントは、アプリケーション１にとっては同期処理開始から仮想時間Ｔ１後に発生している。しかしながら、Ｓ７０６でアプリケーション２がイベントを受信する時間は、アプリケーション２にとっては同期処理開始から仮想時間Ｔ２後として捕らえられる。
【００６３】
また、Ｓ７０９でアプリケーション２から送信されるイベントは、アプリケーション２にとってはＳ７０６からＳ７０９までの仮想時間Ｔ３で発生している。しかしながら、Ｓ７１１でアプリケーション１がイベントを受信する時間は、アプリケーション１にとってはＳ７０４からＳ７１１までの仮想時間Ｔ４となる。
【００６４】
ここで、図８に示すように、イベントの発生時点においてＴ１＞Ｔ２、Ｔ３＞Ｔ４となり、各アプリケーションにおける仮想時間の進行状況が異なる。例えば、これらのイベントに対する処理を正確にシミュレーションしたい場合、各アプリケーションにおける仮想時間の進行状況をイベントに対応させて同期させる必要がある。本実施形態における情報処理装置１００は、このようなイベントに対する各アプリケーションの処理も同期させるため、イベント同期処理を行う。
【００６５】
＜イベント同期処理＞
次に、図９及び図１０を参照して、本発明の特徴となる全体同期処理にイベント同期処理を追加した制御について説明する。図９は、第１の実施形態に係るイベント同期処理を含む全体同期処理の処理手順を示すフローチャートである。以下で説明する処理は、制御部２０４によって統括的に制御される。ここで、図６を用いて説明した処理と同様の処理については、説明を省略する。即ち、Ｓ９０１乃至Ｓ９０３の処理は、Ｓ６０１乃至Ｓ６０３の処理と同様であるため説明を省略する。
【００６６】
何れかのアプリケーションからイベントを受信している場合、ステップＳ９０４において、Ｓ６０４と同様に、他のアプリケーションに受信したイベントを送信する。さらに、制御部２０４は、イベントが同期イベントであった場合に必要となる計時部２１４による計時を開始する。計時部２１４は、同期イベントを送信先のアプリケーションへ送信してから、送信先のアプリケーションから同期イベントに対する応答イベントを受信するまでの時間を計時する。その後、図６のフローチャートでは、全アプリケーションに対して基準同期時間までの処理実行を指示して、Ｓ６０２の待機処理に遷移していた。しかし、本実施形態では、イベント同期処理を行うために以下の処理が異なる。
【００６７】
ステップＳ９０５において、制御部２０４は、発生したイベントが予め定義された同期イベントであるか否かを判定する。同期イベントであればＳ９０６以降のイベント同期処理を行う。ここで、同期イベントの送信元のアプリケーションに含まれる送信部３０５は、同期イベント送信手段として機能し、他のアプリケーションと同期して処理を行いたい場合に制御部２０４を中継して送信先のアプリケーションへ予め定義された同期イベントを送信する。その後、送信元のアプリケーションは、停止部３０３によって、自身の仮想時間の進行を停止する。一方、同期イベントでない場合、Ｓ９１２の処理へ遷移する。
【００６８】
ステップＳ９０６において、制御部２０４は、同期イベントを送信した送信元のアプリケーション以外のアプリケーションに対して時間設定のない連続実行を指示する。ここで、送信元のアプリケーションは、仮想時間を停止している。その後、ステップＳ９０７において、制御部２０４は、何れかのアプリケーションからイベントが送信されているか否かを判定する。イベントが送信されている場合、ステップＳ９０８において、制御部２０４は、同期イベントに対して予め定義された応答イベントであるか否かを判定する。ここで、応答イベントでない場合、ステップＳ９１３において、制御部２０４は、全アプリケーションにイベントを送信して再びＳ９０７のイベント待ちに遷移する。応答イベントである場合、制御部２０４は、処理をＳ９０９に遷移させる。この応答イベントは、送信先のアプリケーションが送信したものとなる。このとき、送信先のアプリケーションに含まれる送信部３０５は、応答イベント送信手段として機能し、同期イベントに対する処理が終了すると、制御部２０４へ応答イベントを送信する。
【００６９】
一方、イベントが応答イベントである場合、ステップＳ９０９において、制御部２０４は、同期イベントの送信元のアプリケーションに対して、処理時間を送信して停止中の処理を再開させる。ここで、処理時間とは、同期イベントに対する処理を実行するために送信先のアプリケーションが必要とした時間を示す。この処理時間は、決定部２１３によって決定される。具体的に、決定部２１３は、計時部２１４によって計時された同期イベントを送信してから応答イベントを受信するまでの時間を処理時間として決定する。さらに、送信部２０７は、処理時間送信手段として機能し、決定された処理時間を送信先のアプリケーションへ送信する。処理時間を受信すると、送信元のアプリケーションは、制御部２０４から受信した処理時間の処理を行うために、停止中の仮想時間の進行を再開させる。
【００７０】
続いて、ステップＳ９１０において、制御部２０４は、送信元のアプリケーションが指定時間の処理を終了したか否かを判定する。具体的に、制御部２０４は、送信元のアプリケーションからの終了通知を受信していると、送信元のアプリケーションが指定時間の処理を終了したと判定する。ここで、送信元のアプリケーションに含まれる送信部３０５は、通知手段として機能し、処理部３０２が処理時間分の処理を終了した後に処理の終了を制御部２０４へ通知する。一方、受信していない場合、制御部２０４は、定期的にＳ９１０の処理を繰り返す。
【００７１】
ステップＳ９１１において、制御部２０４は、送信元のアプリケーションに対して応答イベントを送信する。その後、ステップＳ９１２において、制御部２０４は、全てのアプリケーションに対して基準同期時間までの残りの処理実行を指示する。これに対する各アプリケーションのイベント同期処理は、図５を用いて説明した処理と同様である。
【００７２】
次に、図１０を参照して、イベント同期処理におけるシステム全体の状況について説明する。図１０は、イベント同期処理における制御部２０４及び各アプリケーションの連携状況を示す図である。ここでは、説明を容易にするため、アプリケーションを２つに想定する。しかしながら、イベント同期処理は、同様の方法で３つ以上のアプリケーションに対して適用できる。図１０に示す白丸は、制御部２０４又は各アプリケーションの処理を示す。各処理からの矢印は、情報の流れを示す。
【００７３】
ステップＳ１００１において、制御部２０４は、各アプリケーションに対して基準同期時間Ｔｓの処理実行を指示する。ステップＳ１００２、Ｓ１００３において、各アプリケーションは、処理実行の指示を受信すると、それぞれの仮想時間による基準同期時間分の処理実行を開始する。
【００７４】
基準同期時間Ｔｓに従った処理の実行中に、ステップＳ１００４において、アプリケーション１は、同期イベントを送信する。ここで、アプリケーション１は、仮想時間を停止するとともに、処理を停止する。アプリケーション１が送信した同期イベントを受信すると、ステップＳ１００５において、制御部２０４は、アプリケーション２に同期イベントを送信するとともに、アプリケーション２に対して時間制限のない連続処理実行を指示する。さらに、制御部２０４は、ここで計時部２１４による計時を開始させる。
【００７５】
ステップＳ１００６、Ｓ１００７において、アプリケーション２は、同期イベント及び連続処理実行の指示を受信し、連続実行処理を開始する。その後、ステップＳ１００８において、アプリケーション２は、同期イベントに対する処理を実行した後に、同期イベントに対する応答イベントを送信する。ここで、応答イベントの送信は、同期イベントを受信してから仮想時間Ｔ３時間後となる。さらに、応答イベントを送信すると、アプリケーション２は、仮想時間の進行を停止するとともに、処理を停止する。
【００７６】
ステップＳ１００９において、制御部２０４は、応答イベントを受信すると、決定部２１３により上述した処理時間を決定し、決定した処理時間（Ｔ３）をアプリケーション１へ送信する。ここで、制御部２０４に含まれる受信部２０８は、応答イベント受信手段として機能し、アプリケーション２から応答イベントを受信する。指示された処理時間を受信すると、ステップＳ１０１０において、アプリケーション１は、停止中の仮想時間の進行を再開させ、指定された時間（Ｔ３）の処理を実行する。その後、ステップＳ１０１１において、アプリケーション１は、指定時間（Ｔ３）の処理が終了したことを報知するために終了通知を送信する。
【００７７】
終了通知を受信すると、ステップＳ１０１２において、制御部２０４は、アプリケーション１に応答イベントを送信するとともに、全てのアプリケーションに対しそれぞれの残り時間の処理実行を指示する。ステップＳ１０１３において、アプリケーション１は、応答イベントを受信する。この場合の残り時間は、アプリケーション１でＴｓ−（Ｔ１＋Ｔ３）、アプリケーション２でＴｓ−（Ｔ２＋Ｔ３）となる。その後の基準同期終了、次の全体同期処理の再開は図７と同様な処理であるため説明を省略する。
【００７８】
このように、情報処理装置１００は、アプリケーション２が同期イベントを受信してから応答イベントを送信するまでの仮想時間の進行と、アプリケーション１が同期イベントを送信してから応答イベントを受信するまでの仮想時間の進行とを一致させうる。したがって、アプリケーション１及びアプリケーション２は、同期イベントに対する処理を仮想的に同期させて行うことができる。
【００７９】
以上説明したように、本実施形態に係る情報処理装置１００は、それぞれ固有の仮想時間を有し、独立して動作するアプリケーションと、各アプリケーションの処理をシステム全体の仮想時間に同期させる。これに加えて、本情報処理装置１００は、同期イベントが送信された場合に、送信先のアプリケーションにおける同期イベントに対する処理時間と、送信元のアプリケーションが同期イベントを送信してから応答イベントを受信するまでの時間とを同期させる。これにより、本情報処理装置１００は、特定のアプリケーション間の処理について時間精度の高い同期処理を行うことができる。したがって、本情報処理装置１００は、システム負荷を増大させることなく、それぞれの仮想時間を有する複数のアプリケーションの処理を同期させうる。
【００８０】
なお、本発明は、上述の実施形態に限らず様々な変形が可能となる。例えば、本情報処理装置１００は、送信先のアプリケーションへ同期イベントを送信してから、当該送信先のアプリケーションから応答イベントを取得するまでの時間を計時する。これにより、本情報処理装置１００は、仮想時間を停止している送信元のアプリケーションに対して、送信先のアプリケーションが同期イベントに対する処理に要した処理時間を通知することができる。よって、本情報処理装置１００は、容易に、イベント同期処理を実現することができる。
【００８１】
また、本情報処理装置１００は、独立した仮想時間を有する複数のアプリケーションの処理を同期させるために、システム全体の仮想時間に同期させた基準同期時間を導出し、各アプリケーションの処理を制御する。これにより、本情報処理装置１００は、システム全体の同期処理を大きな時間単位で効率良く行い、さらに、特定のアプリケーション間の処理について時間精度の高い同期処理を行うことができる。したがって、本情報処理装置１００は、システム負荷を増大させることなく、それぞれの仮想時間を有する複数のアプリケーションの処理を同期させうる。
【００８２】
また、本実施形態では、シミュレーション同期装置として１つの情報処理装置１００に本発明を適用したが、複数の装置間においても適用することが可能である。例えば、アプリケーションを動作させる複数のアプリケーション（情報処理装置）と、複数のアプリケーションに含まれる第１、第２アプリケーション間の処理を同期させるサーバ（情報処理装置）との間にも適用することができる。この場合、上述した各アプリケーションの機能が各アプリケーションに実装され、上述した制御部２０４の機能がサーバに実装される。これにより、複数の情報処理装置を有する大規模なシミュレーションも可能となる。
【００８３】
［第２の実施形態］
次に、図１１乃至図１３を参照して、第２の実施形態にいついて説明する。本実施形態は、同期イベントの送信先のアプリケーションが、同期イベントに対する処理を完了した後に応答イベントを送信するのに先だって、当該処理を開始する前に応答イベントを送信する予定時間を通知する。これにより、本実施形態に係る情報処理装置１００は、送信元及び送信先のアプリケーションにおいて、上述した処理時間に対応する処理を平行して実行することができる。
【００８４】
具体的に、第１の実施形態で想定した状況と本実施形態で想定する状況との違いについて説明する。第１の実施形態では、同期イベントをトリガに送信先のアプリケーションと送信元のアプリケーションとを、それぞれ交互に処理を実行させる場合を説明した。これは、送信先のアプリケーションが仮想時間にともない進行する処理を実行してはじめて応答イベントの内容、及び、イベント発生タイミングが明確になる場合の処理である。例えば、マルチＣＰＵ構成における２つのＣＰＵ（ＣＰＵ１、ＣＰＵ２）の連携処理を２つのＣＰＵシミュレータを同期連携させてシミュレーションするシステムにおいて考えられる。具体的に、ＣＰＵ１からＣＰＵ２への信号をトリガに、ＣＰＵ２の処理が実行された後に、ＣＰＵ１へ何らかの応答が返るケースをシミュレーションする場合、ＣＰＵ２の応答イベントの内容、タイミングは、ＣＰＵ２の処理を実行してみないと決まらない。
【００８５】
しかし、アプリケーションによっては同期イベントを受信した時点で、そのときの同期イベントの内容、及び、その他の状況により直ちに応答イベントの内容と、タイミングを決定できる場合がる。例えば、ＣＰＵモータの回転速度をフィードバック制御する制御系のシミュレーションシステムにおいて考えられる。
【００８６】
このシミュレーションシステムは、モータシミュレータと、ＣＰＵシミュレータを備える。モータシミュレータは、モータの画像及びモータ回転速度をグラフとして情報処理装置の表示装置に表示し、外部からの加減速信号に応じてモータイメージ、及び、モータ回転速度グラフの画像を変化させる。さらに、モータシミュレータは、モータの回転速度に比例した周波数のＦＧパルス信号を発生させる。一方、ＣＰＵシミュレータは、制御プログラムに応じてモータ加減速信号を発生させＦＧパルスを外部割込みとして受ける。
【００８７】
これらのシミュレータを同期実行させる場合、モータシミュレータにおいて、モータイメージ、及び、モータ回転速度グラフの画像は、仮想時間の進行とともに変化させる必要がある。しかし、ＦＧパルスの発生タイミングは、ＣＰＵシミュレータからのモータ加減速信号の変化に応じて、その時点のモータ速度、その時点までのモータ速度変化状況等から即時に計算することができる。したがって、モータシミュレータのＦＧパルス発生処理をシミュレーションする場合、同期イベントを受けた時点で応答イベントの内容と、応答イベントのタイミングを即座に決定することができる。本実施形態では、このような状況を想定している。
【００８８】
図１１は、第２の実施形態に係る制御部２０４及び各アプリケーションの制御ブロックを示す図である。ここでは、第１の実施形態と異なる部分についてのみ説明を記載する。
【００８９】
各アプリケーションは、図３に示す制御ブロックに加えて、算出手段として機能する算出部１１０１を備える。算出部１１０１は、同期イベントが送信されると、当該同期イベントに対応する処理が完了する予定時間を算出する。これにより各アプリケーションは、算出部１１０１によって算出された予定時間を付与した応答イベントを制御部２０４へ通知することができる。これにより、決定部２１３は、応答イベントから取得した予定時間を同期イベントに対する処理に要する処理時間として決定する。
【００９０】
図１２は、第２の実施形態に係るイベント同期処理を含む全体同期処理の処理手順を示すフローチャートである。以下で説明する処理は、制御部２０４によって統括的に制御される。ここで、図９を用いて説明した処理と同様の処理については、同一の番号を付し、説明を省略する。即ち、以下では、ステップＳ１２０１乃至Ｓ１２０４の処理についてのみ説明を記載する。
【００９１】
Ｓ９０５において送信されたイベントが同期イベントであると判定されると、ステップＳ１２０１において、制御部２０４は、送信先のアプリケーションからの応答イベントを受信したか否かを判定する。ここで、送信先のアプリケーションは、上述したモータシミュレータのＦＧパルス発生処理のように同期イベントに対する処理を行うことなく応答イベントの内容、及び、発生タイミングを決定できる。さらに、送信先のアプリケーションは、算出部１１０１によって同期イベントに対する処理が完了する予定時間を算出して、応答イベントに算出した予定時間を付加する。
【００９２】
応答イベントを受信すると、ステップＳ１２０２において、制御部２０４は、送信元のアプリケーション及び送信先のアプリケーションを含む全てのアプリケーションに対して所定時間の実行を指示する。ここで指示される実行時間は、送信先のアプリケーションから送信された応答イベントに付加された予定時間となる。即ち、応答イベントを送信元のアプリケーションに通知されるまでの時間となる。
【００９３】
その後、Ｓ１２０３において、制御部２０４は、全てのアプリケーションから終了通知を受信したか否かを判定する。全てのアプリケーションから終了通知を受信すると、ステップＳ１２０４において、制御部２０４は、送信元のアプリケーションに対して応答イベントを送信する。さらに、Ｓ９１２において、制御部２０４は、基準同期時間までの残りの処理実行を指示する。
【００９４】
図１３は、イベント同期処理における制御部２０４及び各アプリケーションの連携状況を示す図である。ここでは、説明を容易にするため、アプリケーションを２つに想定する。しかしながら、イベント同期処理は、同様の方法で３つ以上のアプリケーションに対して適用できる。図１３に示す白丸は、制御部２０４又は各アプリケーションの処理を示す。各処理からの矢印は、情報の流れを示す。
【００９５】
ステップ１３０１において、制御部２０４は、各アプリケーションに対して基準同期時間Ｔｓの処理実行を指示する。ステップＳ１３０２、Ｓ１３０３において、各アプリケーションは、処理実行の指示を受信すると、それぞれの仮想時間による基準同期時間分の処理実行を開始する。
【００９６】
基準同期時間Ｔｓに従った処理の実行中に、ステップＳ１３０４において、アプリケーション１は、同期イベントを送信する。ここで、アプリケーション１は、仮想時間を停止するとともに、処理を停止する。アプリケーション１が送信した同期イベントを受信すると、ステップＳ１３０５において、制御部２０４は、アプリケーション２に同期イベントを送信する。ステップ１３０６において、アプリケーション２は、同期イベントを受信する。これに対して、ステップＳ１３０７において、アプリケーション２は、直ちに（仮想時間の進行なしに）応答イベントを送信する。ここで、アプリケーション２は、同期イベントに対する処理を完了する予定時間を応答イベントに付加する。
【００９７】
応答イベントを受信すると、ステップＳ１３０８において、制御部２０４は、全てのアプリケーションに対して仮想時間Ｔ３時間分の処理実行を指示する。ここで、仮想時間Ｔ３時間は、アプリケーション２から送信される応答イベントに付加された予定時間に対応する。その後、ステップＳ１３０９、Ｓ１３１０において、各アプリケーションは、自身が保持する仮想時間に従って指定された処理時間（Ｔ３）を実行する。
【００９８】
その後、ステップＳ１３１１、Ｓ１３１４において、各アプリケーションは、処理時間（Ｔ３）が終了すると、制御部２０４へ終了通知を送信する。これに対し、ステップＳ１３１２、Ｓ１３１５において、制御部２０４は、終了通知を受信する。さらに、ステップＳ１３１３において、制御部２０４は、送信元のアプリケーションから終了通知を受信すると、送信先のアプリケーションから受信した応答イベントを通知する。また、ステップＳ１３１５において、制御部２０４は、全てのアプリケーションから終了通知を受信したと判断し、全てのアプリケーションに対して基準同期時間Ｔｓまでの残り時間の処理実行を指示する。その後、基準同期終了、次の全体同期処理の再開は図７と同様の処理であるため説明を省略する。
【００９９】
以上説明したように、本実施形態に係るアプリケーションは、同期イベントを受信すると、当該同期イベントに対する処理が完了する予定時間を算出する。さらに、制御部２０４は、同期イベントの送信先のアプリケーションから算出された予定時間を取得して、予定時間に従った処理を全てのアプリケーションに実行させる。これにより、本実施形態に係る情報処理装置１００は、さらに、効率のように効率の良いイベント同期処理を実行することが可能となる。
【０１００】
また、本実施形態では、シミュレーション同期装置として１つの情報処理装置１００に本発明を適用したが、複数の装置間においても適用することが可能である。例えば、アプリケーションを動作させるアプリケーション（情報処理装置）と、各アプリケーション間の処理を同期させるサーバ（情報処理装置）との間にも適用することができる。この場合、上述した各アプリケーションの機能が各アプリケーションに実装され、上述した制御部２０４の機能がサーバに実装される。これにより、複数の情報処理装置を有する大規模なシミュレーションも可能となる。
【図面の簡単な説明】
【０１０１】
【図１】第１の実施形態に係る情報処理装置のハードウェア構成を示す図である。
【図２】第１の実施形態に係る情報処理装置１００の制御ブロックを示す図である。
【図３】第１の実施形態に係る各アプリケーションの共通の制御ブロックを示す図である。
【図４】各アプリケーションの処理を同期させる全体同期処理を説明する図である。
【図５】各アプリケーションにおける全体同期処理の制御手順について説明するフローチャートである。
【図６】制御部２０４における全体同期処理の制御手順について説明するフローチャートである。
【図７】全体同期処理における制御部２０４及び各アプリケーションの連携状況を示す図である。
【図８】全体同期処理を行っている間に発生するイベントが各アプリケーションの仮想時間上でどのようなタイミングとして捕らえられるかを説明する図である。
【図９】第１の実施形態に係るイベント同期処理を含む全体同期処理の処理手順を示すフローチャートである。
【図１０】イベント同期処理における制御部２０４及び各アプリケーションの連携状況を示す図である。
【図１１】第２の実施形態に係る制御部２０４及び各アプリケーションの制御ブロックを示す図である。ここでは、第１の実施形態と異なる部分についてのみ説明を記載する。
【図１２】第２の実施形態に係るイベント同期処理を含む全体同期処理の処理手順を示すフローチャートである。
【図１３】イベント同期処理における制御部２０４及び各アプリケーションの連携状況を示す図である。
【符号の説明】
【０１０２】
１０１：ＣＰＵ
２０１：ＣＰＵシミュレータ
２０２：メカシミュレータ
２０３：シミュレータアプリケーション
２０４：制御部
２０５ａ〜ｄ：Ｉ／Ｆ
２０６：配線部
２０７：送信部
２０８：受信部
２０９：取得部
２１０：システム管理部
２１１：同期部
２１２：開始部
２１３：決定部
２１４：計時部
２１５：導出部
３０１：通信部
３０２：処理部
３０３：停止部
３０４：再開部
３０５：送信部
３０６：受信部
【図１】
2008310449.tif 000003
【図２】
2008310449.tif 000004
【図３】
2008310449.tif 000005
【図４】
2008310449.tif 000006
【図５】
2008310449.tif 000007
【図６】
2008310449.tif 000008
【図７】
2008310449.tif 000009
【図８】
2008310449.tif 000010
【図９】
2008310449.tif 000011
【図１０】
2008310449.tif 000012
【図１１】
2008310449.tif 000013
【図１２】
2008310449.tif 000014
【図１３】
2008310449.tif 000015