(57)【要約】【課題】  マルチプロセッサシステムにおけるプロセッサタスクの管理を目的とする方法および装置を提供する。【解決手段】  本システムは、マルチプロセッサシステムを構成する複数のサブ処理ユニットによってアクセス可能な共有メモリにプロセッサタスクを格納するよう動作する。そして、サブ処理ユニットは、プロセッサタスクの優先度に基づいて、いずれのプロセッサタスクを共有メモリからコピーし実行すべきかを判定する。【選択図】  図２
2005235228.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおけるプロセッサタスクを管理する方法であって、
前記マルチプロセッサシステムを構成する複数の処理ユニットによってアクセス可能な共有メモリに前記プロセッサタスクを格納し、
前記処理ユニットが、前記プロセッサタスクの優先度に基づいて、いずれのプロセッサタスクを実行するかを判定することを特徴とするプロセッサタスクの管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにおけるプロセッサのタスク管理方法および装置に関し、より詳細には、実質的に自己支配的に（self-governing）マルチプロセッサシステムのサブ処理ユニット間でプロセッサタスクをスケジュールして実行する方法および装置に関する。
【背景技術】
【０００２】
リアルタイムでマルチメディアのアプリケーションは、ますます重要になっている。これらのアプリケーションは、一秒当たり何千メガビットのデータといった極めて速い処理速度を必要とする。単一の処理ユニットでも高速の処理速度を実現できるが、一般にマルチプロセッサアーキテクチャの処理速度と一致することはできない。実際、マルチプロセッサシステムにおいては、複数のサブプロセッサが並行に（または、少なくとも協調して）動作して所望の処理結果を得ることができる。
【０００３】
マルチプロセッシング技術を使用することができるコンピュータおよびコンピューティングデバイスのタイプは、広範囲に及ぶ。コンピューティングデバイスには、パーソナルコンピュータ（ＰＣ）やサーバの他、携帯電話、モバイルコンピュータ、個人携帯情報機器（ＰＤＡ）、セットトップボックス、デジタルテレビのほか多数が含まれる。
【０００４】
リアルタイムでマルチメディアのソフトウェアアプリケーションは、処理命令や処理データなどの処理コードから構成される。処理命令および／または処理データの少なくとも一部の集合を、プロセッサタスクと呼ぶこともできる。あるプロセッサタスク内のプログラム文を順番に実行することもできるし、別のプロセッサタスクをマルチプロセッサシステム内の異なるプロセッサで並行して実行することもできる。このように、ソフトウェアアプリケーションは、マルチプロセッサシステムによって実行されるプロセッサタスクを含むと考えることができる。
【０００５】
マルチプロセッサシステムの設計懸念は、システムのいずれのサブ処理ユニットにいずれのプロセッサタスクを実行させるかを管理する方法である。マルチプロセッサシステムのなかには、いずれのサブ処理ユニットのプロセッサタスクが実行されるかを、プロセッサタスクが指定するものがある。この方法の欠点は、サブ処理ユニットの間でのプロセッサタスクの配分をプログラマが最適化することができないという点である。例えば、ひとつまたは複数のプロセッサタスクが、同時に同一のサブ処理ユニットを指定することがあり得る。これは、指定されたサブ処理ユニットが利用可能になるまで、プロセッサタスクの一部が保留されることを意味し、そのためプロセッサタスクの実行が遅延される。残念なことに、これはプロセッサタスクの実行について予測不可能なレイテンシを引き起こす。
【０００６】
他のシステムでは、管理要素がサブ処理ユニットと通信し、ユニット間のプロセッサタスクをスケジュールすることを検討する。したがって、このような通信を容易にするように通信プロトコルが実施されていなければならない。残念なことに、通信プロトコルは、管理要素とサブ処理ユニットの間のメッセージ遅延を引き起こすことが多い。実際、この種のプロトコルは、メモリマッピングされたレジスタを使用して、メモリマッピングされたＩ／Ｏ空間の使用が必要となり、これは一般的に低速である。さらに、システムのプロセッサ自身であってもよい管理要素が多数の分割領域を使用し、これは変更にかなりの時間（例えば、７００マイクロ秒）を必要としうる。これらの特徴もまた、プロセッサタスクの実行を遅延させて予測不可能なレイテンシを引き起こす。このように、マルチプロセッサシステムのプロセッサ全体のスループットと効率が犠牲になり、システムのユーザのリアルタイムおよび／またはマルチメディア体験に重大な影響を与えうる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、当技術分野において、ハードプロセッサのエラーの悪影響を低減する効率的なマルチプロセッシングを達成する新規な方法および装置が必要とされている。
【課題を解決するための手段】
【０００８】
本発明のひとつまたは複数の態様によると、マルチプロセッサシステムのプロセッサタスクの管理方法は、マルチプロセッサシステムの複数のサブ処理ユニットによってアクセス可能な共有メモリにプロセッサタスクを保存し、サブ処理ユニットが、プロセッサタスクの優先度に基づいて、いずれのプロセッサタスクを共有メモリからコピーし実行するかを決定することを許可することを含む。
【０００９】
本発明のひとつまたは複数のさらなる態様によると、マルチプロセッサシステムのプロセッサタスクの管理方法は、マルチプロセッサシステムの複数のサブ処理ユニットによってアクセス可能な共有メモリにプロセッサタスクを格納し、プロセッサタスクのそれぞれと関連付けられたタスクテーブルエントリを含むタスクテーブルを共有メモリに格納し、タスクテーブルエントリの少なくとも一部をリンク付けして、階層的な順序で呼び出されるプロセッサタスクの少なくともひとつのリストを取得し、サブ処理ユニットがタスクテーブルを使用して、プロセッサタスクのリストにしたがっていずれのプロセッサタスクを共有メモリからコピーし実行するかを決定することを許可することを含む。
【００１０】
タスクテーブルエントリはそれぞれ、以下のうち少なくともひとつを含むことが好ましい：(i) 処理ユニットのひとつまたは複数によって関連するプロセッサタスクが実行される準備ができているか否かを示す表示、(ii) 関連するプロセッサタスクの優先度に関する指示、(iii) タスクテーブルエントリのリストでの前のタスクテーブルへのポインタ（ＰＲＥＶポインタ）、(iv) タスクテーブルエントリのリストでの次のタスクテーブルエントリへのポインタ（ＮＥＸＴポインタ）。
【００１１】
本方法は、リスト内のプロセッサタスクの最初のひとつを表示するヘッドポインタと、前記ト内のプロセッサタスクの最後のひとつを表示するテイルポインタのうち、少なくともひとつを含むタスクキューを共有メモリに格納し、処理ユニットが、タスクテーブルとタスクキューを使用して、プロセッサタスクのリストにしたがっていずれのプロセッサタスクを実行すべきかを判定することを許可することをさらに含んでもよい。
【００１２】
好ましくは、本方法は、タスクテーブルエントリの各グループをリンク付けして、階層的順序であるプロセッサタスクのリストを生成し、各エントリが、プロセッサタスクのリストについてヘッドポインタとテイルポインタのうち少なくともひとつを含む、タスクキューエントリを備えるタスクキューを提供することをさらに含む。好ましくは、各リストは共通の優先度のプロセッサタスクと関連付けられており、タスクキューは、プロセッサタスクの複数の優先度のそれぞれに対するタスクキューエントリを含む。
【００１３】
好ましくは、本方法は、タスクキューとタスクテーブルを共有メモリからサブ処理ユニットの所与のひとつのローカルメモリにコピーし、呼び出しの準備ができているプロセッサタスクのうち所与のひとつへ向かうヘッドポインタを求めてタスクキューを検索し、実行のために所与のプロセッサタスクを共有メモリから所与のサブ処理ユニットのローカルメモリにコピーすることをさらに含む。
【００１４】
タスクキューを検索するステップは、呼び出しの準備ができているプロセッサタスクのうち最高の優先度を持つものへのヘッドポインタを検索することを含むことが好ましい。
【００１５】
本方法は、リストから所与のプロセッサタスクを除去することさらに含んでもよい。除去ステップは、呼び出しの準備ができているリスト内の新たな第１のプロセッサタスクを識別するようタスクキューのヘッドポインタを修正することをさらに含んでもよい。各タスクテーブルエントリは、次のタスクテーブルエントリへのポインタ（ＮＥＸＴポインタ）を含むことが好ましく、また、修正ステップは、所与のタスクテーブルエントリのＮＥＸＴポインタを使用して、次に呼び出しの準備ができたときに、新たな第１のプロセッサタスクを識別するようヘッドポインタを変更することを含むことが好ましい。各タスクテーブルエントリは、前のタスクテーブルエントリへのポインタ（ＰＲＥＶポインタ）を含むことが好ましく、また、本方法は、リストの新たな第１のプロセッサタスクと関連付けられたタスクテーブルエントリをポイントするように、リストの最後のタスクテーブルエントリのＰＲＥＶポインタを修正することをさらに含むことが好ましい。
【００１６】
本発明のひとつまたは複数のさらなる態様によると、マルチプロセッサシステムのプロセッサタスクの管理方法は、マルチプロセッサシステムの複数のサブ処理ユニットによってアクセス可能な共有メモリにプロセッサタスクを格納し、各プロセッサタスクに関連付けられたタスクテーブルエントリを含むタスクテーブルを共有メモリに格納し、少なくとも一部のタスクテーブルエントリをリンク付けして、階層的な順序でプロセッサタスクの少なくともひとつのリストを取得し、サブ処理ユニットの所与のひとつの範囲内でリストのプロセッサタスクの最初のタスクの実行を少なくとも開始し、前記プロセッサタスクの最初のタスクは、プロセッサタスクの別のタスクが実行可能となるように所与のサブ処理ユニットにおける実行権を譲渡し、所与のサブ処理ユニットにタスクテーブルを使用して判定する許可を与えることによって、所与のサブ処理ユニット内で次に実行すべき他のプロセッサタスクを判定することを含む。
【００１７】
本方法は、リスト内のプロセッサタスクの最初のひとつを表示するヘッドポインタと、リスト内のプロセッサタスクの最後のひとつを表示するテイルポインタのうち、少なくともひとつを含むタスクキューを供給メモリに格納し、処理ユニットが、タスクテーブルとタスクキューを使用して、次にいずれのプロセッサタスクを実行すべきかを判定することを許可することをさらに含んでもよい。
【００１８】
判定ステップは、タスクキューとタスクテーブルを共有メモリから所与のサブ処理ユニットのローカルメモリにコピーし、呼び出しの準備ができている新たな第１のプロセッサタスクへのヘッドポインタを求めてタスクキューを検索することを含むことが好ましい。本方法は、新たな第１のプロセッサタスクを共有メモリから所与のサブ処理ユニットのローカルメモリに実行のためにコピーすることをさらに含むことが好ましい。本方法は、その後、所与のサブ処理ユニットのローカルメモリから第１のプロセッサタスクを共有メモリに戻すようにコピーすることをさらに含んでもよい。判定ステップは、所与のサブ処理ユニットのローカルメモリから共有メモリに戻すように第１のプロセッサタスクがコピーされる前に、実行されることが好ましい。判定ステップは、所与のサブ処理ユニットによって、第１のプロセッサタスクの実行を完了する前に開始されてもよい。所与のサブ処理ユニットのローカルメモリから共有メモリへ第１のプロセッサタスクをコピーするステップは、新たな第１の処理タスクの実行を開始する前に実行されることが好ましい。所与のサブ処理ユニットのローカルメモリから共有メモリへ第１のプロセッサタスクを戻すようにコピーするステップは、少なくとも新たな第１の処理タスクの一部が所与のサブ処理ユニットによって実行される間に実行されてもよい。
【００１９】
本方法は、所与のサブ処理ユニットのローカルメモリから共有メモリに第１のプロセッサタスクを戻すようにコピーすることをさらに含むことが好ましい。本方法は、その後、実行のために共有メモリから所与のサブ処理ユニットのローカルメモリに新たな第１のプロセッサタスクをコピーすることをさらに含んでもよい。
【００２０】
本方法は、第１のプロセッサタスクをリストに加えることをさらに含むことが好ましい。好ましくは、各タスクテーブルエントリは、次のタスクテーブルエントリへのポインタ（ＮＥＸＴポインタ）と、前のタスクテーブルエントリへのポインタ（ＰＲＥＶポインタ）とを含むことが好ましく、また、加えるステップは、第１のプロセッサタスクに関連するタスクテーブルエントリへのリンクを含むように、タスクテーブルエントリのリンク付けを修正することを含むことが好ましい。
【００２１】
タスクテーブルエントリのリンク付けを修正するステップは、以前は互いにリンク付けされていた前のタスクテーブルエントリと後のタスクテーブルエントリとの間で、第１のプロセッサタスクに関連するタスクテーブルエントリをリンク付けすることを含んでもよい。
【００２２】
好ましくは、本方法は、第１のプロセッサタスクに関連するタスクテーブルをポイントするように、前のタスクテーブルエントリのＮＥＸＴポインタを修正し、前のタスクテーブルエントリをポイントするように、第１のプロセッサタスクに関連するタスクテーブルエントリのＰＲＥＶポインタを修正し、後のタスクテーブルエントリをポイントするように、第１のプロセッサタスクに関連するタスクテーブルエントリのＮＥＸＴポインタを修正し、第１のプロセッサタスクに関連するタスクテーブルエントリをポイントするように、後のタスクテーブルエントリのＰＲＥＶポインタを修正することをさらに含む。
【００２３】
タスクテーブルエントリのリンク付けを修正するステップは、第１のプロセッサタスクに関連付けられたタスクテーブルエントリをリンクの先頭にリンク付けすることを含んでもよい。修正するステップは、リストから新たな第１のプロセッサタスクを除去することをさらに含んでもよい。除去するステップは、第１のプロセッサタスクと関連付けられたタスクテーブルエントリをポイントするようにタスクキューの先頭のポインタを修正することをさらに含んでもよい。
【００２４】
好ましくは、本方法は、第１のプロセッサタスクに関連付けられているタスクテーブルエントリのＮＥＸＴポインタを、新たな第１のプロセッサタスクに関連付けられているタスクテーブルエントリのＮＥＸＴポインタで置換することと、第１のプロセッサタスクに関連付けられるタスクテーブルエントリをポイントするように、新たな第１のプロセッサタスクに関連付けられているタスクテーブルエントリのＮＥＸＴポインタによって識別されるタスクテーブルエントリのＰＲＥＶポインタを修正することをさらに含む。本方法はまた、第１のプロセッサタスクに関連付けられるタスクテーブルエントリをポイントするように、リンクの最後のタスクテーブルエントリのＰＲＥＶポインタを修正することを含んでもよい。
【００２５】
本発明のひとつまたは複数のさらなる態様によると、マルチプロセッサ装置は、プロセッサタスクを実行するためのローカルメモリをそれぞれが含む複数のサブ処理ユニットと、実行の準備ができたプロセッサタスクを格納するように動作可能な共有メモリと、を備え、前記サブ処理ユニットは、プロセッサタスクの優先度に基づいて、いずれのプロセッサタスクを共有メモリからコピーして実行するかを決定するように動作可能であることを特徴とする。
【００２６】
本発明のひとつまたは複数のさらなる態様によると、マルチプロセッサ装置は、プロセッサタスクを実行するためのローカルメモリをそれぞれ備える複数のサブ処理ユニットと、(i) 実行の準備ができているプロセッサタスクと、(ii) 各プロセッサタスクに関連するタスクテーブルエントリを含むタスクテーブルと、を格納するよう動作可能な共有メモリと、を備え、前記サブ処理ユニットは、タスクテーブルを使用して、いずれのプロセッサタスクを共有メモリから自身のローカルメモリにコピーして実行すべきかを判定することを特徴とする。
【００２７】
本発明のひとつまたは複数のさらなる態様によると、マルチプロセッサ装置は、プロセッサタスクを実行するためのローカルメモリをそれぞれ備える複数のサブ処理ユニットと、(i) 実行の準備ができているプロセッサタスクと、(ii) 各プロセッサタスクに関連するタスクテーブルエントリを含むタスクテーブルと、を格納するように動作可能な共有メモリと、を備え、サブ処理ユニットは、少なくとも、第１のプロセッサタスクの実行を開始し、プロセッサタスクの別のタスクが実行可能になるように第１のプロセッサタスクの実行権を譲渡するよう動作可能であり、さらに、サブ処理ユニットは、タスクテーブルに基づいて、いずれの他のプロセッサタスクを次に実行すべきかを判定するよう動作可能であることを特徴とする。
【００２８】
本発明のひとつまたは複数のさらなる態様によると、本装置のサブ処理ユニットは、上述の方法ステップを実行するよう動作可能であってもよい。
【００２９】
本発明の他の態様、特徴および利点は、添付の図面とともになされる本明細書の説明から当業者にとって明らかであろう。
【００３０】
説明のために、現時点で好適である形式が図面に示されるが、本発明は提示された詳細な構成および手段に限定されないことを理解されよう。
【発明を実施するための最良の形態】
【００３１】
同様の符号が同様の要素を示す図面を参照して、図１は、本発明のひとつまたは複数の態様によるマルチプロセッサシステム１００を示す。マルチプロセッサシステム１００は、バス１０８を介して、ＤＲＡＭなどの共有メモリ１０６に連結される複数のプロセッサ１０２（任意の数を使用可能である）を備える。共有メモリ１０６はＤＲＡＭでなくてもよい点に注意する。実際、共有メモリは任意の既知の技術または今後開発される技術を用いて形成することができる。
【００３２】
プロセッサ１０２のうちの一台は、例えば処理ユニット１０２Ａである主処理ユニットであることが好ましい。他の処理ユニット１０２は、サブ処理ユニット（ＳＰＵ）、例えば処理ユニット１０２Ｂ、１０２Ｃ、１０２Ｄなどであることが好ましい。サブ処理ユニット１０２は、既知のまたは今後開発されるコンピュータアーキテクチャのうち任意のものを使用して実現可能なものであってよい。サブ処理ユニット１０２の全てが同一のアーキテクチャを使用して実現される必要はなく、実際、それらは異種または同種の構成のいずれであってもよい。主処理ユニット１０２Ａは、サブ処理ユニット１０２Ｂ〜１０２Ｄに対してローカルに、例えば、同一チップ、同一のパッケージ、同一の回路基盤、同一の製品に位置してもよいことに注意する。代替的に、主処理ユニット１０２Ａは、サブ処理ユニット１０２Ｂ〜１０２Ｄに対してリモートに、例えば、バスやインターネットのような通信ネットワークなどを介して接続可能な異なる製品に位置してもよい。同様に、サブ処理ユニット１０２Ｂ〜１０２Ｄは、互いにローカルにまたはリモートに位置してもよい。
【００３３】
主処理ユニット１０２Ａを使用してサブ処理ユニット１０２Ｂ〜１０２Ｄによるデータおよびアプリケーションの処理をスケジューリングし調整する（orchestrate）ことで、サブ処理ユニット１０２Ｂ〜１０２Ｄは、並列に独立してこれらのデータおよびアプリケーションの処理を実行する。しかしながら、本発明の一部の態様によれば、主処理ユニット１０２Ａは、サブ処理ユニットの間のプロセッサタスクの実行をスケジューリングする中心的な役割を果たさない。むしろ、そのようなスケジューリングは、ＳＰＵ自身に任されることが好ましい。
【００３４】
図１のプロセッサ１０２に対する役割および機能の割り当ては柔軟的である。例えば、プロセッサ１０２のいずれもが主処理ユニットまたはサブ処理ユニットであってよい。
【００３５】
図２を参照して、主処理ユニット１０２Ａは、特にＳＰＵの間でのプロセッサタスクのスケジューリングおよび管理に関して、ＳＰＵ１０２Ｂ〜１０２Ｆに対するサービスプロセッサの役割を担うことが好ましい。本発明のいくつかの態様によれば、主処理ユニット１０２Ａは、ソフトウェアアプリケーションの範囲内に含まれるプロセッサタスクを評価することができ、共有メモリ１０６の割り当て、ＳＰＵの割り当て、および共有メモリ１０６内のプロセッサタスク１１０の最初の記憶に関わることができる。共有メモリ１０６の割り当てに関して、主処理ユニット１０２Ａは、所与の数のプロセッサタスク１１０に割り当てられるべきメモリ空間の量を決定することが好ましい。この点に関して、主処理ユニット１０２Ａは、いくつかのプロセッサタスク１１０の記憶用に共有メモリ１０６の第１の領域１０６Ａを割り当て、他のプロセッサタスク１１０の記憶用に共有メモリ１０６の第２の領域１０６Ｂを割り当ててもよい。主処理ユニット１０２Ａは、共有メモリ１０６内の領域１０６Ａおよび領域１０６Ｂそれぞれにおけるデータ同期に関するルールを設定することもできる。
【００３６】
本発明のひとつまたは複数のさらなる態様によれば、共有メモリ１０６の領域１０６Ａおよび領域１０６Ｂには、定められた数のサブ処理ユニット１０２のみアクセスすることができる。例えば、共有メモリ１０６の所与の領域の中に格納される特定のプロセッサタスク１１０を実行するために割り当てられるサブ処理ユニット１０２のみアクセスすることができる。例えば、サブ処理ユニット１０２Ｂ〜１０２Ｄのみが、共有メモリ１０６の第１の領域１０６Ａ内のプロセッサタスク１１０へのアクセスが許可されていることが好ましい。同様に、サブ処理ユニット１０２Ｅ〜１０２Ｆのみが、共有メモリ１０６の第２の領域１０６Ｂ内のプロセッサタスク１１０へのアクセスが許可されていることが好ましい。共有メモリ１０６の各領域１０６Ａおよび１０６Ｂを保護する技術に関するさらなる詳細は、「ブロードバンドネットワーク用のコンピュータアーキテクチャのメモリ保護システムおよび方法」と題する米国特許第６，５２６，４９１号に見いだすことができ、その全ての開示は参照により本明細書に援用される。
【００３７】
本発明のひとつまたは複数の態様によると、プロセッサタスク１１０が共有メモリ１０６内に配置され、サブ処理ユニット１０２がタスクの実行を割り当てられた後、主処理ユニット１０２Ａは、プロセッサタスク１１０の実行のスケジューリングおよび管理に参加しないことが好ましい。代わりに、それらの責任は関係する特定のサブ処理ユニット１０２に任される。
【００３８】
本発明の様々な実施形態のプロセッサタスク管理特徴に関してさらに詳細を述べる前に、マルチプロセッサシステムを実装するための好適なコンピュータ・アーキテクチャについて説明する。この点に関して、図３の基本処理モジュールまたはプロセッサ要素（processor element：ＰＥ）２００のブロック図を参照する。このコンピュータアーキテクチャによると、マルチプロセッサシステムの全てのサブプロセッサは、共通のコンピューティングモジュール（またはセル）から構成される。この共通のコンピューティングモジュールは、一貫した構造を有し、好ましくは同一の命令セットアーキテクチャを使用する。本発明の別の実施形態では、サブ処理ユニットは異種の構成であってもよい。マルチプロセッサシステムは、ひとつまたは複数のクライアント、サーバ、ＰＣ、モバイルコンピュータ、ゲーム機、ＰＤＡ、セットトップボックス、機器、デジタルテレビ、およびコンピュータプロセッサを使用する他の装置から形成することができる。
【００３９】
基本処理モジュールは、プロセッサ要素（ＰＥ）である。図３に示すように、ＰＥ２００は、Ｉ／Ｏインタフェース２０２、処理ユニット（processing unit：ＰＵ）２０４、ダイレクト・メモリ・アクセス・コントローラ（ＤＭＡＣ）２０６、複数のサブ処理ユニット２０８、すなわち、サブ処理ユニット２０８Ａ、サブ処理ユニット２０８Ｂ、サブ処理ユニット２０８Ｃおよびサブ処理ユニット２０８Ｄを含む。ローカル（または内部）ＰＥバス２１２は、ＰＵ２０４、サブ処理ユニット２０８、ＤＭＡＣ２０６およびメモリインタフェース２１０の間でデータおよびアプリケーションを送信する。ローカルＰＥバス２１２は、例えば、従来のアーキテクチャを有することができ、またはパケットスイッチネットワークとして実現することもできる。パケットスイッチネットワークとして実現すると、より多くのハードウェアを必要とするが、利用可能な帯域幅を増加することができる。
【００４０】
ＰＥ２００は、デジタルロジックを実装する様々な方法を使用して構成されることができる。しかしながら、ＰＥ２００は、シリコン基板上の相補型金属酸化膜半導体（ＣＭＯＳ）を使用する単一の集積回路として構成されることが好ましい。基板の代替的材料はガリウム・ヒ素、ガリウム・アルミニウム・ヒ素および多様なドーパントを使用するいわゆるＩＩＩ−Ｂ合成物を含む。ＰＥ２００は、超電導材料、例えば高速単一磁束量子（ＲＳＦＱ）論理回路を使用して実現することもできる。
【００４１】
ＰＥ２００は、高帯域幅のメモリ接続２１６を通して、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）２１４と密接に関連する。ＤＲＡＭ２１４は、ＰＥ２００用のメインメモリ（または共有メモリ）として機能する。ＤＲＡＭ２１４は好ましくはダイナミック・ランダム・アクセス・メモリであるが、例えば、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、磁気ランダム・アクセス・メモリ（ＭＲＡＭ）、光学メモリ、ホログラフィック・メモリなどの他の手段を使用して実現することもできる。ＤＭＡＣ２０６およびおよびメモリインタフェース２１０は、ＤＲＡＭ２１４と、ＰＥ２００のサブ処理ユニット２０８およびＰＵ２０４との間のデータの転送を容易にする。ＤＭＡＣ２０６および／またはメモリインタフェース２１０は、サブ処理ユニット２０８およびＰＵ２０４に対して一体的にまたは別々に配置されていてもよい点に注意する。実際、図示のように別々の構成とする代わりに、ＤＭＡＣ２０６の機能および／またはメモリインタフェース２１０の機能は、サブ処理ユニット２０８およびＰＵ２０４のひとつまたは複数（好ましくは全て）と一体であってもよい。
【００４２】
例えば、ＰＵ２０４は、データおよびアプリケーションを独立して処理することができる標準のプロセッサであってもよい。サブ処理ユニット２０８は、好ましくは単一命令マルチデータ（ＳＩＭＤ）プロセッサである。サブ処理ユニット２０８は、並行にまたは独立して、データおよびアプリケーションの処理を実行することが好ましい。ＤＭＡＣ２０６は、ＰＵ２０４およびサブ処理ユニット２０８による、共有ＤＲＡＭ２４に格納されるデータおよびアプリケーション（例えば、プロセッサタスク１１０）へのアクセスを制御する。ＰＵ２０４は、主処理ユニットの役割を引き受けているサブ処理ユニット２０８のうちひとつにより実現されてもよいことに注意する。
【００４３】
このモジュール構造にしたがって、特定のコンピュータシステムによって使用されるＰＥ２００の数は、そのシステムによって必要とされる処理能力に基づいて決まる。例えば、サーバは4つのＰＥ２００を使用することができ、ワークステーションは２つのＰＥ２００を使用することができ、ＰＤＡはひとつのＰＥ２００を使用することができる。特定のソフトウェアセルを処理すべく割り当てられるＰＥ２００のサブ処理ユニットの数は、セル内のプログラムおよびデータの複雑さおよび大きさによって決まる。
【００４４】
図４は、サブ処理ユニット２０８の好適な構造および機能を示す。サブ処理ユニット２０８は、ローカルメモリ２５０、レジスタ２５２、ひとつまたは複数の浮動小数点ユニット２５４、およびひとつまたは複数の整数ユニット２５６を備える。しかしながら、必要とされる処理能力によって、より多数のまたはより少数の浮動小数点ユニット２５４および整数ユニット２５６を使用してもよい。浮動小数点ユニット２５４は、好ましくは一秒につき３２０億回の浮動小数点演算（３２ＧＦＬＯＰＳ）をする速度で動作し、整数ユニット２５６は、好ましくは一秒につき３２０億回の演算（３２ＧＯＰＳ）をする速度で動作する。
【００４５】
好ましい実施形態では、ローカルメモリ２５０は２５６キロバイトの記憶装置を含み、レジスタ２５２の容量は１２８×１２８ビットである。プロセッサタスク１１０が共有メモリ２１４を使用して実行されない点に注意する。むしろ、タスク１１０は、所与のサブ処理ユニット２０８のローカルメモリ２５０にコピーされ、ローカルに実行される。
【００４６】
ローカルメモリ２５０は、キャッシュメモリであってもキャッシュメモリでなくてもよい。好ましくは、ローカルメモリ２５０はスタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）として構成される。ＰＵ２０４は、ＰＵ２０４により起動されるダイレクトメモリアクセスのために、キャッシュ整合性サポートを必要としてよい。しかしながら、キャッシュ整合性サポートは、サブ処理ユニット２０８によって起動されるダイレクトメモリアクセス、または、外部装置との間でのアクセスについては、不要である。
【００４７】
サブ処理ユニット２０８は、サブ処理ユニット２０８との間でデータおよびアプリケーションを送受信するためのバスインタフェース（Ｉ／Ｆ）２５８をさらに含む。好ましい実施形態では、バスＩ／Ｆ２５８はＤＭＡＣ２０６に連結される。ＤＭＡＣ２０６は、サブ処理ユニット２０８内に一体的に配置することもでき、あるいは外部に配置することもできることを示すよう、図３では点線で描かれている。一対のバス２６８Ａ、２６８Ｂは、バスＩ／Ｆ２５８とローカルメモリ２５０の間でＤＭＡＣ２０６を相互接続する。バス２６８Ａ、２６８Ｂは、好ましくは２５６ビット長である。
【００４８】
サブ処理ユニット２０８は、内部バス２６０、２６２および２６４をさらに含む。好ましい実施形態では、バス２６０は２５６ビットの幅を有し、ローカルメモリ２５０およびレジスタ２５２の間の通信を提供する。バス２６２および２６４は、それぞれ、レジスタ２５２と浮動小数点ユニット２５４の間、レジスタ２５２と整数ユニット２５６の間の通信を提供する。好ましい実施形態では、レジスタ２５２から浮動小数点ユニットまたは整数ユニットに向かうバス２６４と２６２のバス幅は３８４ビットであり、浮動小数点ユニット２５４または整数ユニット２５６からレジスタ２５２に向かうバス２６４および２６２のバス幅は、１２８ビットである。浮動小数点ユニット２５４または整数ユニット２５６からレジスタ２５２へのバス幅より、レジスタ２５２から両ユニットへのバス幅が大きいため、処理の間、レジスタ２５２からより大きいデータフローを収容する。各計算のために、最大で３ワードが必要である。しかしながら、各計算の結果は、通常１ワードのみである。
【００４９】
本発明の様々なプロセッサタスク管理特徴に戻り、図２を参照して、実行のために共有メモリ１０６からＳＰＵ１０２のローカルメモリのひとつにいずれのプロセッサタスク１１０をコピーすべきかを決定するために、サブ処理ユニット１０２はタスクテーブルを利用することが好ましい。この点に関して、図５を参照する。図５は、本発明の様々な態様により利用可能なタスクテーブル２８０の概念的な説明である。タスクテーブル２８０は、好ましくは共有メモリ１０６に格納される。タスクテーブル２８０の初期化方法の詳細は、後述する。タスクテーブル２８０は、複数のタスクテーブルエントリＴ１、Ｔ２、Ｔ３その他を含むことが好ましい。各タスクテーブルエントリは、例えば、タスクテーブルエントリをプロセッサタスク１１０に関係付ける連想アドレス指定または他の手段によって、プロセッサタスク１１０（図２参照）のひとつに関連付けられるのが好ましい。
【００５０】
好ましい実施形態では、各タスクテーブルエントリは、ステータス表示（ＳＴＡＴ）、優先度表示（ＰＲＩ）、および一対のポインタ（ＰＲＥＶ、ＮＥＸＴ）のうちの少なくともひとつを含んでもよい。ＳＴＡＴは、所与のタスクテーブルエントリに関連付けられるプロセッサタスクが、ひとつまたは複数のサブ処理ユニットによって実行される準備ができている（ＲＥＡＤＹ）か、または実行中（ＲＵＮＮＩＮＧ）であるかについての表示を提供することが好ましい。ＰＲＩは、関連するプロセッサタスク１１０の優先度についての表示を提供することが好ましい。プロセッサタスク１１０と関連付けられる優先度は任意の数であってよく、これは、ソフトウェアプログラマが設定してもよいし、または、ソフトウェアアプリケーションの実行によって後で設定することもできる。いずれにしても、プロセッサタスク１１０の優先度は、プロセッサタスクが実行される順序を設定するために利用されることができる。ＰＲＥＶ値は、リンク付けされたタスクテーブルエントリの順序付きリスト（または、プロセッサタスクのリスト）において、前のタスクテーブルエントリ（または、前のプロセッサタスク１１０）へのポインタであることが好ましい。ＮＥＸＴ値は、リンク付けされたタスクテーブルエントリの順序付きリスト（または、プロセッサタスクのリスト）において、次のタスクテーブルエントリ（またはプロセッサタスク）へのポインタであることが好ましい。
【００５１】
本発明のひとつまたは複数の態様によると、タスクテーブル２８０は、プロセッサタスク１１０が実行のために共有メモリ１０６からコピーされる順序を決定するために、サブ処理ユニット２０８によって利用されることが好ましい。例えば、マルチプロセッサシステム１００または２００上のソフトウェアアプリケーションを適切に実行するために、特定のプロセッサタスク１１０は、特定の順序、すなわち少なくとも一般的な順序、つまりＴ１、Ｔ８、Ｔ６、Ｔ９の順序で実行される必要があってもよい。プロセッサタスク配列のこの実施例を反映するために、タスクテーブル２８０は、拡張プロセッサタスクによる、タスクテーブルエントリのリンク付きリストを作成するタスクテーブルエントリのＰＲＥＶ部分およびＮＥＸＴ部分におけるポインタを含むことが好ましい。上記例の特殊性によると、タスクテーブルエントリＴ１は、タスクテーブルエントリＴ８をポイントするＮＥＸＴ値を含む。タスクテーブルエントリＴ８は、タスクテーブルエントリＴ１をポイントするＰＲＥＶ値と、タスクテーブルエントリＴ６をポイントするＮＥＸＴ値を含む。タスクテーブルエントリＴ６は、タスクテーブルエントリＴ８をポイントするＰＲＥＶ値と、タスクテーブルエントリＴ９をポイントするＮＥＸＴ値を含む。タスクテーブルエントリＴ９は、タスクテーブルエントリＴ６をポイントするＰＲＥＶ値を含む。
【００５２】
図６を参照して、上記例のタスクテーブルエントリのリンク付きリストは、状態図として概念的に示すことができる。この状態図において、タスクテーブルエントリＴ１に関連付けられる特定のプロセッサタスクからの遷移が、タスクテーブルエントリＴ８に関連付けられている別のプロセッサタスクの選択および実行を引き起こす。タスクテーブルエントリＴ８に関連付けられるプロセッサタスクからの遷移が、タスクテーブルエントリＴ６に関連付けられるプロセッサタスクの選択および実行を引き起こし、以下同様である。第１の、または先頭のタスクテーブルエントリＴ１が、タスクテーブルエントリＴ９をポイントするＰＲＥＶ値を含むことを保証し、また、タスクテーブルエントリＴ９がタスクテーブルエントリＴ１をポイントするＮＥＸＴ値を含むことを保証することによって、タスクテーブルエントリ（および／またはプロセッサタスク自身）の循環的な関連を達成することができる。
【００５３】
動作中、共有メモリ１０６のプロセッサタスク１１０（好ましくは所与の領域１０６Ａまたは１０６Ｂ内の）のプールを実行するために割り当てられるそれぞれのサブ処理ユニット１０２は、いずれのプロセッサタスク１１０が実行のために次に占有されるかを判定するために、まず、タスクテーブル２８０にアクセスする。リンク付きリストの最初のまたは先頭のエントリの特定に役立てるために、サブ処理ユニット１０２は、図７に概念的に示すタスクキュー２８２へのアクセスを有することが好ましい。タスクキュー２８２は、関連するプロセッサタスク１１０それぞれの優先度のためのエントリを含むことが好ましい。各エントリは、ＨＥＡＤポインタおよびＴＡＩＬポインタのうちの少なくともひとつを含むことが好ましい。
【００５４】
図６をさらに参照して、例示的なリンク付きリストの状態図は、優先度１を有するプロセッサタスク１１０を表している。実際、エントリＴ１、Ｔ８、Ｔ６およびＴ９のタスクテーブルエントリ（図５）は、それぞれ「１」のＰＲＩ値を含む。
【００５５】
優先度１と関連するタスクキューエントリのＨＥＡＤポインタとＴＡＩＬポインタは、それぞれ、タスクテーブルエントリＴ１とタスクテーブルエントリＴ９へのポインタを含む。タスクキュー２８２の他のエントリは、他のリンク付きリスト用の他の優先度のＨＥＡＤポインタおよびＴＡＩＬポインタと関連付けられる。このように、本発明の様々な実施形態は、（拡張プロセッサタスクによって）タスクテーブルエントリの多数のリンク付きリストを含むことができ、各リンク付きリストは同一のまたは少なくとも類似の優先度を含むことを考慮する。それぞれのサブ処理ユニット１０２は、タスクテーブル２８０とタスクキュー２８２を利用して、いずれのプロセッサタスク１１０が、実行のために共有メモリ１０６からコピーされるべきかについて決定することが好ましい。それぞれのリンク付きリストが作成され適切に維持されると仮定すると、ソフトウェア・アプリケーション全体の実行時に所望の結果を達成するために、プロセッサタスク１１０は適切な順序で実行されることができる。
【００５６】
本発明の様々な態様によると、サブ処理ユニット１０２は、ソフトウェアアプリケーションの実行の間、タスクテーブル２８０とタスクキュー２８２を維持し修正する。この点に関して、図８から図１０を参照する。これらは、本発明のひとつまたは複数の望ましい特徴を達成するのに適したプロセスフローを表すフロー図である。アクション３００で、特定のサブ処理ユニット１０２が呼び出されて、プロセッサタスク１１０を共有メモリ１０６から自身のローカルメモリにコピーし始める。アクション３０２で、サブ処理ユニット１０２はタスクキュー２８２をロックし、タスクキュー２８２を自身のローカルメモリにコピーする。その後、タスクキュー２８２は、最も高い優先度の準備ができたタスクを求めて検索される（アクション３０４）。図７で示した実施例を使用すれば、タスクキュー２８２は、最高の優先度、例えば優先度１のプロセッサタスクに関連付けられているタスクテーブルエントリＴ１をポイントするＨＥＡＤポインタを含む。タスクテーブルエントリＴ１に関連付けられたプロセッサタスクが実行のために目標とされるので、サブ処理ユニット１０２は、好ましくはタスクキュー２８２を修正して、そのプロセッサタスクへの参照を除去する（アクション３０６）。好ましい実施形態では、これは、タスクテーブルエントリＴ１へのＨＥＡＤポインタを、実行のために占有されるべき次のプロセッサタスクを表示する新規な第１の（または先頭の）タスクテーブルエントリになる別のタスクテーブルエントリへと修正することを伴う。特に、タスクテーブルエントリＴ１のＮＥＸＴポインタが、優先度１の新たなＨＥＡＤポインタとして用いられてもよい。実際、図６に示したように、タスクテーブルエントリＴ１に関連するプロセッサタスクが実行中である（ＲＵＮＮＩＮＧ）と、もはや準備のできた（ＲＥＡＤＹ）状態ではなく、状態図から除去されなければならない。状態図の先頭のエントリとして、タスクテーブルエントリＴ８を残さなければならない。タスクテーブルエントリＴ１がもはやＲＥＡＤＹ状態図の一部でないとき、タスクテーブルエントリＴ８のＰＲＥＶポインタはタスクテーブルエントリＴ９をポイントするように修正されてもよい。このように、アクション３０８において、タスクテーブルが修正可能となるように、タスクテーブルはラベル付けされＳＰＵ１０２のローカルメモリにコピーされる。同様に、タスクテーブルエントリＴ９のＮＥＸＴポインタは、タスクテーブルエントリＴ８をポイントするように修正されてもよい。
【００５７】
本発明の好ましい態様によると、ＳＰＵ１０２は、タスクテーブルエントリＴ１のＳＴＡＴ値をＲＥＡＤＹからＲＵＮＮＩＮＧに修正することが好ましい（図９のアクション３１０）。アクション３１２として、次のタスクを呼び出すためにＳＰＵ１０２がコール（アクション３００）された時点で、ＳＰＵ１０２が前のタスクを実行しているかに関しての判定がなされることが好ましい。ＳＰＵ１０２上で動作中の前のタスクが他のタスクに譲るとき、これが生じてもよい。本実施例のために、前のタスクが次のプロセッサタスク１１０に実行権を譲渡（yield to）せず、さらに、アクション３１２における判定の結果が否定であったと仮定する。したがって、プロセスフローは好ましくはアクション３１８へ進む。ここで、ＳＰＵ１０２は、修正されたタスクキュー２８２と修正されたタスク・テーブル２８０を共有メモリ１０６に書き戻す。この時点で、タスクテーブル２８０とタスクキュー２８２は更新され、他のサブ処理ユニット１０２によってコピーおよび修正されてもよいように、好ましい同期化技術にしたがってロックが解除される。
【００５８】
前のプロセッサタスク１１０が次のプロセッサタスクに実行権を譲渡したときのように、アクション３１２における判定結果が肯定である場合、プロセスフローは好ましくはアクション３１４へ進む。そこで、ＳＰＵは、好ましくは、実行権を譲渡するプロセッサタスクに関連付けられているタスクテーブルエントリのＳＴＡＴ値を、ＲＵＮＮＩＮＧからＲＥＡＤＹに修正する。さらに、ＳＰＵは、実行権を譲渡するプロセッサタスクを適当なリンク付きリストに再導入（reintroduce）するために、実行権を譲渡するプロセッサタスクに関連するタスクテーブルエントリを含む様々なタスクテーブルエントリのＰＲＥＶポインタとＮＥＸＴポインタを修正してもよい。好ましくは、関連するタスクテーブルエントリのＰＲＩ値に反映されるように、実行権を譲渡するプロセッサタスク１１０の優先度を参照することによって、これが達成される。アクション３１６で、プロセッサタスクが後に占有されてもよいように、実行権を譲渡するプロセッサタスクが共有メモリ１０６に書き込まれてもよい。その後、プロセスフローはアクション３１８へ進む。そこで、タスクキュー２８２とタスクテーブル２８０は、共有メモリ１０６に書き戻される。
【００５９】
アクション３２０（図１０）で、次のプロセッサタスク１１０（例えば、タスクテーブルエントリＴ８に関連するプロセッサタスク）は、サブ処理ユニット１０２によって共有メモリ１０６から自身のローカルメモリにコピーされる。アクション３２２で、サブ処理ユニット１０２は、新たなプロセッサタスク１１０の実行に使用するため、（例えば、新たなプロセッサタスクと関連する任意のデータを有する）自身のレジスタを復元および／または更新することが好ましい。最後に、アクション３２４で、新たなプロセッサタスク１１０は、サブ処理ユニット１０２によって実行される。
【００６０】
上記アクションは例示を目的としてのみ示されており、当業者は、本発明の趣旨および範囲から逸脱することなくこれらのアクションの順序を修正可能であることを理解するであろう。例えば、後述するように、プロセッサタスクが共有メモリからコピーされ共有メモリに書き戻される順序、および、タスクテーブルとタスクキュー２８２が利用される順序は、望ましい結果を達成するために修正可能である。
【００６１】
上述のように、主処理ユニット１０２Ａは、プロセッサタスク１１０の実行および管理がサブ処理ユニット１０２によって対処可能となる状態にシステムを準備するために、システムの初期段階の間に利用されることが好ましい。サブ処理ユニット１０２も、第１インスタンスでタスクテーブル２８０とタスクキュー２８２を作成するために、初期化ルーチンを実行することが好ましい。これらの初期化プロセスを、図１１のフロー図に示す。
【００６２】
アクション３５０で、サービスプロセッサ（例えば、主処理ユニット１０２）は、システム上で実行されるソフトウェアアプリケーションを評価して、プロセッサタスク１１０を実行する複数のサブ処理ユニット１０２を割り当てる。プロセスフローは、好ましくはアクション３５２へ進み、そこで、サービスプロセッサがソフトウェアアプリケーションを評価して、プロセッサタスク１１０を受け取るために共有メモリ１０６のひとつまたは複数の部分を割り当てる。アクション３５４で、アクション３５２で実行された任意のメモリ・アロケーションにしたがって、プロセッサタスク１１０が共有メモリ１０６にロードされる。初期化プロセスのこの段階においては、サービスプロセッサは、メンテナンスおよび／またはサブ処理ユニット１０２の間でのプロセッサタスクの配分に関与していないことが好ましい。
【００６３】
プロセスフローは、好ましくはアクション３５６へ進む。そこで、サブ処理ユニット１０２は互いを初期化し、いずれのＳＰＵが第１インスタンスにおいてタスクテーブル２８０とタスクキュー２８２を準備するかを決定する。アクション３５８で、タスクテーブル２８０とタスクキュー２８２を作成する責任を有したサブ処理ユニット１０２は、この種の情報を準備して、同じものを共有メモリ１０６に格納する。例えば、タスクテーブル２８０とタスクキュー２８２の初期化は、好ましくは、各ＳＰＵカーネルに最初のタスクを実行させることによって行われることが好ましい。以下に示すプログラム「init.c」は、各ＳＰＵによって実行される最初のタスクの好適な実施例である。
（表１）
#include <spurs.h>
#include "task_instance.h"
int
main()
{
spurs_beggin_init();
if（spurs_get_spu_id() = = 0）｛
spurs_create_task(melchior);
spurs_create_task(balthasar);
spurs_create_task(caspar);
spurs_start_task(melchior);
spurs_start_task(balthasar);
spurs_start_task(caspar);
}
spurs_end_init();
return 0;
}
【００６４】
このプログラムにおいて、「melchior」、「balthasar」および「caspar」は非常に初期のタスクの名称であり、これらは典型的なスタートアップタスクである。ＳＰＵカーネルの全てがこの初期タスクinit.cを実行する。しかし、ひとつのＳＰＵ（ＩＤ０を持つＳＰＵ）だけは、if(spurs_get_spu_id () = = 0）のコードラインで指定されるこれらのタスクを実行する。他のＳＰＵの全て、例えば異なるＩＤを持つＳＰＵの全ては、spurs_end_init()で待機する。このように、各ＳＰＵカーネルは最初のタスクを実行し、この最初のタスクが終了した後、本明細書で述べるように、ＳＰＵカーネルは次のタスクの検索を開始する。
【００６５】
上述のように、サービス・プロセッサとして動作する主処理ユニット１０２は、ひとつまたは複数のプロセッサタスク１１０をグループとして指定してもよいことに注意する。これは、初期化段階の間に実行されることが好ましい。例えば、２つ以上のプロセッサタスク１１０が互いに緊密に通信する必要があってもよく、したがって、それらがタスクグループ内でグループ化されている場合、プロセッサタスクをより効率的に実行することができる。暗号化プログラムは、プロセッサタスクがひとつ以上のタスクグループに形成されている場合、緊密に通信しより効率的に実行されるプロセッサタスクを含むことができるアプリケーションの一例である。
【００６６】
本発明のプロセッサタスク管理の特徴を利用して、主処理ユニット１０２Ａが、特定のサブ処理ユニット１０２またはサブ処理ユニット１０２のグループのデバイスドライバをオフロード（off-load）するのを助けることができる。例えば、ギガビットイーサネットハンドラ（イーサネットは登録商標）のようなネットワークインタフェースは、ＣＰＵパワーの８０％まで利用することができる。ネットワークインタフェースが主処理ユニット１０２Ａによってのみ実行される場合、主処理ユニットは１０２Ａは、他のサービス指向の処理タスクをするために利用することができない。したがって、主処理ユニットが１０２Ａが、ひとつまたは複数のサブ処理ユニット１０２にネットワークインタフェースプログラムをオフロードすることは、有益でありえる。主処理ユニット１０２Ａは、ネットワークインタフェースの処理タスクを共有メモリ１０６に配置し、これを実行するひとつまたは複数のサブ処理ユニット１０２を割り当てることによって、この結果を達成してもよい。それに応じて、ＳＰＵは、そのようなプロセッサタスクの実行を管理しスケジューリングするのに適したタスクテーブル２８０とタスクキュー２８２を形成してもよい。したがって、有利なことには、主処理ユニット１０２Ａは、より多くのＣＰＵパワーを他のタスクの実行に充てることができる。主処理ユニット１０２Ａは、また、例えばデジタルテレビデバイスドライバなどの他のデバイスドライバをオフロードしてもよい。ＳＰＵにオフロードさせるための好ましい候補である他のデバイスドライバは、重いプロトコルスタックを有するものである。例えば、ＨＤＤレコーダなどのリアルタイム高速アクセスデバイス用のドライバは、オフロードされると有利である。オフロードされてもよいタスクの他の実施例には、仮想プライベートネットワークおよびＩＰ（例えばＶｏＩＰ）アプリケーションを介したマルチメディアに使用されるネットワークパケット暗号化／解読タスクが含まれる。
【００６７】
図１２を参照して、プロセッサタスクのステータスの状態図の一例を示す。タスク状態は、実行（ＲＵＮＮＩＮＧ）状態、準備（ＲＥＡＤＹ）状態、ブロック（ＢＬＯＣＫＥＤ）状態、休止（ＤＯＲＭＡＮＴ）状態、および不在（ＮＯＮ−ＥＸＩＳＴＥＮＴ）状態の５つのカテゴリに分類することができる。プロセッサタスクは、現在実行中であるときは、実行（ＲＵＮＮＩＮＧ）状態にある。ある条件下では、プロセッサタスクは、例えば割り込みの間、タスクコンテクストがなくても、実行状態を維持することができる。プロセッサタスクは、タスクの実行の準備ができているが、より高い優先順位を有するひとつまたは複数のプロセッサタスクが既に実行されており、またサブ処理ユニットがタスクの占有のために利用できないため、実行することができないときに、準備（ＲＥＡＤＹ）状態にある。準備状態のプロセッサタスクの優先度が共有メモリ１０６の準備状態タスクのプールの中で十分に高い場合、サブ処理ユニットはそのプロセッサタスクを占有しそれを実行してもよい。このように、タスクがディスパッチされる（dispatch）とき、プロセッサタスクの状態は準備状態から実行状態に変化してもよい。反対に、この種のタスクがプリエンプティブ実行（先取り）されるかまたはその実行の間に侵害される場合、実行状態のタスクは準備状態に変化してもよい。プロセッサタスクのプリエンプティブ実行の実施例は、ひとつのプロセッサタスクが別のタスクに実行権を譲渡することに関連して、既に述べた。
【００６８】
ブロック状態カテゴリは、待機（ＷＡＩＴＩＮＧ）状態、中断（ＳＵＳＰＥＮＤＥＤ）状態、および待機中断（ＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ）状態を含んでもよい。タスクの実行を継続する前に特定の条件が満足されなければならないことを規定するサービスコールの呼び出しのために、タスクがブロックされるとき、プロセッサタスクは待機（ＷＡＩＴＩＮＧ）状態にある。このように、タスクの実行状態は、サービスコールの呼び出し時に待機状態に変化してもよい。待機状態のプロセッサタスクは、規定された条件が満足するとき準備状態に解放されてもよく、これによって、その後に、処理中のタスクがサブ処理ユニット１０２に占有されることが可能になる。タスクが強制的に停止される（タスクそれ自身が呼び出してもよい）とき、プロセッサタスクは実行状態から中断（ＳＵＳＰＥＮＤＥＤ）状態に入ってもよい。同様に、準備状態のプロセッサタスクは、強制されたアクションによって中断状態に入ってもよい。このようなプロセッサタスクの強制的な停止が開放されるとき、中断状態のプロセッサタスクが再開され準備状態に入ってもよい。プロセッサタスクは、タスクが満足するべき条件を待機しておりまた強制的に中断させられているとき、待機中断（ＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ）状態にある。したがって、待機中断状態のプロセッサタスクは、プロセッサタスクの強制的中断時に待機状態に入ってもよく、ここでプロセッサタスクは満足すべき条件を待機する。
【００６９】
タスクが実行されていないかまたは既にその実行を終了したとき、プロセッサタスクは休止（ＤＯＲＭＡＮＴ）状態にある。休止状態のプロセッサタスクは、適当な状況の下で準備状態に入ってもよい。不在（ＮＯＮ−ＥＸＩＳＴＥＮＴ）状態は、例えば、タスクがまだ作成されていなかったりまたは既に削除されているなどによって、タスクがシステム内に存在しないいわゆる仮想状態を指す。
【００７０】
準備状態へ移動したタスクが実行状態のタスクより高い優先順位（または、優先度）を有する場合、より低い優先順位のタスクが準備状態へ移動し、より高い優先度のタスクがディスパッチされて実行状態へ移動することが好ましい。この状況において、より低い優先度のタスクは、より高い優先度のタスクによってプリエンプティブ実行されている。
【００７１】
ノン・プリエンプティブな（non-preemptive）、優先度に基づくタスクスケジューリングは、プロセッサタスクに割り当てられた優先度に基づいてなされる。同じ優先度を有する多くのプロセッサタスクがある場合、スケジューリングは、最初に来て最初に役立つ（first-come, first-served：ＦＣＦＳ）ことを基準に実行される。このタスクスケジューリングの規則は、タスク優先度に基づいたタスク間の優先順位を使用して定められてもよい。実行可能なタスクが存在する場合、せいぜい、高い優先順位のタスクと同数の割り当てられたサブ処理ユニット１０２が実行状態にある。実行可能なタスクの残りは、準備状態にある。異なる優先度を有するタスクの中で、最も高い優先度を有するタスクは、より高い優先順位を有する。同じ優先度のタスクの中で、最も早く実行可能な（実行中または準備ができている）状態に入ったプロセッサタスクは、より高い優先順位を有する。しかしながら、同じ優先度のタスク間の優先順位は、いくつかのサービスコールの呼び出しのせいで変化してもよい。プロセッサタスクが他のプロセッサタスクに対して優先順位を与えられると、ディスパッチが直ちに発生し、タスクが実行状態に移動することが好ましい。
【００７２】
図１３と図１４を参照して、本発明の特定の態様にしたがった特定のプリエンプション（preemption）特徴を示す。上述のように、実行状態にあるプロセッサタスク（例えばタスクＡ）はプリエンプティブ実行されるか、または準備状態にある別のプロセッサタスク（例えばタスクＢ）に実行権を譲渡してもよい。図１３と図１４に示すように、タスクＡは、実行権の譲渡の時点まで、サブ処理ユニット１０２で実行されている。この時点で、ＳＰＵのカーネルは、共有メモリ１０６にタスクＡをコピーする（タスクＡを保存する）よう動作する。その後、タスクＢは、共有メモリ１０６からＳＰＵのローカルメモリにコピーされる（タスクＢを復元する）。そして、ＳＰＵはタスクＢを実行する。この技術は、ローカルメモリの使用量および高い帯域幅については比較的高い性能を享受する一方、実行権を譲渡した時点から最適化されないタスクＢの実行の時点までのタスク実行レイテンシが存在する。
【００７３】
図１５と図１６を参照して、本発明のさらなる態様による代替的方法を示す。このシナリオにおいて、タスクＡをローカルメモリから共有メモリ１０６にコピーする前に、タスクＢを共有メモリ１０６からサブ処理ユニット１０２のローカルメモリにコピーしてもよい。この点に関して、サブ処理ユニット１０２は、共有メモリ１０６からタスクＢを特定して読み出すための処置を同時にとりながら、タスクＡを実行してもよい。これは、タスクテーブル２８０とタスクキュー２８２を共有メモリ１０６からサブ処理ユニット１０２Ａのローカルメモリにコピーし、それらを用いて次の準備状態のタスク、すなわちタスクＢを特定することを伴う。実行権の譲渡の時点で、サブ処理ユニット１０２Ａのカーネルは、ローカルメモリから共有メモリ１０６にタスクＡをコピーするが、これは、上述のようにタスクテーブル２８０とタスクキュー２８２を修正することを伴ってもよい。その後、サブ処理ユニット１０２はタスクＢの実行を占有してもよい。この技術は、図１３と図１４に示した技術と比較して、実行権の譲渡とタスクＢの実行との間のレイテンシを大きく削減する。
【００７４】
図１７と図１８を参照して、本発明のひとつまたは複数のさらなる態様にしたがって、実行権の譲渡とタスクＢの実行との間のレイテンシをさらに削減することもできる。より詳細には、実行権の譲渡の時点までは、図１５と図１６に関して先に述べたのと実質的に同様な方法でサブ処理ユニット１０２が動作してよい。しかしながら、実行権の譲渡の後、サブ処理ユニット１０２はタスクＢの実行を開始するのが好ましい。実質的に同時に、サブ処理ユニット１０２のカーネルは、タスクＡをサブ処理ユニット１０２のローカルメモリから共有メモリ１０６にコピーするように動作することが好ましい。タスクＢが実行件の譲渡後すぐに実行されるので、図１４から図１６に示した方法と比較してレイテンシが大きく削減される。
【００７５】
本発明のひとつまたは複数の態様によると、サブ処理ユニット１０２は、実行のためにローカルメモリ内の多数のプロセッサタスクを維持してもよい。これは、図１９で示される。多数のプロセッサタスクの実行を管理するために、ローカルメモリは、複数のページとページテーブルを含んでもよい。この方法の利点は、レイテンシがさらに削減できるという点である。但し、その欠点のひとつとして、ローカルメモリ内の相当多くの空間がプロセスタスクの実行によって独占される。
【００７６】
図２０から図２２を参照して、本発明のひとつまたは複数の態様によるプロセッサタスクの移動（マイグレーション）を示す。これらの図は、プロセッサタスク、例えばタスクＢが、サブ処理ユニットＳＰＵ１から別のサブ処理ユニットＳＰＵ２に移動される方法を示している。移動は、何らかの条件、例えばそれぞれのプロセッサタスクと関連付けられるそれぞれの優先度に基づいてもよい。本発明のいくつかの態様によれば、ひとつのサブ処理ユニットから別のサブ処理ユニットへのプロセッサタスクの移動は、プリエンプティブでなくてもよい。言い換えると、プロセッサタスクの移動は、優先度条件とタイミングの結果として自然に起こり、移動を引き起こす何らかの決定に基づくのではない。
【００７７】
このノン・プリエンプティブな移動は、以下の実施例で示すことができる。タスクテーブルを利用している共有メモリ１０６からプロセッサタスクＢが選択され、このタスクテーブルが、実行の準備ができているプロセッサタスクの優先度順序を表す、と仮定する。タスクＢは、サブ処理ユニットＳＰＵ１上で動作している。同様に、タスクテーブルにしたがって共有メモリ１０６からプロセッサタスクＣが選択され、サブ処理ユニットＳＰＵ２上で動作していると仮定する。プロセッサタスクＢとプロセッサタスクＣが選択された時点で、より高い優先度のプロセッサタスクＡは実行の準備ができておらず、したがって実行のために選択されたなかったと仮定する。しかしながら、プロセッサタスクＢとプロセッサタスクＣが動作している間に、プロセッサタスクＡの実行の準備ができると仮定する。
【００７８】
図２１を参照して、プロセッサタスクＢは、サブ処理ユニットＳＰＵ１の実行権を譲渡（yield）してもよい。プロセッサタスクＢによるこの譲渡アクションは、実行権の譲渡がソフトウェアアプリケーションの全体的な実行に有益であると判断したプログラマにより発生してもよい。いずれの場合も、サブ処理ユニットＳＰＵ１は、共有メモリ１０６にプロセッサタスクＢを書き込み、タスクテーブルを更新することによって、この実行権の譲渡に応答する。サブ処理ユニットＳＰＵ１はまた、タスクテーブルにアクセスし、共有メモリ１０６内の複数のプロセッサタスクのうちいずれをコピーし実行するべきかを判定する。この例では、タスクテーブルによるとプロセッサタスクＡが最も高い優先度を持ち、したがって、サブ処理ユニットＳＰ１は、プロセッサタスクＡを実行のために共有メモリ１０６から自身のローカルメモリにコピーする。この時点で、サブ処理ユニットＳＰ１はプロセッサタスクＡを実行し、サブ処理ユニットＳＰ２はプロセッサタスクＣの実行を継続する。
【００７９】
図２２をさらに参照して、プロセッサタスクＣは、他のプロセッサタスクにサブ処理ユニットＳＰＵ２の実行権を譲渡してもよい。また、この実行権の譲渡は、プログラム命令および／またはプロセッサタスクＣの条件によって呼び出されてもよい。いずれの場合も、サブ処理ユニットＳＰ２はプロセッサタスクＣを共有メモリ１０６に書き戻し、タスクテーブルを更新する。サブ処理ユニットＳＰ２はまた、タスクテーブルにアクセスし、実行の準備ができているプロセッサタスクのうちいずれをコピーするかを決定する。この実施例では、プロセッサタスクＢが実行の準備ができており、また実行の準備ができている複数のプロセッサタスクの中で最も高い優先度を持つ。したがって、サブ処理ユニットＳＰＵ２は、実行のためにプロセッサタスクＢを共有メモリ１０６から自身のローカルメモリにコピーする。
【００８０】
図２０に示した処理状況と図２２に示した処理状況を比較すると、プロセッサタスクＢがサブ処理ユニットＳＰＵ１からサブ処理ユニットＳＰＵ２に移動したことが分かる。
【００８１】
図２３および図２４を参照して、本発明のプリエンプティブなマルチタスク態様を示す。本発明のこれらの態様は、例えばサブ処理ユニットＳＰＵ２であるサブ処理ユニット上で実行中の低い優先度のプロセッサタスクが、より高い優先度のプロセッサタスク、例えばプロセッサタスクＡでプリエンプティブに置換されてもよいことを述べる。より詳細には、プロセッサタスクＢはサブ処理ユニットＳＰＵ１上で動作していてもよいし、プロセッサタスクＣはサブ処理ユニットＳＰＵ２（図２３）上で動作していてもよい。その後、より高い優先度タスク、つまりタスクＡの実行の準備ができるようになってもよい。これは、システムの他のサブ処理ユニットによる何らかのアクションを原因として発生してもよい。
【００８２】
説明のため、例えばプロセッサタスクＢの実行の結果として、サブ処理ユニットＳＰＵ１がタスクＡのステータスを実行状態に変更したと仮定する。その結果、サブ処理ユニットＳＰＵ１は、プロセッサタスクＡの優先度が、他のサブ処理ユニット上で動作中のプロセッサタスクのあらゆる優先度より高いか否かについての判定をすることが好ましい。この単純化されたケースにおいて、サブ処理ユニットＳＰＵ１は、プロセッサタスクＡがプロセッサタスクＣより高い優先度を持つか否かについて判定を行う。優先度が高い場合、サブ処理ユニットＳＰＵ１は、少なくともプロセッサタスクＣをプロセッサタスクＡで置換することを開始する。言い換えると、 サブ処理ユニットＳＰＵ１は、プロセッサタスクＣにサブ処理ユニット１０２を明け渡してプロセッサタスクＡに与えさせる。この点に関して、サブ処理ユニットＳＰＵ１のカーネルは、サブ処理ユニットＳＰＵ２のカーネルに割り込みを発行してもよい。割り込みに応答して、サブ処理ユニットＳＰＵ２は、共有メモリ１０６にプロセッサタスクＣを書き戻して、タスクテーブル（図２４）を更新してもよい。サブ処理ユニットＳＰＵ２はまた、実行のためにプロセッサタスクＡを共有メモリから自身のローカルメモリにコピーしてもよい。
【００８３】
図２５と図２６を参照して、本発明の特定の直接移動態様を示す。これらの態様は、サブ処理ユニットのひとつで実行中のより高い優先度のプロセッサタスクが、より低い優先度のプロセッサタスクを実行している別のサブ処理ユニットに移動されてもよいことを述べる。この移動は、より高い優先度のプロセッサタスクを実行しているサブ処理ユニットによって受け取られる直接の割り込みに応答してなされてもよい。図２５を参照して、サブ処理ユニットＳＰＵ１は、他のいくつかのタスクを実行しなければならないことを示す割り込みを受け取ってもよい。この割り込みは、サブ処理ユニットＳＰＵ１に、システムの他のサブ処理ユニットのいずれがより低い優先度のプロセッサタスクを実行しているかについての判定をさせるようにしてもよい。その場合、このようなサブ処理ユニットは、より高い優先度の処理タスクを支持して、プロセッサタスクの実行権を譲渡してもよい。より詳細には、サブ処理ユニットＳＰＵ１は、サブ処理ユニットＳＰＵ２がプロセッサタスクＡより低い優先度のプロセッサタスク（例えばプロセッサタスクＢ）を実行していると判定する場合、サブ処理ユニットＳＰＵ１のカーネルは、サブ処理ユニットＳＰＵ２のカーネルに割り込みを発行することが好ましい。割り込みに応答して、サブ処理ユニットＳＰＵ２は、プロセッサタスクＢを自身のローカルメモリから共有メモリ１０６に書き戻して、タスクテーブルを更新する。サブ処理ユニットＳＰＵ２はまた、実行のためにプロセッサタスクＡをサブ処理ユニットＳＰＵ１のローカルメモリから自身のローカルメモリにコピーする（または、移動する）ことが好ましい。
【００８４】
図２７は、処理ユニット（ＰＵ）が本発明の一態様にしたがって割り込みを処理する方法について示す。第１のステップにおいて、ＰＵは割り込みを受け取る。ＰＵは、いずれのサブ処理ユニット（この場合、ＳＰＵ０、ＳＰＵ１、ＳＰＵ２のグループ）が最も低い優先度を有しているかを判定する。そして、ＰＵは最も低い優先度を有するＳＰＵに割り込みを送信する。図２７の場合、ＳＰＵ２が最も低い優先度を持つので、ＰＵはＳＰＵ２に割り込みを送信する。
【００８５】
本発明のひとつまたは複数のさらなる態様によると、サブ処理ユニットのひとつから別のサブ処理ユニットへの割り込みは、多数の方法で処理することができる。図２８を参照して、本発明の一実施形態において、ひとつのサブ処理ユニットが、システム内の他のサブ処理ユニットのいずれかに対する割り込みを管理するよう指定されていてもよい。指定されたサブ処理ユニットは、このようなタスク移動割り込みの全てを受け取り、それらを自ら処理するか、または他のサブ処理ユニットにその割り込みを渡すかについて判定をする。例えば、割り込みが指定されたサブ処理ユニットに向けられたものであった場合、指定されたサブ処理ユニット自身でその割り込みを処理してもよい。代替的に、割り込みが指定されたサブ処理ユニットに向けられたものでなかった場合、指定されたサブ処理ユニットは、その割り込みを、最も低い優先度のプロセッサタスクを実行しているサブ処理ユニットに送信してもよい。
【００８６】
図２９は、分散割り込み処理スキームが使用される別の方法を示す。この技術によると、それぞれの割り込みは各サブ処理ユニットに割り当てられる。例えば、割り込みＡがサブ処理ユニットＳＰＵ０に割り当てられてもよい。割り込みＢ、Ｃがサブ処理ユニットＳＰＵ１に割り当てられ、割り込みＤ、Ｅ、Ｆがサブ処理ユニットＳＰＵ２に割り当てられてもよい。
【００８７】
図２３から図２６を参照して述べた説明では、システムの他のサブ処理ユニット上で動作中のるプロセッサタスクの優先度を、サブ処理ユニットが判定可能である必要があった。本発明の一実施形態によれば、サブ処理ユニットは、実行中のプロセッサタスクの優先度を判定する際に、共有のタスク優先度テーブルを利用してもよい。共有タスク優先度テーブルは共有メモリに置かれていてもよく、サブ処理ユニット識別子およびプロセッサタスク優先度識別子のための複数のエントリを含んでいてもよい。例えば、サブ処理ユニット識別子は、サブ処理ユニットに固有の数字および／または英数字のコードであってもよい。プロセッサタスク優先度識別子は、好ましくは、実行中の特定のプロセッサタスクの優先度を示す。共有タスク優先度テーブルの各エントリは、サブ処理ユニット識別子と優先度識別子のペアを含むことが好ましく、これらは、関連付けられたサブ処理ユニット上で実行中の所与のプロセッサタスクの優先度を示す。このように、実行中のプロセッサタスクの優先度を判定しようとしているサブ処理ユニットは、共有タスク優先度テーブルにアクセスして、より低い優先度のプロセッサタスクを実行しているサブ処理ユニットを発見してもよい。最も低い優先度のプロセッサタスクを実行中のサブ処理ユニットが特定されて、より高い優先度のプロセッサタスクに実行権を譲渡することが好ましい。
【００８８】
本発明の他の実施形態は、サブ処理ユニットが、いずれのサブ処理ユニットが最も低い優先度のプロセッサタスクを実行中かを表す共有変数を利用することを提供する。優先度の正確な表示が保証されるように、共有変数の使用は微少更新プロセス（atomic update process）を通して達成されることが好ましい。代替的な方法は、ひとつのサブ処理ユニットから別のサブ処理ユニットに順次送信される、連続したメッセージを利用してもよい。メッセージは、より低い優先度のプロセッサタスクの優先度識別子とサブ処理ユニット識別子によって更新されてもよい。
【００８９】
図３０を参照して、本発明の別の実施形態は、処理能力を強化するために、多数の処理要素２００を結合することによって、プロセッサタスク１１０を実行するために割り当てられるサブ処理ユニット２０８の数を増加してもよいことを考察する。例えば、２つ以上のプロセッサ要素２００Ａ、２００Ｂは、ひとつまたは複数のチップパッケージ内などにパッケージングされるか結合されて、一組のマルチプロセッサ装置を形成してもよい。この構成を広帯域エンジン（ＢＥ）と称してもよい。広帯域エンジン２９０は、２つのプロセッサ要素２００Ａ、２００Ｂを含み、これらはバス２１２を介してデータ通信のために相互接続される。プロセッサ要素２００Ａ、２００Ｂおよび共有ＤＲＡＭ２１４の間で通信を可能にするように、追加的なデータバス２１６が提供されることが好ましい。ひとつまたは複数の入出力（Ｉ／Ｏ）インタフェース２０２Ａ、２０２Ｂおよび外部バス（図示せず）は、広帯域エンジン２９０と任意の外部要素の間の通信を提供する。広帯域エンジン２９０のプロセッサ要素２００Ａ、２００Ｂは、それぞれ、図３に関して上述したサブ処理装置２０８によって実行される並列で独立したアプリケーションおよびデータの処理に類似の並列で独立の態様で、データおよびアプリケーションの処理を実行する。本発明の様々な態様によれば、広帯域エンジンは単一のプロセッサ要素を備えていても多数の処理要素を備えていてもよい。さらに、広帯域エンジンはマルチプロセッシング広帯域エンジンから形成されてもよい。
【００９０】
図３１を参照する。ここで、スタンドアロン型のマルチプロセッシング要素２０８、またはマルチプロセッシング要素のセットである広帯域エンジン２９０が複数の製品に分散されて、マルチプロセッサシステム５００を形成してもよい。コンピュータおよび／またはコンピューティングデバイスとして実装された、システム５００の要素またはメンバは、ネットワーク５０４を介して通信することが好ましい。ネットワーク５０４は、ローカルエリアネットワーク（ＬＡＮ）であっても、インターネットや他の任意のコンピュータネットワークのような大域的ネットワークであってもよい。
【００９１】
例えば、ネットワーク５０４に接続されたメンバは、例えば、クライアントコンピュータ５０６、サーバコンピュータ５０８、個人携帯情報機器（ＰＤＡ）５１０、デジタルテレビ（ＤＴＶ）５１２、または、そのほかの有線または無線ワイヤレスコンピュータおよびコンピューティングデバイスを含む。例えば、クライアント５０６Ａは、ひとつまたは複数のＰＥ２００、または他の適切なマルチプロセッサシステムから構成されるラップトップコンピュータであってもよい。クライアント５０６Ｂは、ひとつまたは複数のＰＥ２００、または他の適切なマルチプロセッサシステムから構成されるデスクトップコンピュータ（またはセットトップボックス）であってもよい。さらに、サーバ５０８Ａはデータベース機能を使用した管理要素（administrative entity）であってもよく、これはひとつまたは複数のＰＥ２００から好ましくは構成される。
【００９２】
したがって、マルチプロセッサシステム５００の処理能力は、ローカルに（例えば、ひとつの製品に）またはリモートに（例えば複数の製品に）配置された複数のプロセッサ要素２００に依存してもよい。この点に関して、図３２は、本発明のひとつまたは複数の態様による全体的なコンピュータネットワークのブロック図である。ＰＥ２００および／または多数のＰＥからなる広帯域エンジン２９０は、コンピュータシステム５００の全体的な分散アーキテクチャを実装するために利用することができる。
【００９３】
システム５００のサーバ５０８がクライアント５０６より多くのデータおよびアプリケーションの処理を実行するので、サーバ５０８は、クライアント５０６より多くのコンピュータモジュール（例えばＰＥ２００）を含む。他方、ＰＤＡ５１０は、この実施例において最小の処理量を実行する。したがって、ＰＤＡ５１０は、単一のＰＥ２００のように最小数のＰＥ２００を含む。ＤＴＶ５１２は、実質的にクライアント５０６とサーバ５０８の間の処理レベルを実行する。したがって、ＤＴＶ５１２は、クライアント５０６のプロセッサ要素とサーバ５０８のプロセッサ要素の間の数のプロセッサ要素を含む。
【００９４】
分散マルチプロセッサシステム５００に関して、さらに詳細に述べる。システム５００の均質的な構成は、適応性、処理速度、処理効率を促進する。システム５００の各メンバが同一のコンピューティングモジュール、例えばプロセッサ要素２００のひとつまたは複数（またはその一部）を使用して処理を実行するので、データおよびアプリケーションの処理がネットワークメンバで共有されてもよいため、データおよび／またはアプリケーションの処理を実行するコンピュータおよびコンピューティングデバイスの特定は、重要でない。システム５００により処理されるデータおよびアプリケーションを含むソフトウェアセルを固有に識別することによって、処理が発生した場所にかかわらず、その処理を要求するコンピュータまたはコンピューティングデバイスに処理結果を送信することができる。処理を実行するモジュールが共通の構造を有し、共通の命令セットアーキテクチャを使用するので、プロセッサ間の互換性を得るための追加ソフトウェアレイヤによる計算負荷が省かれる。このアーキテクチャおよびプログラミングモデルは、例えば、リアルタイムでマルチメディアのアプリケーションを実行するのに必要な処理速度を促進する。
【００９５】
システム５００により促進される処理速度および処理効率のさらなる利点を得るために、このシステムにより処理されるデータおよびアプリケーションは、固有に識別され一様にフォーマット化されたソフトウェアセル５０２にパッケージングされてもよい。各ソフトウェアセル５０２は、アプリケーションおよびデータの両方を含み、または含んでもよい。各ソフトウェアセルはまた、ネットワーク５０４およびシステム５００の全体にわたってセルを識別するためにＩＤを持つ。ソフトウェアセルの構造の均質性、およびネットワーク全体にわたるソフトウェアセルの一様な識別により、ネットワーク５０４の任意のコンピュータまたはコンピューティングデバイス上でのアプリケーションおよびデータの処理が容易になる。例えば、クライアント５０６がソフトウェアセル５０２を実行してもよいが、クライアント５０６の処理能力が限られているため、ソフトウェアセル５０２を処理のためにサーバ５０８に送信してもよい。したがって、ソフトウェアセル５０２は、ネットワーク５０４上の処理リソースの利用可能性に基づいて、ネットワーク５０４の全体にわたって移動することができる。
【００９６】
システム５００のプロセッサおよびソフトウェアセル５０２の均質的な構造により、今日の異機種間ネットワークの課題の多くが回避される。任意の命令セット、例えばＪａｖａ仮想マシン（Ｊａｖａは登録商標）のような仮想マシンを使用して、任意のＩＳＡでのアプリケーションの処理を可能にしようとする非効率的なプログラムモジュールが回避される。したがって、システム５００は、従来のネットワークより効果的にまた効率的に、ブロードバンド処理を実行することができる。
【００９７】
「マルチプロセッサシステムにおけるプロセッサタスクの移動方法および装置」と題する同時に譲渡された米国特許出願第１０／７８３，２３８号（代理人番号ＳＣＥＩ  １．０−１８７）は、本出願と同日に米国特許商標庁に出願され、参照により完全に本願明細書に援用される。
【００９８】
本明細書において特定の実施形態を参照して本発明を記載したが、これらの実施形態が単に本発明の原理および応用を例示するものにすぎないことは理解されよう。したがって、例示した実施形態に多数の修正を施すことができることが理解され、また、その他の構成を、添付の特許請求の範囲に記載の本発明の趣旨および範囲から逸脱することなく考案することができる。
【図面の簡単な説明】
【００９９】
【図１】本発明のひとつまたは複数の態様によるマルチプロセッサシステムの構造を示す図である。
【図２】共有メモリ内のプロセッサタスクの格納を示すブロック図である。
【図３】本発明のプロセッサ要素（ＰＥ）の好適な構造を示す図である。
【図４】本発明による例示的なサブ処理ユニット（ＳＰＵ）の構造を示す図である。
【図５】本発明のひとつまたは複数の態様により使用可能なプロセッサタスクテーブルの一例を示す図である。
【図６】図５のタスクテーブルによって設定されるプロセッサタスクのリンク付きリストの状態図である。
【図７】図５のタスクテーブルとともに使用してプロセッサタスクの実行を管理することができるタスクキューの一例を示す図である。
【図８】本発明のひとつまたは複数の態様によるマルチプロセッサシステムによって実行可能なプロセスステップを示すフロー図である。
【図９】本発明のマルチプロセッサシステムによって実行可能なプロセスステップを示すフロー図である。
【図１０】本発明のマルチプロセッサシステムによって実行可能なプロセスステップを示すフロー図である。
【図１１】共有メモリ内のプロセッサタスクを初期化し、本発明の様々な態様によるマルチプロセッサシステムにより実行可能なプロセスステップを示すフロー図である。
【図１２】本発明のひとつまたは複数の態様による、プロセッサタスクの異なるステータス状態を示す状態図である。
【図１３】本発明のひとつまたは複数の態様による、プロセッサタスクが共有メモリからコピーされ共有メモリに書き戻される方法を示すブロック図である。
【図１４】図１３のコピーおよび書き戻し技術に関連するレイテンシの処理を示すタイミング図である。
【図１５】本発明のひとつまたは複数の態様による、プロセッサタスクが共有メモリからコピーされ共有メモリに書き戻される方法を示すブロック図である。
【図１６】図１５のコピーおよび書き戻し技術に関連するレイテンシの処理を示すタイミング図である。
【図１７】本発明のひとつまたは複数の態様による、プロセッサタスクが共有メモリからコピーされ共有メモリに書き戻される方法を示すブロック図である。
【図１８】図１７のコピーおよび書き戻し技術に関連するレイテンシの処理を示すタイミング図である。
【図１９】本発明のひとつまたは複数の態様による、プロセッサタスクが共有メモリからコピーされ共有メモリに書き戻される方法を示すブロック図である。
【図２０】本発明の特定の態様のノン・プリエンプティブなプロセッサタスク移動を示すブロック図である。
【図２１】本発明の特定の態様のノン・プリエンプティブなプロセッサタスク移動を示すブロック図である。
【図２２】本発明の特定の態様のノン・プリエンプティブなプロセッサタスク移動を示すブロック図である。
【図２３】本発明の特定の態様のプリエンプティブなマルチタスクを示すブロック図である。
【図２４】本発明の特定の態様のプリエンプティブなマルチタスクを示すブロック図である。
【図２５】本発明の特定の態様のプリエンプティブなプロセッサタスク移動を示すブロック図である。
【図２６】本発明の特定の態様のプリエンプティブなプロセッサタスク移動を示すブロック図である。
【図２７】本発明のひとつまたは複数の態様による特定プロセッサ割り込み技術を示す部分的なブロック図と部分的なフロー図である。
【図２８】本発明のひとつまたは複数の態様によるプロセッサ割り込み技術を示す部分的なブロック図と部分的なフロー図である。
【図２９】本発明のひとつまたは複数の態様によるプロセッサ割り込み技術を示す部分的なブロック図と部分的なフロー図である。
【図３０】本発明のひとつまたは複数の態様による２つ以上のサブ処理ユニットを含む処理システムの構造を示す図である。
【図３１】本発明のひとつまたは複数の態様による分散マルチプロセッサシステムのシステム図である。
【図３２】本発明のマルチプロセッシングユニットと共に使用可能なソフトウェアセルのブロック図である。
【符号の説明】
【０１００】
１００  マルチプロセッサシステム、  １０２  サブ処理ユニット、  １０６  共有メモリ、  １１０  プロセッサタスク。
【図１】
2005235228.tif 000003
【図２】
2005235228.tif 000004
【図３】
2005235228.tif 000005
【図４】
2005235228.tif 000006
【図５】
2005235228.tif 000007
【図６】
2005235228.tif 000008
【図７】
2005235228.tif 000009
【図８】
2005235228.tif 000010
【図９】
2005235228.tif 000011
【図１０】
2005235228.tif 000012
【図１１】
2005235228.tif 000013
【図１２】
2005235228.tif 000014
【図１３】
2005235228.tif 000015
【図１４】
2005235228.tif 000016
【図１５】
2005235228.tif 000017
【図１６】
2005235228.tif 000018
【図１７】
2005235228.tif 000019
【図１８】
2005235228.tif 000020
【図１９】
2005235228.tif 000021
【図２０】
2005235228.tif 000022
【図２１】
2005235228.tif 000023
【図２２】
2005235228.tif 000024
【図２３】
2005235228.tif 000025
【図２４】
2005235228.tif 000026
【図２５】
2005235228.tif 000027
【図２６】
2005235228.tif 000028
【図２７】
2005235228.tif 000029
【図２８】
2005235228.tif 000030
【図２９】
2005235228.tif 000031
【図３０】
2005235228.tif 000032
【図３１】
2005235228.tif 000033
【図３２】
2005235228.tif 000034