以下に本発明の実施の形態を説明するが、本明細書に記載の発明と、発明の実施の形態との対応関係を例示すると、次のようになる。この記載は、本明細書に記載されている発明をサポートする実施の形態が、本明細書に記載されていることを確認するためのものである。したがって、発明の実施の形態中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
更に、この記載は、本明細書に記載されている発明の全てを意味するものでもない。換言すれば、この記載は、本明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現、追加される発明の存在を否定するものではない。
請求項1に記載の情報処理装置(例えば、図1の情報処理装置1)は、第1の情報処理手段(例えば、図1のメインプロセッサ42)と、複数の第2の情報処理手段(例えば、図1のサブプロセッサ43-1乃至サブプロセッサ43-3)と、第2の情報処理手段の異常を検出する異常検出手段(例えば、図1の異常検出部47-1乃至47-3)とを備え、第1の情報処理手段は、アプリケーションプログラムの実行を制御するアプリケーションプログラム実行制御手段(例えば、図7のアプリケーションプログラム実行制御部101)と、アプリケーションプログラム実行制御手段の処理により実行が制御されるアプリケーションプログラムによって、複数の第2の情報処理手段に割り当てられる複数の処理をまとめて一つの機能を提供する処理単位(例えば、論理スレッド)とし、処理単位に対応する機能を提供するための分散処理を制御する分散処理制御手段(例えば、図7のスレッドリソースコントローラ102)と、異常検出手段により検出された第2の情報処理手段の異常に関する第1の情報を取得する異常情報取得手段(例えば、図7の異常通知取得部103)とを備え、分散処理制御手段は、処理単位に依存して設定される、異常検出手段により第2の情報処理手段の異常が検出された場合の動作を示す第2の情報(例えば、図9の異常時対応動作ID)を記憶し、異常情報取得手段により、第1の情報が取得された場合、第2の情報を基に、処理単位に対応する分散処理を制御することを特徴とする。
第2の情報に示される、異常が検出された場合の動作には、処理単位に対応する全ての分散処理を停止させる動作(例えば、図12を用いて説明した動作)が含まれるものとすることができる。
第2の情報に示される、異常が検出された場合の動作には、処理単位に対応する全ての分散処理を一旦停止させた後、異常検出手段により異常が検出された第2の情報処理手段(例えば、図13におけるサブプロセッサ43−2)が実行していた分散処理を、処理単位に対応する分散処理を実行していなかった第2の情報処理手段(例えば、図13におけるサブプロセッサ43−3)に実行させるものとして、処理単位に対応する分散処理を再開させる動作(例えば、図13を用いて説明した動作)が含まれるものとすることができる。
第2の情報に示される、異常が検出された場合の動作には、異常検出手段により異常が検出された第2の情報処理手段(例えば、図16におけるサブプロセッサ43−2)が実行していた処理単位に対応する分散処理を停止させ、処理単位に対応する分散処理を実行していた異常が発生していない第2の情報処理手段(例えば、図16におけるサブプロセッサ43−1)が実行していた分散処理を継続させる動作(例えば、図16を用いて説明した動作)が含まれるものとすることができる。
第2の情報に示される、異常が検出された場合の動作には、処理単位に対応する全ての分散処理を一旦停止させ、異常検出手段により異常が検出された第2の情報処理手段(例えば、図17および図18におけるサブプロセッサ43−2)が動作可能な状態になった後、処理単位に対応する分散処理を、処理の一旦停止前に分散処理を実行していた複数の第2の情報処理手段(例えば、図17および図18におけるサブプロセッサ43−1およびサブプロセッサ43−2)に実行させるものとして、処理単位に対応する分散処理を再開させる動作(例えば、図17および図18を用いて説明した動作)が含まれるものとすることができる。
第2の情報に示される、異常が検出された場合の動作には、処理単位に対応する全ての分散処理を一旦停止させた後、処理単位に対応する分散処理を実行していた異常が発生していない第2の情報処理手段(例えば、図14および図15におけるサブプロセッサ43−1)に、処理の一旦停止前に実行していた第1の分散処理とともに、異常検出手段により異常が検出された第2の情報処理手段(例えば、図14および図15におけるサブプロセッサ43−2)が実行していた第2の分散処理を、時分割で実行させるものとして、処理単位に対応する分散処理を再開させる動作(例えば、図14および図15を用いて説明した動作)が含まれるものとすることができる。
第1の情報処理手段は、第2の情報処理装置のうちのいずれか1つに、第1の分散処理と第2の分散処理を時分割で実行させる場合の時分割処理を制御する時分割処理制御手段(たとえば、図7の論理スレッドスケジューラ104)を更に備えることができる。
請求項8に記載の情報処理方法は、第1の情報処理手段(例えば、図1のメインプロセッサ42)と、複数の第2の情報処理手段(例えば、図1のサブプロセッサ43-1乃至サブプロセッサ43-3)とを備える情報処理装置(例えば、図1の情報処理装置1)の情報処理方法は、第1の情報処理手段によるアプリケーションプログラムの実行によって、複数の第2の情報処理手段に割り当てられる複数の処理をまとめて一つの機能を提供する処理単位(例えば、論理スレッド)とし、処理単位に対応する機能を提供するための分散処理の開始を要求する分散処理開始要求ステップ(例えば、図10のステップS1、図12のステップS51、図13のステップS81、図14のステップS121、図16のステップS171、図17のステップS201)と、分散処理を実行している第2の情報処理手段の異常を検出する異常検出ステップ(例えば、図12のステップS57、図13のステップS87、図14のステップS127、図16のステップS177、図17のステップS207)と、異常検出ステップの処理により検出された第2の情報処理手段の異常に関する第1の情報を取得する異常情報取得ステップ(例えば、図11のステップS31、図12のステップS60、図13のステップS90、図14のステップS130、図16のステップS180、図17のステップS210)と、異常情報取得ステップの処理により、第1の情報が取得された場合、処理単位に依存して設定される、異常が検出された場合の動作を示す第2の情報(例えば、図9の異常時対応動作ID)を取得する異常動作情報取得ステップ(例えば、図11のステップS34)と、異常動作情報取得ステップの処理により取得された第2の情報を基に、処理単位に対応する分散処理を制御する分散処理制御ステップ(例えば、図11のステップS36)とを含むことを特徴とする。
請求項9に記載のプログラムは、第1の情報処理手段(例えば、図1のメインプロセッサ42)と、複数の第2の情報処理手段(例えば、図1のサブプロセッサ43-1乃至サブプロセッサ43-3)とにおける分散処理を制御するコンピュータが実行可能なプログラムであって、第1の情報処理手段によるアプリケーションプログラムの実行によって、複数の第2の情報処理手段に割り当てられる複数の処理をまとめて一つの機能を提供する処理単位(例えば、論理スレッド)とし、処理単位に対応する機能を提供するための分散処理の開始を要求する分散処理開始要求ステップ(例えば、図10のステップS1、図12のステップS51、図13のステップS81、図14のステップS121、図16のステップS171、図17のステップS201)と、分散処理を実行している第2の情報処理手段のうちのいずれかの異常に関する第1の情報を取得する異常情報取得ステップ(例えば、図11のステップS31、図12のステップS60、図13のステップS90、図14のステップS130、図16のステップS180、図17のステップS210)と、異常情報取得ステップの処理により、第1の情報が取得された場合、処理単位に依存して設定される、異常が検出された場合の動作を示す第2の情報(例えば、図9の異常時対応動作ID)を取得する異常動作情報取得ステップ(例えば、図11のステップS34)と、異常動作情報取得ステップの処理により取得された第2の情報を基に、処理単位に対応する分散処理を制御する分散処理制御ステップ(例えば、図11のステップS36)とを含むことを特徴とする処理をコンピュータに実行させる。
以下、図を参照して、本発明の実施の形態について説明する。
図1は、本発明を適用した通信システムの一実施の形態を示す図である。この通信システムにおいては、例えば、ホームネットワーク、LAN(Local Area Network),WAN(Wide Area Network),または、インターネットなどの広域ネットワークなどに対応するネットワーク2を介して、情報処理装置1と、情報処理装置3−1乃至情報処理装置3−nとが相互に接続されている。
情報処理装置1は、複数の情報処理装置による分散処理の実行を指示されると、要求された処理を実行するために必要なデータおよびプログラムを含むソフトウェアセルを生成し、生成したソフトウェアセルを、ネットワーク2を介して、情報処理装置3−1乃至情報処理装置3−nのうちのいずれかの装置あてに送信する。
情報処理装置3−1乃至情報処理装置3−nは、それぞれ、情報処理装置1から送信されてきたソフトウェアセルを受信し、受信したソフトウェアセルを基に、要求された処理を実行する。情報処理装置3−1乃至情報処理装置3−nは、それぞれ、要求された処理を実行してから、要求された処理の結果得られたデータを、ネットワーク2を介して情報処理装置1あてに送信する。以下、情報処理装置3−1乃至情報処理装置3−nを個々に区別する必要のないとき、単に情報処理装置3と称する。
情報処理装置1は、情報処理装置3−1乃至情報処理装置3−nのうちのいずれかから送信されてきたデータを受信し、受信したデータを基に、所定の処理を実行するか、受信したデータを記録する。
情報処理装置1は、情報処理コントローラ11、メインメモリ12、記録部13−1、記録部13−2、バス14、操作入力部15、通信部16、表示部17、およびドライブ18を含むように構成される。
情報処理コントローラ11は、メインメモリ12に記録されている各種のプログラムを実行し、情報処理装置1全体を制御する。情報処理コントローラ11は、ソフトウェアセルを生成し、生成したソフトウェアセルを、バス14を介して、通信部16に供給する。情報処理コントローラ11は、通信部16から供給されたデータを記録部13−1または記録部13−2に供給する。情報処理コントローラ11は、操作入力部15から入力されるユーザの指令に基づいて、指定されたデータを、メインメモリ12、記録部13−1または記録部13−2から取得し、取得したデータを、バス14を介して通信部16に供給する。
また、情報処理コントローラ11には、情報処理装置1を、ネットワーク2全体を通して一意的に特定できる装置IDが割り当てられている。
情報処理コントローラ11は、バス41、メインプロセッサ42、サブプロセッサ43−1乃至サブプロセッサ43−3、DMAC(Direct Memory Access Controller)44、キー管理テーブル記録部45、およびDC(Disk Controller)46を備えている。
メインプロセッサ42、サブプロセッサ43−1乃至サブプロセッサ43−3、DMAC44、キー管理テーブル記録部45、およびDC46は、バス41を介して、相互に接続されている。また、メインプロセッサ42には、メインプロセッサ42を特定するためのメインプロセッサIDが識別子として割り当てられる。同様に、サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれには、サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれを特定するためのサブプロセッサIDのそれぞれが識別子として割り当てられる。
メインプロセッサ42は、ネットワーク2を介して接続されている、情報処理装置3−1乃至情報処理装置3−nに分散処理を実行させる場合、ソフトウェアセルを生成し、生成したソフトウェアセルをバス41およびバス14を介して、通信部16に供給する。また、メインプロセッサ42は、管理のためのプログラム以外のプログラムを実行するように構成することもできる。この場合、メインプロセッサ42は、サブプロセッサとして機能する。
メインプロセッサ42は、サブプロセッサ43−1乃至サブプロセッサ43−3に対して、それぞれのサブプロセッサに独立したプログラムを実行させ、論理的に1つの機能(論理スレッド)として結果を求めるようにすることができる。すなわち、メインプロセッサ42は、サブプロセッサ43−1乃至サブプロセッサ43−3によるプログラムの実行のスケジュール管理および情報処理コントローラ11(情報処理装置1)の全体の管理を行う。
メインプロセッサ42は、ローカルストレージ51−1を備え、メインメモリ12からロードしたデータおよびプログラムを、ローカルストレージ51−1に一時的に記憶させる。メインプロセッサ42は、ローカルストレージ51−1からデータおよびプログラムを読み込み、読み込んだデータおよびプログラムを基に、各種の処理を実行する。
サブプロセッサ43−1乃至サブプロセッサ43−3は、メインプロセッサ42の制御に基づいて、並列的かつ独立に、プログラムを実行し、データを処理する。更に、必要に応じて、メインプロセッサ42が実行するプログラムが、サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれが実行するプログラムのそれぞれと連携して動作するように構成することも可能である。
サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれは、ローカルストレージ51−2乃至ローカルストレージ51−4のそれぞれを備える。サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれは、ローカルストレージ51−2乃至ローカルストレージ51−4のそれぞれに、必要に応じて、データおよびプログラムを一時的に記憶させる。サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれは、ローカルストレージ51−2乃至ローカルストレージ51−4のそれぞれからデータおよびプログラムを読み込み、読み込んだデータおよびプログラムを基に、各種の処理を実行する。
サブプロセッサ43−1乃至サブプロセッサ43−3には、それぞれ、異常検出部47−1乃至異常検出部47−3が接続されている。異常検出部47−1乃至異常検出部47−3は、対応するサブプロセッサ43−1乃至サブプロセッサ43−3の異常状態を検知し、異常制御部48に通知する。
以下、サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれを個々に区別する必要のないとき、単にサブプロセッサ43と称し、異常検出部47−1乃至47−3のそれぞれを個々に区別する必要のないとき、単に異常検出部47と称する。同様に、以下、ローカルストレージ51−1乃至ローカルストレージ51−4のそれぞれを個々に区別する必要のないとき、単にローカルストレージ51と称する。
また、図1においては、サブプロセッサ43が、サブプロセッサ43−1乃至サブプロセッサ43−3の3つ設けられている場合について説明したが、サブプロセッサ43は、3つ以外のいかなる数設けられていても良いことは言うまでもなく、更に、異常検出部47およびローカルストレージ51も、サブプロセッサ43が設けられている数に対応する数だけ設けられるようにしても良いことはいうまでもない。
DMAC44は、キー管理テーブル記録部45に記録されている、メインプロセッサキー、サブプロセッサキー、およびアクセスキーを基に、メインプロセッサ42およびサブプロセッサ43からのメインメモリ12に記憶されているプログラムおよびデータへのアクセスを管理する。
キー管理テーブル記録部45は、メインプロセッサキー、サブプロセッサキー、およびアクセスキーを記録している。なお、メインプロセッサキー、サブプロセッサキー、およびアクセスキーの詳細は後述する。
DC46は、メインプロセッサ42およびサブプロセッサ43からの記録部13−1および記録部13−2へのアクセスを管理する。
異常制御部48は、異常検出部47−1乃至47−3のうちのいずれかから、サブプロセッサ43−1乃至サブプロセッサ43−3のうちのいずれかに異常が発生したことの通知を受けたとき、異常が発生したサブプロセッサ43の動作を停止させるとともに、異常が発生したサブプロセッサ43に関する情報を、バス41を介して、メインプロセッサ42に供給する。
なお、異常制御部48が、サブプロセッサ43の異常を検出してその動作を停止させる場合の停止のための命令は、バス41を介さずにサブプロセッサ43に直接供給することができるようにしてもよい。
メインメモリ12は、例えば、RAMから構成される。メインメモリ12は、メインプロセッサ42およびサブプロセッサ43が実行する各種のプログラムおよびデータを一時的に記憶している。
記録部13−1および記録部13−2は、それぞれ、例えば、ハードディスクなどにより構成される。記録部13−1および記録部13−2は、メインプロセッサ42およびサブプロセッサ43が実行する各種のプログラムおよびデータを記録している。また、記録部13−1および記録部13−2は、情報処理コントローラ11から供給されたデータを記録する。以下、記録部13−1および記録部13−2を個々に区別する必要のないとき、単に記録部13と称する。
また、情報処理コントローラ11には、バス14を介して、操作入力部15、通信部16、表示部17、およびドライブ18が接続されている。操作入力部15は、例えば、キー、ボタン、タッチパッド、マウスなどよりなり、ユーザによる操作入力を受け、操作入力に対応する情報を、バス14を介して、情報処理コントローラ11に供給する。
通信部16は、情報処理コントローラ11から供給されたソフトウェアセルを、ネットワーク2を介して情報処理装置3−1乃至情報処理装置3−nあてに送信する。また、通信部16は、情報処理装置3−1乃至情報処理装置3−nから送信されてきたデータを、バス14を介して、情報処理コントローラ11に供給する。
表示部17は、例えば、CRT(cathode ray tube)やLCD(Liquid Crystal Display)などで構成されており、バス14を介して供給された情報処理コントローラ11の処理により生成された情報(例えば、アプリケーションプログラムの実行により生成されたデータや、アプリケーションプログラムの実行に必要なユーザへの通知などの情報を含む)を表示させる。
ドライブ18は、磁気ディスク61、光ディスク62、光磁気ディスク63、あるいは半導体メモリ64などが装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて、バス14を介して、情報処理コントローラ11に転送され、情報処理コントローラ11によって、記録部13に記録される。
なお、情報処理装置3−1乃至情報処理装置3−nは、情報処理装置1と同様に構成されるので、その説明は省略する。情報処理装置3−1乃至情報処理装置3−nは上述した構成に限らず、必要に応じて、機能を追加したり削除したりすることは可能であり、その機能に対応した構成をもつことが可能である。
次に、図2乃至図4を参照して、サブプロセッサ43がメインメモリ12にアクセスする場合の処理について説明する。
図2で示されるように、メインメモリ12には、複数のアドレスを指定できるメモリロケーションが配置される。各メモリロケーションに対しては、データの状態を示す情報を格納するための追加セグメントが割り振られる。追加セグメントは、F/Eビット、サブプロセッサIDおよびLSアドレス(ローカルストレージアドレス)を含む。また、各メモリロケーションには、後述するアクセスキーが割り振られる。
“0”であるF/Eビットは、サブプロセッサ43によって読み出されている処理中のデータ、または空き状態であるため最新データではない無効データであり、そのメモリロケーションから読み出し不可であることを示す。また、“0”であるF/Eビットは、そのメモリロケーションにデータ書き込み可能であることを示し、データが書き込まれると、F/Eビットは“1”に設定される。
“1”であるF/Eビットは、そのメモリロケーションのデータがサブプロセッサ43によって読み出されておらず、未処理の最新データであることを示す。F/Eビットが“1”であるメモリロケーションのデータは読み出し可能であり、サブプロセッサ43によって読み出されてから、F/Eビットは“0”に設定される。また、“1”であるF/Eビットは、メモリロケーションがデータ書き込み不可であることを示す。
更に、F/Eビットが“0”(読み出し不可/書き込み可)である状態において、メモリロケーションについて読み出し予約を設定することが可能である。F/Eビットが“0”であるメモリロケーションに対して読み出し予約を行う場合には、サブプロセッサ43は、読み出し予約を行うメモリロケーションの追加セグメントに、読み出し予約情報としてサブプロセッサ43のサブプロセッサIDおよびLSアドレスを書き込む。そして、データを書き込むサブプロセッサ43によって、読み出し予約されたメモリロケーションにデータが書き込まれ、F/Eビットが“1”(読み出し可/書き込み不可)に設定されたとき、予め読み出し予約情報として追加セグメントに書き込まれているサブプロセッサIDおよびLSアドレスによって特定されるローカルストレージ51に読み出される。
複数のサブプロセッサ43によってデータを多段階に処理する必要がある場合、このように各メモリロケーションのデータの読み出しおよび書き込みを制御することによって、前段階の処理を行うサブプロセッサ43が、処理済みのデータをメインメモリ12における所定のアドレスに書き込んだ後に即座に、後段階の処理を行う別のサブプロセッサ43が前処理後のデータを読み出すことが可能となる。
また、図3で示されるように、サブプロセッサ43のローカルストレージ51は、複数のアドレスを指定できるメモリロケーションによって構成される。各メモリロケーションに対しては、同様に追加セグメントが割り振られる。追加セグメントは、ビジービットを含む。
サブプロセッサ43がメインメモリ12に記憶されているデータをサブプロセッサ43のローカルストレージ51のメモリロケーションに読み出すときには、対応するビジービットを“1”に設定して予約する。ビジービットが“1”であるメモリロケーションには、他のデータを格納することができない。ローカルストレージ51のメモリロケーションにデータが読み出されると、ビジービットは“0”に設定され、他のデータを格納することができるようになる。
更に、図2で示すように、情報処理コントローラ11に接続されているメインメモリ12には、複数のサンドボックスが含まれる。サンドボックスは、メインメモリ12内の領域を画定するものであり、各サンドボックスは、各サブプロセッサ43に割り当てられ、割り当てられたサブプロセッサ43が排他的に使用することができる。すなわち、サブプロセッサ43は、割り当てられたサンドボックスを使用できるが、この領域を超えてデータにアクセスすることはできない。
メインメモリ12は、複数のメモリロケーションから構成されるが、サンドボックスは、これらのメモリロケーションの集合である。
更に、メインメモリ12の排他的な制御を実現するために、図4で示されるキー管理テーブルが用いられる。キー管理テーブルは、キー管理テーブル記録部45に記録され、DMAC44と関連付けられる。キー管理テーブル内の各エントリには、サブプロセッサID、サブプロセッサキーおよびキーマスクが含まれる。
サブプロセッサ43がメインメモリ12にアクセスする場合、サブプロセッサ43はDMAC44に、読み出しまたは書き込みのコマンドを出力する。このコマンドには、サブプロセッサ43を特定するサブプロセッサIDおよびアクセス要求先であるメインメモリ12のアドレスが含まれる。
DMAC44は、サブプロセッサ43から供給されたコマンドを実行する場合、キー管理テーブルを参照して、アクセス要求元のサブプロセッサ43のサブプロセッサキーを調べる。そして、DMAC44は、調べたアクセス要求元のサブプロセッサキーと、アクセス要求先であるメインメモリ12のメモリロケーションに割り振られたアクセスキーとを比較して、2つのキーが一致した場合にのみ、サブプロセッサ43から供給されたコマンドを実行する。
図4に示されるキー管理テーブルに記録されているキーマスクは、その任意のビットが“1”になることによって、そのキーマスクと関連付けられたサブプロセッサキーの対応するビットを“0”または“1”にすることができる。
例えば、サブプロセッサキーが“1010”であるとする。通常、このサブプロセッサキーによって“1010”のアクセスキーを持つサンドボックスへのアクセスだけが可能になる。しかし、このサブプロセッサキーと関連付けられたキーマスクが“0001”に設定されている場合には、キーマスクのビットが“1”に設定された桁のみにつき、サブプロセッサキーとアクセスキーとの一致判定がマスクされ(キーマスクのビットが“1”に設定された桁について、判定されず)、このサブプロセッサキー“1010”によってアクセスキーが“1010”または“1011”のいずれかであるアクセスキーを持つサンドボックスへのアクセスが可能となる。
以上のようにして、メインメモリ12のサンドボックスの排他性が実現される。すなわち、複数のサブプロセッサ43によってデータを多段階に処理する必要がある場合、以上のように構成することによって、前段階の処理を行うサブプロセッサ43と、後段階の処理を行うサブプロセッサ43のみが、メインメモリ12の所定のアドレスにアクセスできるようになり、データを保護することができる。
例えば、キーマスクの値は、以下のように変更されることが考えられる。まず、情報処理装置1の起動直後においては、キーマスクの値は全て“0”である。メインプロセッサ42にロードされたプログラムが実行され、サブプロセッサ43にロードされたプログラムと連携動作するものとする。サブプロセッサ43−1により出力された処理結果データを、メインメモリ12に記憶させ、メインメモリ12に記憶させた処理結果データを、サブプロセッサ43−2に入力したいときには、サブプロセッサ43−1により出力された処理結果データを記憶しているメインメモリ12の領域は、サブプロセッサ43−1およびサブプロセッサ43−2からアクセス可能である必要がある。そのような場合に、メインプロセッサ42は、キーマスクの値を適切に変更し、複数のサブプロセッサ43からアクセスできるメインメモリの領域を設けることにより、サブプロセッサ43による多段階的の処理を可能にする。
より具体的には、例えば、情報処理装置3−1乃至情報処理装置3−nから送信されてきたデータを基に、サブプロセッサ43−1が所定の処理実行し、処理が施されたデータをメインメモリ12の第1の領域に記憶させる。そして、サブプロセッサ43−2は、メインメモリ12の第1の領域から、記憶されているデータを読み出し、読み出したデータを基に、所定の処理を実行し、処理が施されたデータをメインメモリ12の第1の領域とは、異なる第2の領域に記憶させる。
ここで、サブプロセッサ43−1のサブプロセッサキーが“0100”であり、メインメモリ12の第1の領域のアクセスキーが“0100”であり、サブプロセッサ43−2のサブプロセッサキーが“0101”であり、メインメモリ12の第2の領域のアクセスキーが“0101”である場合、サブプロセッサ43−2は、メインメモリ12の第1の領域にアクセスすることができない。そこで、サブプロセッサ43−2のキーマスクを“0001”にすることによって、サブプロセッサ43−2は、メインメモリ12の第1の領域にアクセスすることができるようになる。
次に、図5および図6を参照して、情報処理装置1がソフトウェアセルを生成し、生成したソフトウェアセルを基に、情報処理装置3−1乃至情報処理装置3−nに分散処理を実行させる場合の処理について説明する。
情報処理装置1のメインプロセッサ42は、処理を実行するために必要なコマンド、プログラム、およびデータを含むソフトウェアセルを生成し、ネットワーク2を介して情報処理装置3−1乃至情報処理装置3−nあてに送信する。
図5は、ソフトウェアセルの構成の例を示す図である。
ソフトウェアセルは、送信元ID、送信先ID、応答先ID、セルインターフェース、DMAコマンド、プログラム、およびデータを含むように構成される。
送信元IDには、ソフトウェアセルの送信元である情報処理装置1のネットワークアドレスおよび情報処理装置1の情報処理コントローラ11の装置ID、更に、情報処理装置1の情報処理コントローラ11が備えるメインプロセッサ42およびサブプロセッサ43の識別子(メインプロセッサIDおよびサブプロセッサID)が含まれる。
送信先IDには、ソフトウェアセルの送信先である情報処理装置3−1乃至情報処理装置3−nのネットワークアドレス、情報処理装置3−1乃至情報処理装置3−nの情報処理コントローラの装置ID、および情報処理装置3−1乃至情報処理装置3−nの情報処理コントローラが備えるメインプロセッサおよびサブプロセッサの識別子が含まれる。
また、応答先IDには、ソフトウェアセルの実行結果の応答先である情報処理装置1のネットワークアドレス、情報処理装置1の情報処理コントローラ11の装置ID、および情報処理コントローラ11が備えるメインプロセッサ42およびサブプロセッサ43の識別子が含まれる。
セルインターフェースは、ソフトウェアセルの利用に必要な情報であり、グローバルID、必要なサブプロセッサの情報、サンドボックスサイズ、および前回のソフトウェアセルIDから構成される。
グローバルIDは、ネットワーク2全体を通してソフトウェアセルを一意的に識別できるものであり、送信元ID、およびソフトウェアセルの生成または送信の日時(日付および時刻)を基に、生成される。
必要なサブプロセッサの情報には、ソフトウェアセルの実行に必要なサブプロセッサの数などが設定される。サンドボックスサイズには、ソフトウェアセルの実行に必要なメインメモリおよびサブプロセッサのローカルストレージのメモリ量が設定される。
前回のソフトウェアセルIDは、ストリーミングデータなどのシーケンシャルな実行を要求する1つのグループを構成するソフトウェアセル内の、前回のソフトウェアセルの識別子である。
ソフトウェアセルの実行セクションは、DMAコマンド、プログラムおよびデータから構成される。DMAコマンドには、プログラムの起動に必要な一連のDMAコマンドが含まれ、プログラムには、サブプロセッサによって実行されるサブプロセッサプログラムが含まれる。ここでのデータは、このサブプロセッサプログラムを含むプログラムによって処理されるデータである。
更に、DMAコマンドには、ロードコマンド、キックコマンド、機能プログラム実行コマンド、ステータス要求コマンド、およびステータス返信コマンドが含まれる。
ロードコマンドは、メインメモリが記憶している情報をサブプロセッサのローカルストレージにロードさせるコマンドであり、ロードコマンドのほかに、メインメモリアドレス、サブプロセッサIDおよびLSアドレスを含む。メインメモリアドレスは、情報のロード元であるメインメモリの所定の領域のアドレスを示す。サブプロセッサIDおよびLSアドレスは、情報のロード先であるサブプロセッサの識別子およびローカルストレージのアドレスを示す。
キックコマンドは、プログラムの実行を開始するコマンドであり、キックコマンドのほかに、サブプロセッサIDおよびプログラムカウンタを含む。サブプロセッサIDは、キック対象のサブプロセッサを識別し、プログラムカウンタは、プログラム実行用プログラムカウンタのためのアドレスを与える。
機能プログラム実行コマンドは、ある装置(例えば、情報処理装置1)が他の装置(例えば、情報処理装置3−1乃至情報処理装置3−nのうちのいずれか)に対して、機能プログラムの実行を要求するコマンドである。機能プログラム実行コマンドを受信した装置(例えば、情報処理装置3−1乃至情報処理装置3−nのうちのいずれか)の情報処理コントローラは、機能プログラムIDによって、起動すべき機能プログラムを識別する。
ステータス要求コマンドは、送信先IDで示される情報処理装置3−1乃至情報処理装置3−nの現在の動作状態(状況)に関する装置情報を、応答先IDで示される情報処理装置1あてに送信要求するコマンドである。
ステータス返信コマンドは、ステータス要求コマンドを受信した情報処理装置3−1乃至情報処理装置3−nが、装置情報をステータス要求コマンドに含まれる応答先IDで示される情報処理装置1に応答するコマンドである。ステータス返信コマンドは、実行セクションのデータ領域に装置情報を格納する。
図6は、DMAコマンドがステータス返信コマンドである場合におけるソフトウェアセルのデータ領域の構造を示す図である。
装置IDは、情報処理コントローラを備える情報処理装置3−1乃至情報処理装置3−nを識別するための識別子であり、ステータス返信コマンドを送信する情報処理装置3−1乃至情報処理装置3−nのIDを示す。装置IDは、例えば、装置の電源をオンしたとき、情報処理装置3−1乃至情報処理装置3−nの情報処理コントローラに含まれるメインプロセッサによって、装置の電源をオンしたときの日時、情報処理装置3−1乃至情報処理装置3−nのネットワークアドレスおよび情報処理装置3−1乃至情報処理装置3−nの情報処理コントローラに含まれるサブプロセッサの数などに基づいて生成される。
装置種別IDには、情報処理装置3−1乃至情報処理装置3−nの特徴を表す値が含まれる。情報処理装置3−1乃至情報処理装置3−nの特徴とは、情報処理装置3−1乃至情報処理装置3−nがどのような装置であるかを示す情報であり、例えば、情報処理装置3−1乃至情報処理装置3−nが、ハードディスクレコーダ、PDA(Personal Digital Assistants)、ポータブルCD(Compact Disc)プレーヤなどであることを示す情報である。また、装置種別IDは、映像音声記録、映像音声再生など、情報処理装置3−1乃至情報処理装置3−nの機能を表すものであってもよい。情報処理装置3−1乃至情報処理装置3−nの特徴や機能を表す値は予め決定されているものとし、装置種別IDを読み出すことにより、情報処理装置3−1乃至情報処理装置3−nの特徴や機能を把握することが可能である。
メインプロセッサ動作周波数は、情報処理コントローラのメインプロセッサの動作周波数を表す。メインプロセッサ使用率は、メインプロセッサで現在動作している全てのプログラムについての、メインプロセッサでの使用率を表す。メインプロセッサ使用率は、メインプロセッサの全処理能力に対する使用中の処理能力の比率を表した値で、例えば、プロセッサ処理能力評価のための単位であるMIPSを単位として算出され、または単位時間あたりのプロセッサ使用時間に基づいて算出される。
サブプロセッサ数は、情報処理コントローラが備えるサブプロセッサの数を表す。サブプロセッサIDは、情報処理コントローラのサブプロセッサを識別するための識別子である。
サブプロセッサステータスは、サブプロセッサの状態を表すものであり、“unused”、“reserved”、および“busy”などの状態がある。“unused”は、サブプロセッサが現在使用されてなく、使用の予約もされていないことを示す。“reserved”は、現在は使用されていないが、予約されている状態を示す。“busy”は、現在使用中であることを示す。
サブプロセッサ使用率は、サブプロセッサで現在実行している、またはサブプロセッサに実行が予約されているプログラムについての、サブプロセッサでの使用率を表す。すなわち、サブプロセッサ使用率は、サブプロセッサステータスが“busy”である場合には、現在の使用率を示し、サブプロセッサステータスが“reserved”である場合には、後に使用される予定の推定使用率を示す。
サブプロセッサID、サブプロセッサステータスおよびサブプロセッサ使用率は、1つのサブプロセッサに対して一組設定され、1つの情報処理コントローラのサブプロセッサに対応する組数が設定される。
メインメモリ総容量およびメインメモリ使用量は、それぞれ、情報処理コントローラに接続されているメインメモリの総容量および現在使用中の容量を表す。
記録部数は、情報処理コントローラに接続されている記録部の数を表す。記録部IDは、情報処理コントローラに接続されている記録部を一意的に識別する情報である。記録部種別IDは、記録部の種類(例えば、ハードディスク、CD±RW、DVD±RW、メモリディスク、SRAM、ROMなど)を表す。
記録部総容量および記録部使用量は、それぞれ、記録部IDによって識別される記録部の総容量および現在使用中の容量を表す。
記録部ID、記録部種別ID、記録部総容量および記録部使用量は、1つの記録部に対して一組設定されるものであり、情報処理コントローラに接続されている記録部の数の組数だけ設定される。すなわち、1つの情報処理コントローラに複数の記録部が接続されている場合、各記録部には異なる記録部IDが割り当てられ、記録部種別ID、記録部総容量および記録部使用量も別々に管理される。
このようにして、情報処理装置1は、情報処理装置3−1乃至情報処理装置3−nに分散処理を実行させる場合、ソフトウェアセルを生成し、生成したソフトウェアセルを、ネットワーク2を介して情報処理装置3−1乃至情報処理装置3−nあてに送信する。
なお、以下、情報処理装置1から情報処理装置3−1乃至情報処理装置3−nあてに送信される各種データは、ソフトウェアセルに格納されて送信されるものとし、繰り返しになるので、その説明は省略する。
図7は、所定のアプリケーションプログラムを実行する情報処理装置1の論理スレッドの制御機能について説明するための機能ブロック図である。
図7において、アプリケーションプログラム実行制御部101、スレッドリソースコントローラ102、異常通知取得部103、論理スレッドスケジューラ104、および、論理スレッド実行制御部105のそれぞれの機能は、情報処理コントローラ11のメインプロセッサ42の処理により実行されるものである。
アプリケーションプログラム実行制御部101は、メインメモリ12からロードしたアプリケーションプログラムの実行を制御する。アプリケーションプログラム実行制御部101は、スレッドリソースコントローラ102に、論理スレッドの設定情報を供給して、論理スレッドの生成を要求する。論理スレッドとは、複数のサブプロセッサ43のそれぞれに必要に応じて割り当てられた複数のプログラム(それらのプログラムは、同一のアプリケーションプログラムに対応するものであっても、異なるアプリケーションプログラムに対応するものであってもかまわない)をまとめて一つの機能を提供する処理単位と定義したものである。換言すれば、複数のサブプロセッサ43のそれぞれに必要に応じて割り当てられた複数のプログラムは、メインメモリ12の所定の記憶領域に記憶されているプログラムであり、アプリケーションプログラム実行制御部101により実行が制御されているアプリケーションプログラムの要求により、メインメモリ12から対応するサブプロセッサ43のローカルストレージ51にロードされて実行されるものである。また、アプリケーションプログラム実行制御部101は、論理スレッド実行制御部105、または、スレッドリソースコントローラ102から、必要に応じて、エラー通知などを受ける。
スレッドリソースコントローラ102は、アプリケーションプログラム実行制御部101の制御に基づいて、論理スレッドの生成および削除を行うとともに、生成した論理スレッドの状態監視と動作制御を行う。スレッドリソースコントローラ102は、異常通知取得部103から供給される情報などに基づいて、論理スレッドの状態を監視するために、情報処理コントローラ11の全体の管理情報が記載された全体管理情報テーブルと、実行されている論理スレッドごとの管理情報が記載された論理スレッド管理情報テーブルとを内部のメモリ(すなわち、ローカルストレージ51−1)に有している。スレッドリソースコントローラ102は、異常通知取得部103から供給される情報などに基づいて、必要に応じて、これらのテーブルを再構築、または、更新するとともに、これらのテーブルの情報を基に、論理スレッドスケジューラ104を生成し、論理スレッド実行制御部105を制御することにより、論理スレッドの実行を管理し、動作を制御する。
全体管理情報テーブルおよび論理スレッド管理情報テーブルの詳細については、図8および図9を用いて後述する。
すなわち、サブプロセッサ43−1乃至サブプロセッサ43−3は、メインプロセッサ42の制御に基づいて、並列的かつ独立に、プログラムを実行し、データを処理することができるようになされており、更に、必要に応じて、メインプロセッサ42が実行するプログラムが、サブプロセッサ43−1乃至サブプロセッサ43−3のそれぞれが実行するプログラムのそれぞれと連携して動作するように構成することも可能なようになされている。スレッドリソースコントローラ102は、サブプロセッサ43−1乃至サブプロセッサ43−3に割り当てられる論理スレッドの実行状態を管理することにより、アプリケーションプログラムを実行させるようにすることができる。
異常通知取得部103は、サブプロセッサ43−1乃至サブプロセッサ43−3に接続されている異常検出部47−1乃至47−3が検出したサブプロセッサ43−1乃至サブプロセッサ43−3の異常状態を示す情報を、異常制御部48から取得し、異常が発生したサブプロセッサ43に関する情報を、スレッドリソースコントローラ102に供給する。
論理スレッドスケジューラ104は、スレッドリソースコントローラ102により必要に応じて生成されるものであり、1つの論理スレッドにおいて分散して処理されるべき複数のスレッドを1つのサブプロセッサ43で実行する必要が生じた場合、その実行のスケジューリングを行い、論理スレッド実行制御部105を制御する。
論理スレッド実行制御部105は、スレッドリソースコントローラ102または論理スレッドスケジューラ104の制御に基づいて、論理スレッドの実行(実際には、サブプロセッサ43−1乃至サブプロセッサ43−3により実行されている)を制御するものであり、論理スレッドの実行を制御ために必要な情報を、スレッドリソースコントローラ102と授受する。
図8に、上述したスレッドリソースコントローラ102が保持している全体管理情報テーブルを示す。
全体管理情報テーブルには、全サブプロセッサ数、使用中サブプロセッサ数、空きサブプロセッサ数、停止中サブプロセッサ数、および、全てのサブプロセッサ43の状態を示す情報が記載されている。具体的には、全体管理情報テーブルには、全サブプロセッサ数として、M(1以上の正の整数であり、図1を用いて説明した情報処理装置1の情報処理コントローラ11においては3)が記載され、使用中サブプロセッサ数として、N(0または1以上M未満の正の整数)が記載され、空きサブプロセッサ数として、P(0または1以上M未満の正の整数)が記載され、停止中サブプロセッサ数として、M−(N+P)に対応する値(0または1以上M未満の正の整数)が記載され、それぞれのサブプロセッサ43が、使用中であるか、空き状態(新たに使用可能である状態、すなわち、停止中ではないが使用中ではない状態)であるか、異常発生などにより停止中であるかを示す状態情報、または、エラー情報が記載されている。
図9に、上述したスレッドリソースコントローラ102が保持している論理スレッド管理情報テーブルを示す。
論理スレッド管理情報テーブルには、その論理スレッドを他の論理スレッドと区別することが可能なIDである論理スレッドID,その論理スレッドの所有者であるアプリケーションプログラムを示す所有者ID(または、その論理スレッドを所有するアプリケーションプログラムを他のアプリケーションプログラムと区別することが可能なIDであるアプリケーションID)、サブプロセッサ43のうちのいずれかの異常が検出された場合の動作を示す異常時対応動作ID、この論理スレッドの実行のために使用されているサブプロセッサ43を示すサブプロセッサIDが記載され、サブプロセッサIDごとに、対応するサブプロセッサ43が実行しているプログラムを示す動作中プログラムコード(またはメインメモリ上の開始アドレス)、スレッドの動作状況を示すコンテキストデータ、および、それぞれのサブプロセッサ43の動作状態を示す状態情報が格納されている。
状態情報としては、「正常動作中」、「異常発生中」「異常発生による停止中」「時分割動作中」、「初期化処理中」、「動作変更要求の処理中」「正常待機中」、「終了処理中」、「正常復帰待機中」がある。ここで、「正常動作中」とは、正常な状態で、論理スレッドのうちの割り当てられたスレッドの処理を実行している状態を示し、「異常発生中」とは、異常検出部47により異常が検出された状態を示し、「異常発生による停止中」とは、異常検出部47により異常が検出された後、対応するサブプロセッサ43の動作が異常制御部48の制御により停止されている状態を示し、「時分割動作中」とは、具体的には、1つのサブプロセッサ43で複数のスレッドを時分割で処理している状態であることを示す。また、「初期化処理中」とは、具体的には、プログラムのロード完了待ちや初期設定などの処理中を示し、「動作変更要求の処理中」とは、具体的には、通常動作から時分割処理動作に移行する期間を示し、「正常待機中」とは、新たなスレッドにより使用可能な状態である、すなわち、停止中ではないが、使用中ではない状態を示し、「終了処理中」とは、スレッドの停止準備中を示し、「正常復帰待機中」とは、正常状態に復帰するために待機中であることを示す。
スレッドリソースコントローラ102は、全体管理情報テーブル、および、論理スレッド管理情報テーブルを、アプリケーションプログラム実行制御部101、異常通知取得部103、または、論理スレッド実行制御部105から供給される各種情報を基に必要に応じて再構築、または、更新し、全体管理情報テーブル、および、論理スレッド管理情報テーブルを参照して、論理スレッド実行制御部105の論理スレッドの実行と、サブプロセッサ43による論理スレッドに対応するそれぞれのプログラム(スレッド)の実行とを制御して、任意の論理スレッドの動作を開始させたり、停止させたり、再開させることができる。
また、スレッドリソースコントローラ102は、異常通知取得部103から、論理スレッドに対応するプログラムを実行しているいずれかのサブプロセッサ43の異常が検出されたことを示す信号の入力を受けたとき、論理スレッド管理情報テーブルを参照し、異常が検出されたサブプロセッサ43が実行している論理スレッドIDと、異常発生時に論理スレッドの動作とアプリケーション動作を保つためにどのような処理を実行するかを予め定義するIDである異常時対応動作IDを読み込む。そして、スレッドリソースコントローラ102は、異常時対応動作IDに基づいて、それ以降の論理スレッドの実行(サブプロセッサ43による論理スレッドに対応するプログラムの実行)を制御する。異常発生時の処理には、「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」のうちのいずれかが、異常時対応動作IDによって指定されるものとする。
「停止」は、異常発生時に、論理スレッドの処理を全て停止させるものである。すなわち、「停止」は、同一の論理スレッドの処理を実行しているものであれば、異常が発生していないサブプロセッサ43の処理も停止させるものである。「リソース確保後続行」は、異常発生時に、論理スレッドの全ての処理を一旦停止させ、異常が発生したサブプロセッサ43に割り当てられていた処理を、他の使用されていないサブプロセッサ43に割り当てた後、論理スレッドの処理を改めて開始(または再開)させるものである。
「時分割動作続行」は、異常発生時に、論理スレッドの全ての処理を一旦停止させ、論理スレッドスケジューラ104の処理により、異常が発生したサブプロセッサ43に割り当てられていた処理を、同一の論理スレッドの処理を実行していた他のサブプロセッサ43に時分割で割り当てることができるようにスケジューリングを行い、論理スレッドの処理を改めて開始(または再開)させるものである。
「強制続行」は、異常発生時に、論理スレッドの処理を一旦停止させることなく、同一の論理スレッドの処理を実行していた他のサブプロセッサ43の処理内容のみ継続させるものである。「正常復帰待機」は、異常発生時に、論理スレッドの全ての処理を一旦停止させ、異常が発生したサブプロセッサ43の状態が回復し、再度処理可能になった場合に、異常発生前に論理スレッドの処理が割り当てられていた状態と同一の状態で、論理スレッドの処理を改めて開始(または再開)させるものである。
また、異常発生時に、「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」のうちのいずれの処理が実行されると好適であるかは、対応する論理スレッドが実行する処理の形態によって決まるものである。「停止」は、一般的なエラー処理であるため、アプリケーションプログラム全般に適用可能である。また、「リソース確保後続行」は、自動実行(開始/終了時間指定がない予約実行も含む)等の処理に向いており、例えば、ダビング、バックアップ、データベース作成、フォーマット変換などの、リアルタイム性が全く必要ない処理が実行される場合に適用可能である。「リソース時分割動作続行」は、利用者の操作中における臨時処理的なものに向いており、例えば、コンテンツ編集アプリ、予約録画をしながらダビングなど、リアルタイム性はそれほど必要ないが、ある程度処理完了を確約したい場合に適用可能である。
「強制続行」は、通常は利用される可能性は低いが、緊急性の高い用途に向いており、例えば、フライトレコーダ、防犯記録装置、監視カメラなど、壊れるまで強制的に動作する必要のあるものに適用されると好適である。「正常復帰待機」は、例えば、家庭用電化製品などで、ある程度自立回復動作を行う必要があるものや、作業者が頻繁にメンテナンスすることが困難、または、メンテナンスの必要性が低いもの、もしくは、過酷な条件下(例えば、高所、海底、極寒冷地)などでのモニター制御などに適用されると好適である。
したがって、異常発生時に、「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」のうちのいずれの処理が実行されるかは、アプリケーションプログラムに依存するものである。また、アプリケーションプログラムによっては、異常発生時にいずれの処理が実行されるかを、ユーザが設定可能なようにしてもよい。ユーザにより異常発生時にいずれの処理が実行されるかの設定が変更された場合、スレッドリソースコントローラ102は、論理スレッド管理情報テーブルの異常時対応動作ID情報を更新する。
異常発生の検出と、「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」の処理の詳細については後述する。
次に、図10のアローチャートを参照して、情報処理装置1において、複数のサブプロセッサ43を用いて複数のプログラム(実行される複数のプログラムは、同一または同等のものでも、異なるプログラムであってもかまわない)をロードし実行させ、その複数サブプロセッサが実行する処理を1つの機能の論理スレッドとして管理する場合について説明する。
ステップS1において、アプリケーションプログラム実行制御部101は、スレッドリソースコントローラ102に論理スレッドの生成要求を通知し、プログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDをスレッドリソースコントローラ102に設定する。なお、一般的な処理においては、スレッドリソースコントローラ102には処理に必要なサブプロセッサ使用数が設定されるが、例えば、セキュアな情報を処理する場合などの特殊な場合においては、処理に利用されるサブプロセッサIDが設定される。
ステップS2において、スレッドリソースコントローラ102は、アプリケーションプログラム実行制御部101による論理スレッドの生成要求に応じて、論理スレッドを生成し、設定されたプログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDに基づいて、全体管理情報テーブル、および、論理スレッド管理情報テーブルを再構築する。すなわち、スレッドリソースコントローラ102は、生成した論理スレッドの処理を割り当てるサブプロセッサ43を確保し、この論理スレッドを管理するための論理スレッド管理情報テーブルを構築する。
ステップS3において、スレッドリソースコントローラ102は、生成した論理スレッドの処理を割り当てるサブプロセッサ43のうちの1つ(図10においては、サブプロセッサ43−1)に、対応するプログラムをロードする。
そして、スレッドリソースコントローラ102は、ステップS4において、プログラムがロードされたサブプロセッサ43−1に、初期値を供給して初期データを設定し、ステップS5において、プログラムがロードされたサブプロセッサ43−1に、プログラムスタート命令を出す。
サブプロセッサ43−1は、ステップS6において、プログラムスタート命令を受けて、初期化処理を実行し、ステップS7において、スレッドリソースコントローラ102に、初期化完了を通知する。
ステップS8において、スレッドリソースコントローラ102は、サブプロセッサ43−1からの初期化完了通知を受けて、サブプロセッサ43−1において実行されるスレッドの処理開始を準備する。
ステップS9において、スレッドリソースコントローラ102および初期化がなされていないサブプロセッサ43のうちの1つ(図10においては、サブプロセッサ43−2)は、上述したステップS3乃至ステップS7と同等のシーケンスを実行する。すなわち、スレッドリソースコントローラ102は、サブプロセッサ43-2に、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−2は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知する。
ステップS10において、スレッドリソースコントローラ102は、サブプロセッサ43−2からの初期化完了通知を受けて、サブプロセッサ43−2において実行されるスレッドの処理開始を準備する。
ここでは、論理スレッドの実行において使用されるサブプロセッサ43の数が2つである場合について説明しているが、論理スレッドの実行において使用されるサブプロセッサ43の数が3つ以上である場合、ステップS9およびステップS10の処理と同等の処理が、生成した論理スレッドの処理が割り当てられた全てのサブプロセッサ43の初期化が完了するまで繰り返される。
論理スレッドの処理が割り当てられた全てのサブプロセッサ43の初期化が完了した後、生成した論理スレッドの処理が割り当てられた全てのサブプロセッサ43に、処理開始命令が出される。すなわち、ステップS11において、スレッドリソースコントローラ102は、サブプロセッサ43−1に、処理開始命令を出す。そして、ステップS12において、スレッドリソースコントローラ102は、サブプロセッサ43−2に、処理開始命令を出す。
ステップS13において、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。
そして、ステップS14において、論理スレッド実行制御部105とアプリケーションプログラム実行制御部101とは、必要に応じて任意に動作内容を確認する処理を行いながら(確認が必要か否かは、アプリケーションプログラムに依存する)、対応する論理スレッドが終了するまで、処理の実行を制御する。
このような処理により、情報処理装置1において所定のアプリケーションプログラムが実行される場合、複数のサブプロセッサ43を用いて複数のプログラムが1つの論理スレッドとして実行される。
ここで、論理スレッドに属するサブプロセッサ43のうちのいずれかが、何らかの異常により動作停止した場合、そのサブプロセッサ43に対応する異常検出部47により異常が検出され、異常制御部48より、異常通知取得部103を介して、スレッドリソースコントローラ102に、異常サブプロセッサ番号、異常状態等が通知される。そして、異常が発生したサブプロセッサ43が属する論理スレッドに対して指定されている異常時対応動作IDに対応した、例えば、新規サブプロセッサの割当てや動作変更などの処理が実行される。
次に、図11のフローチャートを参照して、異常発生時の処理について説明する。図11に示される異常発生時の処理は、図10を用いて説明したステップS13の処理が実行された後、所定の時間ごとに、ステップS31の判断処理が実行されて、ステップS31において異常が発生したことの通知を受けたと判断された場合には、割り込み処理として実行されるものである。
ステップS31において、異常通知取得部103は、いずれかのサブプロセッサ43において異常が発生したことの通知を、異常制御部48から受けたか否かを判断する。ステップS31において、異常が発生したことの通知を受けていないと判断された場合、処理は、後述するステップS37に進む。
ステップS31において、異常が発生したことの通知を受けたと判断された場合、ステップS32において、異常通知取得部103は、異常制御部48から供給された情報を基に、異常が発生したサブプロセッサ43を特定するためのサブプロセッサIDを取得し、スレッドリソースコントローラ102に供給する。
ステップS33において、スレッドリソースコントローラ102は、論理スレッド管理情報テーブルを参照し、異常が検出されたサブプロセッサ43が実行している論理スレッドIDを取得する。
ステップS34において、スレッドリソースコントローラ102は、論理スレッド管理情報テーブルを参照し、対応する論理スレッドにおいて設定されている異常時対応動作IDを取得する。
ステップS35において、スレッドリソースコントローラ102は、全体管理情報テーブルおよび論理スレッド管理テーブルの内容を、発生した異常の内容に基づいて更新する。
ステップS36において、スレッドリソースコントローラ102は、異常時対応動作IDに基づいた処理、すなわち、上述した、「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」のうちのいずれかの処理を実行する。このとき、スレッドリソースコントローラ102は、実行する処理に対応させて、全体管理情報テーブルおよび論理スレッド管理テーブルの内容を、随時更新する。
ステップS31において、異常が発生したことの通知を受けていないと判断された場合、または、ステップS36の処理の終了後、ステップS37において、スレッドリソースコントローラ102は、アプリケーションプログラム実行制御部101から供給される信号を基に、アプリケーションプログラムが終了したか否かを判断する。ステップS37において、アプリケーションプログラムが終了していないと判断された場合、処理は、ステップS31に戻り、それ以降の処理が繰り返される。ステップS37において、アプリケーションプログラムが終了したと判断された場合、処理が終了される。
このような処理により、論理スレッドに属するサブプロセッサ43のうちのいずれかが、何らかの異常により動作停止した場合、異常が発生したサブプロセッサ43が属する論理スレッドに対して指定されている異常時対応動作IDに対応した「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」のうちのいずれかの処理が実行される。
次に、図12乃至図18のアローチャートを参照して、論理スレッドの処理が複数のサブプロセッサ43において実行され、異常が発生したサブプロセッサ43が属する論理スレッドに対して指定されている異常時対応動作IDに対応した「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」のそれぞれの処理が実行される場合について説明する。図12乃至図18のアローチャートにおいては、サブプロセッサ43-2において異常が発生した場合を例として説明する。
図12のアローチャートを参照して、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合、論理スレッドの処理が「停止」されるときの情報処理装置1の動作について説明する。
ステップS51において、アプリケーションプログラム実行制御部101は、スレッドリソースコントローラ102に論理スレッドの生成要求を通知し、プログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDをスレッドリソースコントローラ102に設定する。なお、一般的な処理においては、スレッドリソースコントローラ102には処理に必要なサブプロセッサ使用数が設定されるが、例えば、セキュアな情報を処理する場合などの特殊な場合においては、処理に利用されるサブプロセッサIDが設定される。
ステップS52において、スレッドリソースコントローラ102は、アプリケーションプログラム実行制御部101による論理スレッドの生成要求に応じて、論理スレッドを生成し、設定されたプログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDに基づいて、全体管理情報テーブル、および、論理スレッド管理情報テーブルを再構築する。すなわち、スレッドリソースコントローラ102は、生成した論理スレッドの処理を割り当てるサブプロセッサ43を確保し、この論理スレッドを管理するための論理スレッド管理情報テーブルを構築する。
ステップS53において、スレッドリソースコントローラ102は、生成した論理スレッドの処理を割り当てるサブプロセッサ43のうちの1つ(図12においては、サブプロセッサ43−1)に、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知する。
ステップS54において、スレッドリソースコントローラ102は、初期化がなされていないサブプロセッサ43のうちの1つ(図12においては、サブプロセッサ43−2)に対して、上述したステップS53と同等のシーケンスを実行する。すなわち、スレッドリソースコントローラ102は、サブプロセッサ43-2に、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−2は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知する。スレッドリソースコントローラ102は、論理スレッドが割り当てられたサブプロセッサ43の全てに対してプログラムのスタート命令を出力し、初期化完了の通知を受けた場合、それぞれのサブプロセッサ43に、処理開始命令を出力する。すなわち、ステップS53およびステップS54において、図10を用いて説明したステップS3乃至ステップS12のシーケンスが実行される。
なお、ここでは、論理スレッドの処理が2つのサブプロセッサ43に対して割り当てられたものとして説明したが、論理スレッドの処理が3つ以上のサブプロセッサ43に対して割り当てられた場合、ステップS54の処理は、生成した論理スレッドの処理が割り当てられた全てのサブプロセッサ43の初期化が完了するまで繰り返される。
ステップS55において、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。
ステップS56において、サブプロセッサ43-2で異常が発生し、サブプロセッサ43−2は、異常検出部47−2に異常情報を通知する。
異常検出部47−2は、ステップS57において、サブプロセッサ43−2の異常を検出し、ステップS58において、異常制御部48に対して、サブプロセッサ43−2の緊急停止依頼を出力する。
異常制御部48は、ステップS59において、サブプロセッサ43−2の緊急停止処理、すなわち、バス41を介して、サブプロセッサ43−2に緊急停止を指令する制御信号を供給する処理を実行し、ステップS60において、異常通知取得部103(すなわち、バス41を介してメインプロセッサ42)に、サブプロセッサ43−2に異常が発生したことを通知するための異常通知を供給する。
異常通知取得部103は、ステップS61において、異常制御部48から供給された異常通知の内容を基に、例えば、異常が発生したサブプロセッサを示す情報をサブプロセッサIDに変換するなどの情報変換処理を行い、ステップS62において、スレッドリソースコントローラ102に、異常通知と論理スレッドの緊急停止依頼を供給する。
ステップS63において、スレッドリソースコントローラ102は、情報テーブルの情報の取得と更新の処理、すなわち、図11を用いて説明したステップS32乃至ステップS35の処理を実行する。なお、以下に説明するステップS64乃至ステップS70の処理が、図11のステップS36の、異常時対応動作IDに基づいた処理に対応するものである。
ステップS64において、スレッドリソースコントローラ102は、論理スレッド実行制御部105に、論理スレッドの停止要求を供給する。
論理スレッド実行制御部105は、ステップS65において、論理スレッドの停止処理を行い、ステップS66において、アプリケーションプログラム実行制御部101に論理スレッドエラー通知を供給する。
ステップS67において、アプリケーションプログラム実行制御部101は、アプリケーションプログラムの実行の停止処理を行う。
ステップS68において、論理スレッド実行制御部105は、スレッドリソースコントローラ102に、論理スレッド停止完了を通知する。
ステップS69において、スレッドリソースコントローラ102は、対応する論理スレッドの処理を分担している、異常が発生していないサブプロセッサ43の全て(ここでは、サブプロセッサ43−1)にサブプロセッサ停止命令を供給する。すなわち、メインプロセッサ42から、バス41を介して、サブプロセッサ43−1にサブプロセッサ停止命令が供給される。
ステップS70において、サブプロセッサ43−1は、処理を停止するので、対応する論理スレッドに関する処理が全て終了される。
このような処理により、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合、論理スレッドの処理が全て「停止」される。
次に、図13のアローチャートを参照して、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合、論理スレッドの処理が「リソース確保後続行」されるときの情報処理装置1の動作について説明する。
ステップS81乃至ステップS95において、図12を用いて説明したステップS51乃至ステップS65の処理が実行される。
すなわち、アプリケーションプログラム実行制御部101は、スレッドリソースコントローラ102に論理スレッドの生成要求を通知し、プログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDをスレッドリソースコントローラ102に設定する。スレッドリソースコントローラ102は、論理スレッドを生成し、設定されたプログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDに基づいて、全体管理情報テーブル、および、論理スレッド管理情報テーブルを再構築し、生成した論理スレッドの処理を割り当てるサブプロセッサ43のそれぞれに、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1およびサブプロセッサ43−2は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知するので、スレッドリソースコントローラ102は、プログラムの実行命令をサブプロセッサ43−1およびサブプロセッサ43−2に出力する。そして、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。
論理スレッド実行中に、サブプロセッサ43-2で異常が発生したとき、サブプロセッサ43−2は、異常検出部47−2に異常情報を通知する。異常検出部47−2は、サブプロセッサ43−2の異常を検出し、異常制御部48に対して、サブプロセッサ43−2の緊急停止依頼を出力する。異常制御部48は、サブプロセッサ43−2の緊急停止処理、すなわち、バス41を介して、サブプロセッサ43−2に緊急停止を指令する制御信号を供給する処理を実行し、異常通知取得部103に、サブプロセッサ43−2に異常が発生したことを通知するための異常通知を供給する。異常通知取得部103は、異常制御部48から供給された異常通知の内容を基に、例えば、異常が発生したサブプロセッサを示す情報をサブプロセッサIDに変換するなどの情報変換処理を行い、スレッドリソースコントローラ102に、異常通知と論理スレッドの緊急停止依頼を供給する。スレッドリソースコントローラ102は、情報テーブルの情報の取得と更新の処理を実行する。スレッドリソースコントローラ102は、論理スレッド実行制御部105に、論理スレッドの停止要求を供給する。論理スレッド実行制御部105は、論理スレッドの停止処理を行う。
ステップS96において、論理スレッド実行制御部105は、スレッドリソースコントローラ102に、論理スレッド停止完了を通知する。
ステップS97において、スレッドリソースコントローラ102は、対応する論理スレッドの処理を分担している、異常が発生していないサブプロセッサ43の全て(ここでは、サブプロセッサ43−1)にサブプロセッサ停止命令を供給する。すなわち、メインプロセッサ42から、バス41を介して、サブプロセッサ43−1にサブプロセッサ停止命令が供給される。
ステップS98において、サブプロセッサ43−1は、実行中の処理を一時停止する。
ステップS99において、スレッドリソースコントローラ102は、全体管理情報テーブルを参照して、異常が発生したサブプロセッサ43−2の処理を代わって実行することが可能な他のサブプロセッサ43を検出し、そのサブプロセッサ43を新規サブプロセッサとして割り当てて、全体管理情報テーブルおよび論理スレッド管理情報テーブルの記載を更新する。ここで、新規サブプロセッサとして処理が割り当てられたのは、サブプロセッサ43−3であるものとする。
ステップS100において、スレッドリソースコントローラ102は、サブプロセッサ43−3に、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−3は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知するので、スレッドリソースコントローラ102は、プログラムの実行命令をサブプロセッサ43−3に出力する。
ステップS101において、スレッドリソースコントローラ102は、サブプロセッサ43−1に、一時停止していた論理スレッドの動作再開要求を供給する。なお、論理スレッドの動作再開が、一時停止前の処理の継続であるか、再度初期化から開始されるかは、アプリケーションプログラムに依存する。
ステップS102において、スレッドリソースコントローラ102は、論理スレッド実行処理部105に、論理スレッドの動作再開を通知し、論理スレッド実行処理部105は、論理スレッドの動作を再開する。
このような処理により、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合であっても、論理スレッドの処理は完全に停止されることなく、異常が発生していないサブプロセッサがリソースとして確保された後、続行される。
次に、図14および図15のアローチャートを参照して、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合、論理スレッドの処理が「時分割動作続行」されるときの情報処理装置1の動作について説明する。
ステップS121乃至ステップS138においては、図13のステップS81乃至ステップS98と同様の処理が実行される。
すなわち、アプリケーションプログラム実行制御部101は、スレッドリソースコントローラ102に論理スレッドの生成要求を通知し、プログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDをスレッドリソースコントローラ102に設定する。スレッドリソースコントローラ102は、論理スレッドを生成し、設定されたプログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDに基づいて、全体管理情報テーブル、および、論理スレッド管理情報テーブルを再構築し、生成した論理スレッドの処理を割り当てるサブプロセッサ43のそれぞれに、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1およびサブプロセッサ43−2は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知するので、スレッドリソースコントローラ102は、プログラムの実行命令をサブプロセッサ43−1およびサブプロセッサ43−2に出力する。そして、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。
論理スレッド実行中に、サブプロセッサ43-2で異常が発生したとき、サブプロセッサ43−2は、異常検出部47−2に異常情報を通知する。異常検出部47−2は、サブプロセッサ43−2の異常を検出し、異常制御部48に対して、サブプロセッサ43−2の緊急停止依頼を出力する。異常制御部48は、サブプロセッサ43−2の緊急停止処理、すなわち、バス41を介して、サブプロセッサ43−2に緊急停止を指令する制御信号を供給する処理を実行し、異常通知取得部103に、サブプロセッサ43−2に異常が発生したことを通知するための異常通知を供給する。異常通知取得部103は、異常制御部48から供給された異常通知の内容を基に、例えば、異常が発生したサブプロセッサを示す情報をサブプロセッサIDに変換するなどの情報変換処理を行い、スレッドリソースコントローラ102に、異常通知と論理スレッドの緊急停止依頼を供給する。スレッドリソースコントローラ102は、情報テーブルの情報の取得と更新の処理を実行する。スレッドリソースコントローラ102は、論理スレッド実行制御部105に、論理スレッドの停止要求を供給する。論理スレッド実行制御部105は、論理スレッドの停止処理を行う。
そして、論理スレッド実行制御部105は、スレッドリソースコントローラ102に、論理スレッド停止完了を通知する。スレッドリソースコントローラ102は、対応する論理スレッドの処理を分担している、異常が発生していないサブプロセッサ43の全て(ここでは、サブプロセッサ43−1)にサブプロセッサ停止命令を供給する。サブプロセッサ43−1は、実行中の処理を一時停止する。
ステップS139において、スレッドリソースコントローラ102は、論理スレッドスケジューラ104に、一時停止した論理スレッドに関する情報を供給して、異常が発生していないサブプロセッサ43(ここでは、サブプロセッサ43−1のみ)において、一時停止した論理スレッドの処理を時分割で実行させるために、論理スレッドのスケジューリング開始を指令する。
論理スレッドスケジューラ104は、ステップS140において、論理スレッドのスケジューリングを開始するために初期化を行い、ステップS141において、動作準備完了を、スレッドリソースコントローラ102に通知する。
ステップS142において、スレッドリソースコントローラ102は、異常が発生したサブプロセッサ43−2の処理を、異常が発生していないサブプロセッサ43−1が、論理スレッドスケジューラ104のスケジューリングに基づいて時分割で実行するので、全体管理情報テーブルおよび論理スレッド管理情報テーブルの記載を更新する。
ステップS143において、スレッドリソースコントローラ102は、論理スレッドスケジューラ104に対して、論理スレッドの対応するプログラムを全てロードし、初期値を供給して初期データを設定する。
ステップS144において、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。
ステップS145において、論理スレッドスケジューラ104は、サブプロセッサ43−1に、時分割で割り当てられた処理に対応する第1のプログラムをロードさせ、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1は、プログラムスタート命令を受けて、プログラムを実行する。
ステップS146において、論理スレッドスケジューラ104は、ステップS145においてサブプロセッサ43−1が実行していた第1のプログラムの処理に関する情報(すなわち、スレッドの動作状況)を示すコンテキストをメインメモリ12の所定の記憶領域に退避させ、サブプロセッサ43−1に、時分割で割り当てられた次の処理に対応する第2のプログラムを実行させるために、コンテキストをスイッチする(第2のプログラムのコンテキストをメインメモリ12の所定の記憶領域から読み出す)。
ステップS147において、論理スレッドスケジューラ104は、サブプロセッサ43−1に、時分割で割り当てられた処理に対応する第2のプログラムをロードさせ、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1は、プログラムスタート命令を受けて、プログラムを実行する。
ステップS148において、論理スレッドスケジューラ104は、ステップS147においてサブプロセッサ43−1が実行していた第2のプログラムの処理に関するコンテキストをメインメモリ12の所定の記憶領域に退避させ、サブプロセッサ43−1に、時分割で割り当てられた次の処理に対応する第1のプログラムを実行させるために、コンテキストをスイッチする(第1のプログラムのコンテキストをメインメモリ12の所定の記憶領域から読み出す)。
そして、ステップS149およびステップS150において、ステップS145およびステップS146と同様の処理が実行されて、第1のプログラムがロードされて実行され、所定のタイミングで、時分割で割り当てられた次の処理に対応する第2のプログラムを実行させるために、第1のプログラムのコンテキストが退避された後、コンテキストがスイッチされる。
そして、ステップS151およびステップS152において、ステップS147およびステップS148と同様の処理が実行されて、第2のプログラムがロードされて実行され、所定のタイミングで、時分割で割り当てられた次の処理に対応する第1のプログラムを実行させるために、第2のプログラムのコンテキストが退避された後、コンテキストがスイッチされる。
そして、ステップS153以降も、同様に、第1のプログラムと第2のプログラムが、論理スレッドが終了するまで、論理スレッドスケジューラ104のスケジューリングに基づいて、異常が発生していないサブプロセッサ43-1において交互に実行される。
このような処理により、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合であっても、論理スレッドの処理を停止することなく、異常が発生していないサブプロセッサ43において「時分割動作続行」される。
なお、ここでは、2つのサブプロセッサ43を用いて処理が行われていた論理スレッドにおいて、一方のサブプロセッサ43に異常が発生した場合、換言すれば、ただ1つのサブプロセッサ43に異常が発生していない場合について説明したが、例えば、3つ以上のサブプロセッサ43を用いて処理が行われていた論理スレッドにおいて、1つのサブプロセッサ43に異常が発生した場合、論理スレッドスケジューラ104は、異常が発生していない2つ以上のサブプロセッサ43に対して、論理スレッドの処理を時分割で実行するようにスケジューリングするようにしてもよいことはもちろんである。
次に、図16のアローチャートを参照して、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合、論理スレッドの処理が「強制続行」されるときの情報処理装置1の動作について説明する。
ステップS171乃至ステップS183においては、図12のステップS51乃至ステップS63と同様の処理が実行される。
すなわち、アプリケーションプログラム実行制御部101は、スレッドリソースコントローラ102に論理スレッドの生成要求を通知し、プログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDをスレッドリソースコントローラ102に設定する。スレッドリソースコントローラ102は、論理スレッドを生成し、設定されたプログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDに基づいて、全体管理情報テーブル、および、論理スレッド管理情報テーブルを再構築し、生成した論理スレッドの処理を割り当てるサブプロセッサ43のそれぞれに、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1およびサブプロセッサ43−2は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知するので、スレッドリソースコントローラ102は、プログラムの実行命令をサブプロセッサ43−1およびサブプロセッサ43−2に出力する。そして、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。
論理スレッド実行中に、サブプロセッサ43-2で異常が発生したとき、サブプロセッサ43−2は、異常検出部47−2に異常情報を通知する。異常検出部47−2は、サブプロセッサ43−2の異常を検出し、異常制御部48に対して、サブプロセッサ43−2の緊急停止依頼を出力する。異常制御部48は、サブプロセッサ43−2の緊急停止処理、すなわち、バス41を介して、サブプロセッサ43−2に緊急停止を指令する制御信号を供給する処理を実行し、異常通知取得部103に、サブプロセッサ43−2に異常が発生したことを通知するための異常通知を供給する。異常通知取得部103は、異常制御部48から供給された異常通知の内容を基に、例えば、異常が発生したサブプロセッサを示す情報をサブプロセッサIDに変換するなどの情報変換処理を行い、スレッドリソースコントローラ102に、異常通知と論理スレッドの緊急停止依頼を供給する。スレッドリソースコントローラ102は、情報テーブルの情報の取得と更新の処理を実行する。
ステップS184において、スレッドリソースコントローラ102は、アプリケーションプログラム実行制御部101に、論理スレッドの処理にエラーが発生したことを通知する。すなわち、スレッドリソースコントローラ102は、論理スレッド実行制御部105に、論理スレッドの停止を要求しないので、論理スレッド実行制御部105は、論理スレッドの停止処理を行わない。
すなわち、異常が発生したサブプロセッサ43−2の動作は停止されるが、論理スレッドが停止されないので、異常が発生しないサブプロセッサ43−1の処理は、割り当てられたスレッドが終了するまで続行される。
このような処理により、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合であっても、論理スレッドの処理を停止することなく、異常が発生していないサブプロセッサ43に割り当てられた処理のみが「強制続行」される。
次に、図17および図18のアローチャートを参照して、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合、論理スレッドの処理が「正常復帰待機」されるときの情報処理装置1の動作について説明する。
ステップS201乃至ステップS214においては、図16のステップS171乃至ステップS184と同様の処理が実行される。
すなわち、アプリケーションプログラム実行制御部101は、スレッドリソースコントローラ102に論理スレッドの生成要求を通知し、プログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDをスレッドリソースコントローラ102に設定する。スレッドリソースコントローラ102は、論理スレッドを生成し、設定されたプログラムコード、初期値情報、処理に必要なサブプロセッサ使用数、または、処理に利用されるサブプロセッサIDに基づいて、全体管理情報テーブル、および、論理スレッド管理情報テーブルを再構築し、生成した論理スレッドの処理を割り当てるサブプロセッサ43のそれぞれに、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1およびサブプロセッサ43−2は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知するので、スレッドリソースコントローラ102は、プログラムの実行命令をサブプロセッサ43−1およびサブプロセッサ43−2に出力する。そして、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。
論理スレッド実行中に、サブプロセッサ43-2で異常が発生したとき、サブプロセッサ43−2は、異常検出部47−2に異常情報を通知する。異常検出部47−2は、サブプロセッサ43−2の異常を検出し、、異常制御部48に対して、サブプロセッサ43−2の緊急停止依頼を出力する。異常制御部48は、サブプロセッサ43−2の緊急停止処理、すなわち、バス41を介して、サブプロセッサ43−2に緊急停止を指令する制御信号を供給する処理を実行し、異常通知取得部103に、サブプロセッサ43−2に異常が発生したことを通知するための異常通知を供給する。異常通知取得部103は、異常制御部48から供給された異常通知の内容を基に、例えば、異常が発生したサブプロセッサを示す情報をサブプロセッサIDに変換するなどの情報変換処理を行い、スレッドリソースコントローラ102に、異常通知と論理スレッドの緊急停止依頼を供給する。スレッドリソースコントローラ102は、情報テーブルの情報の取得と更新の処理を実行し、アプリケーションプログラム実行制御部101に、論理スレッドの処理にエラーが発生したことを通知する。
ステップS215において、スレッドリソースコントローラ102は、論理スレッド実行制御部105に、論理スレッドの停止要求を供給する。
論理スレッド実行制御部105は、ステップS216において、論理スレッドの停止処理を行い、ステップS217において、スレッドリソースコントローラ102に、論理スレッド停止完了を通知する。
ステップS218において、スレッドリソースコントローラ102は、対応する論理スレッドの処理を分担している、異常が発生していないサブプロセッサ43の全て(ここでは、サブプロセッサ43−1)にサブプロセッサ停止命令を供給する。すなわち、メインプロセッサ42から、バス41を介して、サブプロセッサ43−1にサブプロセッサ停止命令が供給される。
ステップS219において、サブプロセッサ43−1は、処理を停止する。
ステップS220において、以上状態を回復して、動作可能な状態になったサブプロセッサ43−2は、状態が回復し、スレッドの処理の再開が可能であることを、異常検出部47−2に通知する。
異常検出部47−2は、ステップS221において、サブプロセッサ43−2の異常からの回復を検出し、ステップS222において、異常制御部48に対して、サブプロセッサ43−2の回復を通知する。
ステップS223において、異常制御部48は、例えば、サブプロセッサ43−2に所定の信号を送信して、サブプロセッサ43−2の動作を確認する。ステップS224において、サブプロセッサ43−2は、供給された信号に対する応答を異常制御部48に供給するなどして、動作状態が正常であることを異常制御部48に通知する。
ステップS225において、異常制御部48は、異常通知取得部103に、サブプロセッサ43−2の回復を通知する。
異常通知取得部103は、ステップS226において、異常制御部48から供給された異常回復通知の内容を基に、例えば、異常が回復したサブプロセッサを示す情報をサブプロセッサIDに変換するなどの情報変換処理を行い、ステップS227において、スレッドリソースコントローラ102に、サブプロセッサ43−2の異常回復を通知して、論理スレッドの動作再開依頼を供給する。
ステップS228において、スレッドリソースコントローラ102は、動作を再開する論理スレッドを管理するために、全体管理情報テーブル、および、論理スレッド管理情報テーブルの情報の取得と更新を行う。
ステップS229において、スレッドリソースコントローラ102は、生成した論理スレッドの処理を割り当てるサブプロセッサ43のうちの1つ(図18においては、サブプロセッサ43−2)に、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−2は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知するので、スレッドリソースコントローラ102は、プログラムの実行命令をサブプロセッサ43−2に出力する。
ステップS230において、スレッドリソースコントローラ102は、初期化がなされていないサブプロセッサ43のうちの1つ(図18においては、サブプロセッサ43−1)に対して、上述したステップS229と同等のシーケンスを実行する。すなわち、スレッドリソースコントローラ102は、サブプロセッサ43−1に、対応するプログラムをロードし、初期値を供給して初期データを設定し、プログラムスタート命令を出す。サブプロセッサ43−1は、プログラムスタート命令を受けて、初期化処理を実行し、スレッドリソースコントローラ102に、初期化完了を通知するので、スレッドリソースコントローラ102は、プログラムの実行命令をサブプロセッサ43−1に出力する。
ステップS229およびステップS230の処理は、生成した論理スレッドの処理が割り当てられた全てのサブプロセッサ43の初期化が完了するまで繰り返される。
ステップS231において、スレッドリソースコントローラ102は、アプリケーションプログラム実行制御部101に、論理スレッドの再開を通知する。ステップS232において、アプリケーションプログラム実行制御部101は、アプリケーションプログラムの処理の再開準備を行い、処理を再開する。そして、ステップS233において、スレッドリソースコントローラ102は、論理スレッド実行制御部105に論理スレッドの動作開始を指令する。論理スレッド実行制御部105は、論理スレッドの動作を開始する。なお、論理スレッドの動作再開が、一時停止前の処理の継続であるか、再度初期化から開始されるかは、アプリケーションプログラムに依存する。
そして、スレッドリソースコントローラ102の制御に基づき、サブプロセッサ43-1およびサブプロセッサ43-2において、異常発生前と同一の状態で、論理スレッドの処理が再開され、論理スレッドが終了するまで、処理が実行される。
このような処理により、論理スレッドに属するサブプロセッサ43のうちのいずれかに異常が発生した場合であっても、論理スレッドの処理は停止されることなく、異常が発生したサブプロセッサの回復まで待機され、異常が発生したサブプロセッサが復帰した後、論理スレッドの処理が続行される。
このように、本発明を適用することにより、論理スレッドの処理が複数のサブプロセッサ43において実行され、異常が発生したサブプロセッサ43が属する論理スレッドに対して指定されている異常時対応動作IDに対応して、「停止」、「リソース確保後続行」、「時分割動作続行」、「強制続行」、「正常復帰待機」のそれぞれの処理が実行されるので、1つのサブプロセッサが何らかの要因で止まってしまっても、論理スレッドの機能を必要に応じて停止させるか、または、必ずしも停止させることなく、論理スレッドとして動作している機能を正常な状態に保つことができ、煩雑な処理を行うことなしに、必要に応じて、論理スレッドを再開することができる。
上述した一連の処理は、ソフトウェアにより実行することもできる。そのソフトウェアは、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
この記録媒体は、図1に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク61(フレキシブルディスクを含む)、光ディスク62(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク63(MD(Mini-Disk)(商標)を含む)、もしくは半導体メモリ64などよりなるパッケージメディアなどにより構成される。
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
1 情報処理装置, 2 ネットワーク, 3 情報処理装置, 11 情報処理コントローラ, 12 メインメモリ, 15 操作入力部, 16 通信部, 42 メインプロセッサ, 43 サブプロセッサ, 47 異常検出部, 48 異常制御部, 51 ローカルストレージ, 101 アプリケーションプログラム実行制御部, 102 スレッドリソースコントローラ, 103 異常通知取得部, 104 論理スレッドスケジューラ, 105 論理スレッド実行制御部