(57)【要約】【課題】  システム稼動中に発生したプロセッサ障害に対して、効率よく作業を継続することが可能なマルチプロセッシングシステムを提供すること【解決手段】  本発明におけるマルチプロセッシングシステムは、プログラム及びプログラムの実行に必要な情報を格納するメモリと、プログラムをスレッド毎に分割し、複数のプロセッサにスレッドを割り当てるプロセッサ管理部と、プロセッサ管理部から割り当てられたスレッドの処理を行う少なくとも２つ以上のプロセッサと、スレッドの実行に必要な情報を格納し、プロセッサの１つに障害が発生した場合にスレッドの実行に必要な情報をメモリに対して出力する処理内容管理部を備えたマルチプロセッシングシステムである。このような構成により、プロセッサに障害が発生したときに、処理内容管理部が格納しておいた情報を出力するため、他のプロセッサが処理を代替することが可能となる。【選択図】図１
2006139621.tif 000002
【特許請求の範囲】
【請求項１】
プログラム及びプログラムの実行に必要な情報を格納するメモリと、
前記メモリからプログラムを入力し、入力したプログラムをスレッド毎に分割し、スレッドの優先度とプロセッサの稼動状況に基づいて複数のプロセッサにスレッドを割り当てるプロセッサ管理部と、
前記プロセッサ管理部から割り当てられたスレッドの処理を行う少なくとも２つ以上のプロセッサと、
前記プロセッサ管理部によるスレッドの割り当てに応じて、割り当てられたスレッドの実行に必要な情報を格納し、前記プロセッサの１つに障害が発生した場合に、格納した前記割り当てられたスレッドの実行に必要な情報を前記メモリに対して出力する処理内容管理部を備えたマルチプロセッシングシステム。
【請求項２】
前記スレッドの実行に必要な情報は、
前記メモリのスナップショットであることを特徴とする請求項１記載のマルチプロセッシングシステム。
【請求項３】
前記マルチプロセッシングシステムは、更に、
前記プロセッサ管理部と同等の機能を有する予備プロセッサ管理部を備え、
前記処理内容管理部は、前記プロセッサ管理部の稼動状態を監視し、前記プロセッサ管理部に障害が発生したと判断した場合に、前記予備プロセッサ管理部を起動することを特徴とする請求項１または２記載のマルチプロセッシングシステム。
【請求項４】
前記マルチプロセッシングシステムは、更に、
前記処理内容管理部と同等の機能を有する予備処理内容管理部を備え、
前記プロセッサ管理部は、前記処理内容管理部の稼動状態を監視し、前記処理内容管理部に障害が発生したと判断した場合に、前記予備処理内容管理部を起動することを特徴とする請求項１、２または３記載のマルチプロセッシングシステム。
【請求項５】
メモリからプログラムを入力し、入力したプログラムをスレッド毎に分割し、スレッドの優先度とプロセッサの稼動状況に基づいてプロセッサ管理部により複数のプロセッサにスレッドの割り当てを行うマルチプロセッシング方法であって、
前記スレッドの割り当てに応じて、当該割り当て時のプロセッサの動作に必要な情報を格納し、
前記プロセッサの１つに障害が発生した場合に、障害の発生していないプロセッサが格納された前記プロセッサの動作に必要な情報を入力し、
前記障害の発生していないプロセッサが障害の発生したプロセッサの代わりに行う予定であった処理を行うマルチプロセッシング方法。
【請求項６】
前記プロセッサの動作に必要な情報は、
前記メモリのスナップショットであることを特徴とする請求項５記載のマルチプロセッシング方法。
【請求項７】
前記スレッドの割り当てはプロセッサ管理部が行い、
前記プロセッサ管理部の稼動状態を監視し、前記プロセッサ管理部に障害が発生したと判断した場合に、前記プロセッサ管理部と同等の機能を有する予備プロセッサ管理部を起動することを特徴とする請求項５または６記載のマルチプロセッシング方法。
【請求項８】
前記プロセッサの動作に必要な情報の格納は処理内容管理部が行い、
前記処理内容管理部の稼動状態を監視し、前記処理内容管理部に障害が発生したと判断した場合に、前記処理内容管理部と同等の機能を有する予備処理内容管理部を起動することを特徴とする請求項５または６または７記載のマルチプロセッシング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッシングシステム及びマルチプロセッシング方法に関するものであり、より詳細には、プロセッサの障害発生時に対応可能なマルチプロセッシングシステム及びマルチプロセッシング方法に関する。
【背景技術】
【０００２】
複数のプロセッサを用いて並列に処理を行うマルチプロセッシングは、プロセッサ単体の能力の限界を超えた高速化や安全化が可能なため、近年注目されるようになってきた。特に、複数のプロセッサにスレッドを割り当てて実行させることにより処理を並列に行い処理性能を向上させるという点で注目を集めている。
【０００３】
マルチプロセッサは、並列処理による高速化だけでなく、プロセッサの一つに障害が発生した場合、他の障害の発生していないプロセッサが代わりに処理を行うことができる安全化の面でも注目されている。しかしながら、プロセッサが処理を行うスレッドが、他のプロセッサが処理を行うスレッドの実行経過や結果に依存する場合もあり、単純に障害の発生したプロセッサに割り当てられたスレッドを他のプロセッサが再実行しても正常に動作するとは限らない。そのため、マルチプロセッシングによる高速化、安全化は多くの手法が研究されている。
【０００４】
高速化という点では、起動時に動作可能なプロセッサの数や、クラスタ毎のメモリ数を確認し、スケジューリングを行う方法が提案されている（例えば、特許文献１など）。また、安全性という点では、障害が発生したプロセッサを切り離す際に、システムを停止しないで済む方法も提案されている（例えば、特許文献２など）。
【０００５】
しかしながら、特許文献１に示す方法では、システム稼動中にプロセッサに障害が発生した場合に対処することができない。また、特許文献２に示す方法では、故障発生時には処理をユーザーが最初から実行しなおす必要があるため、作業効率が悪いという問題点がある。
【特許文献１】特開平７−２８７０６４号公報
【特許文献２】特開平１０−２４７１８５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記に示すように、従来のマルチプロセッシングシステムは、システム稼動中にプロセッサに障害が発生した場合に対応できない、あるいはユーザーが最初から実行しなおす必要があるため効率が悪いという問題点があった。
【課題を解決するための手段】
【０００７】
本発明におけるマルチプロセッシングシステムは、プログラム及びプログラムの実行に必要な情報を格納するメモリと、前記メモリからプログラムを入力し、入力した入力したプログラムをスレッド毎に分割し、スレッドの優先度とプロセッサの稼動状況に基づいて複数のプロセッサにスレッドを割り当てるプロセッサ管理部と、前記プロセッサ管理部から割り当てられたスレッドの処理を行う少なくとも２つ以上のプロセッサと、前記プロセッサ管理部によるスレッドの割り当てに応じて、割り当てられたスレッドの実行に必要な情報を格納し、前記プロセッサの１つに障害が発生した場合に、格納した前記割り当てられたスレッドの実行に必要な情報を前記メモリに対して出力する処理内容管理部を備えたマルチプロセッシングシステムである。このような構成により、プロセッサに障害が発生したときに、処理内容管理部が格納しておいた情報を出力するため、他のプロセッサが処理を代替することが可能となる。
【０００８】
本発明におけるマルチプロセッシング方法は、メモリからプログラムを入力し、入力したプログラムをスレッド毎に分割し、スレッドの優先度とプロセッサの稼動状況に基づいてプロセッサ管理部により複数のプロセッサにスレッドの割り当てを行うマルチプロセッシング方法であって、前記スレッドの割り当てに応じて、当該割り当て時のプロセッサの動作に必要な情報を格納し、前記プロセッサの１つに障害が発生した場合に、障害の発生していないプロセッサが格納された前記プロセッサの動作に必要な情報を入力し、前記障害の発生していないプロセッサが障害の発生したプロセッサの代わりに行う予定であった処理を行うマルチプロセッシング方法である。このようにすることにより、プロセッサに障害が発生したときに、格納しておいた情報を出力するため、他のプロセッサが処理を代替することが可能となる。
【発明の効果】
【０００９】
本発明によれば、システム稼動中に発生したプロセッサ障害に対して、効率よく作業を継続することが可能なマルチプロセッシングシステムを提供することが可能となる。
【発明を実施するための最良の形態】
【００１０】
発明の実施の形態１．
図１は、本発明におけるマルチプロセッシングシステムの構成を示すブロック図である。本発明におけるマルチプロセッシングシステム１００は、ｎ＋１個のプロセッサ１０〜１ｎ、プロセッサ管理部２０、メモリ３０、処理内容管理部４０を備える。ｎは１以上の自然数である。
【００１１】
プロセッサ１０〜１ｎはスレッドの処理を行う能力を備えたプロセッサで、ＣＰＵ（Central Processing Unit）などである。メモリ３０は、プログラムやプログラム実行時におけるデータなどを格納する記憶手段である。
【００１２】
プロセッサ管理部２０は、接続されたｎ個のプロセッサ１０〜１ｎに対してスレッドの割り当てを行うスケジューラである。プロセッサ管理部２０は、各プロセッサ及びメモリ３０、処理内容管理部４０と接続されている。
【００１３】
処理内容管理部４０は、各プロセッサ１０〜１ｎが行っているスレッドの実行に必要な情報の管理を行う。各プロセッサ１０〜１ｎが行っているスレッドの実行に必要な情報の例としては、その時点でメモリ３０に格納されている情報が挙げられる。この場合、処理内容管理部４０は、その時点のメモリ３０に格納されているデータをコピーし、格納する。格納する場所は、処理内容管理部４０が専用の記憶手段を備えてもよいし、別途メモリを外部に接続してもよい。このときのメモリ３０に格納されているデータをメモリ３０のスナップショットと呼ぶ。処理内容管理部４０が管理を行うデータは、接続されたプロセッサ管理部２０から入力される。
【００１４】
続いて、図２に示すフローチャートを用いて、本発明の実施の形態におけるマルチプロセッシングシステム１００の処理の流れについて説明する。プロセッサが処理を行うプログラムは、予めメモリ３０に格納されているものとする。
【００１５】
まず、全体の初期化を行う（Ｓ１）。処理内容管理部４０は、各プロセッサの状態を検出し、その状態を記録する。図３に、各プロセッサの動作状態の一例を示す。動作状態は「処理可能」「稼動中」「障害発生」に分けられる。プロセッサＩＤは各プロセッサ固有の識別番号である。初期状態は、原則的には「処理可能」であるが、事前に別のプログラムを実行した結果などから既にプロセッサに障害が発生していることが確認できた場合は「障害発生」になる。記録はプロセッサ管理部２０に記憶手段を設けて記録してもよいし、メモリ３０に記録してもよい。
【００１６】
次にプロセッサ管理部２０は、メモリ３０からプログラムを入力する（Ｓ２）。プログラムは、スレッドに分割されており、各スレッドには優先度が割り当てられている。プロセッサ管理部２０は、入力したプログラムのスレッド優先度及び各プロセッサの状態に基づいて各プロセッサにスレッドの割り当てを行う。
【００１７】
処理内容管理部４０は、プロセッサ管理部２０による各プロセッサへのスレッド割り当てが完了すると、各プロセッサのスレッドの実行に必要な情報を記録する（Ｓ３）。スレッドの実行に必要な情報は特に限定されないが、例えば、メモリ３０のスナップショットなどである。このとき記録された情報は、プロセッサに障害が発生したときに別のプロセッサにより実行する場合に利用される。処理内容管理部４０が記録を行う場所は、処理内容管理部４０内に記憶手段を設けて記録してもよいし、別途記録手段を処理内容管理部４０に接続し、記録してもよい。
【００１８】
処理内容管理部４０は、必要な情報の記録を完了すると、各プロセッサの状態を更新して記録する（Ｓ４）。このとき、プロセッサ管理部２０が「処理可能」のプロセッサにスレッドを割り当てた場合は「稼動中」にし、処理開始時間を記録する。
【００１９】
処理内容管理部４０は、各プロセッサの状態の更新が完了すると、各プロセッサに障害が発生しているか否かを判定する（Ｓ５）。障害の確認方法は特に限定されないが、例えば、処理にかかる時間を予め計算しておき、その時間を過ぎても稼動中のプロセッサが処理可能状態に戻らない場合に障害が発生したと判定し、それ以外の場合は、障害は発生しなかったと判定する。
【００２０】
判定の結果、障害が発生したと判定されなかった場合、処理内容管理部４０は、各プロセッサの処理の完了を確認し、処理が完了したプロセッサに関しては状態を「稼動中」から「処理可能」に変更する（Ｓ６）。
【００２１】
処理内容管理部４０は、変更後に全ての処理が完了したか否かの確認を行う（Ｓ７）。全てのプロセッサの処理が完了すると、全体動作の完了となる。完了していない場合は、メモリ３０から次のプログラムの入力を行う。
【００２２】
判定の結果、障害が発生したと判定された場合、処理内容管理部４０は障害が発生したと判定するプロセッサの状態を「稼動中」あるいは「処理可能」から「障害発生」に変更する（Ｓ８）。
【００２３】
状態変更が完了すると、処理内容管理部４０は障害発生時に稼動中の全スレッドの廃棄処理を行い、Ｓ３で記録したメモリ３０のスナップショットを読み出し、書き戻しを行う（Ｓ９）。このとき、スナップショットが複数存在する場合は、障害発生時点で処理中であったスレッドを含む最も古いスナップショットの値に戻す。書き戻しが完了すると、プロセッサ管理部２０は再度プログラムを入力し、スレッドの再割り当てを行う。
【００２４】
このようにして、各プロセッサの動作に必要な状態を記録しておき、障害発生時に書き戻しを行うことにより、プログラムを最初から実行しなおすことなくプロセッサの一部に障害が発生したときに問題なく残りのプロセッサによる代替動作が可能となる。
【００２５】
続いて、具体的なプログラムを例に挙げて、プロセッサ処理中に障害が発生した場合のマルチプロセッシングシステムの処理について説明する。図４は、本発明におけるマルチプロセッシングシステムが実行するプログラムの例である。
【００２６】
図４に示すプログラム中のａ，ｂは、整数型の変数であるとする。プログラムの１行目は、１＋２を計算し、その結果を変数ａに格納する処理を示している。プログラムの２行目は、３＋４を計算し、その結果と１行目で格納されたａとの積を計算し、その結果を変数ｂに格納している。
【００２７】
図５は、図４に示すプログラムをスレッド分割した場合の各スレッドの行う処理を示すプログラムである。図４に示すプログラムは、void th1()とvoid th2()の２つのスレッドに分割される。ここで、void th1()が行う処理をスレッド１、void th2()が行う処理をスレッド２と呼ぶことにする。まず、スレッド１の行うプログラムについて説明する。obj1はcontentsとfullをメンバに持つオブジェクトであり、contentsは値を格納する変数である。fullも変数であるが、fullはフラグとして利用され、0のときは処理が未終了、1のときは処理が終了したことを示す。１行目で１＋２を計算しその結果を変数contentsに格納する。２行目は計算が完了したことを示すため変数fullに１を代入する。
【００２８】
続いて、スレッド２の行うプログラムについて説明する。tmpはスレッド２の処理の内部だけで使われる整数型のローカル変数であり、１行目は３＋４を計算し、その結果を変数tmpに格納する。２行目はスレッド１側で行っているスレッドの処理の完了を確認するため、obj1.fullが０の間は空の処理を繰り返す。fullが０でなくなるとこのスレッドは３行目の処理に移行できる。３行目は、obj1.contentsの値とローカル変数tmpの積を計算し、その結果を返す。このようなスレッド分割により図４に示すプログラムが実行される。
【００２９】
このとき、スレッド２は２行目と３行目でスレッド１を参照している。つまり、スレッド１の書き込んだ値をスレッド２が利用しているという依存関係が発生する。この依存関係をＲＡＷ（Read After Write）依存関係という。この場合、スレッド１の処理中にプロセッサに障害が発生し、スレッド１を再実行した場合、スレッド２も再実行しなければならない。つまり、スレッド１とスレッド２の順序を入れ替えて実行することができない。
【００３０】
このプログラムを図２に示すフローチャートの流れで実行させた場合について説明する。プログラムは図５に示すスレッド１、２の２つのスレッドに分割され、メモリ３０に格納されているものとする。初期設定の結果（Ｓ１）、初期状態の各プロセッサの状態は図６のようになる。
【００３１】
まず、プロセッサ管理部２０はメモリ３０からスレッド分割されたプログラムを入力する（Ｓ２）。その後、プロセッサ管理部２０は各プロセッサに処理の割り当てを行う。ここでは、プロセッサ１０にスレッド１を、プロセッサ１１にスレッド２を割り当てる。
【００３２】
プロセッサ管理部２０が、各プロセッサに対してスレッドの割り当てを完了すると、処理内容管理部４０は、メモリ３０のスナップショットを記録する（Ｓ３）。プログラムの動作に必要な情報は全てメモリ３０に格納されているため、メモリ３０のスナップショットを記録しておけば、その時点から動作を再現することが可能となる。
【００３３】
処理内容管理部４０は、メモリ３０のスナップショットの記録を完了すると、各プロセッサの状態を更新して記録する（Ｓ４）。このときの各プロセッサの状態は図７のようになる。
【００３４】
処理内容管理部４０は、各プロセッサの状態の更新が完了すると、各プロセッサに障害が発生しているか否かを判定する（Ｓ５）。ここで、プロセッサ１０に障害が発生したと判定した場合について説明する。プロセッサ１０に障害が発生した場合、処理内容管理部４０は、プロセッサ１０の状態を「稼動中」から「障害発生」と書き換える（Ｓ８）。
【００３５】
書き換えが完了すると、処理内容管理部４０は、稼動中のスレッドを全て廃棄処理にする。その後、処理内容管理部４０は、記録したメモリ３０のスナップショットをメモリ３０に書き戻し（Ｓ９）、再び、プログラムの入力に戻る（Ｓ２）。
【００３６】
プロセッサ管理部２０はメモリ３０からスレッド分割されたプログラムを入力し、各プロセッサに処理の割り当てを行う。このときは、プロセッサ１０は、「障害発生」状態であるため、スレッド１をプロセッサ１１に、スレッド２をプロセッサ１２に割り当てる。
【００３７】
プロセッサ管理部２０が、各プロセッサに対してスレッドの再割り当てを完了すると、処理内容管理部４０は、各プロセッサの動作に必要な情報を記録し（Ｓ３）、各プロセッサの状態を更新して記録する（Ｓ４）。ここの処理は、１回目と同様である。このときの各プロセッサの状態は、図８のようになる。
【００３８】
処理内容管理部４０は、各プロセッサの状態を更新が完了すると、各プロセッサに障害が発生しているか否かを判定する（Ｓ５）。ここでは、障害の発生がなかったと判定したとする。この場合、処理内容管理部４０は、各プロセッサの処理の完了を確認し、処理が完了したプロセッサに関しては状態を「稼動中」から「処理可能」に変更する（Ｓ６）。
【００３９】
処理内容管理部４０は、変更後に全ての処理が完了したか否かの確認を行う（Ｓ７）。完了した場合はプログラムの終了となる。
【００４０】
Ｓ７における確認の結果、全処理が完了していない場合は、再度スレッドの割り当てを行う（Ｓ２）。このとき、スレッド１の処理を行っているプロセッサ１１は処理が完了し、スレッド２の処理を行っているプロセッサ１２は処理が完了していない状態であるとすると、新たに処理を行うスレッドは存在しないので新たな割り当ては発生しない。
【００４１】
続いて、処理内容管理部４０は、メモリ３０のスナップショットを記録し（Ｓ３）、各プロセッサの状態を更新して記録する（Ｓ４）。各プロセッサの状態は、図９のようになる。
【００４２】
処理内容管理部４０は、各プロセッサの状態を更新が完了すると、各プロセッサに障害が発生しているか否かを判定する（Ｓ５）。このとき、プロセッサ１２に障害が発生したと判定すると、処理内容管理部４０は、プロセッサ１２の状態を「稼動中」から「障害発生」と書き換える（Ｓ８）。
【００４３】
書き換えが完了すると、処理内容管理部４０は、稼動中のスレッドであるスレッド２を廃棄処理にする。その後、処理内容管理部４０は、記録したスナップショットをメモリ３０に書き戻す（Ｓ９）。このとき、スナップショットが複数存在する場合は、障害発生時点で処理中であったスレッドを含む最も古いスナップショットの値に戻す。この場合は、障害の発生したプロセッサはスレッド２の処理を行っていたため、スレッド２を含むスナップショットの最も古いものとなるため、スレッド１完了時のスナップショットではなく、スレッド１，２稼動直前のスナップショットの値に戻す。
【００４４】
このようにして、障害の発生したプロセッサが行っていたスレッドの処理を行う直前の状態に戻すことにより、スレッド処理のやり直しを少なく抑えることが可能となる。スナップショットの値を戻したら、その後再び、プログラムの入力に戻る（Ｓ２）。
【００４５】
プロセッサ管理部２０はメモリ３０からスレッド分割されたプログラムを入力し、各プロセッサに処理の割り当てを行う。このときは、スレッド１をプロセッサ１２に、プロセッサ１１は、「障害発生」状態であるため、スレッド２をプロセッサ１３に割り当てる。
【００４６】
プロセッサ管理部２０が、各プロセッサに対してスレッドの再割り当てを完了すると、処理内容管理部４０は、メモリ３０のスナップショットを記録し（Ｓ３）、各プロセッサの状態を更新して記録する（Ｓ４）。ここの処理は、１回目と同様である。以後、同様の処理を完了するまで行う。
【００４７】
このようにして、稼動中のどの時点でプロセッサに障害が発生しても他のプロセッサが代替作業を行い、問題なくプログラムを正常完了させることが可能となる。
【００４８】
図１０に示すプログラムをマルチプロセッシングシステム上で動作させる場合について説明する。ｔｍｐ，ａ，ｂ，ｃは、整数型の変数であるとする。
【００４９】
１行目は１＋２を計算し、変数ｔｍｐにその結果を格納する。２行目は、１行目で格納した変数ｔｍｐの値に３を積算した値を計算し、変数ａに格納する。３行目は、４＋５を計算し、変数ｔｍｐにその結果を格納する。４行目は、３行目で格納した変数ｔｍｐの値に６を積算した値を計算し、変数ｂに格納する。５行目は、２行目で計算した変数ａの値に４行目で計算した変数ｂの値を加算し、その結果を変数ｃに格納する。
【００５０】
プログラムの各行はそれぞれスレッドに分割することが可能である。１行目をスレッド１、２行目をスレッド２、３行目をスレッド３、４行目をスレッド４、５行目をスレッド５とする。
【００５１】
ここで、各スレッド間の依存関係について考える。スレッド２はスレッド１の結果を参照するためＲＡＷ依存関係がある。同様にスレッド４はスレッド３に対して、スレッド５はスレッド２とスレッド４に対して、それぞれＲＡＷ依存関係がある。
【００５２】
また、スレッド３はスレッド２を参照していないが、スレッド３をスレッド２より先に実行してしまうと、変数ｔｍｐの値が変わってしまうため、正しく動作しない。つまり、スレッド２で読み出した後、スレッド３で書き込んでいるという依存関係がある。これをＷＡＲ（Write After Read）依存関係という。
【００５３】
同様に、スレッド３はスレッド１を参照していないが、スレッド１で書き込んだ変数ｔｍｐにスレッド３で書き込みを行っているため、スレッド１とスレッド３も順序を入れ替えることは不可能である。つまり、スレッド１で書き込んだ後、スレッド３で書き込んでいるという依存関係がある。これをＷＡＷ（Write After Write）依存関係という。
【００５４】
このようなＲＡＷ，ＷＡＲ，ＷＡＷの依存関係を考慮し、プロセッサに障害が発生した場合に、プロセッサが処理を行っていたスレッドに依存関係に影響のあるスレッドのみを再実行するには、スレッド間の依存関係を解析し、その結果を情報として格納しなければならない。また、実際にプロセッサに障害が発生したときに、スレッドの依存関係を全てたどっていかなければならず、記憶容量の点からも、処理量の点からも効率が悪い。
【００５５】
これに対し本発明では、スレッド開始時にメモリの値を保存し、障害発生時には稼動中のスレッドを廃棄処理し、障害発生プロセッサが処理中であったスレッドを含む最古の情報に書き戻しを行うだけなので、プログラム中のスレッドの全ての依存関係を保存することに比べればメモリ容量も多くを必要とせず、負荷の大きい解析処理を必要としない。
【００５６】
発明の実施の形態２．
上述の例にもう１つプロセッサ管理部を加え、プロセッサ管理部を２つにしてもよい。図１１は、本発明の実施の形態２におけるマルチプロセッシングシステムの構成を示すブロック図である。
【００５７】
本発明におけるマルチプロセッシングシステム２００は、プロセッサ管理部２２０、２２１、処理内容管理部２４０を備える。
【００５８】
プロセッサ管理部２２０は、接続されたｎ＋１個のプロセッサ２１０〜２１ｎに対してスレッドの割り当てを行うスケジューラである。プロセッサ管理部２２０は、各プロセッサ及びメモリ２３０、処理内容管理部２４０と接続されている。
【００５９】
処理内容管理部２４０は、各プロセッサ２１０〜２１ｎが行っている処理に必要なデータの管理を行う。処理内容管理部２４０が管理を行うデータは、接続されたプロセッサ管理部２２０から入力される。処理内容管理部２４０は、更に、プロセッサ管理部２２０及びプロセッサ管理部２２１が正常動作可能であるかを監視し、正常動作不可能であった場合に、プロセッサ管理部の切り替えを行う。
【００６０】
プロセッサ２１０〜２１ｎはスレッドの処理を行う能力を備えたプロセッサで、ＣＰＵ（Central Processing Unit）などである。メモリ２３０は、プログラムやプログラム実行時におけるデータなどを格納する記憶手段である。
【００６１】
プロセッサ管理部２２１は、予備のプロセッサ管理部であり、プロセッサ管理部２２０と同等の機能を有する。通常動作時は、プロセッサ管理部２２１は待機状態になっており、動作はしない。
【００６２】
プロセッサ管理部２２０が正常に動作しているときの動作は、発明の実施の形態１と同様であり、ここでは説明を省略する。プロセッサ管理部２２０に障害が発生した場合の処理の流れについて説明する。
【００６３】
図１２は、本発明におけるマルチプロセッシングシステムのプロセッサ管理部の状態監視及び切替処理の流れについて示すフローチャートである。まず、処理内容管理部２４０は、動作しているプロセッサ管理部が正常に動作しているか否かを判定する（Ｓ２１）。確認を行うプロセッサ管理部は、初期動作時はプロセッサ管理部２２０であり、切り替えを行った場合は、プロセッサ管理部２２１である。判定の方法は特に限定されないが、処理内容管理部２４０からプロセッサ管理部に対してリクエスト信号を送信し、返信の信号によって判定するなどの方法が例として挙げられる。
【００６４】
判定の結果、正常に動作していない、つまりプロセッサ管理部に障害が発生したと判定した場合（Ｓ２２）、処理内容管理部２４０は、動作させるプロセッサ管理部をプロセッサ管理部２２０からプロセッサ管理部２２１に切り替える（Ｓ２３）。動作中のプロセッサ管理部がプロセッサ管理部２２１である場合は、プロセッサ管理部２２１からプロセッサ管理部２２０に切り替える。
【００６５】
このとき、プロセッサ管理部の動作に必要な情報がプロセッサ管理部２２０内にある場合は、その情報をプロセッサ管理部２２１へ出力する。あるいは、プロセッサ管理部の動作に必要な情報を格納するための記憶手段を用意し、プロセッサ管理部２２０、プロセッサ管理部２２１の両方と接続するようにしてもよい。
【００６６】
このようにして、プロセッサ管理部を２つ用意し、一方のプロセッサ管理部に障害が発生した場合に動作させるプロセッサ管理部をもう一方に切り替えることにより、プロセッサ管理部に障害が発生しても正常に動作を完了させることが可能となる。
【００６７】
発明の実施の形態３．
発明の実施の形態２では、プロセッサ管理部を２つにしたが、処理内容管理部を２つにするようにしてもよい。この場合、プロセッサ管理部が処理内容管理部の正常動作を判定し、正常動作しないと判定した場合は、プロセッサ管理部が動作させる処理内容管理部をもう一方の処理内容管理部に切り替えを行う。それ以外の点については、発明の実施の形態２と同様である。このようにして、処理内容管理部を２つ用意し、一方の処理内容管理部に障害が発生した場合に動作させる処理内容管理部をもう一方に切り替えることにより、処理内容管理部に障害が発生しても正常に動作を完了させることが可能となる。
【００６８】
その他の発明の実施の形態．
発明の実施の形態２、発明の実施の形態３を組み合わせ、プロセッサ管理部を２つ、処理内容管理部を２つ用意し、障害発生時に切り替えるようにしてもよい。この場合、処理内容管理部はプロセッサ管理部が、プロセッサ管理部は処理内容管理部が、それぞれ正常動作の正常性を確認し、切り替えを行う。
【図面の簡単な説明】
【００６９】
【図１】本発明におけるマルチプロセッシングシステムの構成を示すブロック図である。
【図２】本発明におけるマルチプロセッシングシステムの処理の流れを示すフローチャートである。
【図３】本発明における各プロセッサの動作状態の一例を示す図である。
【図４】本発明におけるマルチプロセッシングシステムが処理を行うプログラムの一例を示す図である。
【図５】本発明におけるマルチプロセッシングシステムが処理を行うプログラムのスレッド分割時の一例を示す図である。
【図６】本発明における各プロセッサの動作状態の一例を示す図である。
【図７】本発明における各プロセッサの動作状態の一例を示す図である。
【図８】本発明における各プロセッサの動作状態の一例を示す図である。
【図９】本発明における各プロセッサの動作状態の一例を示す図である。
【図１０】本発明におけるマルチプロセッシングシステムが処理を行うプログラムの一例を示す図である。
【図１１】本発明におけるマルチプロセッシングシステムの構成を示すブロック図である。
【図１２】本発明におけるマルチプロセッシングシステムの処理の流れを示すフローチャートである。
【符号の説明】
【００７０】
１０−１ｎ  プロセッサ
２０        プロセッサ管理部
３０        メモリ
４０        処理内容管理部
１００      マルチプロセッシングシステム
２０−２ｎ  プロセッサ
２２０        プロセッサ管理部
２２１        プロセッサ管理部
２３０        メモリ
２４０        処理内容管理部
２００      マルチプロセッシングシステム
【図１】
2006139621.tif 000003
【図２】
2006139621.tif 000004
【図３】
2006139621.tif 000005
【図４】
2006139621.tif 000006
【図５】
2006139621.tif 000007
【図６】
2006139621.tif 000008
【図７】
2006139621.tif 000009
【図８】
2006139621.tif 000010
【図９】
2006139621.tif 000011
【図１０】
2006139621.tif 000012
【図１１】
2006139621.tif 000013
【図１２】
2006139621.tif 000014