コンピュータの処理により、シミュレーションを行なうシミュレーションシステムにおいて、前記コンピュータ上で実行される複数のプロセッサエミュレータと、前記コンピュータ上で実行される複数のプラントシミュレータと、前記コンピュータ上で実行され、前記プロセッサエミュレータの反応遅延時間まで、前記プラントシミュレータを先行実行させ、実際に前記プラントシミュレータが停止した時間まで前記プロセッサエミュレータに先行実行するようにペリフェラルエミュレータを介して通知する、外部ペリフェラルスケジューラと、前記コンピュータ上で実行され、前記プロセッサエミュレータ間の通信遅延時間だけ、前記プロセッサエミュレータに先行実行するように通知する、相互ペリフェラルスケジューラとを有し、前記プロセッサエミュレータは、通知された時間まで、保守的に処理を進められる、シミュレーションシステム。前記コンピュータが、マルチタスクシステムであり、前記複数のプロセッサエミュレータと、前記複数のプラントシミュレータと、前記外部ペリフェラルスケジューラと、前記相互ペリフェラルスケジューラは、個別のスレッドまたはプロセスとして実行される、請求項1に記載のシミュレーションシステム。前記コンピュータが、マルチコアまたはマルチプロセッサシステムであり、前記複数のプロセッサエミュレータと、前記複数のプラントシミュレータと、前記外部ペリフェラルスケジューラと、前記相互ペリフェラルスケジューラは、前記マルチプロセッサシステムの異なるプロセッサまたはコアに個別に割り当てられて個別のスレッドまたはプロセスとして実行される、請求項2に記載のシミュレーションシステム。前記プラントシミュレータと、該プラントシミュレータと通信する前記ペリフェラルエミュレータが、同一のコアまたはプロセッサに割りあてられている、請求項3に記載のシミュレーションシステム。前記複数のプラントシミュレータは、自発的に状態を決定する能動的プラントシミュレータと、タイミングを前記プロセッサエミュレータ側で決定する受動的プラントシミュレータを有し、前記外部ペリフェラルスケジューラは、前記能動的プラントシミュレータと通信する能動的プラント用の外部ペリフェラルスケジューラと、前記受動的プラントシミュレータと通信する受動的プラント用の外部ペリフェラルスケジューラからなる、請求項1に記載のシミュレーションシステム。CANエミュレータをもち、該CANエミュレータは、相互ペリフェラルスケジューラによってスケジュールされる、請求項1に記載のシミュレーションシステム。前記プロセッサエミュレータはそれぞれ、キューをもつ内部ペリフェラルスケジューラと協働し、該キューの書込みイベントの時間により、複数の前記プロセッサエミュレータによる共有メモリアクセスのデッドロックが回避される、請求項1に記載のシミュレーションシステム。コンピュータの処理により、シミュレーションを行なうシミュレーション方法において、前記コンピュータ上で、複数のプロセッサエミュレータを実行させるステップと、前記コンピュータ上で、複数のプラントシミュレータを実行させるステップと、前記コンピュータ上で、前記プロセッサエミュレータの反応遅延時間まで、前記プラントシミュレータを先行実行させ、実際に前記プラントシミュレータが停止した時間まで前記プロセッサエミュレータに先行実行するようにペリフェラルエミュレータを介して通知する、外部ペリフェラルスケジューラを実行させるステップと、前記コンピュータ上で、前記プロセッサエミュレータ間の通信遅延時間だけ、前記プロセッサエミュレータに先行実行するように通知する、相互ペリフェラルスケジューラを実行させるステップとを有し、前記プロセッサエミュレータは、通知された時間まで、保守的に処理を進められる、シミュレーション方法。前記コンピュータが、マルチタスクシステムであり、前記複数のプロセッサエミュレータと、前記複数のプラントシミュレータと、前記外部ペリフェラルスケジューラと、前記相互ペリフェラルスケジューラは、個別のスレッドまたはプロセスとして実行される、請求項8に記載のシミュレーション方法。前記コンピュータが、マルチコアまたはマルチプロセッサシステムであり、前記複数のプロセッサエミュレータと、前記複数のプラントシミュレータと、前記外部ペリフェラルスケジューラと、前記相互ペリフェラルスケジューラは、前記マルチプロセッサシステムの異なるプロセッサまたはコアに個別に割り当てられて個別のスレッドまたはプロセスとして実行される、請求項9に記載のシミュレーション方法。前記プラントシミュレータと、該プラントシミュレータと通信する前記ペリフェラルエミュレータが、同一のコアまたはプロセッサに割りあてられている、請求項10に記載のシミュレーション方法。前記複数のプラントシミュレータは、自発的に状態を決定する能動的プラントシミュレータと、タイミングを前記プロセッサエミュレータ側で決定する受動的プラントシミュレータを有し、前記外部ペリフェラルスケジューラは、前記能動的プラントシミュレータと通信する能動的プラント用の外部ペリフェラルスケジューラと、前記受動的プラントシミュレータと通信する受動的プラント用の外部ペリフェラルスケジューラからなる、請求項8に記載のシミュレーション方法。CANエミュレータを実行させるステップを有し、該CANエミュレータは、相互ペリフェラルスケジューラによってスケジュールされる、請求項8に記載のシミュレーション方法。前記プロセッサエミュレータはそれぞれ、キューをもつ内部ペリフェラルスケジューラと協働し、該キューの書込みイベントの時間により、複数の前記プロセッサエミュレータによる共有メモリアクセスのデッドロックが回避される、請求項8に記載のシミュレーション方法。コンピュータの処理により、シミュレーションを行なうシミュレーションプログラムにおいて、前記コンピュータに、複数のプロセッサエミュレータを実行させるステップと、複数のプラントシミュレータを実行させるステップと、前記プロセッサエミュレータの反応遅延時間まで、前記プラントシミュレータを先行実行させ、実際に前記プラントシミュレータが停止した時間まで前記プロセッサエミュレータに先行実行するようにペリフェラルエミュレータを介して通知する、外部ペリフェラルスケジューラを実行させるステップと、前記プロセッサエミュレータ間の通信遅延時間だけ、前記プロセッサエミュレータに先行実行するように通知する、相互ペリフェラルスケジューラを実行させるステップを実行させ、前記プロセッサエミュレータは、通知された時間まで、保守的に処理を進められる、シミュレーションプログラム。前記コンピュータが、マルチタスクシステムであり、前記複数のプロセッサエミュレータと、前記複数のプラントシミュレータと、前記外部ペリフェラルスケジューラと、前記相互ペリフェラルスケジューラは、個別のスレッドまたはプロセスとして実行される、請求項15に記載のシミュレーションプログラム。前記コンピュータが、マルチコアまたはマルチプロセッサシステムであり、前記複数のプロセッサエミュレータと、前記複数のプラントシミュレータと、前記外部ペリフェラルスケジューラと、前記相互ペリフェラルスケジューラは、前記マルチプロセッサシステムの異なるプロセッサまたはコアに個別に割り当てられて個別のスレッドまたはプロセスとして実行される、請求項16に記載のシミュレーションプログラム。前記プラントシミュレータと、該プラントシミュレータと通信する前記ペリフェラルエミュレータが、同一のコアまたはプロセッサに割りあてられている、請求項17に記載のシミュレーションプログラム。前記複数のプラントシミュレータは、自発的に状態を決定する能動的プラントシミュレータと、タイミングを前記プロセッサエミュレータ側で決定する受動的プラントシミュレータを有し、前記外部ペリフェラルスケジューラは、前記能動的プラントシミュレータと通信する能動的プラント用の外部ペリフェラルスケジューラと、前記受動的プラントシミュレータと通信する受動的プラント用の外部ペリフェラルスケジューラからなる、請求項15に記載のシミュレーションプログラム。CANエミュレータを実行させるステップを有し、該CANエミュレータは、相互ペリフェラルスケジューラによってスケジュールされる、請求項15に記載のシミュレーションプログラム。前記プロセッサエミュレータはそれぞれ、キューをもつ内部ペリフェラルスケジューラと協働し、該キューの書込みイベントの時間により、複数の前記プロセッサエミュレータによる共有メモリアクセスのデッドロックが回避される、請求項15に記載のシミュレーションプログラム。従って、本発明の目的は、互いに非同期的にデータを通知割込みする複数のECUとプラントを持つシステムにおいて、十分な時間精度および小さなデータ誤差で、且つ、高速にシミュレーションを実行することを可能とする技法を提供することにある。ここで、非同期的なデータ通知とは、たとえば、プラントで不定期に起こる状態変化をコントローラに通知することや、プロセッサ間の非同期的なCAN通信などをさす。この発明の他の目的は、ECUとその制御対象であるプラントを持つシステム全体をシミュレートするように、プロセッサエミュレータ、ペリフェラルエミュレータ、およびプラントシミュレータの3種類を連成することにある。本発明によれば、ペリフェラルが、相互ペリフェラル、外部ペリフェラル、および内部ペリフェラルの3種類に分割されて、それぞれに固有のスケジューラが提供される。この3種類のスケジューラが協調して、効率的で正確な連成動作を実現する。相互ペリフェラルは、プロセッサ間の通信を処理する中間層であり、固有の相互ペリフェラルスケジューラを持つ。プロセッサ間の非同期通信を高速に処理する機能をもつ。外部ペリフェラルは、プラントとプロセッサとを接続する中間層であり、固有の外部ペリフェラルスケジューラを持つ。プラントからの非同期的な通知を受けてプロセッサに伝達すること、また、プラントに向けてプロセッサからの指示を送り出す機能をもつ。内部ペリフェラルは、特定のプロセッサとのみ接続されるペリフェラル層であり、たとえば、WatchDogTimerやメモリなどが該当する。プラントやほかのプロセッサとの信号の交換はない。固有の内部ペリフェラルスケジューラあるいは、プロセッサスケジューラを持つ。相互ペリフェラルスケジューラ、外部ペリフェラルスケジューラ、および内部ペリフェラルスケジューラは、コルーチンの形式で並列に動作する。なお、プラントシミュレータは、好適には、MATLABSimulinkのような連続的数値シミュレーションモデリングシステムで作成される。ペリフェラルエミュレータは、トランザクション型のエミュレータであり、好適には、SystemCTLMで作成される。プロセッサエミュレータは、命令セットシミュレータISSによるエミュレーションを行う。外部ペリフェラルスケジューラは、プロセッサエミュレータの反応遅延時間と次イベントが起きる時間までの早い方を選び、その時間までプラントシミュレータを先行実行させる。そして、実際にプラントシミュレータが停止した時間まで先行実行するように、すべてのプロセッサスケジューラあるいは内部ペリフェラルスケジューラに通知する。なお、反応遅延時間とは、プラントから状態変化の通知を受けてから、それに対応するプラントへの指示を計算して、実際にその指示がプラントにおいて有効になる時刻までの最小の時間差をさす。相互ペリフェラルスケジューラは、プロセッサエミュレータ間の通信遅延時間と次イベントが起きる時間までの早いほうを選び、その時間まで先行実行するように、すべてのプロセッサスケジューラあるいは内部ペリフェラルスケジューラに通知する。なお、通信遅延時間とは、プロセッサがデータを送信してから、別のプロセッサがそれを受信するまでにかかる最小時間をさす。プロセッサスケジューラあるいは内部ペリフェラルスケジューラは、通知された目標同期時間のうち最も早い時刻まで処理を進める。このようにして、プロセッサ間では時間調整を行うことなく、2種類のペリフェラルスケジューラから与えられた同期時刻に向かって保守的に処理を進めることにより、低いコストで、プロセッサ間のデッドロックを回避する。各ペリフェラル層は、最も進捗の遅いプロセッサの時刻をイベントとして受け取って、その時刻まで自身の処理を進める。また、その更新された時刻に基づいて、次の同期時間通知を決定する。以上のように、プラント、プロセッサ、ペリフェラルの順にシミュレーションが進行して、全体として異種間の連携を連成した処理が実現される。本発明によれば、プロセッサエミュレータの反応遅延時間及びプロセッサエミュレータ間の通信遅延時間を利用して、プロセッサエミュレータを先行実行させるので、デッドロック回避のためのオーバヘッドがない、保守的なイベント同期による高速なシミュレーションが可能となる。また、固定時間間隔による同期ではなくて、任意の時刻を表現できるイベントに基づく同期手法なので、時間に関する誤差の小さい正確なシミュレーションが可能となる。以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。先ず、図1を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図1において、ホストバス102には、複数のCPU1104a、CPU2104b、CPU3104c、CPUn104nが接続されている。ホストバス102にはさらに、CPU1104a、CPU2104b、CPU3104c、CPUn104nの演算処理のためのメインメモリ106が接続されている。一方、I/Oバス108には、キーボード110、マウス112、ディスプレイ114及びハードティスクドライブ116が接続されている。I/Oバス108は、I/Oブリッジ118を介して、ホストバス102に接続されている。キーボード110及びマウス112は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ114は、必要に応じて、処理をGUIで操作するためのメニューを表示するために使用される。この目的のために使用される好適なコンピュータシステムのハードウェアとして、IBMRSystemXがある。その際、CPU1104a、CPU2104b、CPU3104c、CPUn104nは、例えば、インテルRXeonRであり、オペレーティングシステムは、Windows商標Server2003である。オペレーティングシステムは、好適には、マルチタスクの機能を有するものである。オペレーティングシステムは、ハードティスクドライブ116に格納され、コンピュータシステムの起動時に、ハードティスクドライブ116からメインメモリ106に読み込まれる。本発明を実施するためには、マルチプロセッサシステムを用いることが望ましい。ここでマルチプロセッサシステムとは、一般に、独立に演算処理し得るプロセッサ機能のコアを複数もつプロセッサを用いるシステムであることを意図しており、従って、マルチコアシングルプロセッサシステム、シングルコアマルチプロセッサシステム、及びマルチコアマルチプロセッサシステムのどれかでよいことを理解されたい。なお、本発明を実施するために使用可能なコンピュータシステムのハードウェアは、IBMRSystemXに限定されず、本発明のシミュレーションプログラムを走らせることができるものであれば、任意のコンピュータシステムを使用することができる。オペレーティングシステムも、WindowsR系に限定されず、LinuxR、MacOSRなど、任意のオペレーティングシステムを使用することができる。さらに、シミュレーションプログラムを高速で動作させるために、POWER商標6ベースで、オペレーティングシステムがAIX商標のIBMRSystemPなどのコンピュータシステムを使用してもよい。ハードティスクドライブ116にはさらに、後述するプロセッサエミュレータ、ペリフェラルエミュレータ、プラントシミュレータ、内部ペリフェラルスケジューラ、相互ペリフェラルスケジューラ、外部ペリフェラルスケジューラ、CANエミュレータなどのプログラムが格納されており、その各々は、コンピュータシステムの起動時にメインメモリ106にロードされて、個別のスレッドまたはプロセスとして個々のCPU1~CPUnに割当てられて、実行される。このため、図1に示すコンピュータシステムは、好適には、プロセッサエミュレータ、ペリフェラルエミュレータ、プラントシミュレータ、相互ペリフェラルスケジューラ、外部ペリフェラルスケジューラ、CANエミュレータなどの個々のスレッドに個別に割り当てるに十分な個数のCPUをもつ。図2は、そのように個々のCPU1~CPUnに割当てられて個別のスレッドまたはプロセスとして動作するプロセッサエミュレータ、ペリフェラルエミュレータ、プラントシミュレータ、相互ペリフェラルスケジューラ、外部ペリフェラルスケジューラ、CANエミュレータなどの処理プログラムの間の協働関係を示す機能ブロック図である。この構成は、ECUにあたるプロセッサエミュレータおよびペリフェラルエミュレータ、そして、プラントシミュレータからなるシミュレーションシステムである。ペリフェラルエミュレータは、相互ペリフェラルと外部ペリフェラルに分かれる。なお、図では示されていないが、内部ペリフェラルは、プロセッサエミュレータのブロックに含まれると理解されたい。全体では、図の横方向に、4層のシミュレーションシステムであると捉えることができる。図2において、プロセッサエミュレータ202a、202b、202zは、シミュレーションシステムにおいて、ECUの機能のうちコントローラの中心的な働きをする。プロセッサエミュレータ202a、202b、202zは、ソフトウエアコードをロードして、命令セットシミュレータISSによるエミュレーションを行う。ペリフェラルエミュレータ204a、204b、204z、および、CANエミュレータ212は、トランザクション型のエミュレータであり、好適には、SystemCTLMで作成される。プラントシミュレータ206a、206b、206zは、好適には、MATLABSimulinkのような連続的数値シミュレーションモデリングシステムで作成される。プラントシミュレータ206a、206b、206zの各々は、エンジンなどの動力装置、トランスミッションなどの動力伝達装置、ステアリングなどの走行装置、及びブレーキ装置などの自動車の機構装置に対応する。プロセッサエミュレータ202a、202b、202zは例えば典型的には、80MHzという相対的に高解像度のクロックで動作する。一方、プラントシミュレータ206a、206b、206zは、物理機構のシミュレータであるため、例えば典型的には、10KHzという相対的に低解像度で動作する。従って、プロセッサエミュレータ202a、202b、202zとプラントシミュレータ206a、206b、206zを直接接続することができないので、ペリフェラルエミュレータ204a、204b、204zがそれらの間に介在して、プラントシミュレータからの状態変化やセンサーの値をイベントに変換してプロセッサシミュレータに渡したり、逆に、プロセッサエミュレータからの指示シグナリングをイベントに変換してプラントシミュレータに渡す役割を果たす。内部ペリフェラルスケジューラは、プロセッサエミュレータと、それに接続するペリフェラルエミュレータのスケジューリングを行う。プロセッサエミュレータに接続するペリフェラルエミュレータは、ROM、RAM、ウォッチドッグタイマーなど、他のプロセッサやプラントに直接関係しないペリフェラル内部ペリフェラル機能を処理する。内部ペリフェラルスケジューラは、ECUのメモリマップ仕様を参照して、ISSからのloadstore命令を、内部ペリフェラルスケジューラ、相互ペリフェラルスケジューラ、外部ペリフェラルスケジューラに振り分けるという重要な機能を有する。なお、以下では、内部ペリフェラルスケジューラをプロセッサスケジューラと言い換えて説明することがあるが、両者は同一の機能を指すことに注意されたい。外部ペリフェラルスケジューラ208は、プラントシミュレータ206a、206b、206zに接続するペリフェラルエミュレータ204a、204b、204zを処理するスケジューラである。外部ペリフェラルスケジューラ208は、プロセッサエミュレータ202a、202b、202zの反応遅延時間あるいは次イベントまでの時間だけ、プラントシミュレータ206a、206b、206zを先行実行させるようにスケジューリングする。プラントシミュレータは指定された時間か、あるいは内部状態の更新の通知が必要であれば、それより前の時間で停止する。そして、実際にプラントシミュレータ206a、206b、206zが停止した時間まで、プロセッサエミュレータに先行実行するよう通知する。外部ペリフェラルスケジューラ208は、プラントシミュレータ206a、206b、206zに対して、コントローラから要求されたシグナリングまたはサンプリングの指示を与える。シグナリングはコントローラがプラントを操作actuateするためのイベントであり、例えば、スイッチのONOFF信号を指示するような動作である。また、サンプリングは、コントローラがプラントの状態をモニターsenseする際に値の読み取りを指示するためのイベントであり、例えば、バッテリーセルプラントの電圧値をコントローラが読取るような動作である。ここで、コントローラとは、プロセッサエミュレータにロードされたソフトウエアで、プラントに対する制御信号を作るロジックのことである。シグナリングとサンプリングは、エミュレーション対象の処理が周期的か否かによらず、コントローラがそのタイミングを決定するものである。一方、外部ペリフェラルスケジューラ208は、プラントシミュレータ206a、206b、206zから、状態変化のイベントとして通知を受ける。これは、プラントが状態の変化をコントローラに通知するイベントであり、プラントがそのタイミングを決定する。これも、周期的である場合もあり、非周期的である場合もある。相互ペリフェラルスケジューラ210は、プロセッサエミュレータ202a、202b、202z間を接続する、相互ペリフェラル機能を提供するスケジューラである。相互ペリフェラルスケジューラ210は、プロセッサエミュレータ202a、202b、202z間の通信遅延時間あるいは次イベントまでの時間だけ、プロセッサエミュレータ202a、202b、202zに先行実行するように通知する。プロセッサエミュレータ202a、202b、202zは、通知された時間のうち最も早い時刻まで保守的に処理を進める。このとき、プロセッサエミュレータ間の通信は例えば、CANエミュレータ212によって行う。ECUのプロセッサ間の通信に共有メモリが用いられる場合のシミュレーションは、図21を用いて後述する。図2に示されているように、外部ペリフェラルスケジューラ208及び相互ペリフェラルスケジューラ210からプロセッサエミュレータ202a、202b、202zへのイベントは、割込みINTの形式で行われ、プロセッサエミュレータ202a、202b、202zから外部ペリフェラルスケジューラ208及び相互ペリフェラルスケジューラ210へのイベントは、読み書きR/Wの形式で行われる。図3を参照して、プロセッサエミュレータあるいはプロセッサスケジューラ、相互ペリフェラルスケジューラ、外部ペリフェラルスケジューラ、及びプラントシミュレータにおける遅延を利用した先行実行について説明すると、以下のとおりである。先ず、図3に示すように、外部ペリフェラルスケジューラ208が、プラントシミュレータ206を先行実行させる。実際に先行した時間を、Tplantとする。先行させる時間の上限は、次のシグナリング、あるいは、ΔTRの近い方である。ここで、ΔTRとは、プラントシミュレータからの入力時刻から、それによるプロセッサエミュレータの反応がプラントシミュレータに伝わって有効となるまでの遅延の最小値であり、図20で、より詳しい説明がなされる。次に、図3に示すように、外部ペリフェラルスケジューラ208は、実際にプラントシミュレータ206が停止した位置Tplantまで、プロセッサエミュレータ202に先行実行するように通知する。次に、図3に示すように、相互ペリフェラルスケジューラ210は、プロセッサエミュレータ202間の通信遅延時間および次のイベントまでの時間の早いほうまで、プロセッサエミュレータ202に先行実行するように通知する。図では、通信遅延時間のほうが早い例を示している。通信遅延時間ΔTcについては、図19で、より詳しい説明がなされる。次に、図3に示すように、プロセッサエミュレータ202は、通知された2つの時間のうち最も早い時刻まで保守的に処理を進めるが、必ずしもその時刻まで中断することなく処理を進められるとは限らず、たとえば、共有メモリの読取りRがあるとその時刻で一旦停止する。図では、時刻3まで処理を進める前に時刻4で一旦停止している様子を示している。共有メモリへのアクセスがなければ、時刻3まで一度に進む。図3に示すように、相互ペリフェラルスケジューラ、外部ペリフェラルスケジューラは、プロセッサから受取ったイベントのうち最も早い時刻まで、自身の処理を進める。次に、図4を参照して、プロセッサのエミュレーションの機能を説明する。上述のように、プロセッサのエミュレーションは、ISSとして実現される。プロセッサのエミュレーションは、指定された時刻を目指して実行し、インストラクション命令語に応じてアクセスRWの要求を出し、また、ペリフェラルから発生した不定期な割込みを受け付ける。特にこの実施例では、説明の便宜のため、ISSへの指示とISSからの要求を以下のように記述する。ISSへの指示あるいは通知advance最大で時刻tまで実行するようにISSに指示する。ただし、その時刻に達する前にコミュニケーションが必要であれば、ISSはその要求を出して処理を中断する。resume読み出しの要求に対応するデータをISSに通知して実行を再開する。interrupt割込みiが生じたことをISSに通知する。ISSからの要求あるいは通知load時刻tにa番地のデータを読み出すことを要求する。その後、resume通知を受けるまで処理を中断する。store時刻tにa番地にデータvを書き込むことを要求する。completeadvanceで指示された時刻tまで進んだら、完了の通知を行う。図4は、このような命令による、プロセッサのエミュレーション動作の一例を示すものである。図4において先ず、プロセッサは、advanceという命令を受け取る。プロセッサは時刻t1で、loadを出力する。これに応答して、プロセッサは、resumeを受け取る。プロセッサは時刻t2で、storeを出力する。時刻tgに達したときプロセッサは、前に受け取っていたadvanceに従い、completeを出力する。その後、プロセッサはプラントの反応に応じて、interruptを受け取ることがある。そうでなければ、次のadvance指示を受け取る。次に、図5を参照して、ペリフェラルのエミュレーションの動作を説明する。上述のように、ペリフェラルのエミュレータは、好適にはSystemCによって実現される。ペリフェラルのエミュレーションは、タスクキューに詰まれたイベントに従って、トランザクション実行を行うものである。イベントには、レジスタのREAD要求およびWRITE要求などがある。ペリフェラルのエミュレーションは、このイベントをタスクキューの先頭から順に取り出して解釈してトランザクションとして実行して新たなイベントに変換して、再びタスクキューに挿入する。一つあるいは二つ以上のイベントに変換する場合もあるし、イベントをまったく生成しない場合もある。イベントの解釈と実行は、個々のペリフェラルの機能による。この処理をイベントが尽きるまで繰り返すことで、ペリフェラルのエミュレーションが行われる。すなわち、pop取り出し、execute実行、push挿入の繰り返しである。この実施例では、ペリフェラルに閉じたシミュレーションではなくて、プロセッサやプラントと連成するシミュレーションなので、複数のペリフェラルエミュレータのタスクキューをまたがってイベントが行き来する。この場合、ペリフェラルスケジューラが、適切なタスクキューにイベントを追加する。すなわち、pop、execute、pushorexport挿入あるいは転送、import転入の繰り返しである。ただし、importはサイクルによってはオプションなしとなる。プラントシミュレータへの入出力は、イベントである。これは、時刻tにポートpがとる値yを通知する。たとえば、プラントへの指示シグナリングやプラントからの状態変化の通知が、これで表現される。プロセッサから発する要求は、イベントおよびイベントであり、それぞれ、時刻tにレジスタrがとる値の読み出しを要求するイベント、時刻tにレジスタrに値vを書き込むことを要求するイベントである。逆に、プロセッサが受け取るのはイベントで、これは、要求に呼応して時刻tのレジスタrの値vを通知する。また、も受信イベントで、これは、時刻tに割込みiが発生することを通知するイベントである。特にこの実施例では説明の便宜のため、ペリフェラルのタスクキューに関する操作を以下のように記述する。insert時刻tに発生するイベントetをタスクキューに追加するnextkタスクキューの先頭を取り出popして発火executeして、その応答として必要なら、新しいイベントを返す。peektタスクキューの先頭にあるイベントの時刻tを返す。nextが返す新しいイベントには、タイマーの発火などペリフェラルに閉じた内部イベントもあるが、特に、他のペリフェラルに渡すべきイベントは、、、およびの3通りである。ペリフェラルの動作は勿論、これで尽きている訳ではないが、とりあえず、本発明の動作に関連するものを説明した。図5は、ペリフェラルのエミュレーション動作の一例を示すものである。図5において先ず、スケジューラからペリフェラルにタスクキュー操作命令insertが到来するので、タスクキューにイベントe1をFIFOとなるように積む。タスクキューが空であったり、その他のイベントの時刻がt1よりも後であるなら、e1はタスクキューの先頭に詰まれる。ここで、e1はレジスタのread要求であるとする。次に、操作命令nextが到来すると、タスクキューの先頭のイベントが解釈されてトランザクションとして実行されて、新たなイベントが出力される。この例は、プロセッサがレジスタの値を読みとる要求を出してから、その回答を得るまでの一連の処理の流れである。外部に送るべきイベントなので元のタスクキューには挿入pushされずに、プロセッサのスケジューラに転送exportされる。図5に示すように、ペリフェラルに、レジスタへのwrite要求insertおよびnext命令が順に到来したときも同様に、タスクキューに詰まれたe2が先頭なら、時刻t2でe2がポップされて、たとえば、新しいイベントがスケジューラに返される。この例は、プロセッサがプラントに向けてシグナリングの指示を出したケースである。新しいイベントは、プラントシミュレータが解釈できる形式に変換されて伝えられる。図5の例は、プラントから状態変化の通知があって、それを割り込み信号を用いてプロセッサに伝える様子を表す。スケジューラはタスクキューに状態変化の通知を積んでinsertから取り出しpopて実行executeすると、新しいイベントに変換されて、プロセッサに転送exportされる。次に、図6を参照して、プラントのシミュレーションの動作を説明する。上述のように、プラントのシミュレーションは、好適にはMATLABSimulinkのような連続的数値シミュレーションモデリングシステムによって実現される。プラントは、まず、指定された時刻の内部状態ベクトルや外部入力ベクトルにしたがって出力ベクトルを計算する。次に、内部状態の変化分ベクトルを出力するが、このとき、指定された誤差の範囲、プラント固有の最大ステップ幅、ゼロクロッシングなどに基づいて、内部状態の変化分を調整して、次のステップ時刻を決定する。特にこの実施例では説明の便宜のため、プラントの動作を以下のように記述する。プラントへの指示advance最大で時刻tまで実行するようにプラントに指示する。ただし、時刻tまでステップを伸ばせない場合には、それ以前の時刻で停止する。inputプラントへの入力ベクトルuを更新するプラントからの通知completeadvanceで指定された時刻まで実行が完了したことを通知されるoutput時刻tにおいて、プラントからの出力ベクトルyが更新されたことを通知されるプラントの動作は勿論、これで尽きている訳ではないが、とりあえず、本発明の動作に関連するものを説明した。なお、参考までに、SimulinkのSFunctionコールバックルーチンとの対応を示す。mdlGetTimeOfNextVarHitの呼出しcompletemdlGetTimeOfNextVarHitのリターンadvancemdlOutputsの呼出しoutputmdlOutputsのリターンinput図6は、プラントのシミュレーション動作の一例を示すものである。図6において先ず、プラントに、advanceが到来する。プラントは、シミュレーション時間t1に、outputを出力する。次にプラントに、inputが到来する。プラントは、シミュレーション時間t2に、outputを出力する。次にプラントに、inputが到来する。シミュレーション時間tgに到達すると、プラントは、completeを出力する。このように、advanceとcomplete、また、outputとinputはそれぞれペアになる。本発明において、内部ペリフェラルスケジューラ、相互ペリフェラルスケジューラ、および外部ペリフェラルスケジューラが主要な役割を果たす。これら3つのスケジューラの動作を説明するために以下では、まず、保守的なイベント同期のシミュレーションの概要とその用語を説明する。先ず、図7は、内部ペリフェラルスケジューラにおける入力キューと出力キューに関係する処理を示す図である。図示されているように、入力キューには、IP、すなわち、他のプロセッサからのイベント共有メモリの更新通知を受取るキューと、IQすなわち、相互ペリフェラルまたは外部ペリフェラルからメッセージを受取るキューとがある。PiPjというのはそれぞれ、i番目とj番目のプロセッサである。IQに置かれるデータは、CAN受信や割込みのイベントメッセージまたはnullメッセージである。一方、出力キューには、OP、すなわち、他のプロセッサへのイベント共有メモリの更新通知を送り出すキューと、OQすなわち、相互ペリフェラルまたは外部ペリフェラルへメッセージを送るキューとがある。OQに置かれるデータは、CAN送信のイベントメッセージまたは進捗nullメッセージである。プロセッサ同士でイベントをやりとりする際、IP、OPを相手のプロセッサごとに一組、使用することになる。次に、図8~図10フローチャートを参照して、内部ペリフェラルスケジューラの処理を説明する。図8のフローチャートの初期値は、全てのIQ/IPは空、全てのOQは時刻ゼロの進捗イベント、全てのOPは空であり、T0である。また、IQ/IPにk番目に到着するイベントの時間Tkは、以下の条件を満たす。Tk≦Tk1内部ペリフェラルスケジューラは、ステップ802で、キュー入力eを待ち、ステップ804では、全IQがfilledになったかどうかを判断し、もしそうなら、ステップ806で、全IQ中の最早時刻をT0とし、ステップ808でparallelというサブルーチンを呼び出して、他のプロセッサと並行して進める処理を行う。parallelのサブルーチンの処理は、図9のフローチャートを参照して後で説明する。ステップ810で、内部ペリフェラルスケジューラは、TeTinQすなわち、TeTの条件をみたすイベントeがIQにあるかどうかを判断する。そして、もしそうなら、内部ペリフェラルスケジューラは、ステップ812で、IQからeをポップして処理し、ステップ810に戻る。ステップ810で、もしTeTをみたすイベントeがIQにないなら、処理は、ステップ804での判断に戻る。次に、図9のフローチャートを参照して、ステップ808でのparallelの処理をより詳細に説明する。内部ペリフェラルスケジューラは、ステップ902で、処理がread読取りであったかどうか判断し、もしそうなら、ステップ904でfillのサブルーチンを呼び出す。fillのサブルーチンについては、図10のフローチャートを参照して後で説明する。ステップ904の後はステップ906に進む。ステップ902で、処理がread読取りでなかった場合は、直接ステップ906に進む。ステップ906は、T1minによって、T1に値を入れる。Ttopは、IPの先頭時刻であり、IPがない共有メモリ通信を行うプロセッサがないまたはIPが空の場合はTtop∞とおく。ステップ908では、内部ペリフェラルスケジューラは、プロセッサを、T1を目指して実行させる。すなわち、相互ペリフェラルスケジューラまたは外部ペリフェラルスケジューラが指示する時間まで進むことになる。ステップ910では、内部ペリフェラルスケジューラは、プロセッサを実行させつつその分の時間Tを進め、ステップ912では、OQ/OPの更新フラッシュを行う。ステップ914では、内部ペリフェラルスケジューラは、TT1かどうか判断し、もしそうでなければ、ステップ916で、ISSからの最後の通知がread読取りであったかどうか判断し、もしそうなら、ステップ904に戻る。ステップ916で、ISSからの最後の通知がread読取りでないと判断されたなら、ステップ918で、共有メモリへの書込み、CANの送信、またはnullメッセージ送信のどれかが行われて、ステップ908に戻る。ステップ914で、TT1であるなら、ステップ920に進み、そこでTeTinIPすなわち、TeTの条件をみたすイベントがIPにあるかどうかを判断する。もしそうなら、ステップ922で、IPからイベントeをポップして処理し、ステップ920に戻る。ステップ920で、イベントeの時刻をもつイベントがIPにないと判断されると、ステップ924で、TT0であるかどうか判断され、もしそうなら、処理を終了する。ステップ924で、TT0でないと判断されると、ステップ926で、共有メモリ上の読取り、またはnullメッセージの受信のどれかが行われ、ステップ902での判断に戻る。次に、図10のフローチャートを参照して、ステップ904でのfillの処理をより詳細に説明する。図10において、内部ペリフェラルスケジューラは、IPのキューにあるエントリの一時リストを作成する。一時リスト作成後、IPの中で現在時刻より古い時刻印をもつメッセージを全て取り除き、一時リストに追加する。ステップ1004では、内部ペリフェラルスケジューラは、全IPがfilledかどうか判断する。もしそうなら、ステップ1006で、一時リスト内のイベント他プロセッサからの共有メモリへの書込みを時刻印順に全て反映する。一時リストを処理すると、fillのサブルーチンは完了である。ステップ1004で、全IPがfilledでないと判断されると、ステップ1008に進み、そこで、内部ペリフェラルスケジューラは、IPからのイベントeを待つ。ステップ1010で、TTeかどうか判断し、もしそうなら、ステップ1014で、一時リストにeを加えて更新し、ステップ1008に戻る。ステップ1010で、TTeでないと判断されたなら、内部ペリフェラルスケジューラは、ステップ1012でIPにeを加えて、ステップ1004に戻る。図11は、相互ペリフェラルスケジューラにおけるキューに関係する処理を示す図である。図示されているように、入力キューIQには、PiPjからイベントが入来し、それは、CANエミュレータに送信される。一方、出力キューOQには、CANエミュレータからイベントが入来し、それは、プロセッサが取り出すことになる。さらに、タスクキューTQが設けられ、それは、CANエミュレータ受信の発火をもたらす。なお、以下では入力キューや出力キューと区別するために、タスクキューに詰まれるイベントをタスクと呼ぶことがあることに注意されたい。次に、図12のフローチャートを参照して、相互ペリフェラルスケジューラの処理を説明する。ここでの初期値は、全てのIQは空、全てのOQは空、TQは空、T0である。ステップ1202で、相互ペリフェラルスケジューラは、IQの更新待ちを行い、ステップ1204では、全IQがfilledかどうか判断し、そうでなければステップ1202に戻って、IQの更新待ちを続ける。そうしてステップ1204で、相互ペリフェラルスケジューラが、全IQがfilledと判断すると、ステップ1206で、全IQ中最も近い時刻をT0とおく。ステップ1208では、相互ペリフェラルスケジューラは、TeT0inIQ、すなわち、IQにTeT0となるタスクeがあるかどうかを判断する。もしそうなら、相互ペリフェラルスケジューラは、ステップ1210でイベントeをポップし、ステップ1212でinsert、insertにより、TQの更新を行う。ここで、イベントe1は、すなわち、時刻tにレジスタrの値を読み込むイベントであり、イベントe2は、すなわち、時刻tにレジスタrの値をvに更新するイベントである。ステップ1212の後はステップ1208に戻り、そこで、相互ペリフェラルスケジューラがIQにTeT0となるタスクeがないと判断すると、ステップ1214で、TT0とセットし、ステップ1216で、peekを使って、TkTinTQすなわち、TQにTkTとなるタスクkがあるかどうか判断する。ステップ1216で、TQにTkTとなるタスクkがあると判断すると、相互ペリフェラルスケジューラはステップ1218でkをポッブし、ステップ1220で、nextによりタスクを実行する。ここではCANデータを受信する際にプロセッサに通知される、イベントが発生する。ステップ1222では、相互ペリフェラルスケジューラは全OQを更新し、ステップ1216に戻る。ステップ1216で、TQにTkTとなるタスクkがないと判断すると、ステップ1224に進み、そこで、相互ペリフェラルスケジューラは、OQに更新があったかどうかを判断する。OQに更新がない場合、相互ペリフェラルスケジューラは、ステップ1226で、全OQに時刻minのnullメッセージを追加し、ステップ1228で、OQをフラッシュしてステップ1204に戻る。なおここで、ΔTcは、プロセッサの通信遅延時間である。OQに更新があった場合、相互ペリフェラルスケジューラは、ステップ1228で、OQをフラッシュして、ステップ1204に戻る。図15に、参考までに、相互ペリフェラルスケジューラにおける、TQと、それに対応するIQ及びOQのイベントの時間に沿った出入りの例を示す。点線矢印はゲスト時間の進行を示す。この例でIQにプロセッサスケジューラ内部ペリフェラルスケジューラから到着するメッセージのイベントは、時系列順にCANアボート、CAN送信、null進捗メッセージのイベント、CANリセットである。上記のnull以外のメッセージは全て、プロセッサがCANデバイスに対して指令を出すレジスタ書込みを行うことによって生じるイベントである。このうちCANアボートは、調停に敗れた場合に送信待機状態の解除を行い、さらにプロセッサに割込み通知をするよう、指令を出すイベントである。CAN送信は、事前にセットしたデータを送信するよう、指令を出すイベントである。図15は、2つの異なるプロセッサからCAN送信イベントが続けて到着する例を示している。CANリセットは、CANデバイスをバスから切り離して初期状態に戻るよう、指令を出すイベントである。この例でOQからプロセッサスケジューラに送出されるメッセージのイベントは、時系列順にnullnullメッセージのイベント、アボート通知、CAN受信である。CAN受信は、CANデバイスがプロセッサに対して、CANのデータを受信したことを割り込みによって通知するイベントである。アボート通知は、CANデバイスがプロセッサに対して、調停に敗れたことを割り込みによって通知するイベントである。CAN送信イベントが発生IQに到着した時点では、以前に送信開始されたデータが転送中である事がある。図15の例では、2つ目のCAN送信イベントが到着した時点で、TQの先頭に以前開始された転送の完了に伴う、CAN受信イベント1つめが積まれている。CAN受信イベントの直後に、次のデータ転送のための調停が行われる。この図の例では簡単のため、CAN受信のイベントと調停のイベントの時刻が同じであるとする。IQに到着するnullイベントの時刻印は、CAN受信調停のゲスト時刻と同じである。ここで本発明の相互ペリフェラルスケジューラは、TQの先頭時刻まで先行実行するようプロセッサスケジューラに通知、insertにより、TQの更新を行う。ここで、イベントe1は、すなわち、時刻tにレジスタrの値を読み込むイベントであり、イベントe2は、すなわち、時刻tにレジスタrの値をvに更新するイベントである。ステップ1412の後はステップ1408に戻り、そこで、外部ペリフェラルスケジューラがIQにTeT0となるタスクeがないと判断すると、ステップ1414で、TT0とセットし、ステップ1416で、TTPであるかどうか判断する。もしステップ1416で、TTPであると判断すると、外部ペリフェラルスケジューラはステップ1418で、insertを呼び出して、TQに、時刻Tで発火するタスクを追加する。ここでe4とは、プラントを時刻minTtopTΔTRまで実行するイベントである。Ttopは、TQの先頭時刻であり、TQが空の場合はTtop∞とおく。ここはすなわち、全てのプロセッサがプラントに追いついたら、ブラント先行実行ざせる処理である。ステップ1418の次は、ステップ1420の判断ステップに進む。ステップ1416で、TTPでないと判断された場合は直接、ステップ1420に進む。ステップ1420では、外部ペリフェラルスケジューラは、peekを呼び出して、TQに、TkTとなるイベントkがあるかどうかを判断する。もしなければ、処理は、ステップ1404に戻る。ステップ1420で、TQにTkTとなるイベントkがあると判断すると、外部ペリフェラルスケジューラはステップ1422で、kをポップし、ステップ1424で、kがプラント実行かどうか判断する。外部ペリフェラルスケジューラが、ステップ1420で、kがプラント実行であると判断すると、ステップ1426で、advanceを呼び出してプラントを実行する。次のステップ1428では、外部ペリフェラルスケジューラは、TQの更新を行う。具体的には、outputを受けて、pusgを実行し、PVを参照して、inputを通知する。そして、nullメッセージを送信する。ここでe3とは、でポートpの値をvに更新するというイベントである。次のステップ1430で、外部ペリフェラルスケジューラはTpを更新し、次のステップ1432で、処理の完了かどうか判断する。もし処理の完了であると判断されると、処理はステップ1420に戻る。処理の完了でないと判断されると、ステップ1434でタスクを戻してから、処理はステップ1420に戻る。ステップ1424に戻って、kがプラント実行でないと判断すると、外部ペリフェラルスケジューラはステップ1436に進み、nextを呼び出して、タスクを実行する。これは具体的には、、、、を実行し、nullメッセージを送信する。次のステップ1438では、外部ペリフェラルスケジューラは、OQの更新を行う。ここで、OQにnull以外のメッセージを追加した場合、TQに時刻TΔTRで発火するタスクを追加する。すなわち、insertを実行するのであるが、より具体的に言うと、e4は、プラントを時刻minTtopTΔTRまで実行するものである。ここで、Ttopは、TQの先頭時刻であり、TQが空の場合はTtop∞とおく。次のステップ1440では、外部ペリフェラルスケジューラは、OQをフラッシュして、ステップ1420に戻る。以下では、保守的なイベント同期を行う際にデッドロックが生じること、また、それを回避するためにはnullメッセージが必要であることを説明する。なお、これは新しい発見ではなくて、従来より知られた知見である。シミュレーション対象を分割し各領域のシミュレータまたはエミュレータを接続して全体のシミュレーションを行う際、通信インタフェースを含む各領域のシミュレーション単位を論理プロセスと呼ぶ。図16に、論理プロセスの構成を示す。図16に示すように、保守的なイベント同期のシミュレーションにおいては、論理プロセスLPkは、メッセージ受信のための入力キューIQと、メッセージ送信のための出力キューOQと、予定されたシミュレーションタスクを記憶するためのタスクキューTQと、現在時刻を示すスカラー値をもつ。IQとOQはFIFOであり、TQは時間順にソートされている。図17は、複数の論理プロセスLP1~LP4が通信チャネルを介して接続されている様子を示す図である。このように接続を図るために、個々の論理プロセスは、IQとOQを通信チャネル毎にもつ。論理プロセスはIQ、OQを用いて、時刻の情報時刻印を持つメッセージを交換する。IQ/OQに送出受信されるメッセージの時刻印は、送出受信を行うたびに単調増加する。このため、論理プロセスが他の全ての論理プロセスからメッセージを受取ると、受取ったメッセージのうち最も小さい時刻印までロールバックすることなくシミュレーションを進めることができる。交換されるメッセージにはイベントメッセージとnullメッセージがある。時刻tのイベントeに関するイベントメッセージとは、送信側から受信側に対して発生する次のイベントの時刻がtであり、発生するイベントはeであることを伝えるメッセージである。時刻tのnullメッセージとは、送信側から受信側に対して発生する次のイベントの時刻が、tより後であることを伝えるメッセージであり、受信側のシミュレーション領域そのものには影響を与えない。nullメッセージの目的は、下に述べるデッドロックを防ぐことである。保守的なイベント同期ではロールバックを防ぐために、他の全ての論理プロセスから現在時刻より大きな時刻印のメッセージを受信するまで処理を停止する。しかし、メッセージの受信を待つ相手の論理プロセスも同じ時刻でその論理プロセスからの受信を待つ場合、図18のようにお互いがメッセージを待ち合って処理を再開できない。そこで、現在時刻からどれだけ先まで外部へのイベントが発生しないかを先読みして、図18のように、nullメッセージを送ることで、デッドロックを防ぐ。論理プロセスの処理の概要は、次のとおりである。全てのIQにメッセージが到着するまで待機IQの中で最も時刻の早いメッセージをポップT0まで現在時刻を進めながら、シミュレーションを実行タスクキューをポップして実行未来のイベントはタスクキューに追加発生した外部へのイベントは逐次OQに追加イベント追加がないOQには、nullメッセージを追加t現在時刻先読み時間でポップしたメッセージを処理してに戻るなお、本発明では特に、先読みを行わないnullメッセージ送信時の現在時刻を時刻印としてもつnullメッセージを進捗メッセージと呼ぶ。進捗メッセージの目的は、微小な先読み幅をもつnullメッセージによって生じてしまう頻繁な同期を回避することである。本発明では、内部ペリフェラルスケジューラが進捗メッセージを送信する。これは、内部ペリフェラルスケジューラを駆動するISSが、微小な幅でしか他の論理プロセスへの次のイベントを予測できないからである。次に図19を参照して、プロセッサの通信遅延ΔTcについて説明する。すなわち、図示されているように、相互ペリフェラルへの書込みから、受信側/送信側プロセッサへの割込みが発生するまでの遅延の最小値がプロセッサの通信遅延ΔTcである。ちなみに、最大ボーレート10MbpsのCANによる通信では、データフレームの最大遅延は44μ秒フレームの最小ビット数が44で、これがΔTcの参考値である。次に図20を参照して、プロセッサの反応遅延ΔTRについて説明する。すなわち、プロセッサの反応遅延ΔTRとは、図示されているように、プラントの入力時刻から、それによるプロセッサの反応がプラントに伝わって有効となるまでの遅延の最小値である。図20でTRとは、TQが空の場合にプロセッサの反応がプラントに到達する可能性のある最小時刻である。前提として、プラントの状態変化に起因する割込みを受け付けてから、TR以内に、プラントへの最初のイベント発生時刻Treactionを決めるレジスタ書込み例:タイマスタートレジスタへの書込みが発生する。この書込み時刻をTtriggerと表記すると、下記の式が成立する。Ttriggerintinterruptrsresumeaadvancelloadsstoreccompleterreadwwriteruregisterupdateintinterruptpuportupdateaadvanceiinputccompleteooutputrreadwwriteruregisterupdateintinterrupt次に図23を用いて、CANデバイスが調停の敗退後にプロセッサへアボート通知を行う動作を、相互ペリフェラルスケジューラが保守的にロールバックさせることなくエミュレートできることを説明する。図23は、2つのプロセッサ1、2がCANデバイスに対してCANフレームの送信要求を行う例を示している。プロセッサ1が送信要求するフレームは、プロセッサ2が送信要求するフレームより優先度が高い。プロセッサ2はCANデバイスに対し、調停に敗れた場合には送信待機状態の解除を行って割込み通知をするよう、指令を出しているアボートセット。また、図の縦方向の矢印はゲスト時間の進行を示す。図23の例では、2つのプロセッサがCANデバイス相互ペリフェラルに、アボートセットと送信セットを行った後、CANデバイスのエミュレータが調停処理を開始する。調停開始のイベントはCANデバイスのエミュレータによってTQに追加されたものであり、相互ペリフェラルスケジューラの処理によって、全てのプロセッサがこの時刻調停開始でゲスト時間の同期を取る。この例におけるアボートセット、2つの送信セット、調停はそれぞれ、図15において、IQに到着するCANアボート、IQに到着する2つのCAN送信、TQに追加される調停イベントに対応する。また図23でプロセッサの時刻の同期をとる相互ペリフェラルスケジューラの処理とは、TQ先頭の時刻のnullメッセージの送出と進捗メッセージの受信であり、図15に関連して説明した処理と同一である。また図23の例は、調停が開始されると、CANデバイスのエミュレータが敗退通知時刻のイベントをTQに追加することを示している。相互ペリフェラルスケジューラが次にプロセッサに先行実行を通知する際、送出するnullメッセージの時刻印は、ΔTCではなく、ここで追加された敗退通知の時刻である。このため、プロセッサ2が、敗退通知の時刻を通り過ぎることロールバックを要するオーバーヘッドがない。次に図24を用いて、高優先度のCANフレームを送信要求したプロセッサがCANデバイスをリセットする場合の動作を、相互ペリフェラルスケジューラが保守的にロールバックさせることなくエミュレートできることを説明する。これは、CANデバイスのエミュレータにおいて、敗退を通知する前にリセットの有無をチェックすることで可能となる。図24に示す動作は、調停開始までは図23と同じである。図24の例は、ゲスト時間上、調停が開始されてから調停が完了フレームの勝利と敗退が確定するまでの間に、優先度の高いCANフレーム要求を出したプロセッサ1がCANデバイスをリセットすることを示している。調停が開始された時点で、図23の例で述べたように、CANデバイスのエミュレータによって、プロセッサ2に対してアボート通知のためのイベントがTQに追加される。図24の例では、ここで追加されたアボート通知のためのイベントの処理において、CANデバイスのエミュレータが、アボート通知を行う前にリセット通知の有無をチェックし、アボート通知を行うか否かを決定することを示している。この決定処理でCANデバイスのエミュレータは、リセット通知があった場合、どのCANフレームが調停に勝利するかを再び計算する。再計算の結果、調停開始時に敗退する予定であったフレームが調停に勝利した場合、アボートが発生しないので、プロセッサにアボートを通知しない。図24の例は、プロセッサ2が送信要求を出したCANフレーム調停開始時には敗退予定が再計算の結果調停に勝利した結果、予定されていたアボート通知が行われないことを示す。再計算の結果、調停開始時に敗退する予定であったフレームが再び調停に敗退した場合、アボートが発生するので、予定通りプロセッサにアボートを通知する。また、上の決定処理においてリセット通知がなかった場合、CANフレームの勝敗が調停開始時から変わることはない。このため、リセット通知がなかった場合も、調停開始時に予定されたアボートをプロセッサに通知する。このように、CANデバイスのエミュレータにおいて敗退を通知する前にリセットの有無をチェックすることで、リセットによってアボートが発生しないにも関わらず誤ってプロセッサがアボート通知を受取るロールバックを要するオーバーヘッドことがない。次に、図25を参照して、本発明を実施するための別の実施例を説明する。図25において、プロセッサエミュレータ2502a、、2502m、2504a、、2504nは、図2に示すプロセッサエミュレータ202a、、202zと機能的に実質的に同一である。ペリフェラルエミュレータ2506a、、2506m、2508a、、2508nも、図2に示すペリフェラルエミュレータ204a、、204zと機能的に実質的に同一である。図25の構成が、図2の構成と異なるのは、プラントシミュレータが、能動的プラントシミュレータ2510a、、2510mと、受動的passiveプラントシミュレータ2512a、、2512nに分かれていることである。ここで、能動的プラントシミュレータとは、エンジンシミュレータのように、状態変化のタイミングなどを自律的に決定する機能をもつプラントシミュレータである。例えば、エンジンは、クランク角度を15度刻みのパルスで知らせるプラントであるが、そのタイミングは、コントローラECU側で決定することはできない。一方、受動的プラントシミュレータとは、タイミングを、コントローラが決定できるプラントシミュレータで、例えば、電池の電圧を指定されたタイミングでモニターサンプルするプラントがそれに該当する。それ以外にも、温度センサ、圧力センサ、回転速度センサなど、センサ系のプラントが、受動的プラントに該当する。ブレーキやサスペンションもサンプリングによって状態をセンスする場合には、受動的プラントとして分類する。このような能動的プラントシミュレータと、受動的プラントシミュレータの仕分けに対応して、外部ペリフェラルスケジューラも、能動的プラントシミュレータに接続されたペリフェラルエミュレータをスケジューリングする外部ペリフェラルスケジューラ2514aと、受動的プラントエミュレータに接続されたペリフェラルシミュレータをスケジューリングする外部ペリフェラルスケジューラ2514bとが設けられる。能動的プラントシミュレータに接続されたペリフェラルエミュレータに対して、対応するプロセッサエミュレータは、シグナル更新を通知する一方で、状態変化を受取るという双方向の働きかけがあるが、受動的プラントシミュレータに接続されたペリフェラルエミュレータに対して、対応するプロセッサエミュレータは、原則的に、シグナル更新とサンプリング予告を通知するだけである。能動的プラントシミュレータと、受動的プラントシミュレータの仕分けは、基本的には、プロセッサエミュレータ間の通信には影響を与えないので、相互ペリフェラルスケジューラ2516の動作は、実質的に図2の相互ペリフェラルスケジューラ210と同一であるし、CANエミュレータ2518も、図2のCANエミュレータ212と、実質的に同一である。ところで、能動的プラントシミュレータのための外部ペリフェラルスケジューラ2514aは、図2の外部ペリフェラルスケジューラ208と機能的に実質的に同一であるが、受動的プラントシミュレータのための外部ペリフェラルスケジューラ2514bは、プロセッサに対してプラントを先行させる時間幅を計算する処理が不要である。そこで、外部ペリフェラルスケジューラ2514bの動作を、図26のフローチャートを参照して説明する。ここでの初期値は、全てのIQは空、全てのOQは空、TQは空、PVポート値はECU仕様での初期値、T0である。受動的プラントシミュレータのための外部ペリフェラルスケジューラは、先行するプロセッサの時刻が通知される度にその時刻に追いつく、という処理を繰り返すだけでよい。ステップ2602で、外部ペリフェラルスケジューラ2514bは、IQの更新待ちを行い、ステップ2604では、全IQがfilledかどうか判断し、そうでなければステップ2602に戻って、IQの更新待ちを続ける。そうしてステップ2604で、外部ペリフェラルスケジューラ2514bが、全IQがfilledと判断すると、ステップ1406で、全IQ中最も近い時刻をT0とおく。ステップ2608では、外部ペリフェラルスケジューラ2514bは、TeT0inIQ、すなわち、IQにTeT0となるタスクeがあるかどうかを判断する。もしそうなら、外部ペリフェラルスケジューラ2514bは、ステップ2610でイベントeをポップし、ステップ2612で、TQの更新を行う。ステップ2612の後はステップ2608に戻り、そこで、外部ペリフェラルスケジューラ2514bがIQにTeT0となるタスクeがないと判断すると、ステップ2614で、TT0とセットする。次にステップ2616に進み、そこで外部ペリフェラルスケジューラ2514bは、プラントをTまで実行する。このとき、プラントは受動的プラントであるので、外部ペリフェラルスケジューラ2514bは、状態変化の通知を受けることはない。次に外部ペリフェラルスケジューラ2514bは、ステップ2618で、TQエントリを実行して、ステップ2604に戻る。尚、相互ペリフェラルスケジューラが扱う車載LANプロトコルとして、CANの場合について説明したが、本発明のシミュレーションシステムは、CANに限定されず、LIN、FlexRayなどの任意の車載LANプロトコルにも適用可能である。以上、自動車用の複数のシミュレーションシステムに関連して、本発明の特定の実施例を説明してきたが、本発明はこのような特定の実施例に限定されず、飛行機用のシミュレーションシステムなど、一般的な電子機械制御系システムのシミュレーションシステムに適用可能であることを、この分野の当業者であるなら、理解するであろう。また、本発明は、特定のコンピュータのアーキテクチャやプラットフォームに限定されることなく、マルチタスクを実現可能な任意のプラットフォームで実装可能である。