(57)【要約】【課題】マルチプロセッサシステムにおいて、全てのプロセッサの状態と外部の事象とを事実に基づいて特定し、プログラムの誤りの発見と除去とを確実かつ迅速に行えるようにする。【解決手段】プログラム実行中にプログラムの実行に関する情報を逆方向実行手段３２により取得し、これをリソースバッファ管理手段３５を通じてリソースバッファ３６に蓄積する。メインプロセッサから停止指示が到来した場合に、サブプロセッサにおける停止時刻を示す現在時刻を取得し、遅延時間計測手段により元時刻と現在時刻とから遅延時間を算出する。この遅延時間分、逆方向実行手段により、過去の時点に処理を戻し、メインプロセッサとサブプロセッサの停止タイミングを一致させる。【選択図】図３
2005234617.tif 000002
【特許請求の範囲】
【請求項１】
メインプロセッサと、前記メインプロセッサによって動作が管理される１つ以上のサブプロセッサとを備えたマルチプロセッサに用いるデバッガであって、
前記メインプロセッサ側に、
ユーザによって指示された位置でプログラムの実行を停止させた時点の現在時刻を取得し、これを元時刻として前記サブプロセッサのそれぞれに提供する元時刻提供手段と、
プログラムの実行の停止に伴って、動作の停止指示を前記サブプロセッサのそれぞれに提供する指示手段と
を設け、
１つ以上の前記サブプロセッサ側のそれぞれに、
プログラムの実行に関する情報をプログラム実行中に取得して、これを記憶手段に記録する取得手段と、
前記メインプロセッサからの前記停止指示を受け付けた時点の現在時刻を取得する現在時刻取得手段と、
前記メインプロセッサからの前記元時刻と前記現在時刻取得手段からの前記現在時刻とから遅延時間を算出する遅延時間計測手段と、
前記メインプロセッサからの前記停止指示に応じて動作を停止した時点から遡って、前記遅延時間算出手段において算出された前記遅延時間分の前記プログラムの実行に関する情報を前記記憶手段に保持するようにする情報管理手段と、
前記記憶手段に記憶された前記プログラムの実行に関する情報に基づいて、前記プログラムによる処理を、逆方向に実行するよにして、ユーザによって指示された前記位置に対応する時点における前記サブプロセッサの状態を復元する逆方向実行手段と
を設けることを特徴とするマルチプロセッサデバッガ。
【請求項２】
請求項１に記載のマルチプロセッサデバッガであって、
デバッグ処理時に、前記メインプロセッサと１つ以上の前記サブプロセッサとの一方あるいは両方から、本来、ハードウェア各部に供給されるべきハードウェア制御信号の供給を受けて、ハードウェア各部の状態を再現するようにするシミュレータ手段を備えることを特徴とするマルチプロセッサデバッガ。
【請求項３】
メインプロセッサと、前記メインプロセッサによって動作が制御される１つ以上のサブプロセッサとを備えたマルチプロセッサに用いるデバッグ方法であって、
１つ以上の前記サブプロセッサにおいて、プログラムの実行に関する情報をプログラム実行中に取得して、これを所定の記憶手段に記録する取得ステップと、
前記メインプロセッサのプログラムの実行をユーザによって指示された位置で停止させた時点の現在時刻を取得し、これを元時刻として１つ以上の前記サブプロセッサに提供する元時刻提供ステップと、
前記メインプロセッサのプログラムの実行の停止に伴って、動作の停止指示を１つ以上の前記サブプロセッサに提供する指示ステップと、
１つ以上の前記サブプロセッサにおいて、前記停止指示を受け付けた時点の現在時刻を取得する現在時刻取得ステップと、
１つ以上の前記サブプロセッサにおいて、前記メインプロセッサからの前記元時刻と前記現在時刻取得ステップにおいて取得した前記現在時刻とから遅延時間を算出する遅延時間計測ステップと、
１つ以上の前記サブプロセッサにおいて、前記メインプロセッサからの前記停止指示に応じて動作を停止した時点から遡って、前記遅延時間算出手段において算出された前記遅延時間分の前記プログラムの実行に関する情報を前記記憶手段に保持するようにする情報管理ステップと、
１つ以上の前記サブプロセッサにおいて、前記記憶手段に記憶された前記プログラムの実行に関する情報に基づいて、前記プログラムによる処理を、逆方向に実行するようにして、ユーザによって指示された前記位置に対応する時点における前記サブプロセッサの状態を復元する逆方向実行ステップと
を有することを特徴とするマルチプロセッサにおいてのデバッグ方法。
【請求項４】
請求項３に記載のデバッグ方法であって、
デバッグ処理時に、前記メインプロセッサと１つ以上の前記サブプロセッサとの一方あるいは両方から、本来、ハードウェア各部に供給されるべきハードウェア制御信号の供給を受けて、ハードウェア各部の状態を再現するようにするステップを有することを特徴とするマルチプロセッサにおいてのデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチプロセッサ環境で用いられるデバッガおよびデバッグ方法に関する。
【背景技術】
【０００２】
プログラムの誤り（バグ）を発見して、プログラムの修正作業を支援するための種々のデバッガが提供されている。デバッガの基本的な機能は、プログラムの実行を指定された行で停止させ、そのときのメモリや変数の内容を参照したり、変更したりできるようにするものである。近年においては、後に記す特許文献１に開示されているように、プログラムを停止させた時点からそのプログラムによる処理を逆方向に実行できるようにしたデバッガも提案されている。
【０００３】
この特許文献１に開示されたデバッガのように、プログラムの逆方向の実行が可能な場合、（１）デバッグ時において、行過ぎた命令実行を逆方向に復元することにより、プログラムの最初から実行しなおす場合に比べて、効率よくデバッグを実施できる。また、（２）プロセッサがどのような経路で現状に達したかを知るためのトレース情報を得ることができる。また、（３）実機を用いずに、システム状態をシミュレーションすることができるなどの利点がある。
【特許文献１】特開平８−３２０８１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、上述したプログラムの逆方向の実行が可能なデバッガの場合、複数のプロセッサを有するいわゆるマルチプロセッサシステムにおいては、マルチプロセッサの協調動作における、実機特有の問題を特定できないという問題があり、特にプログラムによって非可逆に破壊される部位を再現することはできない。
【０００５】
すなわち、マルチプロセッサシステムは、プロセッサ（ＣＰＵ）を複数搭載し、各プロセッサに処理を分散させることによって、処理能力を向上させるようにしたものである。このため、基点となるメインプロセッサにおいてプログラムの実行を指示位置で停止させても、メインプロセッサからの指示に応じて動作することになるサブプロセッサにおいては、メインプロセッサに遅れてプログラムの実行を停止させることになる。
【０００６】
このため、マルチプロセッサにおけるデバッグにおいては、メインプロセッサとサブプロセッサとではプログラムの停止のタイミングが一致せず、同一時点におけるメモリや変数の内容が取得できずに、非可逆に破壊されてしまった部位を再現することはできない。したがって、協調動作する各プロセッサで実行されるプログラムの誤り（バグ）が発見し難く、プログラムの誤りの修正に時間がかかってしまうという問題がある。
【０００７】
以上のことにかんがみ、この発明は、上記問題点を一掃し、マルチプロセッサシステムにおいて、全てのプロセッサの状態と外部の事象とを事実に基づいて特定し、プログラムの誤りの発見と除去とを確実かつ迅速に行えるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するため、請求項１に記載の発明のマルチプロセッサデバッガは、
メインプロセッサと、前記メインプロセッサによって動作が管理される１つ以上のサブプロセッサとを備えたマルチプロセッサに用いるデバッガであって、
前記メインプロセッサ側に、
ユーザによって指示された位置でプログラムの実行を停止させた時点の現在時刻を取得し、これを元時刻として前記サブプロセッサのそれぞれに提供する元時刻提供手段と、
プログラムの実行の停止に伴って、動作の停止指示を前記サブプロセッサのそれぞれに提供する指示手段と
を設け、
１つ以上の前記サブプロセッサ側のそれぞれに、
プログラムの実行に関する情報をプログラム実行中に取得して、これを記憶手段に記録する取得手段と、
前記メインプロセッサからの前記停止指示を受け付けた時点の現在時刻を取得する現在時刻取得手段と、
前記メインプロセッサからの前記元時刻と前記現在時刻取得手段からの前記現在時刻とから遅延時間を算出する遅延時間計測手段と、
前記メインプロセッサからの前記停止指示に応じて動作を停止した時点から遡って、前記遅延時間算出手段において算出された前記遅延時間分の前記プログラムの実行に関する情報を前記記憶手段に保持するようにする情報管理手段と、
前記記憶手段に記憶された前記プログラムの実行に関する情報に基づいて、前記プログラムによる処理を、逆方向に実行するよにして、ユーザによって指示された前記位置に対応する時点における前記サブプロセッサの状態を復元する逆方向実行手段と
を設けることを特徴とする。
【０００９】
また、請求項１に記載の発明のマルチプロセッサデバッガによれば、取得手段により、プログラム実行中にプログラムの実行に関する情報が取得され、これが記憶手段に記録されて順次に蓄積するようにされる。そして、元時刻提供手段により、メインプロセッサのプログラムの実行が停止された時点の現在時刻が取得され、これが各サブプロセッサに提供される。また、指示手段により、各サブプロセッサに停止指示が提供され、これに応じてサブプロセッサにおいてのプログラムの実行が停止するようにされる。
【００１０】
この場合、現在時刻取得手段により、各サブプロセッサにおいて、停止指示を受け付けた時点の現在時刻が取得され、遅延時間計測手段により、元時刻と現在時刻とから遅延時間が算出される。そして、各サブプロセッサのそれぞれにおいて、情報管理手段により、メインプロセッサからの停止指示に応じて動作を停止させた時点から、過去に遡って遅延時間分のプログラムの実行に関する情報が記憶手段において有効となるように管理するようにされる。
【００１１】
そして、逆方向実行手段により、情報管理手段により記憶手段において管理されている情報に基づいて、遅延時間分、逆方向へプログラムが実行するようにされ、各サブプロセッサにおいて、メインプロセッサの停止時点と同じ時点におけるプログラムの実行に関する情報が取得できるようにされる。これにより、マルチプロセッサ環境において実行されるプログラムの誤りを的確かつ迅速に発見し、修正することができるようにされる。
【００１２】
また、請求項２に記載の発明のマルチプロセッサデバッガは、請求項１に記載のマルチプロセッサデバッガであって、
デバッグ処理時に、前記メインプロセッサと１つ以上の前記サブプロセッサとの一方あるいは両方から、本来、ハードウェア各部に供給されるべきハードウェア制御信号の供給を受けて、ハードウェア各部の状態を再現するようにするシミュレータ手段を備えることを特徴とする。
【００１３】
この請求項２に記載の発明のマルチプロセッサデバッガによれば、本来、ハードウェア各部に供給されるべき、メインプロセッサや１つ以上のサブプロセッサからのハードウェア制御信号の供給を受けて、各ハードウェア部の状態を再現することができるシミュレータ手段が設けられる。
【００１４】
これにより、プロセッサ外部のハードウェア状態を、シミュレータ環境によらない実機上の状態として再現することができ、実機を用いなくても、実機を用いた場合と同様に把握して、プログラムの誤りを発見し、修正することができるようにされる。
【発明の効果】
【００１５】
この発明によれば、マルチプロセッサ環境において、従来不可能だったプロセッサ間の命令実行を同期させた状態を観測でき、マルチプロセッサ環境特有の問題同定に寄与することができる。
【００１６】
また、プロセッサの実行状態を保存しておく記憶手段（リソースバッファ）の容量を、プロセッサごとに適切に決定することができ、特に組み込みシステムにおけるメモリ節約に寄与することができる。 
また、ハードウェアシミュレータと組み合わせることにより、特にプロセッサ外部のハードウェア状態を、前記プロセッサ間の命令実行に同期させることができ、特にソフトウェアシミュレーション環境によらない実機上の動作を再現でき、ハードウェア状態に依存した問題の同定に寄与することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図を参照しながら、この発明の一実施の形態が適用されたマルチプロセッサデバッガについて説明する。
【００１８】
［マルチプロセッサデバッガの概要］
図１は、この実施の形態のマルチプロセッサデバッガの構成例を説明するためのブロック図である。図１に示すように、この実施の形態のマルチプロセッサデバッガは、デバッガ１と、メインプロセッサ２と、サブプロセッサ３と、ハードウェアシミュレータ４とを備えたものである。
【００１９】
この実施の形態において、デバッガ１は、ユーザインターフェース（以下、ユーザＩ／Ｆと略称する。）としての機能を有するものである。メインプロセッサ２は、この実施の形態のマルチプロセッサデバッガ全体を制御するものであり、サブプロセッサ３におけるプログラムの実行やデータ処理のスケジュール管理と全般管理などを行うものである。
【００２０】
サブプロセッサ３は、メインプロセッサ２によってその動作が管理されるが、メインプロセッサ２とは独立にプログラムの実行やデータ処理を行うことができるものである。また、ハードウェアシミュレータ４は、メインプロセッサ２やサブプロセッサ３からハードウェア各部に供給されるハードウェア制御信号の供給を受けて、ハードウェア各部の状態を再現し、これをデバッガ情報として通知することができるものである。
【００２１】
そして、図１に示すように、デバッガ１は、メインプロセッサ２に対して動作指示Ｄ１を発行する。また、デバッガ１は、メインプロセッサ２との間でデバッグ情報Ｄ１をやり取りし、サブプロセッサ３との間でデバッグ情報Ｄ２をやり取りし、ハードウェアシミュレータ４との間でデバッグ情報Ｄ３をやり取りする。
【００２２】
また、メインプロセッサ２は、サブプロセッサ３に対して動作指示Ｍ２、元時刻（時刻情報）Ｘｔを発行し、ハードウェアシミュレータ４に対して、動作指示Ｍ３を発行し、また、ハードウェアシミュレータ４との間でハードウェア制御信号Ｃ１をやり取りする。また、サブプロセッサ３は、ハードウェアプロセッサ４との間でハードウェア制御信号Ｃ２をやり取りする。
【００２３】
ここで、動作指示Ｍ１、Ｍ２、Ｍ３のそれぞれは、相手先であるメインプロセッサ２、サブプロセッサ３、ハードウェアシミュレータ４に対して、目的とする対象動作についての開始、停止、変更を指示したり、あるいは、情報取得や情報設定等の動作を指示したりするものであり、各部における対象の挙動を制御するためのものである。
【００２４】
また、ハードウェア制御信号Ｃ１、Ｃ２は、本来、これがやり取りされる機器を制御する信号である。また、デバッグ情報Ｄ１、Ｄ２、Ｄ３は、メインプロセッサ２、サブプロセッサ３、ハードウェアシミュレータ４の内部状態等、マルチプロセッサシステムの問題を同定するに十分な情報を含んだものである。また、元時刻Ｘｔは、メインプロセッサ２から発せられる現在時刻を示す情報である。
【００２５】
例えば、動作指示の一例として、「メモリ内容の取得」が、デバッガ１から発行された場合には、メインプロセッサ２が動作して、あるいは、メインプロセッサ２とサブプロセッサ３とが動作して、あるいは、メインプロセッサ２とハードウェアシミュレータ４とが動作して、目的とするメモリからメモリ情報が読み出され、その内容をユーザに知らせることができるようにされる。
【００２６】
この場合、デバッガ１は、動作指示Ｄ１を発行すると共に、読み出されたメモリ情報をデバッグ情報Ｄ１、あるいは、デバッグ情報Ｄ２、あるいは、デバッグ情報Ｄ３として提供を受け、これをユーザが見やすいように加工するなどして、ユーザに提示することにより、対象のメモリ情報（メモリ内容）をユーザに知らせることができる。
【００２７】
なお、ハードウェア制御信号は、図１に示したように、メインプロセッサ２やサブプロセッサ３と、外部の機器（回路部等）との間でやり取りされるだけでなく、後述もするが、メインプロセッサ２やサブプロセッサ３の内部において、メインプロセッサ２やサブプロセッサ３を構成する各部を制御する場合においても用いられるものである。
【００２８】
また、デバッガ１は、図示しないキー操作部を通じて受け付けたユーザからの操作入力を解釈して、動作指示Ｍ１を発行する共に、提供されたデバッグ情報を可視化して、図示しないＬＣＤ（Liquid Crystal Display）などの表示部を通じてユーザに提供することができるものであり、上述もしたように、マルチプロセッサデバッガにおけるユーザＩ／Ｆとして機能することになる。
【００２９】
そして、一般に、マルチプロセッサシステムにおいては、メインプロセッサとサブプロセッサとが協調動作するが、メインプロセッサとサブプロセッサとは、それぞれ独立にプログラムを実行したり、データ処理を行ったりする。このため、メインプロセッサとサブプロセッサとのそれぞれにおいて実行されるプログラムを、同期をとって停止させることは難しく、適正にデバッグ処理を行うことは難しい。
【００３０】
この実施の形態のマルチプロセッサデバッガにおいても、サブプロセッサ３は、メインプロセッサ２により管理されるが、メインプロセッサ２からは独立して動作するものである。しかし、この実施の形態のマルチプロセッサデバッガにおいては、デバッグを行う場合に、メインプロセッサ２とサブプロセッサ３とにおけるプログラムの停止時点の同期を取れるようにすることによって、メインプロセッサ２だけでなくサブプロセッサ３の状態を示す情報についても正確に取得して、これをユーザに提供することができるようにしている。
【００３１】
以下、この実施の形態のマルチプロセッサデバッガのメインプロセッサ２とサブプロセッサ３の構成と動作について説明する。
【００３２】
［メインプロセッサ２について］
まず、メインプロセッサ２について説明する。図２は、図１に示したマルチプロセッサデバッガのメインプロセッサ２を説明するためのブロック図である。図２に示すように、この実施の形態のメインプロセッサ２は、対象プロセッサ２１と、逆方向実行手段２２と、メモリ２３と、計時手段２４と、リソースバッファ管理手段２５と、リソースバッファ２６とを備えたものである。
【００３３】
図２において、対象プロセッサ２１は、いわゆるＣＰＵ（Central Processing Unit）であり、リソースとしてレジスタ情報を持ち、プログラムの処理を行う（プログラムを実行する）主体である。
【００３４】
逆方向実行手段２２は、対象プロセッサ２１からのレジスタ情報をもとに、対象プロセッサ２１が可逆的に破壊する（書き換える）メモリ２３のメモリ情報の同定を行い、メモリ２３からメモリ情報を取得したり、また、メモリ２３のメモリ情報を復元したりすることができるものである。
【００３５】
すなわち、逆方向実行手段２２は、後述もするように、プログラムの実行に関する情報であるリソースを取得し、これをリソースバッファ管理手段２５を通じてリソースバッファ２５に記録すると共に、デバッグ時においては、リソースバッファ２６からリソースバッファ管理手段２５を通じて供給を受けるリソースに基づいて、逆方向にプログラムを実行するようにし、メモリ２３の破壊されたデータを復元することができるものである。
【００３６】
換言すれば、逆方向実行手段２２は、リソースを取得して記憶手段であるリソースバッファ２６に記録するようにする取得手段としての機能と、記憶手段であるリソースバッファ２６から読み出されたリソースに基づいてプログラムを逆方向に実行し、メモリ２３のデータを復元する逆方向実行手段としての機能を有するものである。
【００３７】
計時手段２４は、現在時刻を提供するいわゆる時計回路であり、対象プロセッサ２１からのハードウェア制御信号によって、システム全体の基準時刻に同期することができるようにしている。また、リソースバッファ管理手段２５は、リソースバッファ２６を管理する主体であり、リソースバッファ２６をリングバッファ状に管理することができるものである。
【００３８】
そして、図２に示したように、メインプロセッサ２において、計時手段２４は、ハードウェア制御信号の供給を受け、リソースバッファ管理手段２５に対して現在時刻Ｒｔを供給すると共に、サブプロセッサ３に対して元時刻Ｘｔを供給する。ここで、現在時刻Ｒｔは、現在の時刻を表し、マルチプロセッサシステムの問題同定に十分な分解能を持った確度と精度で提供される。また、元時刻Ｘｔは、現在時刻と同じ時刻を提供する。
【００３９】
すなわち、現在時刻Ｒｔ、元時刻Ｘｔは、同じ時刻の情報を提供するものであるが、メインプロセッサ２の内部で用いられるものを現在時刻Ｒｔとし、外部に出力される現在の時刻を元時刻Ｘｔとしている。このように、計時手段２４は、メインプロセッサ２における現在時刻Ｒｔを取得し、これを元時刻Ｘｔとしてサブプロセッサ３に供給する元時刻提供手段としての機能を有するものである。
【００４０】
そして、対象プロセッサ２１は、ハードウェアシミュレータ４との間でハードウェア制御信号Ｃ１を送受すると共に、デバッガ１からの動作指示Ｍ１の供給を受け、これらに基づいて指示された処理を行って、逆方向実行手段２２との間でレジスタ情報Ｉｒを送受する。ここで、レジスタ情報Ｉｒは、対象プロセッサ２１に内蔵される、複数のレジスタの全ての値の集合であり、プログラムの現在の命令実行に十分な情報を含んでいる。
【００４１】
また、対象プロセッサ２１は、サブプロセッサ３に対して動作指示Ｍ２を供給することができると共に、ハードウェアシミュレータ４に対して動作指示Ｍ３を供給することができるものである。すなわち、対象プロセッサ２１は、動作の停止指示などの動作指示をサブプロセッサ３などに対して提供する指示手段としての機能を有するものである。
【００４２】
逆方向実行手段２２は、デバッガ１との間でデバッグ情報Ｄ１をやり取りすると共に、メモリ２３との間でメモリ情報Ｉｍをやり取りする。また、逆方向実行手段２２は、リソースバッファ管理手段２５に対して保存リソースＳＲを提供し、リソースバッファ管理手段２５から復元リソースＲＲの供給を受ける。
【００４３】
すなわち、逆方向実行手段２２は、順方向実行時（通常の処理の実行時）においては、メモリ情報Ｉｒやメモリ情報Ｉｍなどからなる保存リソースＳＲを、リソースバッファ管理手段２５に供給する。一方、逆方向実行時（デバッグ処理時）においては、リソースバッファ管理手段２５から復元リソースＲＲ（リソースバッファ２６に記録されていた保存リソース）の提供を受けて、これに基づき逆方向に処理を実行し、メモリ情報を復元するようにして、この時に得られる情報をデバッグ情報Ｄ１としてデバッガ１に提供することができるものである。なお、デバッグ情報Ｄ１は、逆方向実行手段２２が扱う全てのデータを扱うことができるものである。
【００４４】
リソースバッファ管理手段２５は、逆方向実行手段２２から保存リソースＳＲの提供を受け、これをリソースバッファ２６に格納することができると共に、リソースバッファ２６から復元リソースＲＲを読み出して、これを逆方向実行手段２２に供給することができるものである。
【００４５】
すなわち、リソースバッファ管理手段２５が、「生成」指示をリソースバッファ２６に供給すると、これに応じてリソースバッファ２６は、保存リソースＳＲを保持しておくに十分なリソースバッファ領域を確保する。また、リソースバッファ管理手段２５が、「保存」指示をリソースバッファ２６に供給すると、これに応じてリソースバッファ２６は、上述のように確保した領域に、リソースバッファ管理手段２５からの保存リソースＳＲを追加記録（格納）する。このようにして、リソースバッファ管理手段２５は、最新の規定リソース数分の保存リソースＳＲを常に保持するようにリングバッファとして用いるリソースバッファ２６を管理する。
【００４６】
また、リソースバッファ管理手段２５は、「復元」指示を与えることにより、リソースバッファ２６に格納された、最新のリソースを、復元リソースＲＲとして取り出し、これを逆方向実行手段２２に供給する。すなわち、「復元」時においては、リソースバッファ管理手段２５は、リソースバッファ２６をＬＩＦＯ（Last In First Out）メモリとして用いて、「保存」時とは逆の順序で復元リソースＲＲを取り出して、これを利用できるようにする。
【００４７】
このように、この実施の形態のメインプロセッサ２においては、逆方向実行手段２２を備えることにより、メインプロセッサ２において行った処理を逆方向に実行するようにして、目的とする時点の状態をデバッグ情報Ｄ１としてデバッガ１に提供することができるようにしている。
【００４８】
［サブプロセッサ３について］
次に、サブプロセッサ３について説明する。図３は、図１に示したマルチプロセッサデバッガのサブプロセッサ３を説明するためのブロック図である。図３に示すように、この実施の形態のサブプロセッサ３は、対象プロセッサ３１と、逆方向実行手段３２と、メモリ３３と、計時手段３４と、リソースバッファ管理手段３５と、リソースバッファ３６と、遅延時間計測手段３７とを備えたものである。
【００４９】
すなわち、サブプロセッサ３は、遅延時間計測手段３７を除けば、図２に示したメインプロセッサ２とほぼ同様の構成を有するものである。なお、図３において、括弧内の数字は、図２に示したメインプロセッサ２の対応する構成部分を示しており、サブプロセッサ３を構成する各部も、図２に示したメインプロセッサ２の対応する各部と同様の機能を有し同様に動作するものである。
【００５０】
そして、図３に示すサププロセッサ３において、計時手段３４は、対象プロセッサ３１からのハードウェア制御信号の供給を受け、遅延時間計測手段３７に対して現在時刻Ｒｔを供給する。遅延時間計測手段３７には、メインプロセッサ２からの元時刻Ｘｔも供給される。元時刻Ｘｔは、上述もしたように、メインプロセッサ２が発した時刻であり、サブプロセッサ３における現在時刻Ｒｔとは異なる時刻である。
【００５１】
遅延時間計測手段３７は、サブプロセッサの計時手段３４からの現在時刻Ｒｔとメインプロセッサ２の計時手段２４からの元時間Ｘｔとから、遅延時間Ｄｔを計算する。この遅延時間Ｄｔは、メインプロセッサ２からの「動作指示」が、サブプロセッサ３に到達するまでの時間遅延を表し、メインプロセッサ２の時刻分解能とは異なってもよく、サブプロセッサ３の問題同定に十分な分解能を持った確度と精度を有するものである。
【００５２】
そして、遅延時間計算手段３７において得られた遅延時間Ｄｔは、リソースバッファ管理手段３５に供給される。そして、リソースバッファ管理手段３５は、遅延時間計測手段３７からの遅延時間Ｄｔに基づいて、保存リソースを保存するために必要なリソースバッファ３６の容量を計算し、保存リソースを格納するために十分な容量の領域を確保することができるようにしている。
【００５３】
そして、この図３に示したサブプロセッサ３においても、対象プロセッサ３１は、ハードウェアシミュレータ４との間でハードウェア制御信号Ｃ２を送受すると共に、メインプロセッサ２からの動作指示Ｍ２の供給を受け、これらに基づいて指示された処理を行って、逆方向実行手段３２との間でレジスタ情報Ｉｒを送受する。ここで、レジスタ情報Ｉｒは、対象プロセッサ３１に内蔵される、複数のレジスタの全ての値の集合であり、プログラムの現在の命令実行に十分な情報を含んでいる。
【００５４】
逆方向実行手段３２は、デバッガ１との間でデバッグ情報Ｄ２をやり取りすると共に、メモリ３３との間でメモリ情報Ｉｍをやり取りする。また、逆方向実行手段３２は、リソースバッファ管理手段３５に対して保存リソースＳＲを提供し、リソースバッファ管理手段３５から復元リソースＲＲの供給を受ける。
【００５５】
すなわち、逆方向実行手段３２は、順方向実行時（通常の処理の実行時）においては、メモリ情報Ｉｒやメモリ情報Ｉｍなどから得られる保存リソースＳＲを、リソースバッファ管理手段３５に供給する。一方、逆方向実行時（デバッグ処理時）においては、リソースバッファ管理手段３５から復元リソースＲＲの提供を受けて、これに基づき逆方向に処理を実行し、メモリ情報を復元するようにして、この時に得られる情報をデバッガ１にデバッグ情報Ｄ２としてデバッガ１に提供することができるものである。なお、デバッグ情報Ｄ２は、逆方向実行手段３２が扱う全てのデータを扱うことができるものである。
【００５６】
リソースバッファ管理手段３５は、逆方向実行手段３２から保存リソースＳＲの提供を受け、これをリソースバッファ３６に格納することができると共に、リソースバッファ３６から復元リソースＲＲを読み出して、これを逆方向実行手段３２に供給することができるものである。
【００５７】
すなわち、リソースバッファ管理手段３５は、上述もしたように、遅延時間Ｄｔに基づいて、保存リソースを保存するために必要なリソースバッファ３６の容量を計算し、「生成」指示において、リソースバッファ３６に保存リソースＳＲを保持しておくに十分なリソースバッファ領域を確保する。これによって、遅延時間分のリソースのみをリソースバッファ３６に保持することができるようにしている。
【００５８】
また、リソースバッファ管理手段３５が、「保存」指示をリソースバッファ３６に供給すると、これに応じてリソースバッファ３６は、上述のように確保した領域に、リソースバッファ管理手段３５からの保存リソースＳＲを追加記録（格納）する。このようにして、リソースバッファ管理手段３５は、メインプロセッサ２からの指示の指示の遅延時間Ｄｔをも考慮して、必要な保存リソースＳＲを常に保持するようにリングバッファとして用いるリソースバッファ３６を管理する。
【００５９】
また、リソースバッファ管理手段３５は、「復元」指示を与えることにより、リソースバッファ３６に格納された、最新のリソースを、復元リソースＲＲとして取り出し、これを逆方向実行手段３２に供給する。すなわち、「復元」時においては、リソースバッファ管理手段３５は、リソースバッファ３６をＬＩＦＯ（Last In First Out）メモリとして用いて、「保存」時とは逆の順序で復元リソースＲＲを取り出して、これを利用できるようにする。
【００６０】
このように、この実施の形態のサブプロセッサ３においては、メインプロセッサ２とサブプロセッサ３との間に生じる指示伝達の遅延時間をも考慮して、必要な分の保存リソースの全部を確実に保存し、これを利用できるようにし、サブプロセッサ３において行った処理を逆方向に実行するようにして、目的とする時点の状態をデバッグ情報Ｄ２としてデバッガ１に提供することができるようにしている。
【００６１】
なお、上述もしたように、サブプロセッサ２の逆方向実行手段３２が、プログラム実行時においてリソースを取得し、これをリソースバッファ管理手段３５を通じて記憶手段であるリソースバッファ３６に記録する取得手段としての機能と、デバッグ時においては、リソースバッファ管理手段３５を通じて記憶手段であるリソースバッファ３６に記憶されているリソースを読み出して、これに基づいてプログラムの逆方向の実行を行って、メモリ３２のデータを復元する逆方向実行手段としての機能を併せ持つものである。
【００６２】
また、計時手段３４が現在時刻取得手段としての機能を実現し、遅延時間計測手段３７が、メインプロセッサ２からの元時刻Ｘｔと、計時手段３４からの現在時刻とから遅延時間を算出する遅延時間計測手段としての機能を実現している。また、リソースバッファ管理手段３５が、遅延時間分のリソースをリソースバッファ３６に保持するようにする情報管理手段としての機能を実現するようにしている。
【００６３】
［逆方向実行手段の動作について］
図４は、図２、図３を用いて説明したメインプロセッサ２、サブプロセッサ３の逆方向実行手段２２、３２の基本的な動作について説明するための図である。ここでは、説明を簡単にするため、メインプロセッサ２の逆方向実行手段２２の動作として説明する。しかし、サブプロセッサ３の逆方向実行手段３２においても同様の処理が行われることになる。
【００６４】
図４において、対象プロセッサ２１は、図２を用いて上述したように、プログラムを実行する主体である。対象プロセッサ２１には処理フローがあり、プログラムにしたがって、命令を実行して行くことになる。
【００６５】
そして、図４において、「実行時リソース」は、対象プロセッサ２１がひとつの命令を実行するときに必要な、レジスタやメモリの情報であり、プロセッサ２１が命令を実行するごとに更新され、更新に先立って図４に示すように「スナップショット」として保存される。「スナップショット」は、過去の時点におけるプロセッサ２１の実行環境を表す情報である。
【００６６】
したがって、実行時リソースは、図２を用いて説明した保存リソースＳＲと等しく、「スナップショット配列」は、リソースバッファ２６と等しく、「スナップショット」は「スナップショット配列（リソースバッファ２６）」に蓄えられる、実行時リソース（保存リソース）のひとつの処理単位を意味する。
【００６７】
そして、通常の順方向実行時において、逆方向実行手段２２は、対応プロセッサ２１が命令を実行する毎に、対応プロセッサ２１のレジスタやメモリ２３から実行時リソースを取得し、これを保存リソースＳＲとして、リソースバッファ管理手段２５を通じて、リソースバッファ２６に格納する。
【００６８】
そして、逆方向実行手段２２は、逆方向に処理を実行する場合には、上述もしたように、リソースバッファ管理手段２５を通じて、リソースバッファ２６に格納されているスナップショットを復元リソースとして読み出し、この復元リソースに基づいて、正確に処理を逆方向に実行して、メインプロセッサの状態を正確に再現することができるようにしている。
【００６９】
この逆方向に命令を実行する処理を、図４に示したステップ番号Ｓ１〜Ｓ６に対応させて説明すると、以下のようになる。まず、ユーザからの指示に応じて、デバッガ１は、メインプロセッサ２の対象プロセッサ２１の処理フロー中にブレークポイントを設定する（ステップＳ１）。
【００７０】
そして、対象プロセッサ２１は、指示されたプログラムを実行し（ステップＳ２）、命令実行のたびに、実行時リソース（保存リソース）をスナップショットとして、スナップショット配列（リソースバッファ２６）に格納する（ステップＳ３）。スナップショット配列は、リソースバッファ管理手段２５によって、リソースバッファ２６がリングバッファ状に使用されて、これに格納される。
【００７１】
プログラムの実行がブレークポイントに達すると、対応プロセッサ２１は命令実行を停止する（ステップＳ４）。このとき、スナップショット配列（リソースバッファ２６）には、対応プロセッサ２１がブレークポイントにいたるまでに経た命令のスナップショット（保存リソース）が保存されている。
【００７２】
ユーザがデバッガ１に対して逆実行を指示すると、デバッガ１は、メインプロセッサ２に逆実行の動作指示を出すので、これに応じて、対象プロセッサ２１は、逆方向実行手段２を用いて、逆実行を行うようにする（ステップＳ５）。この場合、逆方向実行手段２２は、リソースバッファ管理手段２５を通じて、スナップショット配列（リソースバッファ２６）から、ひとつずつ、スナップショットを読み出すようにし、これが復元リソースとして復元される（ステップＳ６）。すなわち、ひとつ前の命令実行時の対応プロセッサの状態が、忠実に再現できる。
【００７３】
そして、目的の命令位置（ブレーク設定位置）まで、ステップＳ５、ステップＳ６を繰り返すことにより、目的の命令位置のプロセッサの状態が正確に復元できる。このような、逆方向処理を行うことによって、デバックを短時間にかつ正確に行うことができるようにされる。
【００７４】
［メインプロセッサ２とサブプロセッサ３の協調動作について］
次に、図４を用いて説明したように動作する逆方向実行手段２２を備え、図２に示した構成を有するメインプロセッサ２と、メインプロセッサ２の逆方向実行手段２２と同様に動作することが可能な逆方向実行手段３２を備え、図３に示した構成を有するサブプロセッサ３とを備え、図１に示したように構成されるこの実施の形態のマルチプロセッサデバッガにおけるデバッグ処理時の動作について説明する。
【００７５】
図５は、この実施の形態のマルチプロセッサデバッガにおいて、メインプロセッサ２の停止位置まで、サブプロセッサ３の実行状態を復元する処理（デバッグ処理）を説明するための図である。ここでは、マルチプロセッサデバッガにおけるメインプロセッサ２とサブプロセッサ３との動作を、図５に示したステップ番号Ｓ１１〜Ｓ１８に対応させて説明する。
【００７６】
まず、ユーザからの指示に応じて、デバッガ１は、メインプロセッサ２の対象プロセッサ２１の処理フロー中にブレークポイントを設定する（ステップＳ１１）。そして、メインプロセッサ２はデバッガ１からの動作指示Ｍ１に応じて、また、サブプロセッサ３はメインプロセッサ２からの動作指示に応じて、同時に目的とするプログラムを実行する（ステップＳ１２）。この場合、プログラムの実行タイミングは、それぞれの動作指示Ｍ１、Ｍ２に応じて、例えばある時刻になったら実行を開始するなどの方法により、メインプロセッサ２とサブプロセッサ３とにおいて、同時にプログラムの実行を開始することができる。
【００７７】
そして、メインプロセッサ２と、サブプロセッサ３とにおいては、図４を用いて上述したように、対象プロセッサであるＣＰＵが命令を１つ実行するたびに、実行リソース（保存リソースＳＲ）が形成され、これがスナップショット配列（リソースバッファ２６、３６）に保存される。すなわち、サブプロセッサ３においては、図５にも示すように、対象プロセッサ３１であるＣＰＵが命令を１つ実行するたびに、実行リソース（保存リソースＳＲ）が形成され、これがスナップショット配列（リソースバッファ３６）に保存される（ステップＳ１３）。
【００７８】
メインプロセッサ２におけるプログラムの実行が、ステップＳ１１において設定されたブレークポイントに達すると、メインプロセッサ２においては当該プログラムの実行を停止する（ステップＳ１４）。このとき、サブプロセッサ３においては、図５において、サブプロセッサ３側に点線矢印で示したように、メインプロセッサ２におけるプログラムが停止した後においても動作を継続している。
【００７９】
そして、メインプロセッサ２において、動作を停止させた後、メインプロセッサ２は、サブプロセッサ３に対して、動作指示Ｍ２により、プログラムの停止を指示する（ステップＳ１５）。このメインプロセッサ２からサブプロセッサ３に対する停止指示は、メインプロセッサ２からサブプロセッサ３までの経路に応じて遅延する。
【００８０】
メインプロセッサ２からの停止指示に応じて、サブプロセッサ３は、メインプロセッサ２の動作の停止に遅れて動作を停止する（ステップＳ１６）。このとき、計時手段３４は、対象プロセッサ３１からのハードウェア制御信号に応じて現在時刻を取得し、これを遅延時間計測手段３７に供給する。
【００８１】
これによって、遅延時間計測手段３７において遅延時間が算出され、遅延時間Ｄｔとしてリソースバッファ管理手段２５に供給されて、当該サブプロセッサ３における動作停止時から遡る方向に遅延時間分の保存リソースＳＲがリソースバッファ３６に保持するようにされる。したがって、図５において、サブプロセッサ３のリソースバッファ３６において斜線で示したように、遅延時間Ｄｔよりも過去のリソースは破棄するようにされる。
【００８２】
そして、サブプロセッサ３は、動作停止後、逆方向実行手段３２により、当該プログラム（当該処理）の逆方向に順次に実行する（ステップＳ１７）。これにより、スナップショット配列（リソースバッファ３６）から実行時リソース（保存リソース）が復元される（ステップＳ１８）。この復元された実行時リソースが、図３を用いて説明したように、リソースバッファ管理手段３５を通じて、逆方向実行手段３２に戻される復元リソースＲＲに相当する。
【００８３】
そして、目的の命令位置（設定されたブレーク位置）まで実行時リソースが復元されると（保持しているリソース分の逆実行を終了すると）、逆実行を停止する（ステップＳ１９）。この状態で、メインプロセッサとサブプロセッサの実行命令位置は、マルチプロセッサシステムの問題同定に十分な精度で、時刻的に一致している。
【００８４】
すなわち、図５において、基点ＣＰＵであるメインプロセッサ２の対象プロセッサ２１の停止時の実行時リソース（保存リソース）ＭＳＲと、サブプロセッサ３の対象プロセッサ３１の逆方向の実行の停止時の実行時リソースの実行命令位置は一致し、同期した実行時リソースを得て、メインプロセッサ２とサブプロセッサ３との状態を参照することができる。
【００８５】
これにより、メインプロセッサデバッガのデバッガ１は、メインプロセッサ２とサブプロセッサ３との、同時刻の状態を参照でき、以降は従来のデバッガと同様の手段により、マルチプロセッサシステムの問題を同定するための情報を得ることができる。
【００８６】
なお、図３等を用いて上述もしたように、スナップショット配列の容量、すなわち、リソースバッファ３６に確保すべきスナップショット（保存リソースＳＲ）の格納領域の容量は、遅延時間計測手段３７により算出される遅延時間に基づいて決定されている。
【００８７】
このため、図５において、スナップショット配列の容量は、停止位置から目的の命令位置までのスナップショット（保存リソースＳＲ）を保持するに十分なだけの容量が確保され、目的の命令位置以前のスナップショットは、たとえばリングバッファ状の制御によって、すでに破棄されていることを示している。このようにすることによって、必要なリソースだけを保持することができ、不必要な逆方向へのプログラムの実行を行うことなく、また、リソースバッファ３６を効率よく使用することができる。
【００８８】
このように、この実施の形態のマルチプロセッサデバッガにおいては、サブプロセッサ３がメインプロセッサ２からの動作指示Ｍ２の１つである停止指示と、元時刻Ｘｔの供給を受け、この停止指示を受けた時点のサブプロセッサ３における現在時刻を取得し、この現在時刻とメインプロセッサ２からの元時刻Ｘｔに基づいて停止指示がサブプロセッサ３に到達するまでの遅延時間Ｄｔを得る。
【００８９】
そして、サブプロセッサ３は、メインプロセッサ２からの停止指示に応じて動作を停止させた時点から遅延時間Ｄｔ分のリソースをリソースバッファ３６に保持するようにし、保持されたリソース分だけ、逆方向実行手段３２によりプログラムの逆方向への実行を行って、メインプロセッサ２における停止時点と同じタイミングのリソースをえて、その時点のサブプロセッサ３の動作状態を知ることができるようにされる。
【００９０】
すなわち、メインプロセッサ２とサブプロセッサ３における動作の停止時点を確実に一致させ、そのときの各プロセッサの内容を把握することができるようにされる。
【００９１】
なお、サブプロセッサ３のリソースバッファ３６において、遅延時間分よりもさらに過去のデータは、必ずしも破棄する必要はなく、遅延時間分のリソースのみを用いて逆方向のプログラム実行ができるように、どこまでが遅延時間Ｄｔ分のデータであるかを把握できるようにしておけばよい。
【００９２】
また、サブプロセッサ３のリソースバッファ３６に遅延時間Ｄｔ分以上のデータを残すようにした場合には、メインプロセッサ２における例えば１実行命令毎に逆方向にプログラムを実行するのに同期して、サブプロセッサ３においても、１実行命令毎に逆方向にプログラムを実行するようにすることも可能である。
【００９３】
［この発明によるマルチプロセッサデバッガの適用例について］
次に、図１〜図５を用いて説明したこの発明によるマルチプロセッサデバッガの適用例について具体的に説明する。以下においては、（１）マルチコアプロセッサ構成の場合、（２）ハードウェアシミュレータ内蔵マルチコアプロセッサ構成の場合、（３）シングルコアプロセッサ群構成の場合、（４）マルチコアプロセッサ群の場合の４つについて説明する。
【００９４】
なお、以下に説明するマルチプロセッサデバッガにおいて、図１〜図５を用いて説明したマルチプロセッサデバッガと同様に構成される部分は、同じ参照符号を付し、重複する説明は省略する。
【００９５】
［（１）マルチコアプロセッサ構成の場合について］
図６は、この発明によるマルチプロセッサデバッガを、マルチコアプロセッサを用いて構成した場合の例を説明するためのブロック図である。図６に示すように、この例のマルチプロセッサデバッガは、ホストコンピュータ１０１と、マルチコアプロセッサ１０２と、シグナルエクササイザ１０３とを備えたものである。
【００９６】
ホストコンピュータ１０１は、例えばパーソナルコンピュータである。また、マルチコアプロセッサ１０２は、図６に示したように、複数のプロセッサを同一チップに内蔵したデバイスである。マルチコアプロセッサ１０２は、各プロセッサが協調動作するように設計されたものであり、複数のプロセッサのうちの１つはメインプロセッサ２であり、その他のプロセッサはサブプロセッサ３として機能する。すなわち、図６に示したマルチコアプロセッサ１０２は、複数のサブプロセッサ３（１）、３（２）、…を備えるものである。また、シグナルエクササイザ１０３は、ハードウェアシミュレータ４からなる例えば信号発生器である。
【００９７】
そして、ホストコンピュータ１０１にはデバッガ１が配置される。デバッガ１は、マルチコアプロセッサ１０２に対して動作指示Ｍ１を発行する。この動作指示Ｍ１は、図６に示したように、メインプロセッサ２に供給される。また、デバッガ１は、マルチプロセッサ１０２、および、シグナルエクササイザ１０３との間でデバッグ情報Ｄをやり取りする。このデバッガ情報Ｄは、メインプロセッサ２との間でやり取りされるデバッグ情報Ｄ１と、サブプロセッサ３（１）、３（２）、…のそれぞれとやり取りされるデバッグ情報Ｄ２（１）、Ｄ２（２），…、ハードウェアシミュレータ４との間でやり取りされるデバッグ情報Ｄ３とを総称するものである。
【００９８】
また、メインプロセッサ２から、各サブプロセッサ３（１）、３（２）、…に対しては、動作指示Ｍ２と元時刻Ｘｔとが供給される。また、メインプロセッサ２とサブプロセッサ３のそれぞれは、ハードウェアシミュレータ４との間でハードウェア制御信号Ｃをやり取りする。このハードウェア制御信号Ｃは、メインプロセッサ２との間でやり取りされるハードウェア制御信号Ｃ１と、サブプロセッサ３（１）、３（２）、…との間でやり取りされるハードウェア制御信号Ｃ２（１）、Ｃ２（２）、…とを総称するものである。
【００９９】
すなわち、シグナルエクササイザ１０３のハードウェアシミュレータ４は、これに供給されるメインプロセッサ２からの動作指示Ｍ３とデバッガ１からのデバッグ情報Ｄ３に基づき、ハードウェア制御信号Ｃ１、Ｃ２を適宜形成し、これらを対応するメインプロセッサ２、サブプロセッサ３との間でやり取りすることができるようにしている。
【０１００】
このようにすることによって、メインプロセッサ２、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、それらが非可逆に破壊したリソースの一部または全部を、ハードウェアシミュレータ４の制御によって、目的の命令位置においてそうであったと同じ状態に復元することができるようにされる。
【０１０１】
つまり、メインプロセッサ２、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、ハードウェアシミュレータ４の制御により、図４、図５を用いて説明したように、順方向実行と実行時リソースの保存がブレークが設定された位置まで行うようにされるが、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、メインプロセッサ２からの動作停止指示の到達の遅延時間を考慮して、設定されたブレーク位置まで、当該プログラムの逆方向への実行を行って、メインプロセッサ２が停止した位置における実行時リソースを復元することができるようにされる。
【０１０２】
なお、マルチコアプロセッサ１０２は、同一機能のプロセッサを複数内蔵していてもよく、メインプロセッサ、サブプロセッサの役割は任意に選べることはもちろんである。
【０１０３】
［（２）ハードウェアシミュレータ内蔵マルチコアプロセッサ構成の場合について］
図７は、この発明によるマルチプロセッサデバッガを、ハードウェアシミュレータ内蔵マルチコアプロセッサを用いて構成した場合の例を説明するためのブロック図である。図７に示すように、この例のマルチコアプロセッサは、ホストコンピュータ１０１と、ハードウェアシミュレータ内蔵マルチコアプロセッサ１０４とを備えたものである。
【０１０４】
図７において、ホストコンピュータ１０１は、図６に示したホストコンピュータ１０１と同様に構成されたものであり、デバッガ１を有するようにされたものである。また、ハードウェアシミュレータ内蔵マルチコアプロセッサ１０４は、図６に示したマルチコアプロセッサ１０２に、図６に示したハードウェアシミュレータ４からなるシグナルエクササイザ１０３を包含するように構成したものであり、メインプロセッサ２、サブプロセッサ３（１）、３（２）、…、ハードウェアシミュレータ４の構成、動作、役割は、図６に示した例の場合と同様である。
【０１０５】
したがって、この図７に示した例の場合にも、デバッガ１は、ハードウェアシミュレータ内蔵マルチコアプロセッサ１０４に対して動作指示Ｍ１を発行する。この動作指示Ｍ１は、図７に示したように、メインプロセッサ２に供給される。また、デバッガ１は、ハードウェアシミュレータ内蔵マルチコアプロセッサ１０４との間でデバッグ情報Ｄをやり取りする。このデバッグ情報Ｄは、メインプロセッサ２との間でやり取りされるデバッグ情報Ｄ１と、サブプロセッサ３（１）、３（２）、…のそれぞれとやり取りされるデバッグ情報Ｄ２（１）、Ｄ２（２），…、ハードウェアシミュレータ４との間でやり取りされるデバッグ情報Ｄ３とを総称するものである。
【０１０６】
また、メインプロセッサ２から、各サブプロセッサ３（１）、３（２）、…に対しては、動作指示Ｍ２と元時刻Ｘｔとが供給される。また、メインプロセッサ２とサブプロセッサ３（１）、３（２）、…のそれぞれは、ハードウェアシミュレータ４との間でハードウェア制御信号Ｃをやり取りする。このハードウェア制御信号Ｃは、メインプロセッサ２との間でやり取りされるハードウェア制御信号Ｃ１と、サブプロセッサ３（１）、３（２）、…との間でやり取りされるハードウェア制御信号Ｃ２（１）、Ｃ２（２）、…とを総称するものである。
【０１０７】
したがって、ハードウェアシミュレータ内蔵マルチコアプロセッサ１０４のハードウェアシミュレータ４は、これに供給されるメインプロセッサ２からの動作指示Ｍ３とデバッガ１からのデバッグ情報Ｄ３に基づき、ハードウェア制御信号Ｃ１、Ｃ２を適宜形成し、これらを対応するメインプロセッサ２、サブプロセッサ３との間でやり取りすることができるようにしている。
【０１０８】
これにより、この図７に示した構成のマルチプロセッサデバッガの場合にも、メインプロセッサ２、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、それらが非可逆に破壊したリソースの一部または全部を、ハードウェアシミュレータ４の制御によって、目的の命令位置においてそうであったと同じ状態に復元することができるようにされる。
【０１０９】
つまり、メインプロセッサ２、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、ハードウェアシミュレータ４の制御により、図４、図５を用いて説明したように、順方向実行と実行時リソースの保存が、ブレークが設定された位置まで行うようにされるが、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、メインプロセッサ２からの動作停止指示の到達の遅延時間を考慮して、設定されたブレーク位置まで、当該プログラムの逆方向への実行を行って、メインプロセッサ２が停止した位置における実行時リソースを復元することができるようにされる。
【０１１０】
［（３）シングルコアプロセッサ群構成の場合について］
図８は、この発明によるマルチプロセッサデバッガを、シングルコアプロセッサ群を用いて構成した場合の例を説明するためのブロック図である。図８に示すように、この例のマルチプロセッサデバッガは、ホストコンピュータ１０１と、シグナルエクササイザ１０３と、シングルコアプロセッサ１０５と、シングルコアプロセッサ群１０６とを備えたものである。
【０１１１】
ホストコンピュータ１０１、シグナルエクササイザ１０３は、図６に示したホストコンピュータ１０１、シグナルエクササイザ１０３と同様に構成されたものである。そして、図８に示すように、この例のマルチプロセッサデデバッガは、複数のシングルコアプロセッサが設けられ、そのうちの１つにメインプロセッサ２が配置するようにされ、残りのシングルコアプロセッサからなるシングルコアプロセッサ群１０６を構成する各シングルコアプロセッサのそれぞれには、１つずつのサブプロセッサ３が配置するようにされる。
【０１１２】
そして、デバッガ１は、シングルコアプロセッサ１０５のメインプロセッサ２に対して動作指示Ｍ１を発行する。また、デバッガ１は、シングルコアプロセッサ１０５のメインプロセッサ２との間ではデバッグ情報Ｄ１をやり取りし、シングルコアプロセッサ群のサブプロセッサ３（１）、３（２）、…のそれぞれとの間ではデバッグ情報Ｄ２をやり取りし、ハードウェアシミュレータ４との間ではデバッグ情報Ｄ３をやり取りする。なお、これらデバッグ情報Ｄ１、Ｄ２、Ｄ３をデバッグ情報Ｄが総称するようにしている。
【０１１３】
また、メインプロセッサ２から、各サブプロセッサ３（１）、３（２）、…に対しては、動作指示Ｍ２と元時刻Ｘｔとが供給される。また、メインプロセッサ２とサブプロセッサ３（１）、３（２）、…のそれぞれは、ハードウェアシミュレータ４との間でハードウェア制御信号Ｃをやり取りする。このハードウェア制御信号Ｃは、メインプロセッサ２との間でやり取りされるハードウェア制御信号Ｃ１と、サブプロセッサ３（１）、３（２）、…との間でやり取りされるハードウェア制御信号Ｃ２（１）、Ｃ２（２）、…とを総称するものである。
【０１１４】
したがって、ハードウェアシミュレータ４は、これに供給されるメインプロセッサ２からの動作指示Ｍ３とデバッガ１からのデバッグ情報Ｄ３に基づき、ハードウェア制御信号Ｃ１、Ｃ２を適宜形成し、これらを対応するメインプロセッサ２、サブプロセッサ３との間でやり取りすることができるようにしている。
【０１１５】
これにより、この図８に示した構成のマルチプロセッサデバッガの場合にも、メインプロセッサ２、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、それらが非可逆に破壊したリソースの一部または全部を、ハードウェアシミュレータ４の制御によって、目的の命令位置においてそうであったと同じ状態に復元することができるようにされる。
【０１１６】
つまり、メインプロセッサ２、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、ハードウェアシミュレータ４の制御により、図４、図５を用いて説明したように、順方向実行と実行時リソースの保存が、ブレークが設定された位置まで行うようにされるが、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、メインプロセッサ２からの動作停止指示の到達の遅延時間を考慮して、設定されたブレーク位置まで、当該プログラムの逆方向への実行を行って、メインプロセッサ２が停止した位置における実行時リソースを復元することができるようにされる。
【０１１７】
なお、シングルコアプロセッサのそれぞれは、異なる性能のプロセッサであってもよいことはもちろんである。
【０１１８】
［（４）マルチコアプロセッサ群の場合について］
図９は、この発明によるマルチプロセッサデバッガを、マルチコアプロセッサ群を用いて構成した場合の例を説明するためのブロック図である。図８に示すように、この例のマルチプロセッサデバッガは、ホストコンピュータ１０１と、マルチコアプロセッサ１０２と、シグナルエクササイザ１０３と、マルチコアプロセッサ群１０７とを備えたものである。
【０１１９】
ホストコンピュータ１０１、シグナルエクササイザ１０３のそれぞれは、図６に示したホストコンピュータ１０１、シグナルエクササイザ１０３と同様に構成されたものである。そして、図９において、マルチコアプロセッサ１０２、マルチコアプロセッサ群１０７に示すように、複数のプロセッサを備えたマルチプロセッサが複数個設けられる。
【０１２０】
この複数個のマルチプロセッサのうちの１つにおいて、複数のプロセッサのうちの１つをメインプロセッサ２とし、それ以外の複数個のプロセッサのそれぞれをサブプロセッサ３（１）、３（２）、…としたマルチコアプロセッサ１０２を設ける。それ以外のマルチコアプロセッサにおいては、全てのプロセッサをサブプロセッサ３（１）、３（２）、…とする。図９においては、複数のサブプロセッサのみを備えたマルチコアプロセッサの集まりをマルチコアプロセッサ群１０７として示している。
【０１２１】
したがって、図９に示したマルチプロセッサ１０２は、図６に示したマルチコアプロセッサ１０２と同様に構成されていることが分かる。なお、上述もしたように、図９に示したメインプロセッサ２、サブプロセッサ３のそれぞれは、図６に示したメインプロセッサ２、サブプロセッサ３と同様に構成されたものである。
【０１２２】
そして、デバッガ１は、マルチコアプロセッサ１０２のメインプロセッサ２に対して動作指示Ｍ１を発行する。また、デバッガ１は、マルチコアプロセッサ１０２のメインプロセッサ２との間と、マルチコアプロセッサ１０２内の各サブプロセッサ３（１）、３（２）、…のそれぞれとの間と、ハードウェアシミュレータ４との間と、マルチコアプロセッサ群１０７の各マルチコアプロセッサの各サブプロセッサとの間において、デバッグ情報Ｄのやり取りを行うことができるようにしている。
【０１２３】
また、マルチコアプロセッサ１０２の各サブプロセッサ３（１）、３（２）、…、および、メインプロセッサ群の各マルチコアプロセッサの各サブプロセッサ３（１）、３（２）、…のそれぞれに対しては、メインプロセッサ２から、動作指示Ｍ２と元時刻Ｘｔとが供給される。
【０１２４】
また、マルチコアプロセッサ１０２のメインプロセッサ２と、マルチコアプロセッサ１０２のサブプロセッサ３（１）、３（２）、…のそれぞれと、マルチコアプロセッサ群１０７の各マルチコアプロセッサの各サブプロセッサ３（１）、（２）、…のそれぞれと、ハードウェアシミュレータ４との間でハードウェア制御信号Ｃをやり取りする。
【０１２５】
したがって、ハードウェアシミュレータ４は、これに供給されるメインプロセッサ２からの動作指示Ｍ３とデバッガ１からのデバッグ情報Ｄに基づき、ハードウェア制御信号Ｃを適宜形成し、これをマルチコアプロセッサ１０２のメインプロセッサ２、マルチコアプロセッサ１０２のサブプロセッサ３（１）、３（２）、…、マルチコアプロセッサ群１０７の各マルチプロセッサの各サブプロセッサ３（１）、３（２）、…との間でやり取りすることができるようにしている。
【０１２６】
これにより、この図９に示した構成のマルチプロセッサデバッガの場合にも、マルチコアプロセッサ１０２のメインプロセッサ２、サブプロセッサ３（１）、３（２）、…、マルチコアプロセッサ群１０７の各マルチコアプロセッサの各サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、それらが非可逆に破壊したリソースの一部または全部を、ハードウェアシミュレータ４の制御によって、目的の命令位置においてそうであったと同じ状態に復元することができるようにされる。
【０１２７】
つまり、マルチコアプロセッサ１０２のメインプロセッサ２おいびサブプロセッサ３（１）、３（２）、…、マルチコアプロセッサ群１０７の各マルチコアプロセッサの各サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、ハードウェアシミュレータ４の制御により、図４、図５を用いて説明したように、順方向実行と実行時リソースの保存が、ブレークが設定された位置まで行うようにされるが、サブプロセッサ３（１）、３（２）、…のそれぞれにおいては、メインプロセッサ２からの動作停止指示の到達の遅延時間を考慮して、設定されたブレーク位置まで、当該プログラムの逆方向への実行を行って、メインプロセッサ２が停止した位置における実行時リソースを復元することができるようにされる。
【０１２８】
なお、マルチコアプロセッサは、異なる性能のプロセッサであってもよいことはもちろんである。
【０１２９】
また、図６〜図９を用いて説明したマルチプロセッサデバッガの構成例はいずれも一例であり、メインプロセッサとサブプロセッサとを有する構成とされた種々のマルチプロセッサにこの発明のマルチプロセッサデバッガを適用することができる。
【０１３０】
［マルチプロセッサデバッガの適用例について］
次に、この発明によるマルチプロセッサデバッガの適用例について説明する。最近、グリッド・コンピューティングが注目されている。グリッド・コンピューティングは、ネットワークにつながる複数の情報処理装置を協調動作させて高い演算性能を実現する技術である。そして、グリッド・コンピューティングの技術が用いられ形成され、複数の情報処理装置間で分散処理を行うネットワークシステムで用いられる種々の情報処理装置において、マルチプロセッサシステムを用いることが考えられ、このような情報処理装置にこの発明を適用することが可能である。
【０１３１】
図１０は、グリッド・コンピューティングの技術が用いられると共に、マルチプロセッサシステムの情報処理装置がネットワークを通じて接続されて構成されるネットワークシステム、および、この発明によるマルチプロセッサデバッガが適用される情報処理装置の例を説明するための図である。
【０１３２】
図１０に示すように、ネットワーク２００を介して複数の情報処理装置３００（１）、３００（２）、…、３００（ｎ）が接続されている。情報処理装置３００（１）は、情報処理コントローラ３１０（１）、メインメモリ３２０（１）、外部記憶装置３３０（１）を備え、情報処理装置３００（２）は、情報処理コントローラ３１０（２）、メインメモリ３２０（２）、外部記憶装置３３０（２）を備え、情報処理装置３００（３）は、情報処理コントローラ３１０（３）、メインメモリ３２０（３）、外部記憶装置３３０（３）を備えたものである。
【０１３３】
なお、各情報処理装置３００（１）、３００（２）、…、３００（ｎ）における、情報処理コントローラ３１０（１）、３１０（２）、…、３１０（ｎ）、メインメモリ３２０（１）、３２０（２）、…、３２０（ｎ）、外部記録装置３３０（１）、３３０（２）、…、３３０（ｎ）のそれぞれは、同じ機能を有するものである。しかし、処理能力や記憶容量などが、各情報処理装置毎に異なっている場合もあるし、全く同様に構成されている場合もある。
【０１３４】
以下においては、説明を簡単にするため、図１０に示した情報処理装置３００（ｎ）の場合を例にして、各部の構成と動作について説明する。しかし、情報処理装置３００（ｎ）以外の各情報処理装置も同様に構成され、同様に動作するものである。
【０１３５】
情報処理装置３００（ｎ）の情報処理コントローラ３１０（ｎ）は、図１０において情報処理装置３１０（ｎ）の部分に示したように、好適には、１つのメインプロセッサ３１１と、１つ以上のサブプロセッサ３１５と、ＤＭＡＣ（ダイレクトメモリアクセスコントローラ）３１３と、ＤＣ（ディスクコントローラ）３１４とを具備する。なお、情報処理コントローラ３１１において、サブプロセッサ３１５は、１つの場合もあれば、図１０に示したように複数個設けられる場合もある。
【０１３６】
メインプロセッサ３１１は、サブプロセッサ３１５によるプログラムまたはデータの処理のスケジュール管理と全般的管理とを行う。また、メインプロセッサ３１１内でプログラムが動作する場合もある。後述する機能プログラムもメインプロセッサ３１１内で動作するプログラムである。
【０１３７】
各サブプロセッサ３１５（１）、３１５（２）、…は、メインプロセッサ３１１の制御によって並列的かつ独立にプログラムまたはデータの処理を実行する。さらにメインプロセッサ３１１内のプログラムが、サブプロセッサ３１５（１）、３１５（２）、…内のプログラムと連携して動作する場合もある。メインプロセッサ３１１、サブプロセッサ３１５（１）、３１５（２）、…は各々、ＬＳ（ローカルストレージ）３１２、３１６を有している。
【０１３８】
なお、情報処理装置３００（１）、３００（２）、…、３００（ｎ）のそれぞれには、ネットワーク全体を通して各情報処理装置を一意的に識別できる識別子が情報処理装置ＩＤ（以下、情報処理コントローラＩＤという。）として割り当てられる。同様に、各情報処理装置３００（１）、３００（２）、…、３００（ｎ）のそれぞれのメインプロセッサ３１１およびサブプロセッサ３１５についても識別可能な識別子がメインプロセッサＩＤおよびサブプロセッサＩＤとして割り当てられる。
【０１３９】
ＤＭＡＣ３１３は、情報処理コントローラ３１０（ｎ）と接続されているＤＲＡＭ（ダイナミックＲＡＭ）等のメインメモリ３２０（ｎ）に格納されているプログラムまたはデータへのアクセスを行う。ＤＣ３１４は、情報処理コントローラ３１０（ｎ）と接続されている外部記録装置３３０（ｎ）へのアクセスを行う。
【０１４０】
外部記録装置３３０（ｎ）には、固定ディスク（ハードディスク）、リムーバブルディスクや、ＭＯ（マグネット  オプティカル  ディスク）、ＣＤ±ＲＷ、ＤＶＤ±ＲＷなどの光ディスク、メモリディスク等が想定され、ＳＲＡＭ（スタティックＲＡＭ）、ＲＯＭ等も含まれる。
【０１４１】
これらメインプロセッサ３１１、サブプロセッサ３１５、ＤＭＡＣ３１３、ＤＣ３１４はバスによって接続されている。情報処理コントローラ３１０（ｎ）はまた、好適には単一の集積回路として構成されることが望ましい。そして、上述もしたように、ネットワーク２００に接続されている他の情報処理装置３００（１）、３００（２）、…等の情報処理コントローラ３１０（１）、３１０（２）、…等も同様に構成されているものとする。
【０１４２】
前述したように、例えば、情報処理コントローラ３１０（ｎ）が、複数のサブプロセッサ３１５（１）、３１５（２）、…を備える場合、サブプロセッサ３１５（１）、３１５（２）、…のそれぞれは、独立にプログラムまたはデータの処理を実行する。しかし、もしも異なるサブプロセッサが同一メインメモリ内の同一領域に対して同時に、読み出し、または書き込みを行った場合には、データの不整合が生じ得る。
【０１４３】
そこで、この例の情報処理コントローラ３１０（ｎ）においては、上述のように複数のサブプロセッサ３１５（１）、３１５（２）、…が存在することにより発生する可能性のあるデータの不整合を生じさせないようにしている。図１１は、メインメモリ３２０（ｎ）に対してアクセスする際の手順を説明するための図である。
【０１４４】
メインメモリ３２０（ｎ）は、図１１に示すように、複数のアドレス指定可能なメモリロケーション（０〜Ｍ）から構成される。各メモリロケーション（０〜Ｍ）に対して、データの状態情報を格納するための追加セグメント（０〜Ｍ）が割り振られる。追加セグメントはＦ／Ｅビット、サブプロセッサＩＤ、ＬＳアドレス（ローカルストレージアドレス）を含む。各メモリロケーション（０〜Ｍ）にはアクセスキー（０〜Ｍ）も割り振られるが、これについては後述する。
【０１４５】
そして、追加セグメント（０〜Ｍ）のＦ／Ｅビットは、以下のように定義される。  
Ｆ／Ｅビット＝「０」の場合、サブプロセッサにより読み出され処理中、または空き状態であるため最新データではない無効データである。読み出し不可だが予約は可能であり、Ｆ／Ｅビットが「１」になった時に予め読み出し予約情報として追加セグメントに書き込まれたサブプロセッサＩＤ、ＬＳアドレスへ読み出される。
【０１４６】
すなわち、複数のサブプロセッサによりデータを多段階に処理する必要がある場合、このように構成することにより前段階の処理を行うサブプロセッサが、処理済みのデータをメインメモリ３２０（ｎ）上の所定のアドレスへ書き込んだ直後、即時に該データが後段階の処理を行うサブプロセッサへ読み出されることになり、非常に好適である。また、書き込み可能であり、書き込み後にＦ／Ｅビットは「１」になる。
【０１４７】
また、Ｆ／Ｅビット＝「１」の場合、サブプロセッサにより読み出されておらず、従って処理中ではない最新データである。読み出し可能であり、読み出し後にＦ／Ｅは「０」になる。書き込み不可である。
【０１４８】
また、図１２に示すように、サブプロセッサ３１５（１）、３１５（２）、…内のＬＳも、複数のアドレス指定可能なメモリロケーション（０〜Ｌ）から構成される。各メモリロケーション（０〜Ｌ）に対してはやはり、追加セグメントが割り振られる。追加セグメントはビジービットを含む。
【０１４９】
そして、メインメモリ３２０（ｎ）内のデータをサブプロセッサ３１５（１）、３１５（２）、…等のＬＳのメモリロケーションへ読み出す時には、対応するビジービットを「１」に設定し予約する。ビジービットが「１」であるメモリロケーションには他のデータは格納不可である。ＬＳのメモリロケーションへ読み出し後、ビジービットは「０」になり、任意の目的に使用可能になる。
【０１５０】
さらに、図１１に示したように、情報処理装置３００（ｎ）のメインメモリ３２０（ｎ）には、複数のサンドボックスが含まれる。サンドボックスはメインメモリ３２０（ｎ）内の領域を確定するものであり、各サンドボックスはサブプロセッサ３１５（１）、３１５（２）、…に割り当てられ排他的に使用可能である。すなわち、サブプロセッサ３１５（１）、３１５（２）、…のそれぞれは自身に割り当てられたサンドボックスを使用可能だが、前述の領域を超えてデータのアクセスを行えない。
【０１５１】
また、図１１に示したように、メインメモリ３２０（ｎ）は、複数のメモリロケーションから構成されるが、サンドボックスはこれらのメモリロケーションの集合である。さらに、メインメモリ３２０（ｎ）の排他制御を実現するために、図１３に示すようなキー管理テーブルが用いられる。
【０１５２】
キー管理テーブルは、ＳＲＡＭのような比較的高速のメモリに好適に格納され、ＤＭＡＣ３１３と関連付けられる。キー管理テーブル内の各エントリには、サブプロセッサを識別するサブプロセッサＩＤ、サブプロセッサキー（０〜Ｎ）およびキーマスク（０〜Ｎ）が含まれる。
【０１５３】
ここで、例えばサブプロセッサ３１５（１）がメインメモリ３２０（ｎ）を使用する際のプロセスを図１１、図１２、図１３を参照しながら説明する。サブプロセッサ３１５（１）はＤＭＡＣ３１３へ、読み出しまたは書き込みコマンドを出力する。このコマンドには自身のサブプロセッサＩＤと使用要求対象先であるメインメモリ３２０（ｎ）のアドレスが含まれる。
【０１５４】
ＤＭＡＣ３１３は、このコマンドを実行する前に図１３に示したように構成されるキー管理テーブルを参照し、使用要求元であるサブプロセッサ３１５（１）のサブプロセッサキーを調べる。次いでＤＭＡＣ３１３は、調べたサブプロセッサキーとサブプロセッサ３１５（１）の使用要求先である図１１に示したメインメモリ３２０（ｎ）内のメモリロケーションに割り振られたアクセスキーとを比較する。２つのキーが一致した場合のみ、前述のコマンドを実行する。
【０１５５】
また、図１３に示したキーマスクの使用方法として、キーマスクの任意のビットが「１」になることにより、関連付けられたサブプロセッサキーの対応するビットが「０」または「１」になることができる。例えばサブプロセッサキーが「１０１０」であるとする。通常このサブプロセッサキーによって「１０１０」のアクセスキーを持つサンドボックスへのアクセスだけが可能になる。
【０１５６】
しかし、このサブプロセッサキーと関連付けられたキーマスクが「０００１」に設定されている場合、このサブプロセッサキーを用いて「１０１０」または「１０１１」のいずれかのアクセスキーを持つサンドボックスへのアクセスが可能となる。以上のようにしてサンドボックスの排他性を実現する。
【０１５７】
すなわち、前述の複数のサブプロセッサ３１５（１）、３１５（２）、…によりデータを多段階に処理する必要がある場合、このように構成することにより前段階の処理を行うサブプロセッサと、後段階の処理を行うサブプロセッサのみがメインメモリ３２０（ｎ）の所定のアドレスへアクセスでき、データ保護が可能となる。
【０１５８】
例えば、以下のように使用することが考えられる。まず、情報処理装置３００（ｎ）の起動直後においては、キーマスクの値は全てゼロである。メインプロセッサ３１１内のプログラムが実行され、サブプロセッサ３１５（１）、３１５（２）、…内のプログラムと連携動作するものとする。
【０１５９】
第１のサブプロセッサ３１５（１）により出力された処理結果データを一旦メインメモリ３２０（ｎ）に格納し、第２のサブプロセッサ３１５（２）に入力したいときには該当するメインメモリ領域は、当然どちらのサブプロセッサからもアクセス可能である必要がある。
【０１６０】
そのような場合にメインプロセッサ３１１内のプログラムはキーマスクの値を適切に変更し、複数のサブプロセッサ３１５（１）、３１５（２）からアクセスできるメインメモリ領域を設けることにより、サブプロセッサ３１５（１）、３１５（２）による多段階的な処理を可能にする。
【０１６１】
より具体的には、他情報処理装置からのデータ→第１のサブプロセッサ３１５（１）による処理→第１のメインメモリ領域→第２のサブプロセッサ３１５（２）による処理→第２のメインメモリ領域、という手順で多段階処理が行われるときには、  
第１のサブプロセッサ３１５（１）のサブプロセッサキー：０１００  
第１のメインメモリ領域のアクセスキー                ：０１００  
第２のサブプロセッサ３１５（２）のサブプロセッサキー：０１０１  
第２のメインメモリ領域のアクセスキー                ：０１０１  
のような設定のままだと、第２のサブプロセッサ３１５（２）は第１のメインメモリ領域にアクセスすることができない。
【０１６２】
そこで、第２のサブプロセッサ３１５（２）のキーマスクを０００１にすることにより、第２のサブプロセッサ３１５（２）による第１のメインメモリ領域へのアクセスを可能にすることができる。
【０１６３】
以下に、このネットワークシステムを用いて分散処理を行う手順について説明する。なお、以下においては、特に区別が必要な場合を除き、情報処理装置３００（１）、３００（２）、…、３００（ｎ）を情報処理装置３００と、情報処理コントローラ３１０（１）、３１０（２）、…、３１０（ｎ）を情報処理コントローラ３１０と、メインメモリ３２０（１）、３２０（２）、…、３２０（ｎ）をメインメモリ３２０と、外部記録装置３３０（１）、３３０（２）、…、３３０（ｎ）を外部記憶装置３３０というように、サフィックスを省略することとする。
【０１６４】
ネットワーク上の情報処理装置３００（１）、３００（２）、…、３００（ｎ）間では、ソフトウェアセルが伝送される。ある情報処理装置はコマンド、プログラムおよびデータを含むソフトウェアセルを生成し、ネットワークを介し他の情報処理装置に送信することにより処理を分散できる。
【０１６５】
ソフトウェアセルの構成を図１４に示す。図１４を用いてソフトウェアセルの内部について説明する。送信元ＩＤには、ソフトウェアセルの送信元である情報処理装置のネットワークアドレスおよび情報処理コントローラＩＤ、さらにメインプロセッサＩＤおよびサブプロセッサＩＤが含まれる。送信先ＩＤおよび応答先ＩＤには各々、ソフトウェアセルの送信先である情報処理装置およびソフトウェアセルの実行結果の応答先である情報処理装置について同じ情報が含まれる。
【０１６６】
セルインターフェースには、ソフトウェアセルの利用に必要な情報が含まれ、グローバルＩＤ、必要なサブプロセッサ、サンドボックス、前回のソフトウェアセルＩＤから構成される。グローバルＩＤは、ネットワーク全体を通してソフトウェアセルを一意的に識別できるものであり、送信元ＩＤおよびソフトウェアセルの作成または送信の日付と時刻に基づいて作成される。
【０１６７】
必要なサブプロセッサによって、ソフトウェアセルの実行に必要な最低数のサブプロセッサが与えられる。サンドボックスサイズによって、ソフトウェアセルの実行に必要なメインメモリ内およびサブプロセッサのＬＳ内のメモリ量が与えられる。前回のソフトウェアセルＩＤによって、ストリーミングデータ等のシーケンシャルな実行を要求する１グループのソフトウェアセル内の前回のソフトウェアセルの識別子が提供される。
【０１６８】
実行セクションはＤＭＡコマンドリスト、プログラム、データから構成される。ＤＭＡコマンドリストにはプログラムの起動に必要な一連のＤＭＡコマンドが含まれ、プログラムにはサブプロセッサによって実行されるサブプロセッサプログラムが含まれる。またデータとは、これらのサブプロセッサプログラムを含むプログラムによって処理されるデータである。さらにＤＭＡコマンドには、ロードコマンド、キックコマンド、ステータスコマンド、ステータス返信コマンド、機能プログラム実行コマンドがある。
【０１６９】
ロードコマンドは、メインメモリ３２０内の情報をサブプロセッサ３１５内のＬＳへロードするコマンドである。ロードコマンドはロードコマンド自身の他にメインメモリアドレス、サブプロセッサＩＤ、ＬＳアドレスを含む。メインアドレスは、情報のロード元であるメインメモリ３２０内の所定領域のアドレスを示す。サブプロセッサＩＤおよびＬＳアドレスは、情報のロード先であるサブプロセッサの識別子およびＬＳのアドレスを示す。
【０１７０】
キックコマンドは、プログラムの実行を開始するコマンドである。キックコマンドはキックコマンド自身の他にサブプロセッサＩＤとプログラムカウンタを含む。サブプロセッサＩＤはキックする対象サブプロセッサを識別し、プログラムカウンタはプログラムの実行用プログラムカウンタのためのアドレスを与える。
【０１７１】
機能プログラム実行コマンドは、情報処理装置が他の情報処理装置に対して機能プログラムの実行を要求するコマンドである。機能プログラム実行コマンドを受信した他の情報処理装置は、後述する機能プログラムＩＤによって実行すべき機能プログラムを識別する。
【０１７２】
なお、機能プログラムについては後述するが、情報処理装置３００のメインメモリ３２０が記憶するソフトウェアの図１７に示す構成図において、機能プログラムのカテゴリに属するプログラムである。機能プログラムは、メインメモリ３２０にロードされ、メインプロセッサ３１１により実行される。
【０１７３】
ステータスコマンドは、送信先ＩＤに示される情報処理装置の現在の状態（装置情報）を要求するコマンドである。ステータス返信コマンドは、前述のステータスコマンドを受信した情報処理装置が、自身の装置情報を当該ステータスコマンドに含まれる応答先ＩＤに示される情報処理装置へ応答するコマンドである。
【０１７４】
ステータス返信コマンドは、実行セクションのデータ領域に装置情報を格納するが、その際のデータ領域の構造を図１５に示す。図１５を用いて、ＤＭＡコマンドがステータス返信コマンドである場合におけるソフトウェアセルのデータ領域の構造について記載する。
【０１７５】
情報処理コントローラＩＤは、自身の装置情報を応答する情報処理装置３００を識別するための識別子であり、電源投入時にメインプロセッサ３１１によって、電源投入時の日付、時刻、情報処理装置３００のネットワークアドレス、サブプロセッサの数等に基づいて生成される。情報処理装置種別ＩＤには、情報処理装置３００の特徴を表す値が含まれる。情報処理装置３００の特徴とは、例えば、ハードディスクレコーダ、ＰＤＡ、テレビなどといった商品を表す場合もあれば、画像処理、映像記録再生などといった機能を表す場合もある。
【０１７６】
ＭＳステータスは、情報処理装置３００がマスタあるいは、スレーブのどちらで動作しているかを表す。「０」の場合、情報処理装置３００はマスタとして動作し、「１」の場合はスレーブとして動作していることを表している。
【０１７７】
メインプロセッサ動作周波数は、メインプロセッサ３１１の動作周波数を表す。メインプロセッサ使用率はメインプロセッサ３１１で現在動作している全てのプログラムの、メインプロセッサ３１１の使用率を表す。サブプロセッサ数は、情報処理装置３００が具備するサブプロセッサ３１５の数を表す。サブプロセッサＩＤは、情報処理装置３００におけるサブプロセッサ３１５を識別するための識別子である。
【０１７８】
サブプロセッサステータスはサブプロセッサ３１５の状態を表すものであり、ｕｎｕｓｅｄ／ｒｅｓｅｒｖｅｄ／ｂｕｓｙ等の状態がある。ｕｎｕｓｅｄは、未使用である状態を、ｒｅｓｅｒｖｅｄは、現在は未使用であるが予約されている状態を、ｂｕｓｙは、使用中であることを、それぞれ示すものである。
【０１７９】
サブプロセッサ使用率は、サブプロセッサ３１５で動作しているプログラムのサブプロセッサの使用率を表す。ステータスがｂｕｓｙである場合には、サブプロセッサ使用率は現在の使用率を示し、ｒｅｓｅｒｖｅｄである場合には、後に使用される際の使用率を示す。サブプロセッサＩＤ、サブプロセッサステータス、サブプロセッサ使用率は一組であり、サブプロセッサ数だけ存在する。メインメモリ総容量とメインメモリ使用量は、情報処理コントローラ３１０と接続されているメインメモリ３２０の総容量と現在使用中の量を表す。
【０１８０】
外部記録装置数は、情報処理コントローラ３１０と接続されている外部記録装置３３０の数を表す。外部記録装置ＩＤは、情報処理コントローラ３１０と接続されている外部記録装置３３０を一意的に識別する情報を表す。外部記録装置種別ＩＤには、当該外部記録装置３３０の種類を表す情報が含まれる。
【０１８１】
なお、外部記録装置３３０の種類としては、前述もしたように、ハードディスク、リムーバブルディスク、ＭＯ、ＣＤ±ＲＷ、ＤＶＤ±ＲＷなどの光ディスク、メモリディスク等が想定され、ＳＲＡＭ、ＲＯＭ等も含まれる。すなわち、磁気ディスク、光磁気ディスク、光ディスク、半導体メモリなどの種々のものが想定できる。
【０１８２】
外部記録装置総容量と外部記録装置使用量は、外部記録装置ＩＤにより識別される外部記録装置３３０における総容量と現在使用中の量を表す。外部記録装置ＩＤ、外部記録装置種別ＩＤ、外部記録装置総容量、外部記録装置使用量は一組であり、外部記録装置数だけ存在する。すなわち、１つの情報処理装置３００に複数の外部記録装置が接続されている場合であっても、各々の外部記録装置には異なる外部記録装置ＩＤが割り当てられ、また外部記録装置種別ＩＤ、外部記録装置総容量、外部記録装置使用量も別々に管理されることになる。
【０１８３】
次に、ソフトウェアセルを生成し、実行するまでのプロセスについて説明する。ある情報処理装置内のメインプロセッサ３１１はソフトウェアセルを生成し、ネットワーク２００を介し他の情報処理装置へ送信する。送信元である情報処理装置、送信先である情報処理装置および応答先である情報処理装置は、各々、前述の送信元ＩＤ、送信先ＩＤおよび応答先ＩＤにより識別される。
【０１８４】
ソフトウェアセルを受信した他の情報処理装置内のメインプロセッサ３１１は、メインメモリに受信した該ソフトウェアセルを格納する。メインプロセッサ３１１は、ソフトウェアセルを評価し、それに含まれるＤＭＡコマンドを処理する。
【０１８５】
具体的にはメインプロセッサ３１１はまず、ロードコマンドを実行する。すると、ロードコマンドに含まれるメインメモリ３２０のメインメモリアドレスから、同様にロードコマンドに含まれるサブプロセッサＩＤとＬＳアドレスに対応するサブプロセッサ３１５内ＬＳの所定領域へ情報がロードされる。ここで言う情報とは、受信したソフトウェアセルに含まれるサブプロセッサプログラムまたはデータの場合もあるし、あるいはその他のデータ等であってもよい。
【０１８６】
そして、メインプロセッサ３１１は、キックコマンドを該キックコマンドに含まれるサブプロセッサＩＤに対応するサブプロセッサ３１５へ同様にキックコマンドに含まれるプログラムカウンタと共に出力する。サブプロセッサ３１５はキックコマンドおよびプログラムカウンタに従い、サブプロセッサプログラムを実行する。そして実行結果をメインメモリ３２０に格納後に、実行完了したことをメインプロセッサ３１１へ通知する。
【０１８７】
また、メインメモリ３２０において実行される機能プログラム等のメインメモリ用プログラムを、ソフトウェアセルを用いて他の情報処理装置へ送信することも考えられる。その場合には、サブプロセッサプログラムの代わりにメインメモリ用プログラムを含むロードコマンドを送信することになる。他の情報処理装置内のメインメモリ３２０へ送信したメインメモリ用プログラムを実行する際には例えば、メインプロセッサＩＤ、メインメモリアドレス、メインメモリ用プログラムを識別するための識別子、プログラムカウンタを含み、ＤＭＡコマンドが機能プログラム実行コマンドであるソフトウェアセルを同様に他の情報処理装置へ送信する。
【０１８８】
このようにして、ソフトウェアセルを使用することにより、ソフトウェアセルの送信元である情報処理装置は、送信先である他の情報処理装置をユーザが操作する必要なく、サブプロセッサプログラムまたはメインメモリ用プログラムを他の情報処理装置へ送信し、当該サブプロセッサプログラムを他の情報処理装置内のサブプロセッサへロードさせ、当該サブプロセッサプログラムまたは当該メインメモリ用プログラムを他の情報処理装置により実行させることができる。
【０１８９】
以上のようにして、この例のネットワークシステムを構成する各情報処理装置は、自装置が機能プログラムまたはサブプロセッサプログラムを有していない場合にはネットワーク２００に接続された他の情報処理装置からそれらを取得できる。さらに各サブプロセッサ間においてはＤＭＡ方式によりデータ転送を行い、また前述のサンドボックスを採用することにより、１つの情報処理装置内でデータを多段階に処理する必要がある場合でも、高速かつ高セキュリティに処理を実行することができる。
【０１９０】
図１６Ａに示すように、ネットワーク２００に接続されている複数の情報処理装置３００（１）、３００（２）、…が、図１６Ｂに示すように仮想的な１台の装置として動作するための前提処理として、情報処理装置の電源投入後の処理について説明する。
【０１９１】
図１７は、情報処理装置３００のメインメモリ３２０が記憶するソフトウェアの構成図を示すものである。各プログラムは機能または特徴によってカテゴライズ（分類）されている。また、これらのプログラムは情報処理装置３００の電源投入前においては、情報処理装置３００の情報処理コントローラ３１０に接続されている外部記録装置３３０に記録されている。
【０１９２】
電源投入後に情報処理コントローラ３１０のメインプロセッサ３１１は、デバイスドライバのカテゴリに属する各プログラムおよび制御プログラムのカテゴリに属する各プログラムをメインメモリ３２０にロードする。メインメモリ３２０にロードする手順としては、メインプロセッサ３１１は、ＤＣ３１４に対して読み出し命令を実行することにより外部記録装置３３０から読み出す。
【０１９３】
そして、ＤＭＡＣ３１３への書き込み命令を実行することでメインメモリ３２０にロードする。機能プログラムのカテゴリに属する各プログラムについては、必要なときに必要なものだけをロードするようにしてもよいし、他のカテゴリに属する各プログラムと同様に、電源投入後にロードするようにしてもよい。
【０１９４】
ここで機能プログラムは、ネットワーク２００に接続された全ての情報処理装置３００の外部記録装置３３０に記録されている必要はなく、どれか１つの情報処理装置３００の外部記録装置３３０に記録されていれば、前述の方法により他の情報処理装置から機能プログラムをロードすることが可能であるので、結果的に図５の仮想的な１台の装置として機能プログラムを実行できる。
【０１９５】
さらに、機能プログラムには、機能プログラム毎に一意な識別子が機能プログラムＩＤとして割り当てられている。機能プログラムＩＤは、日付や時刻、情報処理コントローラＩＤ等から機能プログラムの作成の段階で決定される。
【０１９６】
メインプロセッサ３１１は、自身が動作する情報処理装置３００に関する装置情報を格納するための領域をメインメモリ３２０に確保し、当該情報を自装置の装置情報テーブルとして記録する。ここでの装置情報とは、図１５に示した情報処理コントローラＩＤ以下の情報である。
【０１９７】
メインプロセッサ３１１は、メインメモリ３２０にロードされたマスタ／スレーブマネージャを実行する。マスタ／スレーブマネージャは、処理が終了すると、終了通知をメインプロセッサ３１１へ送る。メインプロセッサ３１１は、マスタ／スレーブマネージャから終了通知を受け取ると、次に、能力交換プログラムを実行する。マスタ／スレーブマネージャおよび能力交換プログラムは、情報処理装置３００の電源が切断されるまで動作する常駐プログラムである。
【０１９８】
マスタ／スレーブマネージャは、自身が動作する情報処理装置がネットワークに接続されていることを検知すると、同一ネットワークに接続されている他の情報処理装置の存在を確認する。マスタ／スレーブマネージャは、もしもネットワークに他の情報処理装置が存在しないことを確認すると、前述の自装置の装置情報テーブルにおけるＭＳステータスを「０」に設定する。ネットワークに他の情報処理装置が存在することを確認した場合、ＭＳステータスを「０」以外（例えば「１」）に設定する。
【０１９９】
また、マスタ／スレーブマネージャは、常にネットワークの状況を確認し、新たにネットワークに情報処理装置が接続されたことや、ネットワークに接続されている情報処理装置の電源が切断されたこと、あるいはネットワークから情報処理装置が切り離されたことを監視し、ネットワークの接続状態に変化があると、その情報を能力交換プログラムに通知する。
【０２００】
マスタ／スレーブマネージャが同一ネットワークに接続されている他の情報処理装置の存在を確認する方法として例えば、各情報処理装置内のマスタ／スレーブマネージャが送信先ＩＤとしてネットワークに接続された他の全ての情報処理装置に対して定期的に存在確認要求を送信する。存在確認要求を受信した各情報処理装置は、存在確認要求の送信元に対して自装置が存在することを通知するための返信を行う。ネットワークから切り離された情報処理装置からは当然のことながら、返信が行われないことになる。このようにしてネットワークに接続されている全ての情報処理装置の存在を、互いに把握することができる。
【０２０１】
能力交換プログラムは、自身が動作する情報処理装置がマスタである場合、ネットワークに接続されている他の情報処理装置に関する装置情報を取得する。装置情報の取得は、前述した通り、ＤＭＡコマンドがステータスコマンドであるソフトウェアセルを生成・送信し、その後ＤＭＡコマンドがステータス返信コマンドであり、データとして他の情報処理装置に関する装置情報を含むソフトウェアセルを受信することで可能である。
【０２０２】
能力交換プログラムは、前述の自装置の装置情報テーブルと同様に、取得した他の全ての情報処理装置に関する装置情報を格納するための領域をメインメモリ３２０に確保し、当該情報を他装置の装置情報テーブルとして記録する。すなわちマスタのメインメモリ３２０には、ネットワークに接続されている自身を含む全ての情報処理装置の装置情報テーブルが記録される。
【０２０３】
一方、能力交換プログラムが動作する情報処理装置がスレーブである場合、ネットワークに接続されているマスタの情報処理装置および自身以外の全てのスレーブの情報処理装置に関する装置情報を取得する。そして装置情報に含まれる情報処理コントローラＩＤとＭＳステータスをメインメモリに記録する。すなわち、スレーブには、自装置に関する全ての装置情報が装置情報テーブルとして記録されると共に、ネットワークに接続された自身以外の全ての情報処理装置については情報処理コントローラＩＤとＭＳステータスが装置情報テーブルとして記録されることになる。
【０２０４】
また、能力交換プログラムは、新たにネットワークに情報処理装置が接続されたことを示すネットワーク状態の変化通知をマスタ／スレーブマネージャから受信すると、当該情報処理装置に関する装置情報を取得する。同様にネットワークから情報処理装置が切り離された、あるいは電源が切断されたというネットワーク状態の変化通知を受信すると、当該装置の装置情報テーブルをメインメモリ３２０から削除する。
【０２０５】
ネットワークに接続されている複数の情報処理装置を仮想的な１台の情報処理装置として動作させるために、マスタの情報処理装置（以下マスタ）が、ユーザの操作およびスレーブとなる情報処理装置（以下スレーブ）の動作状況を把握する必要がある。
【０２０６】
図１８は、ネットワークに接続されている３台の情報処理装置３００（１）、３００（２）、３００（３）が、仮想的な１台の情報処理装置として動作する様子を説明するための図である。ここでは、情報処理装置３００（１）がマスタ、情報処理装置３００（２）と情報処理装置３００（３）がスレーブとして動作し、ユーザは情報処理装置３００（２）を操作し、当該操作に応じた処理を情報処理装置３００（３）が実行するようにしている場合を示している。また、図１９は、その際のフローチャートを示すものである。
【０２０７】
ユーザが、ネットワークに接続されている情報処理装置を操作する場合には、操作されている情報処理装置がマスタまたはスレーブに関わらず、その操作情報は常にマスタに送信される。図１８、図１９に示した例の場合には、情報処理装置３００（２）がユーザからの操作入力を受け付けて（ステップＳ１０１）、これをマスタである情報処理装置３００（１）に通知する（ステップＳ１０２）。
【０２０８】
マスタである情報処理装置３００（１）のメインプロセッサ３１１は、スレーブである情報処理装置３００（２）からの操作情報を受け付け（ステップＳ１０３）、当該操作情報に従い、実行する機能プログラムを選択する。その際に必要ならば、前述の方法に従い外部記録装置３３０からメインメモリ３２０へ機能プログラムをロードする。
【０２０９】
実行時に機能プログラムは、自身が実行されるときに必要なメインプロセッサ３１１、サブプロセッサ３１５、メインメモリ３２０、外部記録装置３３０に関する情報をメインプロセッサ３１１に通知する。ここでの情報とは図１５に示される情報処理コントローラＩＤ以下の情報である。
【０２１０】
これらの情報を機能プログラムがメインプロセッサ３１１へ通知する方法としては、機能プログラムは自身が実行される実行要求の他に、情報通知要求にも対応しているので、メインプロセッサ３１１は機能プログラムへ当該情報通知要求を発行することにより、図１５に示した情報処理コントローラＩＤ以下の情報を取得することができる。
【０２１１】
そして、マスタである情報処理装置３００（１）のメインプロセッサ３１１は、メインメモリ３２０に記録されている前述の自装置または他装置の装置情報テーブルに基づき、当該機能プログラムを実行可能なスレーブを選択する（ステップＳ１０４）。そして、この例の場合、マスタである情報処理装置３００（１）は、選択されたスレーブである情報処理装置３００（３）へ機能プログラムの実行を要求する（ステップＳ１０５）。その際にマスタは、前述の機能プログラムの実行に必要な情報等に基づき、自身のメインメモリ３２０に記録された選択されたスレーブに関する装置情報テーブルを更新する。
【０２１２】
機能プログラムの実行を要求されたスレーブである情報処理装置３００（３）のメインプロセッサ３１１は、マスタからの要求を受け付け（ステップＳ１０６）、要求に応じた機能プログラムを実行する（ステップＳ１０７）。その際にも必要ならばスレーブである情報処理装置３００（３）のメインプロセッサ３１１は、前述の方法に従い外部記録装置３３０からメインメモリ３２０へ機能プログラムをロードする。
【０２１３】
ここで、機能プログラムの実行を要求されたスレーブと接続された外部記録装置３３０に必要な機能プログラムが記録されていない場合には、他の情報処理装置が前述のメインメモリ用プログラムとして当該機能プログラムを機能プログラムの実行を要求されたスレーブへ送信してもよい。
【０２１４】
さらにメインメモリ用プログラムと同様に、サブプロセッサプログラムも必要ならばソフトウェアセルを用いることにより他の情報処理装置へ送信し、当該他の情報処理装置内のサブプロセッサへロードさせ、当該サブプロセッサプログラムを他の情報処理装置により実行させることができる。
【０２１５】
そして、機能プログラムの処理終了後、終了通知をマスタに送信する。マスタは終了通知を受信することにより、機能プログラムを実行したスレーブに関する装置情報テーブルを更新する。
【０２１６】
また、マスタのメインプロセッサ３１１は、自装置または他装置の装置情報テーブルに基づき、当該機能プログラムを実行可能な情報処理装置として自身を選択する場合もあり得る。その場合には、マスタが機能プログラムを実行する。その際にはスレーブのメインメモリ３２０に記録されたマスタに関する装置情報テーブルが、マスタの動作状況に応じて更新されることになる。
【０２１７】
このようにして、ユーザは１つの情報処理装置のみを操作することにより他の情報処理装置を操作する必要なく、複数の情報処理装置を仮想的な１台の情報処理装置として動作させることができる。
【０２１８】
次に、この例のネットワークシステムを構成する情報処理装置３００の具体例について説明する。図２０は、情報処理装置の具体例を説明するための図である。情報処理装置３００（１）および３００（２）は、自身にハードディスクが装備され、映像や音声をハードディスクに記録するハードディスクレコーダである。情報処理装置３００（３）は、個人情報端末（ＰＤＡ）であり、情報処理装置３００（４）は、携帯コンパクトディスクプレイヤ（ＣＤプレイヤ）である。なお、ハードディスクレコーダである情報処理装置３００（１）には、映像を表示するためのテレビモニタＭｔ、音声を出力するためのスピーカＳｐが接続されている。
【０２１９】
そして、図２１は、ハードディスクレコーダである情報処理装置３００（１）、３００（２）の構成例を示し、図２２は、ＰＤＡである情報処理装置３００（３）の構成例を示し、図２３は、ＣＤプレイヤである情報処理装置３００（４）の構成例を示すものである。また、図２４は、ハードディスクレコーダである情報処理装置３００（１）、３００（２）のソフトウェア構成例を示し、図２５は、ＰＤＡである情報処理装置３００（３）のソフトウェア構成例を示し、図２６は、ＣＤプレイヤである情報処理装置３００（４）のソフトウェア構成例を示すものである。
【０２２０】
図２１、図２２、図２３のそれぞれを比較すると分かるように、情報処理装置３００（１）、３００（２）と、情報処理装置３００（３）と、情報処理装置３００（４）は、外部記憶装置３３０（１−１）、３３０（１−２）、３３０（３）、３３０（４）が、光ディスク、ハードディスク、メモリカードディスク、ＣＤというように異なり、また、インターフェース部３４０、３５０、３６０が、それぞれ異なっていることを除けば、その他の部分は同様に構成されているものである。
【０２２１】
また、図２４、図２５、図２６のそれぞれを比較すると分かるように、情報処理装置３００（１）、３００（２）と、情報処理装置３００（３）と、情報処理装置３００（４）は、備えるデバイスや処理機能により、デバイスドライバや機能プログラムは異なるものの、制御プログラムは、いずれの情報処理装置も、能力交換プログラムと、マスタ／スレーブマネージャを備えるものである。
【０２２２】
このように、情報処理コントローラ３１０部分は、いずれも、マルチプロセッサの構成とされたものであり、この発明のマルチプロセッサデバッガを適用することができる。そして、この発明によるマルチプロセッサデバッガを適用することによって、メインプロセッサ３１１とサブプロセッサ３１５とで、動作終了タイミングがずれる場合が発生しても、動作終了タイミングの同期をとって、適正にデバッグ処理を行い、信頼性の高い情報処理装置を実現することができる。
【０２２３】
次に、機能プログラムの起動をマスタからスレーブに処理を依頼する場合の具体例を、図２０を用いて説明する。前提条件として、マスタのハードディスクレコーダである情報処理装置３００（１）のハードディスクの空き容量が、録画時間で１０分とする。また、スレーブのハードディスクレコーダである情報処理装置３００（２）のハードディスクの空き容量は、録画時間にして２０時間とする。
【０２２４】
この例において、ユーザは、情報処理装置３００（１）に対して、２時間の番組録画予約の操作を行うとする。情報処理装置３００（１）はマスタであるので、ネットワークに接続された情報処理装置の情報テーブルから、２時間分の空きのあるハードディスクを具備するセカンダリを検索する。この場合、検索される機器はハードディスクレコーダである情報処理装置３００（２）となる。マスタである情報処理装置３００（１）は、スレーブである情報処理装置３００（２）に対して２時間の番組予約の実行を依頼する。
【０２２５】
このようにして、実際に処理を行う情報処理装置に対して、操作入力を行うことなく、同一のネットワークに接続された複数の情報処理装置をあたかも１つの情報処理装置のようにして扱うことができるようにされる。
【０２２６】
次に、図２０に示したように構成されるネットワークシステムにおいて、情報処理装置がネットワークから切り離された、あるいは、主電源が切断された場合の処理について説明する。ネットワークから情報処理装置が切り離されると、おのおの情報処理装置のマスタ/スレーブマネージャが、装置の切断を検知し、切断された情報処理コントローラＩＤと共に、切断情報を能力交換プログラムに通知する。能力交換プログラムは、マスタ/スレーブマネージャから通知された情報処理コントローラＩＤに対応した機器情報を、機器情報テーブルから削除する。
【０２２７】
ネットワークから切断された情報処理装置がマスタである場合、現在ネットワークに接続されている情報処理装置のうち、スレーブからマスタに変更する装置を決定する必要があるが、次にその処理を記述する。マスタ/スレーブマネージャから通知された切断情報がマスタであった場合、情報処理コントローラＩＤを数値に置き換え、自身の情報処理コントローラＩＤと、自身が管理する装置情報テーブルの情報処理コントローラＩＤとを比較し、もしも、自身の情報処理コントローラＩＤが、装置情報テーブルの情報処理コントローラＩＤに比べて最小であった場合、そのスレーブはマスタに移行する。
【０２２８】
マスタに移行すべきスレーブは、マスタの動作に切り替わるために、ＭＳステータスを０に設定し、先述のマスタにおける装置情報の取得と同様に、ネットワークに接続された全ての情報処理装置の装置情報を取得し、メインメモリに記録する。
【０２２９】
このようにして、ネットワークに接続された情報処理装置が、当該ネットワークから離脱する場合には、接続を存続する情報処理装置において、上述のように、ネットワークを再構成するようにすることができるので、ネットワークシステムを適正に運用することができるようにされる。
【０２３０】
そして、上述もしたように、備える機能や能力が異なっていても、１つのメインプロセッサと１つ以上のメインプロセッサとを備えたマルチプロセッサシステムの場合には、図１〜図９を用いて説明したこの発明によるマルチプロセッサデバッガを適用することができる。そして、メインプロセッサとサブプロセッサとが独立して動作するために生じる動作の停止タイミングのずれを除去するようにしてデバッグを行うことができるので、マルチプロセッサシステムにおいても、適切にデバッグ処理を行うことができるようにされる。
【図面の簡単な説明】
【０２３１】
【図１】この発明の一実施の形態が適用されたマルチプロセッサデバッガの構成例を説明するためのブロック図である。
【図２】図１に示したマルチプロセッサデバッガのメインプロセッサ２を説明するためのブロック図である。
【図３】図１に示したマルチプロセッサデバッガのサブプロセッサ３を説明するためのブロック図である。
【図４】メインプロセッサ２、サブプロセッサ３の逆方向実行手段２２、３２の基本的な動作について説明するための図である。
【図５】サブプロセッサ３の実行状態を復元する処理（デバッグ処理）を説明するための図である。
【図６】この発明によるマルチプロセッサデバッガを、マルチコアプロセッサを用いて構成した場合の例を説明するためのブロック図である。
【図７】この発明によるマルチプロセッサデバッガを、ハードウェアシミュレータ内蔵マルチコアプロセッサを用いて構成した場合の例を説明するためのブロック図である。
【図８】この発明によるマルチプロセッサデバッガを、シングルコアプロセッサ群を用いて構成した場合の例を説明するためのブロック図である。
【図９】この発明によるマルチプロセッサデバッガを、マルチコアプロセッサ群を用いて構成した場合の例を説明するためのブロック図である。
【図１０】この発明によるマルチプロセッサデバッガが適用される情報処理装置の例を説明するための図である。
【図１１】メインメモリ３２０（ｎ）に対してアクセスする際の手順を説明するための図である。
【図１２】サブプロセッサ３１５（１）、３１５（２）、…内のＬＳのメモリロケーションについて示す図である。
【図１３】メインメモリ３２０（ｎ）の排他制御を実現するためのキー管理テーブルを示す図である。
【図１４】ソフトウェアセルの構成を説明するための図である。
【図１５】実行セクションのデータ領域に装置情報を格納するのデータ領域の構造を説明するための図である。
【図１６】複数の情報処理処理が構成する仮想的な情報処理装置について説明するための図である。
【図１７】情報処理装置３００のメインメモリ３２０が記憶するソフトウェアの構成図を示すものである。
【図１８】、ネットワークに接続されている３台の情報処理装置が、仮想的な１台の情報処理装置として動作する場合について説明するための図である。
【図１９】ネットワークに接続されている３台の情報処理装置が、仮想的な１台の情報処理装置として動作する場合を説明するためのフローチャートである。
【図２０】情報処理装置の具体例を説明するための図である。
【図２１】、ハードディスクレコーダである情報処理装置３００（１）、３００（２）の構成例を示す図である。
【図２２】ＰＤＡである情報処理装置３００（３）の構成例を示す図である。
【図２３】ＣＤプレイヤである情報処理装置３００（４）の構成例を示す図である。
【図２４】ハードディスクレコーダである情報処理装置３００（１）、３００（２）のソフトウェア構成例を示す図である。
【図２５】ＰＤＡである情報処理装置３００（３）のソフトウェア構成例を示すずである。
【図２６】ＣＤプレイヤである情報処理装置３００（４）のソフトウェア構成例を示す図である。
【符号の説明】
【０２３２】
１…デバッガ、２…メインプロセッサ、２１…対象プロセッサ、２２…逆方向実行手段、２３…メモリ、２４…計時手段、２５…リソースバッファ管理手段、２６…リソースバッファ、３…サブプロセッサ、３１…対象プロセッサ、３２…逆方向実行手段、３３…メモリ、３４…計時手段、３５…リソースバッファ管理手段、３６…リソースバッファ、３７…遅延時間計測手段、４…ハードウェアシミュレータ
【図１】
2005234617.tif 000003
【図２】
2005234617.tif 000004
【図３】
2005234617.tif 000005
【図４】
2005234617.tif 000006
【図５】
2005234617.tif 000007
【図６】
2005234617.tif 000008
【図７】
2005234617.tif 000009
【図８】
2005234617.tif 000010
【図９】
2005234617.tif 000011
【図１０】
2005234617.tif 000012
【図１１】
2005234617.tif 000013
【図１２】
2005234617.tif 000014
【図１３】
2005234617.tif 000015
【図１４】
2005234617.tif 000016
【図１５】
2005234617.tif 000017
【図１６】
2005234617.tif 000018
【図１７】
2005234617.tif 000019
【図１８】
2005234617.tif 000020
【図１９】
2005234617.tif 000021
【図２０】
2005234617.tif 000022
【図２１】
2005234617.tif 000023
【図２２】
2005234617.tif 000024
【図２３】
2005234617.tif 000025
【図２４】
2005234617.tif 000026
【図２５】
2005234617.tif 000027
【図２６】
2005234617.tif 000028