(57)【要約】【課題】マルチプロセッサシステム、プロセッサ装置及びその異常発生時の例外処理方法に関し、システム全体の動作に影響を与えるプログラムに不正命令コードが検出された場合でも、該プログラムの実行を保証し、確実な例外処理の実行を可能にする。【解決手段】各プロセッサは、それぞれ内部メモリ１−４に格納されたプログラムの命令コードを読み出して実行する。各プロセッサは、他のプロセッサのプログラム領域の開始位置のアドレスをオフセット値としてオフセットレジスタ１−７に予め設定しておき、不正命令コードよる異常を検出したとき、各プロセッサに備えたプログラムカウンタ１−８により指定される実行中のプログラムのアドレスに前記オフセット値を加算したアドレスにより、他のプロセッサの内部メモリから命令コードをフェッチして実行し、その後、親ルーチンへの復帰命令をトリガに例外処理ハンドラを起動する。【選択図】図１
2008146542.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサから成り、各プロセッサで実行されるプログラムの命令コードを、各プロセッサの内部メモリにそれぞれ格納したマルチプロセッサシステムにおいて、
前記プロセッサ内に、前記内部メモリにおける実行中のプログラムのアドレスを示すプログラムカウンタと、所定のオフセット値を設定したオフセットレジスタとを備え、
前記プロセッサは、自プロセッサ内における内部メモリから読み出した不正命令コードの実行による異常を検出したとき、前記プログラムカウンタによりカウントされた実行中のプログラムのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより、他のプロセッサの内部メモリから命令コードをフェッチし、該命令コードを実行することを特徴とするマルチプロセッサシステム。
【請求項２】
前記プロセッサ内に、異常検出監視対象のプログラムの先頭アドレス及び終端アドレスを格納した監視範囲レジスタを備え、該監視範囲レジスタで指定された範囲内のプログラム実行時に、不正命令コードの実行による異常を検出したとき、前記プログラムカウンタのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより命令コードをフェッチし、該命令コードを実行すること特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記不正命令コードの実行による異常を検出したとき、前記プログラムカウンタのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより、命令コードをフェッチし、前記監視範囲レジスタで指定された範囲のプログラムの実行を完了した後に、該異常検出に対する例外処理ハンドラを起動する機能を備えたことを特徴とする請求項２に記載のマルチプロセッサシステム。
【請求項４】
実行するプログラムの命令コードを格納した内部メモリと、
実行中のプログラムのアドレスをカウントするプログラムカウンタと、
所定のオフセット値を設定したオフセットレジスタと、を備え、
前記内部メモリから読み出した不正命令コードの実行による異常を検出したとき、前記プログラムカウンタによりカウントされた実行中のプログラムのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより、マルチプロセッサシステムの他のプロセッサ装置の内部メモリから命令コードをフェッチし、該命令コードを実行することを特徴とするプロセッサ装置。
【請求項５】
複数のプロセッサから成り、各プロセッサで実行されるプログラムの命令コードを、各プロセッサの内部メモリにそれぞれ格納したマルチプロセッサシステムにおける例外処理方法において、
前記各プロセッサに備えたオフセットレジスタに所定のオフセット値を予め設定しておき、
前記各プロセッサで不正命令コードの実行による異常を検出したとき、各プロセッサ対応に備えたプログラムカウンタによりカウントされる実行中のプログラムのアドレスに、前記オフセット値を加算したアドレスにより、他のプロセッサの内部メモリから命令コードをフェッチして該命令コードを実行し、
前記命令コードを実行した後、親ルーチンへの復帰命令をトリガに例外処理ハンドラを起動することを特徴とするマルチプロセッサにおける例外処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ又はマルチコア（以下マルチコアを含め、「マルチプロセッサ」と称する）で構成されるＭＰＵ（Micro Processing Unit）やＤＳＰ（Digital Signal Processor）等の演算装置やデータ処理装置・信号処理装置等に用いられるマルチプロセッサシステム、プロセッサ装置及びその異常発生時の例外処理方法に関する。
【背景技術】
【０００２】
近年、ＭＰＵやＤＳＰの高性能化により、ディジタル信号処理技術を用いた電子機器は広く普及し、より高機能な機器やより小型な機器が次々と開発され実現化されている。それとともに、ＭＰＵやＤＳＰに要求される機能は多様化／高度化の一途を辿っており、より高速かつ大容量のプログラム／データを処理する能力が要求されている。
【０００３】
ＤＳＰや一部のＭＰＵにおいては、プロセッサ内部にメモリを搭載することにより、高速処理の実現を図っており、年々、搭載メモリの大容量化が進んでいる。しかし、プロセッサ内部のメモリに格納したプログラムは、ＲＡＭ（Random Access Memory）に書き込まれたプログラムである以上、ソフトウェアの不具合などにより、誤って上書きされる可能性がある。このため、プロセッサ内部には不正命令コードの実行を検出する機能や、不正命令コードの検出後に例外処理ハンドラなどによって例外処理を実行する機能を備えている。
【０００４】
下記の特許文献１には、並列同時実行可能な複数の演算処理ユニットを有するプロセッサにおける例外処理と例外処理ハンドラからの復帰とを制御する例外処理方法及び例外処理装置が開示されている。該例外処理方法及び例外処理装置は、例外発生時に多重例外の発生を禁止してハードウェアの複雑化を防ぐと共に処理を高速化することを目的として、並列同時実行可能な演算ユニットにおける例外発生を検出した場合に、命令の実行が終了していない演算ユニットの動作を中断し、演算ユニットで実行される命令を格納する複数の命令レジスタと演算ユニットでの実行終了後に実行される命令のアドレスを格納する次命令アドレスレジスタとの更新を凍結し、発生した例外に基づいて例外処理ハンドラが必要とする例外情報を生成し、次命令アドレスレジスタに格納されている次に実行されるべき命令のアドレスと、命令レジスタに格納され演算ユニットで実行を中断された命令と、命令の実行を中断した演算ユニットの個数と、命令レジスタに格納され演算ユニットで例外を起こした命令と、例外処理ハンドラが必要とする例外情報とをスタックに退避させることを特徴とするものである。
【特許文献１】特開平５−２００７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述のように、プロセッサ内部に格納したプログラムの破壊が発生した場合、プロセッサ自体に備えた異常検出機能により、例外処理を実行することは可能である。しかし、プログラムの破壊発生後は、正常な処理を継続することができないため、例外処理後にリセット、リブートを行い、プロセッサの初期状態から処理を再開することになる。
【０００６】
システム全体の動作に影響するような処理（例えば、共通リソースである外部のハードウェアの設定処理など）の実行中に不正命令コードが検出された場合も、途中で実行を中断するよりほかなく、システムの動作に重大な障害をもたらす不安定性を含むこととなる。また、例外処理ハンドラ自体のプログラムコードが破壊された場合、例外処理ハンドラを起動することができても、例外処理が正常に実行されないといった問題が発生する。
【０００７】
本発明は、マルチプロセッサ構成において、これらの問題を解決するものであり、システム全体の動作に影響を与えるプログラムに不正命令コードが検出された場合でも、該プログラムの実行を保証するとともに、確実な例外処理の実行を可能にすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明のマルチプロセッサシステムは、複数のプロセッサから成り、各プロセッサで実行されるプログラムの命令コードを、各プロセッサの内部メモリにそれぞれ格納したマルチプロセッサシステムにおいて、前記プロセッサ内に、前記内部メモリにおける実行中のプログラムのアドレスを示すプログラムカウンタと、所定のオフセット値を設定したオフセットレジスタとを備え、前記プロセッサは、自プロセッサ内における内部メモリから読み出した不正命令コードの実行による異常を検出したとき、前記プログラムカウンタによりカウントされた実行中のプログラムのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより、他のプロセッサの内部メモリから命令コードをフェッチし、該命令コードを実行することを特徴とする。
【０００９】
また、前記プロセッサ内に、異常検出監視対象のプログラムの先頭アドレス及び終端アドレスを格納した監視範囲レジスタを備え、該監視範囲レジスタで指定された範囲内のプログラム実行時に、不正命令コードの実行による異常を検出したとき、前記プログラムカウンタのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより命令コードをフェッチし、該命令コードを実行すること特徴とする。
【００１０】
また、前記不正命令コードの実行による異常を検出したとき、前記プログラムカウンタのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより、命令コードをフェッチし、前記監視範囲レジスタで指定された範囲のプログラムの実行を完了した後に、該異常検出に対する例外処理ハンドラを起動する機能を備えたことを特徴とする。
【００１１】
また、本発明のプロセッサ装置は、実行するプログラムの命令コードを格納した内部メモリと、実行中のプログラムのアドレスをカウントするプログラムカウンタと、所定のオフセット値を設定したオフセットレジスタとを備え、前記内部メモリから読み出した不正命令コードの実行による異常を検出したとき、前記プログラムカウンタによりカウントされた実行中のプログラムのアドレスに、前記オフセットレジスタに設定されたオフセット値を加算したアドレスにより、マルチプロセッサシステムの他のプロセッサの内部メモリから命令コードをフェッチし、該命令コードを実行することを特徴とする。
【００１２】
また、本発明のマルチプロセッサにおける例外処理方法は、複数のプロセッサから成り、各プロセッサで実行されるプログラムの命令コードを、各プロセッサの内部メモリにそれぞれ格納したマルチプロセッサシステムにおける例外処理方法において、前記各プロセッサに備えたオフセットレジスタに所定のオフセット値を予め設定しておき、前記各プロセッサで不正命令コードの実行による異常を検出したとき、各プロセッサ対応に備えたプログラムカウンタによりカウントされる実行中のプログラムのアドレスに、前記オフセット値を加算したアドレスにより、他のプロセッサの内部メモリから命令コードをフェッチして該命令コードを実行し、前記命令コードを実行した後、親ルーチンへの復帰命令をトリガに例外処理ハンドラを起動することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、マルチプロセッサ構成において、実行中のプログラムの異常発生時に、プログラムカウンタにオフセットを加算したアドレスにより、他のプロセッサの内部メモリに格納された命令コードをフェッチし、他のプロセッサの安全なプログラムを実行することにより、プログラムの実行を保証することができる。
【００１４】
また、システム全体の動作に影響を与えるプログラムの先頭アドレス及び終端アドレスを監視範囲レジスタに設定しておき、該監視範囲レジスタで指定された範囲内のプログラム実行時に不正命令コードの実行による異常を検出したとき、上述の他のプロセッサの安全なプログラムを実行することにより、システム全体の動作に影響を与えるプログラムの実行を保証することができる。
【００１５】
また、不正命令コードの実行による異常を検出したとき、上述の他のプロセッサの安全なプログラムを実行するとともに、該プログラムの実行を完了した後に、該異常検出に対する例外処理ハンドラを起動することにより、確実に例外処理を実施することができる。
【発明を実施するための最良の形態】
【００１６】
図１〜図４に本発明の実施形態を示す。図１は本発明によるプロセッサ装置の構成例を示す。同図に示すようにプロセッサ装置は、コアとなる演算装置１−１、汎用レジスタ１−２、割込み処理を制御する割込み制御装置１−３、当該プロセッサ装置で実行されるプログラム及びデータを格納する内部メモリ１−４、監視対象のプログラムの先頭アドレスを示す第１の監視範囲レジスタ（＃１）１−５、監視対象のプログラムの終端アドレスを示す第２の監視範囲レジスタ（＃２）１−６、オフセットレジスタ１−７、及び実行中のプログラムのアドレスを示すプログラムカウンタ（ＰＣ）１−８を備える。
【００１７】
図２は、本発明のプロセッサ装置を用いてマルチプロセッサ構成とした実施形態の構成例を示している。同図の（ａ）はマルチプロセッサの接続構成例を示し、同図の（ｂ）は各プロセッサのプログラム領域及びデータ領域の論理的なメモリ空間を示し、該メモリ空間におけるプロセッサ毎の内部メモリ１−４のプログラム領域及びデータ領域のアドレス配置の例を示している。
【００１８】
ここで、第１のプロセッサ（＃１）２−１をマスタプロセッサ、第２〜第４のプロセッサ（＃２〜＃４）２−２〜２−４をスレーブプロセッサとする。スレーブプロセッサである第２〜第４のプロセッサ（＃２〜＃４）２−２〜２−４の各内部メモリのデータ構造は、それぞれ同様のデータ構造を有し、図２（ｂ）に示すように論理的なメモリ空間において、第２のプロセッサ＃２のプログラム領域及びデータ領域は０ｘ０１００００００〜０ｘ０１０１００００、第３のプロセッサ＃３のプログラム領域及びデータ領域は０ｘ０２００００００〜０ｘ０２０１００００、及び第４のプロセッサ＃４のプログラム領域及びデータ領域は０ｘ０３００００００〜０ｘ０３０１００００のアドレスに配置されているものとする。
【００１９】
図３はスレーブプロセッサでの異常検出時の動作フローの例を示す。同図の（ａ）は従来技術の動作フローの例を示し、同図の（ｂ）は本発明の動作フローの例を示す。この動作の例は、第２のプロセッサ＃２においてプログラム実行中に、関数ｆｕｎｃＡ（）からコールされた関数ｆｕｎｃＢ（）の実行中のとき、不正命令コード検出による例外処理が必要な事象が発生した場合の例を示している。
【００２０】
従来技術の異常検出時の動作では、図３（ａ）に示すように、関数ｆｕｎｃＢ（）の実行中に例外処理が必要な事象が発生すると、第２のプロセッサ＃２は例外処理ハンドラを起動し（３−１）、これによって該例外処理ハンドラに実行が遷移する。関数ｆｕｎｃＢ（）のプログラムは、何らかの不具合により異常が発生しているため、関数ｆｕｎｃＢ（）を継続して実行することはできない。
【００２１】
これに対して、本発明による動作フローは図３（ｂ）に示すように、まず、異常発生によるプログラムの実行停止により重大な障害を引き起こす可能性があるプログラム（この動作例では関数ｆｕｎｃＢ（））の実行前に、監視対象プログラムである関数ｆｕｎｃＢ（）の先頭アドレスを第１の監視範囲設定レジスタ（＃１）１−５に、該関数ｆｕｎｃＢ（）の終端アドレスを第２の監視範囲レジスタ（＃２）１−６に予め設定しておき、また、オフセット値として、論理的なメモリ空間における他のプロセッサ（例えば第３のプロセッサ＃３）のプログラム領域の開始位置０ｘ０２００００００を、オフセットレジスタ１−７に設定しておく。
【００２２】
第２のプロセッサ＃２においてプログラム実行中に、図３（ｂ）に示すように、関数ｆｕｎｃＡ（）より呼び出された関数ｆｕｎｃＢ（）の処理中に、何らかの不具合のため、不正命令コードが検出されると、前述の第１及び第２の監視範囲レジスタ（＃１，＃２）１−５，１−６に設定された監視範囲内のプログラムでの不正命令であることを認識し、第２のプロセッサ＃２は、以後の命令コードの取り込み（フェッチ）を、現在のプログラムカウンタ（ＰＣ）１−８のカウント値に、オフセットレジスタ１−７に設定された値０ｘ０２００００００を加算したアドレスから行う。
【００２３】
図４に上記本発明における命令コードフェッチの具体例を示す。同図の（ａ）は、メモリ空間における第１のプロセッサ＃１（マスタ）及び第２〜第４のプロセッサ＃２〜＃４（スレーブ）の各プログラム領域及びデータ領域の各アドレス配置を示し、第１のプロセッサ＃１（マスタ）は０ｘ００８０００００〜０ｘ００８１００００、第２のプロセッサ＃２（スレーブ）は０ｘ０１００００００〜０ｘ０１０１００００、第３のプロセッサ＃３（スレーブ）は０ｘ０２００００００〜０ｘ０２０１００００、第４のプロセッサ＃４（スレーブ）は０ｘ０３００００００〜０ｘ０３０１００００に、それぞれのプログラム領域及びデータ領域が配置されているものとする。
【００２４】
また、同図の（ｂ）は１つのプロセッサ（ここでは第２のプロセッサ＃２）における内部メモリのアドレス空間を示し、０ｘ００００００００から０ｘ０００ＦＦＦＦのアドレスに、第２のプロセッサ＃２のプログラム領域及びデータ領域が配置されているものとする。
【００２５】
ここで、第１の監視範囲レジスタ（＃１）と第２の監視範囲レジスタ（＃２）とで指定された領域内の関数ｆｕｎｃＢ（）のプログラムの実行中に、不正命令コード実行による異常の発生を検出した場合、実行中のプログラムのアドレスを示すプログラムカウンタ（ＰＣ）の値に、オフセットレジスタに設定されたオフセット値（０ｘ０２００００００）を加算したメモリ空間のアドレスから命令コードをフェッチして実行する。
【００２６】
即ち、命令コードのフェッチは、第２のプロセッサ＃２の内部メモリからではなく、正常実行中の第３のプロセッサ＃３の内部メモリから行い、例外処理ハンドラを起動することなく、関数ｆｕｎｃＢ（）の実行を最後まで完了する。そして、上記異常発生検出時に、異常発生を示す割り込みフラグを立てておき、関数ｆｕｎｃＢ（）の終了時に実行される親ルーチンの関数ｆｕｎｃＡ（）への復帰命令をトリガに、割込み制御装置１−３の制御により例外処理ハンドラを起動する割り込みを行って例外処理を実行する（３−２）。
【００２７】
マスタプロセッサと複数のスレーブプロセッサとから構成されるマルチプロセッシング環境では、各スレーブプロセッサは同一の実行プログラムコードを具備する場合が多い。このような環境下においては、論理的なメモリ空間における他のプロセッサのプログラム領域に存在する同一のプログラムコードのアドレスとの差分をオフセットレジスタ１−７にオフセット値として設定しておき、プログラム実行中に異常が発生したとき、実行中のプログラム命令のアドレスを示すカウンタ（ＰＣ）１−８のカウント値に、オフセットレジスタ１−７に設定されたオフセット値を加算したアドレスから、即ち、正常実行中の他のスレーブプロセッサの内部メモリに格納されている同一の命令をフェッチして実行することにより、プログラムの継続的な実行が可能となる。
【００２８】
このように構成することにより、システム全体の動作に影響する特定の重要なプログラムコードの実行中に異常が発生した場合でも、スレーブプロセッサで特定の重要なプログラムの実行が中断されることなく、最後まで該プログラムを実行することが可能になる。ただし、監視範囲レジスタによる監視区間内でのプログラム異常発生に対しては、例外処理ハンドラを抑止することになるため、監視範囲区間のプログラムの処理から脱し、呼び出し元の親ルーチンに復帰する命令コードの実行をトリガにして、例外処理ハンドラを起動する構成とすることにより、例外処理を確実に実施することができる。
【図面の簡単な説明】
【００２９】
【図１】本発明によるプロセッサ装置の構成例を示す図である。
【図２】本発明のマルチプロセッサ構成の実施形態の構成例を示す図である。
【図３】スレーブプロセッサでの異常検出時の動作フローの例を示す図である。
【図４】本発明のメモリ空間及び命令コードフェッチの具体例を示す図である。
【符号の説明】
【００３０】
１−１  演算装置
１−２  汎用レジスタ
１−３  割込み処理を制御する割込み制御装置
１−４  内部メモリ
１−５  第１の監視範囲レジスタ
１−６  第２の監視範囲レジスタ
１−７  オフセットレジスタ
１−８  プログラムカウンタ（ＰＣ）
【図１】
2008146542.tif 000003
【図２】
2008146542.tif 000004
【図３】
2008146542.tif 000005
【図４】
2008146542.tif 000006