(57)【要約】      （修正有）【課題】マルチプロセッサシステム間でタスクが移動する場合、メモリ番地は移動させられる可能性がある。このため、分岐アドレス等が物理的に一定番地とならない。【解決手段】命令群、静的データおよび動的に生成されるデータが、異なるメモリやプロセッサに、そのポインタ値を変更することなく移動できるように、命令群、静的データおよび動的に生成されたデータのアドレスに対するポインタを保持するための方法やシステムを提供する。これにより、たとえば分岐命令はターゲットオフセット値のみ保持し、実際の物理アドレスはグローバルベースアドレス値との加算により得られる。【選択図】図６
2005322232.tif 000002
【特許請求の範囲】
【請求項１】
アドレス指定可能なメモリに命令を保持するステップと、
命令が保持されているアドレスに関連するベース値を設定するステップと、
ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を取得するステップと、
命令が保持されているメモリにおけるルーチンにジャンプすることによって、前記ジャンプ命令を実行するステップと、を備え、
前記ルーチンは、
（ａ）前記パラメータ値と前記ベース値に基づいて前記ターゲット命令のアドレスを特定するステップと、
（ｂ）前記ターゲット命令の物理アドレスにジャンプするステップと、
を含むことを特徴とするタスク処理方法。
【請求項２】
前記ジャンプ命令は、条件付き命令であることを特徴とする請求項１に記載のタスク処理方法。
【請求項３】
前記ジャンプ命令は、条件付きでない命令であることを特徴とする請求項１に記載のタスク処理方法。
【請求項４】
前記ベース値はレジスタに保持され、１以上の命令の物理アドレス位置に応じた値であることを特徴とする請求項１から３のいずれかに記載のタスク処理方法。
【請求項５】
命令と、その命令の実行によって生成される動的データを含むタスクイメージを取得するステップを更に備え、
前記ベース値は、そのタスクイメージの最小物理アドレスに応じた値であることを特徴とする請求項４に記載のタスク処理方法。
【請求項６】
命令を別のメモリ位置へ移動できるかを示すマスク値を保持するステップを更に備えることを特徴とする請求項１から５のいずれかに記載のタスク処理方法。
【請求項７】
メモリに保持されているルーチンにジャンプして前記ターゲット命令のアドレスを特定する処理の実行中においては、タスクイメージを移動させるための割込要求を抑止するステップを更に含むことを特徴とする請求項１から６のいずれかに記載のタスク処理方法。
【請求項８】
メモリに保持されているルーチンにジャンプして前記ターゲット命令のアドレスを特定する処理が終了した後に、前記割込要求に対する抑止を解除するステップを更に含むことを特徴とする請求項７に記載のタスク処理方法。
【請求項９】
前記ターゲット命令のアドレスは前記パラメータ値と前記ベース値を加算することにより特定されることを特徴とする請求項１から８のいずれかに記載のタスク処理方法。
【請求項１０】
ターゲットルーチンに対するパラメータ値付きのジャンプ命令、前記ターゲットルーチンにおけるリターン命令、前記ターゲットルーチンの実行後に続いて実行されるべき命令、を含む命令群をアドレス指定可能なメモリに保持するステップと、
前記命令群が保持されているアドレスに関連する第１のベース値を設定するステップと、
前記第１のベース値と前記ジャンプ命令のアドレスに基づいてリターンオフセットを特定し、前記リターンオフセットを保持し、前記パラメータ値と前記第１のベース値に基づいて前記ターゲットルーチンのアドレスを特定し、前記ターゲットルーチンのアドレスにジャンプすることにより、前記ジャンプ命令を処理するステップと、
前記命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第２のベース値を保持するステップと、
前記命令群のアドレスが変更された後に、前記リターンオフセットと前記第２のベース値に基づいて次の命令のアドレスを特定し、そのアドレスにジャンプすることによって前記リターン命令を実行するステップと、
を備えることを特徴とするタスク処理方法。
【請求項１１】
前記リターンオフセットは、前記ジャンプ命令のアドレスから前記第１のベース値を減算することにより、特定されることを特徴とする請求項１０に記載のタスク処理方法。
【請求項１２】
前記ジャンプ命令を処理中においては、命令が保持されているアドレスの変更を抑止するステップを更に備えることを特徴とする請求項１０または１１に記載のタスク処理方法。
【請求項１３】
アドレスの変更を抑止するために、命令のアドレス位置を変更させるための割込要求を抑止することを特徴とする請求項１２に記載のタスク処理方法。
【請求項１４】
前記第１および第２のベース値とは異なる第１のデータベース値を設定するステップと、
前記第１のデータベース値からのオフセットとしてデータを指し示すためのポインタを含む動的データを、命令の実行に応じて生成するステップと、
前記ポインタの値を維持しつつ動的データのアドレスを変更するステップと、
変更後のアドレスに関連する第２のデータベース値を保持するステップと、
前記動的データのアドレスが変更された後に、前記ポインタ値と前記第２のデータベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行するステップと、
を更に備えることを特徴とする請求項１０から１３のいずれかに記載のタスク処理方法。
【請求項１５】
複数のプロセッシングユニットと、
前記プロセッシングユニットによって実行可能な命令と、
各プロセッシングユニットごとに対応してグローバルベース値を保持するグローバルベースアドレスレジスタと、
命令に応じてプロセッシングユニットによりアクセスされ、命令の実行前からその値が保持される静的データと、
命令に応じてプロセッシングユニットによってアクセスされ、命令の実行前にはその値が保持されない動的データと、
ジャンプ先の命令の物理アドレスとは独立したパラメータ値付きのジャンプ命令と、
アクセス対象となるデータの物理アドレスとは独立したパラメータ値を持つデータポインタと、を備え、
前記ジャンプ命令と前記データポインタはそれぞれのパラメータ値とグローバルアドレス値に基づいてアドレスを解決され、
それらのパラメータ値を維持しつつグローバルベース値を変更することによって、あるプロセッシングユニットから別のプロセッシングユニットに命令を移動させることを特徴とするタスク処理システム。
【請求項１６】
ジャンプ先のルーチンが実行された後に戻るべきアドレスに関連する値を保持するリターンアドレスレジスタを更に備えることを特徴とする請求項１５に記載のタスク処理システム。
【請求項１７】
命令のメモリアドレスが変更可能であるかを示す割込マスク値を更に備えることを特徴とする請求項１５または１６に記載のタスク処理システム。
【請求項１８】
命令は、サブプロセッシングユニットに一意に対応づけられたローカルメモリに保持されることを特徴とする請求項１５から１７のいずれかに記載のタスク処理システム。
【請求項１９】
前記動的データは、ヒープとスタック含むことを特徴とする請求項１５から１８のいずれかに記載のタスク処理システム。
【請求項２０】
少なくともデータアクセス命令におけるパラメータとなるポインタが保持されており、少なくともポインタのいくつかは動的データ内に保持されることを特徴とする請求項１５から１９のいずれかに記載のタスク処理システム。
【請求項２１】
命令の実行に応じて生成される全てのデータポインタは、アクセス対象となるデータの物理アドレスとは独立したパラメータ値であることを特徴とする請求項２０に記載のタスク処理システム。
【請求項２２】
第１の命令サブセットと、前記第１の命令サブセットによって生成されたデータにアクセスする第２の命令サブセットを持つ命令群を、第１のプロセッサによってアクセス可能であって、アドレス指定可能なメモリに保持するステップと、
前記命令群が保持されている物理アドレスに応じた第１のベース値を保持するステップと、
ターゲットとなるべき動的データへのポインタを含む動的データを、前記第１のプロセッサが、第１の命令サブセットの実行に応じて生成するステップと、
第１のベース値とポインタの値に基づいてターゲットデータの物理アドレスを特定することにより、前記第１のプロセッサがそのターゲットとなるべき動的データにアクセスするステップと、
第１の命令サブセットが実行された後に、ポインタの値を維持したままで、第２のプロセッサによってアクセス可能であって、アドレス指定可能なメモリに、命令と動的データを保持させるステップと、
第２のプロセッサが第２の命令サブセットを実行し、第２のベース値とポインタの値に基づいてターゲットとなるべき動的データにアクセスするステップと、
備えることを特徴とするタスク処理方法。
【請求項２３】
アドレス指定可能なメモリに保持された命令と、
命令が保持されているアドレスに応じたベース値を保持するメモリと、
ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を保持するメモリと、
命令が保持されているメモリにおけるルーチンにジャンプすることによって、前記ジャンプ命令を実行する手段と、を備え
前記ルーチンは、
（ａ）前記パラメータ値と前記ベース値に基づいて前記ターゲット命令のアドレスを特定するステップと、
（ｂ）前記ターゲット命令の物理アドレスにジャンプするステップと、
を含むことを特徴とするタスク処理システム。
【請求項２４】
前記ベース値はレジスタに保持され、１以上の命令の物理アドレス位置に応じた値であることを特徴とする請求項２３に記載のタスク処理システム。
【請求項２５】
命令と、命令の実行によって生成される動的データを含むタスクイメージを更に備え、
前記ベース値は、そのタスクイメージの最小物理アドレスに応じた値であることを特徴とする請求項２３または２４に記載のタスク処理システム。
【請求項２６】
命令を別のメモリ位置へ移動できるかを示すマスク値を更に備えることを特徴とする請求項２３から２５のいずれかに記載のタスク処理システム。
【請求項２７】
メモリに保持されているルーチンにジャンプして前記ターゲット命令のアドレスを特定する処理が終了した後に、割込要求ついてのマスク値を変更する手段を更に含むことを特徴とする請求項２６に記載のタスク処理システム。
【請求項２８】
ターゲットルーチンに対するパラメータ値付きのジャンプ命令、前記ターゲットルーチンにおけるリターン命令、前記ターゲットルーチンの実行後に続いて実行されるべき命令、を含み、アドレス指定可能なメモリに保持される命令群と、
前記命令群が保持されているアドレスに関連する第１のベース値を設定する手段と、
前記第１のベース値と前記ジャンプ命令のアドレスに基づいてリターンオフセットを特定し、前記リターンオフセットを保持し、前記パラメータ値と前記第１のベース値に基づいて前記ターゲットルーチンのアドレスを特定し、前記ターゲットルーチンのアドレスにジャンプすることにより、前記ジャンプ命令を実行する手段と、
前記命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第２のベース値を保持する手段と、を備え、
前記命令群のアドレスが変更された後に、前記リターンオフセットと前記第２のベース値に基づいて次の命令のアドレス位置を特定し、そのアドレスにジャンプすることによって前記リターン命令を実行することを特徴とするタスク処理システム。
【請求項２９】
前記リターンオフセットは、前記ジャンプ命令のアドレスから前記第１のベース値を減算することにより特定されることを特徴とする請求項２８に記載のタスク処理システム。
【請求項３０】
ジャンプ命令の実行中においては前記命令群が保持されているアドレスの変更を抑止する手段を更に備えることを特徴とする請求項２８または２９に記載のタスク処理システム。
【請求項３１】
前記抑止する手段は、前記命令群のアドレスを変更するための割込要求を抑止する手段を含むことを特徴とする請求項３０に記載のタスク処理システム。
【請求項３２】
前記第１および第２のベース値とは異なる第１のデータベース値を設定する手段と、
前記第１のデータベース値からのオフセットとして保持されるデータポインタを含む動的データを、前記命令群の実行に応じて生成する手段と、
前記ポインタの値を維持しつつ動的データのアドレスを変更する手段と、
変更後のアドレスに関連する第２のデータベース値を保持する手段と、
前記動的データのアドレスが変更された後に、前記ポインタの値と前記第２のデータベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行する手段と、
を更に備えることを特徴とする請求項２８または２９に記載のタスク処理システム。
【請求項３３】
第１プロセッサと、
前記第１プロセッサに関連づけられた第１メモリと、
前記第１メモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第１ベースレジスタと、
第２プロセッサと、
前記第２プロセッサに関連づけられた第２メモリと、
前記第２メモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第２ベースレジスタと、
パラメータ付きのジャンプ命令、パラメータ付きのデータアクセス命令、前記第１プロセッサによる命令群の実行前に生成される静的データ、前記第１プロセッサによる命令群の実行に応じて生成され、命令やデータの位置に応じたパラメータとスタックを含むヒープと、を含むタスクイメージと、
ジャンプ命令とデータアクセス命令の実行に応じて実行されるルーチンであって、命令の実行やデータアクセスを行うプロセッサに関連づけられたレジスタの値と、ジャンプ命令やデータアクセス命令のパラメータに基づいて物理アドレスを特定するアドレス解決ルーチンと、を備え、
前記第１メモリに保持されているタスクイメージは、割込要求に応じて、パラメータの値も含めて前記第１メモリか前記ら第２メモリにコピーされることを特徴とするタスク処理システム。
【請求項３４】
割込要求に応じて前記第１メモリから前記第２メモリへタスクイメージをコピーできるか否かを示すマスク値を保持する割込マスクレジスタを更に備え、
割込要求は、アドレス解決ルーチンの少なくとも一部によって抑止されることを特徴とする請求項３３に記載のタスク処理システム。
【請求項３５】
アドレス解決ルーチンは、第１または第２プロセッサのいずれがジャンプ命令を実行しているかに応じた前記第１または第２ベースレジスタのいずれかの値と、ジャンプ命令のアドレスに基づいて、リターンオフセットを計算するための命令を更に備え、
リターンアドレスを解決するためのルーチンは、リターン命令に応じて、ジャンプ命令のあとに実行されるべき命令の物理アドレスを特定するために実行され、第１または第２プロセッサのいずれがリターン命令を実行しているかに応じた第１または第２ベースレジスタのいずれかの値と、リターンオフセットに基づいてその物理アドレスを特定することを特徴とする請求項３３または３４に記載のタスク処理システム。
【請求項３６】
割込要求に応じて、前記第１メモリから前記第２メモリにタスクイメージをコピーする第３プロセッサを更に備えることを特徴とする請求項３３から３５のいずれかに記載のタスク処理システム。
【請求項３７】
第３プロセッサは、プロセッシングユニットであり、第１および第２プロセッサはサブプロセッサであることを特徴とする請求項３６に記載のタスク処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、米国特許出願第１０／８３８，０５０号（発明の名称：「タスクの移動に関するシステムおよび方法」、２００４年５月３日出願）に関連し、その優先権を主張する。
【背景技術】
【０００２】
プロセッサで実行される典型的なプログラムは、さまざまな目的でメモリを使用する。たとえば、プログラムそのものを構成する命令を保持するためである。あるいは、静的データ、すなわち、プログラムにより供給されるデータを保持することである。たとえば、レーシングゲームの静的データであれば、レース場（Race Track）のレイアウト情報などである。
【０００３】
更に別の目的は、プログラムの実行時に生成されるデータを保持することである。このような、動的データ（Dynamically Allocated Data）とかヒープ（Heap）とよばれるタイプのデータは、通常、プログラムの作成前には特定されない情報を保持する。たとえば、ゲームにおいて、プレーヤーは、仮想的な車をその特性を決めながら作ることができる。車の特性や車の数は、どちらもプレーヤーによって実際にプログラムが実行されるまでは決まらないので、こういった情報は前もって保持しておくことはできない。したがって、こういったデータは、プログラムの実行中に生成される。
【０００４】
また、メモリの別の目的は、プログラムによって使われるスタックを保持することである。スタックはさまざまな目的で使われる。たとえば、プログラムは通常さまざまなルーチンをもっているので、プログラムの実行態様によっては、さまざまな順序で各ルーチンが実行される。あるスタックは、プロセッサが実行中のルーチンからメインのルーチンに戻れるように、ルーチンの実行順序を監視する。同様に、あるスタックは、あるルーチンによって新しいデータが生成され使用されているときに、一時的にそれとは別のルーチンに関連するデータを保持するためにつかわれる。
【０００５】
以上からあきらかなようにプログラムの効率的な実行のためには、全ての情報がどこにあるかをプロセッサが知る必要がある。プロセッサの処理がある命令から別の命令に移るとき、プロセッサは次の命令のありかをつきとめることができなければならない。同様に、静的データ（Statically Allocated Data）や動的データ（Dynamically Allocated Data）、スタックのを見つけることができなければならない。
【０００６】
このような理由から、通常、プログラムはアドレス指定可能なメモリ（Addressable Memory）を使用する。アドレス指定可能なメモリは、なんらかの識別子、通常は、「アドレス」とよばれる数値、を有するユニット単位で記憶領域を管理する。これにより、プログラムはアドレスに基づいて命令やデータをみつけることができる。したがって、プロセッサがたとえば、”Jump 100”といった命令を受け取ったときには、プロセッサはアドレス１００の命令を読み出して実行する。
【０００７】
プログラムがアドレスを使ってデータアクセスする場合、プログラムはしばしばメモリのどこにそれらが保持されているかを前もって正確に知ることができないという難点が生じる。たとえば、プログラムとそのデータが最後に実行されたときにはアドレス１０００〜２０００に保持されていたとしても、プログラムが次に実行されるときにそれらのアドレスで正しいとは保証されない。おなじプログラムが次にロードされときには、アドレス３５００〜４５００に保持されるかもしれない。
【０００８】
このため、プログラムの中には、位置独立コード（PIC:Position Independent Code）を使用するものもある。ＰＩＣでは、プログラムにおけるジャンプ命令はジャンプ先の命令が存在する現実の物理アドレスを示さない。代わりに、相対アドレスとして知られる別の値を使用する。相対アドレスは、ジャンプ先の命令の物理アドレスを計算したり、決定するために使われる。この場合、たとえば、”Jump 100”という命令は、メモリのアドレス１００に保持されている命令へのジャンプという意味ではない。それはプログラムの先頭の物理アドレスから１００アドレス分先にある命令という意味である。
【０００９】
ＰＩＣを使用するシステムは、相対アドレスをさまざまな方法で物理アドレスに変換する。たとえば、物理アドレスは、プログラムがメモリにロードされたときに決定される。この場合、プログラムがメモリにロードされたときに、相対アドレスは物理アドレスに変換される。そして、プログラムの実行中にジャンプ命令があらわれたときには、プロセッサはプロセッサのレジスタの一つに保持されているベースアドレスに相対アドレスを加算することにより物理アドレスを計算する。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
ＰＩＣシステムの難点は、マルチプロセッサシステムのニーズに対しては適切なアドレッシングではないことである。マルチプロセッサシステムにおいては、複数のサブプロセッサが所望の処理結果を実現するために並列に（少なくとも、協働して）処理できる。マルチプロセッサシステムは、通常は、実行されるべきプログラムをあるプロセッサから別のプロセッサに移す機能を有する。
【００１１】
マルチプロセッサシステムにおいては、プログラムがあるプロセッサから別のプロセッサに移されるとき、そのプログラムが実行中であることもある。ＰＩＣシステムは、そのような実行中の移動という目的に沿うものではない。ＰＩＣプログラムが一旦メモリにロードされると、その物理アドレスは既知とされる。したがって、プログラムがロードされ実行されたあとに生成されるデータを指し示すアドレスポインタは、概して、物理アドレス位置を指し示すことになる。それゆえ、実行中のＰＩＣプログラムに関連する情報すべてを別のメモリ位置に移動させることは困難である。このようなプログラムは、移動に関連した割込処理を受けやすいものである。
【００１２】
したがって、（静的なデータを含めた）プログラムと動的に生成されたデータを異なるプロセッサやアドレス位置に移動させるための、より好適なシステムおよび方法が必要である。
【課題を解決するための手段】
【００１３】
本発明のある態様は、タスク処理方法である。
この方法は、アドレス指定可能なメモリに命令を保持するステップと、命令が保持されているアドレスに関連するベース値を設定するステップと、ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を取得するステップと、命令が保持されているメモリにおけるルーチンにジャンプすることによって、ジャンプ命令を実行するステップと、を備え、このルーチンは、（ａ）パラメータ値とベース値に基づいてターゲット命令のアドレスを特定するステップと、（ｂ）ターゲット命令の物理アドレスにジャンプするステップと、を含む。
【００１４】
ジャンプ命令は、条件付きの、または、条件付きでないジャンプ命令であってもよい。この方法は、１以上の命令の物理アドレス位置に応じたベース値をレジスタに格納するステップを含んでもよい。また、命令と、命令の実行に応じて生成される動的データおよび他のデータを含むタスクイメージを取得するステップを含んでもよい。このとき、ベース値はタスクイメージの最小物理アドレスに応じた値であってもよい。この方法は、命令を別のメモリ位置に移動できるかを示すマスク値を保持するステップと、メモリに保持されているルーチンにジャンプしてターゲット命令のアドレスを特定する処理の実行中においては、タスクイメージを移動させるための割込要求を抑止し、メモリに保持されているルーチンにジャンプしてターゲット命令のアドレスを特定する処理が終了した後に、割込要求に対する抑止を解除するステップを含んでもよい。また、パラメータ値にベース値を加算することによってターゲット命令のアドレスを特定するステップを含んでもよい。
【００１５】
本発明の別の態様も、タスク処理方法である。
この方法は、ターゲットルーチンへのパラメータ値付きのジャンプ命令、ターゲットルーチンにおけるリターン命令、ターゲットルーチンの実行後に続いて実行されるべき命令を含む命令群をアドレス指定可能なメモリに保持するステップと、命令群が保持されているアドレスに関連する第１のベース値を設定するステップと、第１のベース値とジャンプ命令のアドレスに基づいてリターンオフセットを特定し、リターンオフセットを保持し、パラメータ値と第１のベース値に基づいてターゲットルーチンのアドレスを特定し、ターゲットルーチンのアドレスにジャンプすることにより、ジャンプ命令を実行するステップと、命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第２のベース値を保持するステップと、命令群のアドレスが変更された後に、リターンオフセットと第２のベース値に基づいて次の命令のアドレスを特定し、そのアドレスにジャンプすることによりリターン命令を処理するステップと、を含む。
【００１６】
この方法は、更に、ジャンプ命令のアドレスからベース値を減算することによりリターンオフセットを特定し、ジャンプ名利の処理中においては、命令が保持されているアドレスの変更を抑止してもよい。
【００１７】
この方法は、第１および第２のベース値とは異なる第１のデータベース値を設定するステップと、第１のデータベース値からのオフセットとしてデータを指し示すためのポインタを含む動的データを、命令の実行に応じて生成するステップと、ポインタの値を維持しつつ動的データのアドレスを変更するステップと、変更後のアドレスに関連する第２のデータベース値を保持するステップと、動的データのアドレスが変更された後に、ポインタの値と第２データベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行するステップと、を含んでもよい。
【００１８】
本発明の、更に別の態様は、タスク処理システムである。
このシステムは、複数のサブプロセッシングユニットと、サブプロセッシングユニットによって実行可能な命令と、各サブプロセッシングユニットごとに対応してグローバルベース値を保持するグローバルベースアドレスレジスタと、命令に応じてサブプロセッシングユニットによりアクセスされ、命令の実行前からその値が保持される静的データと、命令に応じてサブプロセッシングユニットによりアクセスされ、命令の実行前にはその値が保持されない動的データと、ジャンプ先の命令の物理アドレスとは独立したパラメータ付きのジャンプ命令と、アクセス対象となるデータの物理アドレスとは独立したパラメータ値付きのデータポインタと、を備え、ジャンプ命令とデータポインタはそれぞれのパラメータ値およびグローバルアドレス値に基づいてアドレスを解決され、それらのパラメータ値を維持しつつグローバルベース値を変更することによって、あるプロセッサから別のプロセッサに命令を移動させる。
【００１９】
このシステムは、好ましくは、ジャンプ先のルーチンが実行された後に戻るべきアドレスに関連する値を保持するリターンアドレスレジスタを備えてもよい。このシステムは、また、命令のメモリアドレスが変更可能であるかを示す割込マスク値を含んでもよい。命令は、サブプロセッシングユニットに一意に対応づけられたローカルメモリに保持されてもよい。また、動的データはヒープやスタックを含んでもよい。好ましくは、少なくともデータアクセス命令におけるパラメータとなるポインタが保持されており、少なくとも、ポインタのいくつかは、動的データ内に保持されてもよい。命令の実行に応じて生成される全てのデータポインタは、アクセス対象となるデータの物理アドレスとは独立したパラメータ値を含んでもよい。
【００２０】
本発明の更に別の態様は、タスク処理方法である。
この方法は、第１のプロセッサによりアクセス可能であって、アドレス指定可能メモリに、第１の命令サブセットと、第１の命令サブセットによって生成されたデータにアクセスする第２の命令サブセットを含む命令群を保持するステップと、命令群が保持されている物理アドレスに応じた第１のベース値を保持するステップと、ターゲットとなるべき動的データへのポインタを含む動的データを、第１のプロセッサが第１の命令サブセットの実行によって生成するステップと、第１のベース値とポインタの値に基づいてターゲットデータの物理アドレスを特定することにより、第１のプロセッサがそのターゲットとなるべき動的データにアクセスするステップと、第１の命令サブセットが実行された後に、ポインタの値を変更することなく第２のプロセッサによってアクセス可能で、アドレス指定可能メモリに命令と動的データを保持させるステップと、第２のプロセッサが第２の命令サブセットを実行し、第２のベース値とポインタの値に基づいてターゲットとなるべき動的データにアクセスするステップと、を備える。
【００２１】
本発明の更に別の態様は、タスク処理システムである。
このシステムは、アドレス指定可能メモリに保持された命令と、命令が保持されているアドレスに応じたベース値を保持するメモリと、ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を保持するメモリと、命令が保持されているメモリにおけるルーチンにジャンプすることによりジャンプ命令を実行する手段と、を備え、そのルーチンは、（ａ）パラメータ値とベース値に基づいてターゲット命令のアドレスを特定するステップと、（ｂ）ターゲット命令の物理アドレスにジャンプするステップと、を含む。
【００２２】
このシステムは、ベース値を保持するレジスタを含んでもよい。ベース値は、１以上の命令の物理アドレス位置に応じた値であってもよい。また、命令と、命令の実行によって生成される動的データ、その他のデータを含むタスクイメージを更に備えてもよい。ここで、ベース値は、タスクイメージの最小物理アドレスに応じた値であってもよい。更に、命令を別のメモリ位置へ移動できるかを示すマスク値を含んでもよい。加えて、メモリに保持されているルーチンにジャンプして、ターゲット命令のアドレスを特定する処理が終了した後には、割込要求についてのマスク値を変更する手段を備えてもよい。
【００２３】
本発明の更に別の態様は、タスク処理システムである。
このシステムは、ターゲットルーチンに対するパラメータ値付きのジャンプ命令、ターゲットルーチンにおけるリターン命令、ターゲットルーチンの実行後に続いて実行されるべき命令を含み、アドレス指定可能メモリに保持される命令群と、命令群が保持されているアドレスに関連する第１のベース値を設定する手段と、第１のベース値とジャンプ命令のアドレスに基づいてリターンオフセットを特定し、リターンオフセットを保持し、パラメータ値と第１のベース値に基づいてターゲットルーチンのアドレスを特定し、ターゲットルーチンのアドレスにジャンプすることにより、ジャンプ命令を実行する手段と、命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第２のベース値を保持する手段と、を備え、命令群のアドレスが変更された後に、リターンオフセットと第２のベース値に基づいて次の命令のアドレスを特定し、そのアドレスにジャンプことによってリターン命令を実行する。
【００２４】
このシステムの、リターンオフセットは、ジャンプ命令のアドレスから第１のベース値を減算することにより特定されてもよい。ジャンプ命令の実行中においては、命令群が保持されているアドレスの変更を抑止する手段を更に備え、そのための手段は、命令群のアドレスを変更するための割込要求を抑止する手段を含んでもよい。このシステムは、また、第１および第２のベース値とは異なる第１のデータベース値を設定する手段と、第１のデータベース値からのオフセットとして保持されるデータポインタを含む動的データを、命令群の実行に応じて生成する手段と、ポインタの値を維持しつつ動的データのアドレスを変更する手段と、変更後のアドレスに関連する第２のデータベース値を保持する手段と、動的データのアドレスが変更された後に、ポインタの値と第２のデータベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行する手段と、を更に備えてもよい。
【００２５】
本発明の更に別の態様は、タスク処理システムである。
このシステムは、第１プロセッサと、第１プロセッサに関連づけられた第１メモリと、第１メモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第１ベースレジスタと、第２プロセッサと、第２プロセッサに関連づけられた第２メモリと、第２のメモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第２ベースレジスタと、パラメータ付きのジャンプ命令、パラメータ付きのデータアクセス命令、第１プロセッサによる命令群の実行前に生成される静的データ、第１プロセッサによる命令群の実行に応じて生成され、命令やデータの位置に応じたパラメータとスタックを含むヒープと、を含むタスクイメージと、ジャンプ命令とデータアクセス命令の実行に応じて実行されるルーチンであって、命令の実行やデータアクセスを行うプロセッサに関連づけられたレジスタの値と、ジャンプ命令やデータアクセス命令のパラメータに基づいて物理アドレスを特定するアドレス解決ルーチンと、を備え、第１メモリに保持されているタスクイメージは、割込要求に応じて、パラメータの値も含めて第１メモリか第２メモリにコピーされる。
【００２６】
このシステムは、割込要求に応じて、第１メモリから第２メモリにタスクイメージをパラメータの値も含めてコピーする第３プロセッサを備えてもよい。
【００２７】
このシステムは、割込要求に応じて第１メモリから第２メモリにタスクイメージをコピーできるか否か示すマスク値を保持する割込マスクレジスタを備えてもよい。割込要求は、アドレス解決ルーチンの少なくとも一部によって抑止されてもよい。また、アドレス解決ルーチンは、第１または第２プロセッサにいずれがジャンプ命令を実行しているかに応じた第１または第２のベースレジスタのいずれかの値と、ジャンプ命令のアドレスに基づいて、リターンオフセットを計算するための命令を更に備えてもよい。たとえば、このシステムは、リターン命令に応じて、ジャンプ命令の後に実行されるべき命令の物理アドレスを特定するために実行される、リターンアドレスを解決するためにルーチンを含み、このルーチンは、第１または第２プロセッサのいずれがリターン命令を実行しているかに応じた第１または第２ベースアドレスレジスタのいずれかの値と、リターンオフセットに基づいてその物理アドレスを特定してもよい。
【００２８】
この発明のその他の特徴や優位性は、図を含めた記載から当業者に明らかとなるであろう。
【００２９】
なお、説明のため、図面によって好適な形態を示すが、この発明が示されている内容に厳密に限定されるものでないことは当業者には理解されるところである。
【発明を実施するための最良の形態】
【００３０】
図１は、本実施例におけるマルチプロセッサシステム１００を示す。図面における符号は部材（elements）を指し示している。マルチプロセッサシステム１００は、ＤＲＡＭのような共有メモリ１０６とバス１０８を介して連結されている複数の（数は任意である）プロセッサ１０２を含む。共有ＤＲＡＭメモリ１０６は、必須構成ではない（そのため、図では点線で示している）。実際、１以上のプロセッシングユニット１０２は、それぞれ専用のメモリ（図示せず）を使うことにより、共有メモリ１０６を不要としてもよい。
【００３１】
プロセッサ群１０２のうちの１つ、たとえば、プロセッシングユニット１０２Ａはメインプロセッシングユニットであってもよい。プロセッシングユニット１０２Ｂ、１０２Ｃ、１０２Ｄなどのような残りのプロセッシングユニット１０２は、サブプロセッシングユニット（ＳＰＵ）であってよい。これらのプロセッシングユニット１０２は、既知のコンピュータアーキテクチャにて実装されればよい。全てのプロセッシングユニット１０２が同じアーキテクチャで実装される必要はない。実際には、これらのプロセッシングユニット１０２は、異種または同種のアーキテクチャにより構成されている。制御に際し、サブプロセッシングユニット１０２Ｂ〜Ｄがデータやアプリケーションを並列かつ独立して処理できるように、メインプロセッシングユニット１０２Ａは、サブプロセッシングユニット１０２Ｂ〜Ｄによるデータやアプリケーションの処理をスケジューリングして協調させることが望ましい。
【００３２】
メインプロセッシングユニット１０２Ａは、同じチップ、同じパッケージ、同じ回路ボード、同じ製品などのように、サブプロセッシングユニット１０２Ｂ〜Ｄに対して「ローカルに」配置されてもよい。一方、メインプロセッシングユニット１０２Ａは、バスやインターネットのような通信ネットワークなどを介した異なる製品において、サブプロセッシングユニット１０２Ｂ〜Ｄに対して「リモートに」配置されてもよい。同様に、サブプロセッシングユニット１０２Ｂ〜Ｄも、互いにローカルまたはリモートに位置してもよい。
【００３３】
サブプロセッシングユニット１０２Ｂ〜Ｄは、ハードプロセッサエラー（Hard Processor Error）を生じる可能性がある。ここでいうハードプロセッサエラーとは、たとえば、ＯＳ（Operating System）のシステムエラーやカーネルエラーなどを伴わない回復可能なエラーである。メインプロセッシングユニット１０２Ａは、（エラーの発生より前に）最初からサブプロセッシングユニット１０２Ｂ〜Ｄにより実行されてきたプロセッサタスクを再実行させることなく、プロセッサタスクの実行を継続させる管理機能を持つことが望ましい。メインプロセッシングユニット１０２Ａの管理機能は、１以上のサブプロセッシングユニット１０２Ｂ〜Ｄにおいて回復可能なエラーが発生したときにも、リアルタイム（かつ／または、マルチメディア）処理という目的が果たされるように制御されることが好ましい。
【００３４】
管理機能としては、更に、各サブプロセッシングユニット１０２Ｂ〜Ｄに割り当てられるプロセッサタスク（かつ／または、それらのタスクによるプロセッサの処理負荷）をモニタする機能がある。メインプロセッシングユニット１０２Ａは、サブプロセッシングユニットのいずれかにおける処理上のエラーも検出する。検出されると、そのサブプロセッシングユニットに割り当てられていたプロセッサタスクは１以上のサブプロセッシングユニットに再配分される。この再配分は、プロセッサタスクを実行しているプロセッサユニットの処理負荷と、サブプロセッシングユニット群における処理負荷とに基づいてなされる。本発明のこれらの点を含めた詳細は、更に後述する。
【００３５】
好適なコンピュータアーキテクチャとして、マルチプロセッシングコンピュータシステムの全てのプロセッサは、共通の計算モジュール（すなわち、セル（Cell））から構成される。この共通の計算モジュールは、一貫して整合した構造をもつ。同一の命令セットアーキテクチャを使うことが好ましい。マルチプロセッシングコンピュータシステムは、１以上のクライアント端末、サーバ、ＰＣ、携帯型コンピュータ、ゲーム機、ＰＤＡ、セットトップボックス、特定機能コンピュータ（Appliance）、デジタルテレビ、その他コンピュータプロセッサを使うデバイスによって構成される。
【００３６】
プロセッサエレメント（ＰＥ）は、基本となる処理モジュールである。図２は、これについて参照されるべきものである。すなわち、図２は、基本的な処理モジュールであるプロセッサエレメント（ＰＥ）２００のブロック図である。同図に示すように、ＰＥ２００は、Ｉ／Ｏインタフェース２０２、プロセッシングユニット（ＰＵ）２０４、ダイレクトメモリアクセスコントローラ（ＤＭＡＣ）２０６、複数のサブプロセッシングユニット２０８、すなわち、サブプロセッシングユニット２０８Ａ、サブプロセッシングユニット２０８Ｂ、サブプロセッシングユニット２０８Ｃ、サブプロセッシングユニット２０８Ｄを含む。ローカルの（すなわち、内部的な）ＰＥバス２１２は、データやアプリケーションをＰＵ２０４、サブプロセッシングユニット２０８、ＤＭＡＣ２０６、メモリインタフェース２１０間で伝送する。ローカルＰＥバス２１２は、従来型の構造をもつ。たとえば、パケット交換ネットワークとして実装できる。パケット交換ネットワークとして実装する場合、更なるハードウェアが必要となるが、利用可能な帯域幅を広げることができる。
【００３７】
ＰＥ２００は、デジタル論理を実装するためのさまざまなやり方で構成できる。ＰＥ２００は、シリコン基盤上にＣＭＯＳ型の単一集積回路として構成されることが好ましい。一方、基盤の材質は、ガリウム砒素、ガリウム−アルミニウム−砒素、さまざまな不純物を加えたその他いわゆるＩＩＩ−Ｂ混合物を含む。ＰＥ２００は、超伝導素子、たとえば、高速単一磁束量子（ＲＳＦＱ：Rapid Single-Flux-Quantum）論理を使って実装されてもよい。
【００３８】
ＰＥ２００は、広帯域のメモリ通信線２１６を介してＤＲＡＭ２１４と緊密に連携する。ＤＲＡＭ２１４は、ＰＥ２００のメインメモリとして機能する。ＤＲＡＭ２１４は、ダイナミックランダムアクセスメモリであることが好ましいが、ＤＲＡＭ２１４は、たとえば、ＳＲＡＭ（Static Randam Access Memory）、ＭＲＡＭ（Magnetic Randam Access Memory）、光メモリ（Optical Memory）、ホログラフィックメモリ（Holographic Memory）などの他の手段によって実装されてもよい。ＤＭＡＣ２０６とメモリインタフェース２１０は、ＰＥ２００のＤＲＡＭ２１４、サブプロセッシングユニット２０８、ＰＵ２０４の間のデータ伝送を実現する。ＤＭＡＣ２０６、および／または、メモリインタフェース２１０は、サブプロセッシングユニット２０８とＰＵ２０４に対して、一体に、あるいは、分離して配置されてもよい。実際には、図示するような分離構成ではなくて、ＤＭＡＣ２０６の機能、および／または、メモリインタフェース２１０の機能は、１以上の（好ましくは全ての）サブプロセッシングユニット２０８、ＰＵ２０４と一体として構成される。
【００３９】
ＰＵ２０４は、たとえば、データやアプリケーションを単体でも処理できる標準的なプロセッサである。制御時において、ＰＵ２０４は、サブプロセッシングユニット群によるデータやアプリケーションの処理をスケジューリングすることにより協調させる。サブプロセッシングユニットは、１つの命令で複数のデータを扱うＳＩＭＤ（Single Instruction/Multiple Data）型のプロセッサであることが好ましい。ＰＵ２０４の制御の下、サブプロセッシングユニットは、これらのデータやアプリケーションを並列かつ独立して処理する。ＤＭＡＣ２０６は、共有ＤＲＡＭ２１４に保持されているデータやアプリケーションに対するＰＵ２０４やサブプロセッシングユニット２０８のアクセスを制御する。ＰＵ２０４は、サブプロセッシングユニット群２０８の１つとして実装される。その上で、サブプロセッシングユニット群２０８によるデータやアプリケーションの処理をスケジューリングして協調させるメインプロセッシングユニットの役割を果たす。
【００４０】
このモジュール構造によれば、特定のコンピュータシステムによって使用されるＰＥ２００の数は、システムに要求される処理能力次第である。たとえば、サーバは、４つのＰＥ２００を使用する。ワークステーションは２つ、ＰＤＡは１つのＰＥ２００を使用する。ＰＥ２００において、あるソフトウェアセルの処理を割り当てられるサブプロセッシングユニットの数は、そのセルにおけるプログラムやデータの複雑さや規模による。別の構成として、ＰＥは、複数のＰＵを含んでもよい。また、各ＰＵは、１以上のＳＰＵを含んでもよい。
【００４１】
図３は、サブプロセッシングユニット２０８の好適な構成と機能を示す図である。サブプロセッシングユニット２０８は、ローカルメモリ２５０、レジスタ２５２、１以上の浮動小数点演算ユニット２５４、１以上の整数演算ユニット２５６を含む。各サブプロセッシングユニット２０８は、それぞれ固有のローカルメモリ２５０を持つことが望ましい。要求される処理能力に応じて、浮動小数点演算ユニット２５４や整数演算ユニット２５６の数が増減されればよい。好適には、ローカルメモリ２５０は、２５６キロバイト分のストレージであり、レジスタ２５２の容量は１２８×１２８ビットである。浮動小数点演算ユニット２５４は、１秒あたり３２０億回の浮動小数点演算を実行できる速度（３２ＧＦＬＯＰＳ）で制御され、整数演算ユニット２５６は、１秒当たり３２０億回の演算が実行できる速度（３２ＧＯＰＳ）で制御される。
【００４２】
ローカルメモリ２５０は、キャッシュメモリであってもよいし、なくてもよい。ローカルメモリ２５０は、ＳＲＡＭとして形成されることが好ましい。ＰＵ２０４は、ＰＵ２０４を契機とするダイレクトメモリアクセスに対するキャッシュコヒーレンシ維持をサポートできるとよい。キャッシュコヒーレンシ維持のサポートは、サブプロセッシングユニット２０８を契機とするダイレクトメモリアクセスや、外部のデバイス、から／へ、のアクセスについては特に必要ではない。
【００４３】
サブプロセッシングユニット２０８は、更に、サブプロセッシングユニット２０８間でデータやアプリケーションを送受するためのバスインタフェース（Ｉ／Ｆ）２５８を含む。好適には、バスインタフェース２５８はＤＭＡＣ２０６と連結される。ＤＭＡＣ２０６は、図示されているようにサブプロセッシングユニット２０８内に配置されてもよいし、図２で示したように外部の配置とされてもよい。そのことを示すために、ＤＭＡＣ２０６は同図では点線で囲われている。バス２６８Ａと２６８Ｂは、それぞれ、バスインタフェース２５８とローカルメモリ２５０をＤＭＡＣ２０６に連結する。バス２６８Ａと２６８Ｂは、２５６ビットの帯域幅を持つことが望ましい。
【００４４】
サブプロセッシングユニット２０８は、更に内部バス２６０、２６２および２６４を含む。好ましくは、バス２６０は２５６ビットの帯域幅であり、ローカルメモリ２５０とレジスタ２５２の間の通信を担当する。バス２６２と２６４は、それぞれレジスタ２５２と浮動小数点演算ユニット２５４、レジスタ２５２と整数演算ユニット２５６の間の通信を担当する。好ましくは、バス２６４と２６２の帯域幅は、レジスタ２５２から浮動小数点演算ユニット２５４や整数演算ユニット２５６に対しては３８４ビットであり、浮動小数点演算ユニット２５４や整数演算ユニット２５６からレジスタ２５２に対するバス２６４と２６２の帯域幅は１２８ビットである。浮動小数点演算ユニット２５４や整数演算ユニット２５６からレジスタ２５２に対する帯域幅よりも、レジスタ２５２からこれらのユニットに対するバスの帯域幅を大きくとるのは、処理中にレジスタ２５２からより多くのデータが流れ出やすくするためにである。各演算に必要とされる最大データサイズは３ワードである。各演算の結果を格納するのに必要なデータサイズは、通常は１ワードである。
【００４５】
この発明と関連して使用されるマルチプロセッサシステムに関する追加情報は、米国特許出願６５２６４９１号に記載されている。この出願では、マルチプロセッサシステムに関するその他の内容が具体的に述べられている。
【００４６】
タスクがプロセッサにより実行されるとき、タスクは通常、ローカルメモリ２５０にロードされる。タスクは、命令やデータの保持も含めたさまざまな目的でメモリを使用する。このような特定のタスクに関連する命令やデータは、図４に示すような４つのカテゴリに分類される。なお、すべてのタスクが４つのカテゴリに関連するわけではなく、タスクによるメモリ使用が必ず４つのカテゴリのいずれかに分類されるというわけでもない。説明を簡単にするためにメモリにおける連続かつ隣接するエリアが使用されるものとして、カテゴリが図示されているが、メモリにおいて占有される領域は必ずしも連続しなくともよい。メモリにおける特定のエリアは、２つのカテゴリに分類される。たとえば、命令群は、ヒープ領域にスタックを生成する。図４は、タスクに関するメモリ管理の可能かつ典型的な単なる一例を示しているにすぎない。カテゴリに関する記載は、本発明の範囲をなんら制限するものではない。
【００４７】
第１カテゴリ６１０は、タスクに関連して実行される命令群を含む。これらの命令群は、数式演算やメモリにおけるデータ移動などの各種制御を実行するための命令を含むグループである。説明のために、この「プログラムカテゴリ」は、１０００〜１９９９までのメモリアドレスを占有するとする。
【００４８】
一例として、これらの命令の１つは、分岐ジャンプスタブ（Branch-Jump-Stub）命令７００である。ジャンプ命令でなければ、プログラム命令群６１０は通常、シーケンシャルに実行される。分岐、または、ジャンプ命令は、非シーケンシャルにて、プロセッサに命令を実行させる。同様に、分岐ジャンプスタブ命令７００は、プロセッサにより実行されるべき次の命令や、命令セット（以下、「ターゲットルーチン」とよぶ）を特定するための情報を含んでいる。分岐ジャンプスタブ命令は、条件付き命令であってもいいし、条件付き命令でなくてもよい。分岐ジャンプスタブ命令は、実行対象となる次の命令の物理アドレス自体を特定はしない。代わりに、分岐ジャンプスタブ命令は、ターゲットオフセット値となるパラメータを特定する。ターゲットオフセットは、次に実行される命令の物理アドレスを特定するために、別の命令において使用される。分岐処理とオフセット値の計算は、ＳＰＵによって実行されることが好ましい。特に、必須ではないが整数演算ユニットによって実行されることが望ましい。
【００４９】
分岐ジャンプスタブ命令がターゲットとする物理アドレスは、物理アドレス解決のためのレジスタ２５２のうちの一つに保持されている値にターゲットオフセット値を加算することによって算出されてもよい。図５に示すグローバルベースレジスタ８００が、そのような目的で使用されてもよい。グローバルアドレス値は、命令や、静的データ、動的データを含めたタスクイメージの最小物理アドレス値であってもよい。この場合、グローバルベースレジスタ８００は、命令群６１０や以下に示すその関連データを含めたタスクイメージの最小物理アドレスであるグローバルベースアドレス値１０００を図示のように保持してもよい。
【００５０】
第２カテゴリ６２０は、静的データ（Statically Allocated Data）を含む。説明のため、静的データのカテゴリは、２０００〜２９９９までのアドレスのメモリを占有するとする。静的データとは、一般的には、命令群６１０によって使用され、実行前に既知のデータである。
【００５１】
反対に、ヒープ６３０は、動的データ（Dynamically Allocated Data）を含む。メモリの一部には、タスクの実行により生成されるデータが割り当てられる。説明のため、ヒープは、３０００〜３９９９までのアドレスのメモリを占有するとする。
【００５２】
別のカテゴリはスタック６４０である。ヒープ６３０と同様、スタックもタスク実行時に生成される情報を格納するために使用される。ただし、スタックは、主として、サブルーチンの呼び出しに関連したデータを保持するために使用される。スタックは、関数に渡されるパラメータ値やリターン値を保持するが、同様に他のデータも保持することができる。説明のため、１以上のスタックは、４０００〜４９９９までのアドレスのメモリを占有するとする。
【００５３】
図５に示すように、１以上のレジスタ２５２が、本発明の一実施例に関連して使用される。典型的には、ジャンプアドレスレジスタは、ジャンプ先の命令の絶対的または相対的アドレスを格納するために使用される。しかし、このシステムにおいては、ジャンプレジスタ８１０は、ターゲットオフセット値を保持するために使用される。リターンアドレスレジスタ８３０は、分岐ジャンプスタブ命令から戻ったあとに実行を再開すべき位置の物理アドレスを特定するための情報を格納する。割込マスクレジスタ８２０は、割込マスク値を格納する。割込マスク値は、ＳＰＵ２０８がタスクイメージ６８０を別のＳＰＵに、すなわち、メモリ２５０内の別位置に移動させるための割込要求を処理できる状態にあるかを示す。グローバルベースアドレスレジスタ８００の目的については、更に、以下に示す。レジスタ群はレジスタバンク２５２に属するとして示したが、その値は、ＳＰＵや、命令を実行したりデータアクセスするその他のプロセッサによってアクセス可能なメモリ位置に保持されてもよい。
【００５４】
本実施例に関連したさまざまな制御について説明する。まず、分岐ジャンプスタブ命令７００の実行から説明する。その制御は、図７等に関連して図示される。図４の例に基づいて説明するならば、分岐ジャンプスタブ命令７００がメモリ２５０のアドレス１４００にロードされたとき、ＳＰＵは、命令に関連する一連のステップを実行する。そのステップの内容は、ＲＯＭやローカルメモリ２５０、プロセッサによりアクセス可能なその他のメモリのスタブルーチンの中に格納される。一方、これらのステップのいくつかは、ＲＯＭに保持され、リマインダがローカルメモリ２５０に格納されてもよい。たとえば、（分岐ジャンプスタブ命令７００やリターンジャンプスタブ命令７２０のような）命令が、スタブ、すなわち、ベースアドレスに関連するオフセット調整ルーチン（分岐ジャンプスタブルーチン６７０やリターンジャンプスタブルーチン６７１のようなものであるが、後述する）へのジャンプを実行したときに、命令はタスクコードに符号化される。一方、このルーチンはそのタスクコードとは独立したサブルーチンとして符号化されてもよい。後述の例は説明のためのものであり、本発明の範囲をこれに限る趣旨ではない。
【００５５】
プロセッサが分岐ジャンプスタブ命令を実行するとき、最初にジャンプアドレスレジスタ８１０にターゲットオフセット値６００が格納される。次に、割込の発生に応じてタスクイメージ６８０を別のＳＰＵ２０８、すなわち別のメモリ位置に移動させないように割込マスクレジスタ８２０に値がセットされる。（もし、「マスク中」に割込が発生したときには、少なくともマスクがはずされるまで、プロセッサは割込を受け付けない。）
【００５６】
それから、プロセッサは、分岐ジャンプスタブ命令がジャンプ先とすべきターゲットルーチンではなく、分岐ジャンプスタブ命令に関連する追加的なステップを提供する命令セットに処理をジャンプさせる。図４に示すように、これらの命令は分岐ジャンプスタブルーチン６７０として、ローカルメモリ２５０に格納される。分岐ジャンプスタブルーチンは、ローカルメモリ２５０のアドレス５００のように常に同一の固定物理アドレスに格納されることが好ましい。
【００５７】
分岐ジャンプスタブルーチン６７０は、分岐ジャンプスタブ命令によってターゲットとされるルーチンから戻るときに使われるリターンオフセットを計算する。本実施例において、リターンオフセットはグローバルベースアドレス値と、分岐ジャンプスタブ命令のアドレスに続く命令に基づいて計算される。たとえば、リターンオフセットは、以下の式によて計算されてもよい。
リターンオフセット＝（分岐ジャンプスタブ命令のアドレス）−（グローバルベースアドレス値）＋１
図４に示すサンプル値を使うと、リターンオフセットは、１４００−１０００＋１により４０１となる。リターンオフセット値は、リターンアドレスレジスタ８３０に保持される。
【００５８】
後に説明するが、リターンオフセット値がリターンアドレスレジスタ８３０に一旦保持されると、タスクイメージ６８０を安全に別のメモリ位置に移動できる。したがって、割込マスクレジスタ８３０の値は、そのような割込に対するマスクがはずされたことを示す値に変換される。
【００５９】
割込マスクがはずされると、ターゲットオフセットとグローバルベースアドレス値に基づいてアドレスを計算し、それをレジスタに格納し、レジスタに格納されたアドレスにジャンプすることにより、分岐ジャンプスタブルーチンは、プロセッサの処理をターゲットルーチン７１０にジャンプさせる。ターゲットルーチンの物理的なターゲットアドレスは、好ましくは、グローバルベースアドレス値にターゲットオフセットを加算することにより計算されるとよい。したがって、この場合、分岐ジャンプスタブルーチンにおける最後の命令は、この物理的なターゲットアドレスを計算して、そのアドレスにある命令にジャンプする命令である。図４のサンプルデータに基づくと、ターゲットルーチン７１０の物理アドレスは、６００＋１０００により１６００として特定される。それから、ターゲットルーチン７１０の命令が実行される。
【００６０】
ジャンプアドレスレジスタにターゲットオフセットを格納し、割込マスクをセットし、分岐スタブルーチンにジャンプする各ステップは、従来の典型的な分岐命令を置き換えたり、補ったりするものであるといえる。ＳＰＵは、分岐ジャンプスタブ命令を取得するとこれらのステップを自動的に実行する。別例として、各ステップは個々にタスクコードに符号化されてもよい。
【００６１】
ターゲットルーチンがサブルーチンであれば、ターゲットルーチンにおける最後の命令は、リターンジャンプスタブ命令７２０であるとよい。リターンジャンプスタブ命令に関連する制御については、図８に関連して説明する。分岐ジャンプスタブ命令と同様にリターンジャンプスタブ命令７２０は、実行されるべき次の命令の物理アドレスを計算するルーチン６７１にプロセッサの処理をジャンプさせる。分岐ジャンプスタブルーチン６７０はターゲットルーチンの物理アドレスを計算するが、リターンジャンプスタブルーチン６７１は、ターゲットルーチン７１０の実行が完了しているのでリターン先の命令の物理アドレスを計算する。リターンジャンプスタブ命令は、プロセッサがターゲットルーチンにジャンプしたときに実行していたタスクにおけるリターン先を示すようななんのパラメータも受け付けないことが好ましい。反対に、リターンジャンプスタブ命令は、追加的にアドレスに関する情報を提供するためのパラメータを含んでもよい。
【００６２】
リターンジャンプスタブルーチン６７１へのジャンプ前において、リターンジャンプスタブ命令７２０に出くわすと、プロセッサはタスクイメージ６８０が別のメモリ位置に移動されないように割込マスクをセットする。リターンジャンプスタブルーチンは、メモリ２５０に保持されるものとして図４に示されているが、分岐ジャンプスタブルーチンのように、リターンジャンプスタブルーチンも、その全部または一部が、ＲＯＭや、ＳＰＵ２８０がメモリ２５０における追加的な命令にアクセスすることなくリターンジャンプスタブルーチンを実行できるような他のメモリに格納されてもよい。
【００６３】
割込の有効無効の切り替えは、分岐ジャンプスタブ命令やリターンジャンプスタブ命令のような分岐命令のオプションとして実行されることが好ましい。そのためには、割込マスクのセットや除去、分岐といった処理はコンテキストスイッチ（Context Switch）からレジュームするためのアトミック命令（Atomic Instruction）としてオプショナルに提供されるとよい。この場合、マスクや割込に関連する処理は、ジャンプ処理と同時、または、その処理前後同時的に実行される。マスク除去処理は次の命令（レジュームに際して実行される命令）が実行される前に実行されることが好ましい。更に、割込マスクは分岐呼び出しの前に実行することもできる。
【００６４】
本実施例として、割込マスク処理やリターンスタブルーチンにジャンプするステップは、通常のリターン命令に代えて、あるいは、つけ加えた形で実行されてもよい。ＳＰＵはリターンジャンプスタブ命令を取得すると、これらのステップを自動的に実行してもよい。別例として、各ステップは個々にタスクコードに符号化されてもよい。
【００６５】
リターンジャンプスタブルーチン６７０は、物理的なリターンアドレスを計算する。この物理的なリターンアドレスは、リターン命令に関連する分岐ジャンプスタブ命令の後に実行されるべき命令を特定するものであることが好ましい。本実施例においては、リターンジャンプスタブルーチンは、プロセッサに次式によって物理的なリターンアドレスを計算させる。
物理的なリターンアドレス＝リターンオフセット＋グローバルベースアドレス値
図４に示したサンプル値を用いると、物理的なリターンアドレスは４０１＋１０００により１４０１となる。
【００６６】
いったん、物理的なリターンアドレスが計算されると、タスクイメージ６８０を他のメモリ位置に動かせるように割込マスクが除去される。タスク処理は、好ましくは割込マスクの除去と同時に、その物理アドレスにおける命令にジャンプする。
【００６７】
静的データ６２０は、オフセットの使用によって同様にアクセスされる。たとえば、静的データ６２０は、”Move Ax,Offset”といった形のデータ移動命令によってアクセスされる。ここで、Axは、データが移動されるべきレジスタを示す。そして、Offsetは、データの物理アドレスを特定するためのオフセット値を示す。命令群のときのように、静的データ６２０にアクセスするためのオフセットは、物理アドレスを特定するためにグローバルベースアドレス値に加算されてもよい。ＳＰＵの１以上のロード命令やストア命令は、レジスタの値にオフセットパラメータの加算することによりアドレッシングを実行してもよい。このような方法は、多くのＲＩＳＣアーキテクチャにおいて知られている。
【００６８】
ヒープ６３０は配列を含み、ポインタによってアクセスされる。本実施例において、ヒープ６３０に関連する配列やポインタは、オフセットを使用してアクセスされる。実際には、ヒープそのものにおけるポインタも含め、すべてのポインタは、ポインタオフセットとして保持される。図４に含まれるサンプル情報によれば、ヒープ６３０は、さまざまなデータオブジェクト６３５−６３７を含んでいる。たとえば、レース場の車に関する、色やレース場における位置といった情報である。タスク命令群６１０は、まず、ポインタを含む配列６３１に対してアクセスすることにより、車の情報にアクセスする。各ポインタは、データオブジェクトの一つを指し示している。
【００６９】
ヒープ６３０の配列６３１は、配列要素のポジションに加えて上述したようなオフセットの使用によってアクセスされる。本実施例においては、配列要素の物理アドレスは、グローバルベースアドレスレジスタの値を配列のポジションを指し示す命令６１０のオフセットに加算し、更に、目的の配列要素を加算することにより特定される。図４のサンプルデータの場合、ＭＯＶＥ命令７０５は、配列６３１の第２要素６３２にアクセスしている。このとき、ＭＯＶＥ命令７０５は、グローバルアドレス値１０００を、ＭＯＶＥ命令に格納されるオフセット値２００５に加算し、目的の配列要素２を加算することによって、物理アドレス３００７を特定している。この場合、この情報は、レジスタおよびインデックス値およびそれらの合計を取得するアドレッシング命令によってアクセスされることになる。より複雑なアドレッシングをする場合には、（たとえば、配列や構造体などの）アドレスを計算するために更なる処理が必要となる。
【００７０】
配列６３１からポインタが引き出されると、そのポインタによってヒープ６３０のデータにアクセスできるようになる。ただし、ポインタは物理アドレスを指し示すのではない。むしろ、ヒープ６３０における、あるいは、ヒープ６３０に対する各ポインタは、グローバルベースアドレス値に基づくオフセット値として保持されることが望ましい。たとえば、ポインタ６３２がヒープ６３０のデータにアクセスするために使用されるときには、ポインタのターゲットとなる物理アドレスは、ポインタに保持される値２２００をグローバルベースアドレス値１０００に加算することにより計算される。これにより、配列６３１における２番目の車についての物理アドレス３２００が特定される。
【００７１】
同様に、スタック６４０における、または、スタック６４０に対するポインタも、オフセットとして保持される。たとえば、スタックは車のデータ６３５−６３７を示すポインタを含んでもよい。このようなポインタもオフセットとして保持される。
【００７２】
全てのカテゴリのデータが隣接するとすれば、必要なグローバルオフセットレジスタは１つである。一方、メモリ管理特性を改善するために別々のセクションにおけるタスクイメージをそれぞれのセクションのためのグローバルベースアドレスによって、保持したりロードすることもできる。たとえば、ヒープが異なるベースアドレスによって管理される場合、ヒープデータに対するポインタを管理するためにヒープアドレスレジスタが提供されてもよい。一方、多くのベースアドレスが存在する場合においてより複雑なアクセス処理するための管理プログラムが提供されてもよい。
【００７３】
本実施例においては、タスクイメージ内におけるアドレスポインタを一切変更することなく、タスクの実行中においてその動的データも含めたタスクイメージの全てを容易に移動させることができる。図６は、ＳＰＵ２８０ＡからＳＰＵ２８０Ｂにタスクイメージを移動させる様子を示している。全てのタスクイメージのアドレスは、グローバルベースアドレス値に対するオフセットとして保持されるので、命令６１０、静的に配されたデータ６２０、ヒープ６３０またはスタック６４０に含まれるアドレスに関する情報を変更する必要がない。タスクイメージデータは、どのような他のアドレス空間に対してもコピーできる。
【００７４】
図６に示す例によれば、命令群やデータは、ＳＰＵ２８０Ａのアドレス空間１０００〜１３９９から、ＳＰＵ２８０Ｂのアドレス空間５０００〜５３９９にコピーされている。ここでは、ＳＰＵ２８０ＡのアドレスＸにあるものがＳＰＵ２８０ＢのアドレスＸ＋４０００に移されている。タスクイメージデータに含まれる何らの情報も変化させる必要がない。
【００７５】
タスクの命令群やデータが移動される前後において、移動先となるＳＰＵ２８のグローバルベースアドレス値は、新しく移動されるタスクイメージの最小アドレスとなる様にセットされる。たとえば、ＳＰＵ２８０Ｂのグローバルベースレジスタ８００の値は、５０００に変更される。
【００７６】
タスクイメージが移動されるとき、ジャンプアドレスレジスタとリターンアドレスレジスタの値もＳＰＵ２８０ＡからＳＰＵ２８０Ｂに移動されてもよい。このような移動方法によれば、たとえタスクイメージの移動時において、タスクがターゲットルーチンから、または、ターゲットルーチンへジャンプするとしても、データ変化なしにタスクイメージを移動させることができる。
【００７７】
専用のジャンプアドレスレジスタを提供するアーキテクチャは必要とされなくてもよい。本実施例におけるシステムは、ジャンプ先のさまざまなアドレスを保持するために一般的なレジスタを用いることによって実装できる。
【００７８】
したがって、タスクが実行中であっても、タスクやデータに含まれるアドレス情報を変化させることなく、すべての命令やデータをシームレスに、別のプロセッサに移動できる。プログラムが制御を再開するときに、唯一必要な変化はたった一つのレジスタのグローバルベース値を変更することである。このとき、ジャンプ及びリターンアドレスレジスタの値も変更されてもよい。全てのレジスタの値はプリエンプト時に保持されるプロセッサ状態（Processor Context）の一部であってもよい。
【００７９】
この発明は、仮想メモリを取り扱えないハードウェアやプロセッサにおいても実現可能である。これは、特に、ＳＰＵが小さなローカルメモリを持ち、ソフトウェアによるメモリ管理を要求するからである。
【００８０】
例示した制御は、先述の順番で実行される必要はない。実行順序については柔軟に考えられる。たとえば、リターンオフセットは、ターゲットルーチンの物理アドレスが計算される前後いずれにおいても計算することができる。
【００８１】
たとえば、「含む」、「保有する」、「のような」、「たとえば」、「からなる」といったような言葉の使用は、「それに限らず含む」という意味であり、反対の意味にならない限り広く解釈し、一般的な意味に解してはならない。これらの単語に続く用語についても同様である。複数のものという意味は少なくとも二つのものであることを意味し、一つのものというものはそういった複数のものとなる可能性を排除するものである。
【００８２】
先述の様々な態様の多くは、相互に排他的なものではなく、特有の効果を発揮するために様々な組み合わせが可能である。先述したような各特徴点のこういった、あるいは、それ以外のバリエーションやコンビネーションは請求項の範囲からみた発明から離れることなく実現できる。実施例についての記載は、請求項の範囲によって特定される本発明の範囲というよりも、例示として解釈されるべきである。
【図面の簡単な説明】
【００８３】
【図１】本実施例において、マルチプロセッサシステムの構造を示す図である。
【図２】本実施例において、プロセッサエレメント（ＰＥ）の構造を示す図である。
【図３】本実施例において、サブプロセッシングユニット（ＳＰＵ）の構造を示す図である。
【図４】本実施例において、メモリの値のサンプルを示す模式図である。
【図５】本実施例において、レジスタの値を示す模式図である。
【図６】本実施例において、異なるＳＰＵにタスクイメージを移動する態様を説明するための模式図である。
【図７】本実施例において、分岐ジャンプスタブ命令の処理過程を示すフローチャートである。
【図８】本実施例におけて、リターンジャンプスタブ命令の処理過程を示すフローチャートである。
【図１】
2005322232.tif 000003
【図２】
2005322232.tif 000004
【図３】
2005322232.tif 000005
【図４】
2005322232.tif 000006
【図５】
2005322232.tif 000007
【図６】
2005322232.tif 000008
【図７】
2005322232.tif 000009
【図８】
2005322232.tif 000010