(57)【特許請求の範囲】
【請求項１】
マルチプロセッサ・データ処理システムにおいて、共用メモリについてガーベッジ・コレクション動作を実行するための方法であって、
前記マルチプロセッサ・データ処理システムのプロセッサ内で前記共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードするステップと、
前記プロセッサに割り当てられた前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクトへの参照に基づいて、前記共用メモリの前記部分についてマーキング動作を実行するステップであって、前記ガーベッジ・コレクション動作の一部として、再利用できない到達可能なメモリ・オブジェクトを識別するステップと、
前記再利用できない到達可能なメモリ・オブジェクトについてスイープ動作を行うステップと、
を有し、
前記マーキング動作を実行するステップが、
前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照が識別されるまで、前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクト参照と従属メモリ・オブジェクトへの参照を追跡するステップと、
前記共用メモリの前記部分内にあるメモリ・オブジェクトへの参照を前記ローカル・マーク・スタックに保管するステップと、
前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照を非ローカル・マーク・スタックに保管するステップと、
前記ローカル・マーク・スタックに関連するローカル・マーク記述子データ構造をグローバル・マーク記述子データ構造とマージするステップと、
前記非ローカル・マーク・スタックを前記グローバル・マーク・キューの追跡対象部分とマージするステップであって、前記グローバル・マーク・キューの前記追跡対象部分が、前記マーキング動作を実行することによって処理すべきメモリ・オブジェクト参照を含み、前記ローカル・マーク記述子データ構造が、その参照が前記ローカル・マーク・スタック内にあるメモリ・オブジェクトに関する到達可能性情報を含むステップと、
を含む方法。
【請求項２】
前記グローバル・マーク・キューの前記部分が前記グローバル・マーク・キューのある部分全体より小さく、前記グローバル・マーク・キューの前記部分に対応する前記共用メモリの前記部分が前記共用メモリのある部分全体より小さい、請求項１に記載の方法。
【請求項３】
前記共用メモリのある部分に対応する前記グローバル・マーク・キューのある部分をロードする前記ステップが、
最初に、前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクトへの参照に基づいて、ローカル・マーク・スタックを構成するステップと、
前記グローバル・マーク・キューの前記部分に対応する前記共用メモリのある部分を、前記プロセッサのローカル・ストアにロードするステップであって、前記マルチプロセッサ・データ処理システムの複数の前記プロセッサの各プロセッサが、前記グローバル・マーク・キューの種々の部分と前記共用メモリの対応する種々の部分とをロードし、前記グローバル・マーク・キューの前記種々の部分内のメモリ・オブジェクト参照に基づいて、前記共用メモリの前記種々の部分についてマーキング動作を実行するステップと、
を含む、請求項１に記載の方法。
【請求項４】
前記グローバル・マーク記述子データ構造が、前記マルチプロセッサ・データ処理システムのプロセッサのローカル・マーク・スタック内で、前記共用メモリのある部分内にあるものとして識別されたメモリ・オブジェクトへのすべての参照を含む、請求項１に記載の方法。
【請求項５】
前記マルチプロセッサ・データ処理システムが、制御プロセッサと少なくとも１つのコプロセッサとを有する異機種マルチプロセッサ・データ処理システムであり、前記制御プロセッサと前記少なくとも１つのコプロセッサが、種々の命令セットを使用して動作する、請求項１に記載の方法。
【請求項６】
前記グローバル・マーク・キューのある部分のロードと、マーキング動作の実行と、前記共用メモリのある部分内にないメモリ・オブジェクトへの参照の識別が、前記少なくとも１つのコプロセッサのうちの１つまたは複数のコプロセッサによって実行される、請求項５に記載の方法。
【請求項７】
前記ロード、実行、および識別動作が、前記少なくとも１つのコプロセッサのうちの前記１つまたは複数のコプロセッサのメモリ・フロー・コントローラによって実行される、請求項６に記載の方法。
【請求項８】
コンピュータ可読プログラムを有するコンピュータ使用可能媒体を含むコンピュータ・プログラムであって、前記１〜７の何れか１つに記載の方法の各ステップを前記マルチプロセッサ・データ処理システムに実行させる、コンピュータ・プログラム。
【請求項９】
ガーベッジ・コレクションを実行するためのシステムであって、
それぞれが関連ローカル・ストアを有する複数のプロセッサと、
前記複数のプロセッサに結合された共用メモリと、
を有し、前記複数のプロセッサのうちの１つまたは複数のプロセッサが、
前記プロセッサ内で前記共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードし、
前記プロセッサに割り当てられた前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクトへの参照に基づいて、前記共用メモリの前記部分についてマーキング動作を実行する手段であって、前記ガーベッジ・コレクション動作の一部として、再利用できない到達可能なメモリ・オブジェクトを識別する手段と、
前記再利用できない到達可能なメモリ・オブジェクトについてスイープ動作を行う手段と、
を具備し、
前記マーキング動作を実行する手段が、
前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照が識別されるまで、前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクト参照と従属メモリ・オブジェクトへの参照を追跡する手段と、
前記共用メモリの前記部分内にあるメモリ・オブジェクトへの参照を前記ローカル・マーク・スタックに保管する手段と、
前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照を非ローカル・マーク・スタックに保管する手段と、
前記ローカル・マーク・スタックに関連するローカル・マーク記述子データ構造をグローバル・マーク記述子データ構造とマージする手段と、
前記非ローカル・マーク・スタックを前記グローバル・マーク・キューの追跡対象部分とマージする手段であって、前記グローバル・マーク・キューの前記追跡対象部分が、前記マーキング動作を実行することによって処理すべきメモリ・オブジェクト参照を含み、前記ローカル・マーク記述子データ構造が、その参照が前記ローカル・マーク・スタック内にあるメモリ・オブジェクトに関する到達可能性情報を含む手段と、
具備する、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、一般に、改良されたデータ処理システムおよび方法に関する。より具体的には、本出願は、異機種マルチプロセッサ・システムにおけるガーベッジ・コレクション（garbage collection）のためのシステムおよび方法を対象とする。
【背景技術】
【０００２】
コンピュータ・プログラムは、実行されると、データ・バッファのためのメモリを割り振る。コンピュータ・プログラムがこのようなメモリを割り振り続けると、最終的に物理的なメモリ容量を超える可能性がある。このような状況では、実行し続けるために、オペレーティング・システムは、仮想メモリ内、すなわち、ディスク上に、プログラムの部分を配置しなければならず、それにより、コンピュータ・プログラムの実行が減速される。あるルーチンがもはやメモリのその部分を必要としなくなった後でメモリを手動で割り振り解除することは、プログラマが往々にして実行するのを忘れるかまたは適切に実行しない退屈な作業である。
【０００３】
メモリの手動割り振り解除に代わるものとして、ガーベッジ・コレクションが開発された。ガーベッジ・コレクションとは、一般的なメモリ・プール、すなわち、ヒープのためにそのスペースを再利用するために、非アクティブ・データおよび命令の領域があるかどうかメモリをサーチするソフトウェア・ルーチンの使い方である。ガーベッジ・コレクタ（garbage collector）は、基本的に、プログラムの今後の実行の際にそのプログラム内のどのデータ・オブジェクトがアクセスされないかを判断し、このようなオブジェクトによって使用される記憶域を再利用することによって機能する。
【０００４】
ガーベッジ・コレクションは、もはや必要ではないオブジェクトのリリースについてプログラマがもはや心配しなくてもよいように、メモリの解放を自動化する。その結果、相当なプログラム設計努力の原因を回避することができる。その上、ガーベッジ・コレクションは、複数クラスのランタイム・エラー、たとえば、割り振り解除されたオブジェクトへの参照が使用されるダングリング・ポインタ・エラーの低減により、プログラミング言語をより安全なものにするのを支援する。
【０００５】
現在、ガーベッジ・コレクション済み言語（garbage-collectedlanguage）と呼ばれる多くのコンピュータ・プログラミング言語は、言語指定の一部として（たとえば、Ｊａｖａ（登録商標）、Ｃ＃、ほとんどのスクリプト言語）または効果的に実用的な実現（たとえば、ラムダ計算式（lambda calculus）のような形式言語）のためにガーベッジ・コレクションを必要とする。その他のコンピュータ・プログラミング言語は、手動メモリ管理とともに使用するために設計されているが、ガーベッジ・コレクション済み実現例（たとえば、Ｃ、Ｃ＋＋）を有する。Ｍｏｄｕｌａ−３などのその他のコンピュータ・プログラミング言語は、収集され、手動で管理されたオブジェクトについて個別のヒープを使用することにより、ガーベッジ・コレクションと手動メモリ管理の両方が同じアプリケーション内に共存できるようにしている。
【０００６】
追跡ガーベッジ・コレクタ（tracinggarbage collector）は、最も一般的なタイプのガーベッジ・コレクタである。追跡ガーベッジ・コレクタは、どのオブジェクトが到達可能または潜在的に到達可能であるかを判断し、次に残りのオブジェクトをすべて廃棄することに焦点を合わせている。到達可能なオブジェクトは、直接またはその他の到達可能なオブジェクトからの参照を介してそれに至るような何らかの名前がプログラム環境内に存在するオブジェクトとして定義することができる。より精密には、オブジェクトが到達可能になりうるのは２通りの方法のみである。第一に、区別された１組のオブジェクトが到達可能であると想定され、これらはルーツとして知られている。典型的には、これらは、呼び出しスタック内の任意の場所から参照されたすべてのオブジェクト、すなわち、現在呼び出されている関数内のすべてのローカル変数およびパラメータと、任意のグローバル変数を含む。第二に、到達可能なオブジェクトから参照された任意のものはそれ自体が到達可能である。これは推移性（transitivity）と呼ばれる。
【０００７】
追跡ガーベッジ・コレクタは、それがガーベッジ・コレクション・サイクルを実行するアルゴリズムを使用する。記憶域を再利用する必要があるとコレクタが判断するかまたはその必要があるとコレクタに通知されたときにサイクルが開始され、これは特にシステムのメモリが少ないときに発生する。すべての追跡ガーベッジ・コレクタは、３色マーキング抽象化（tri-color marking abstraction）の何らかの変形を実現するが、マーク・アンド・スイープ（mark-and-sweep）・コレクタなどの単純なコレクタはこの抽象化を明示的なものにしない場合が多い。３色マーキングは以下のように機能する。
【０００８】
第一に、サイクル中の進行状況を維持するために使用される初期のホワイト、グレー、ブラックのセットが作成される。最初に、ホワイト・セット（white set）または不良セット（condemnedset）は、そのメモリをリサイクルさせるための候補であるオブジェクトのセットである。ブラック・セット（black set）は、ホワイト・セット内のオブジェクトへの参照を含まないことが容易に証明できるオブジェクトのセットである。多くの実現例では、ブラック・セットは空の状態から始まる。グレー・セット（grey set）は、ホワイト・セット内のオブジェクトへの参照を含む場合もあれば含まない場合もある、残りのすべてのオブジェクトである。これらのセットは、ルート・セットを含むシステム内のすべてのオブジェクトが精密に１つのセット内にあるようにメモリをパーティション化する。
【０００９】
その後、グレー・セット内のオブジェクトが選択される。このオブジェクトが直接参照するすべてのホワイト・オブジェクトを「グレー化する（greying）」、すなわち、そのオブジェクトが参照するすべてのホワイト・オブジェクトおよびそれらが参照するオブジェクトをブラック化することにより、このオブジェクトはブラック化、すなわち、ブラック・セットに移動される。このステップは、グレー・セットが空になるまで繰り返される。グレー・セット内にそれ以上オブジェクトが存在しなくなると、ホワイト・セット内に残っているすべてのオブジェクトは到達可能ではないと証明可能であり、それらによって占有される記憶域は再利用することができる。
【００１０】
３色マーキング・アルゴリズムにより、どのブラック・オブジェクトも直接、ホワイト・オブジェクトを指し示すことはない。これは、グレー・セットが空になると、ホワイト・オブジェクトを安全に破棄できることを保証するものである。
【００１１】
到達不能なセット、すなわち、グレー・セットが空になったときに結果として得られるホワイト・セットが決定されると、ガーベッジ・コレクタは、単純に到達不能なオブジェクトをリリースし、他のものはすべてそのままの状態にすることができる。代わって、ガーベッジ・コレクタは、到達可能なオブジェクトの一部または全部を新しいメモリ域にコピーし、それらのオブジェクトへのすべての参照を必要に応じて更新することができる。これらは、それぞれ「非移動（non-moving）」および「移動（moving）」ガーベッジ・コレクタと呼ばれる。
【００１２】
また、追跡コレクタは、コレクション・サイクル中に３つのセットのオブジェクト（ホワイト、グレー、およびブラック）がどのように維持されるかを考慮することによってカテゴリ化することもできる。最も直截的な手法はセミスペース・コレクタ（semi-space collector）であり、これは、メモリを「移動元スペース（from space）」および「移動先スペース（tospace）」にパーティション化する、移動ガーベッジ・コレクション方式である。最初に、それが一杯になり、ガーベッジ・コレクション・サイクルがトリガされるまで、オブジェクトは「移動先スペース」内に割り振られる。ガーベッジ・コレクションの始めに、「移動先スペース」は「移動元スペース」になり、逆もまた同様である。ルート・セットから到達可能なオブジェクトは「移動元スペース」から「移動先スペース」にコピーされる。次に、これらのオブジェクトはスキャンされ、すべての到達可能なオブジェクトが「移動先スペース」にコピーされてしまうまで、それらが指し示すすべてのオブジェクトが「移動先スペース」にコピーされる。プログラムが実行を続けると、この場合も、それが一杯になるまで新しいオブジェクトが「移動先スペース」から割り振られ、プロセスが繰り返される。この手法は、コピー・プロセス中に３つのオブジェクト・カラー・セットが暗黙のうちに構築されるので、概念上の簡潔さという利点を有するが、おそらくどのコレクション・サイクルでもフリー・メモリの非常に大きい連続領域が必要になる可能性があるという欠点も有する。
【００１３】
一般に、「マーク・アンド・スイープ」ガーベッジ・コレクタは、それがホワイトであるかブラックであるかを記録するために、各オブジェクトとともに１ビットまたは２ビットを維持する。グレー・セットは、個別のリストとして維持されるか、または他のビットを使用して識別される。コレクション・サイクル中に参照ツリーがトラバースされるにつれて、これらのビットは、現行状態、すなわち、ホワイト、ブラック、またはグレーを反映するようにコレクタによって操作される。マーク・アンド・スイープ戦略は、到達不能なセット、すなわち、グレー・セットが空になった後に結果として得られるホワイト・セットが決定されると、移動または非移動のコレクション戦略を追求できるという利点を有する。使用可能メモリが許すように、この戦略選択はランタイムでも行うことができる。
【００１４】
ガーベッジ・コレクタのいくつかの実現例では、マーク・アンド・スイープ・ガーベッジ・コレクタは、到達可能であることが分かっているが、その内容がまだ検査されていないオブジェクト（すなわち、「グレー」オブジェクト）を保管するために明示スタック（explicit stack）を使用する。スタック内の各項目は、基底アドレスと、その開始アドレスに対して可能なポインタの位置を示すマーク記述子とを含む。マーク記述子は、典型的には、単純な長さ指定かまたはポインタ位置を記述するビット・ベクトルのいずれかの形を取る。
【００１５】
上記に加えて、ガーベッジ・コレクタは、それらが動作するシステムの他の動作にどのように割り込むかに関して様々なタイプのものになる可能性がある。たとえば、「ストップ・ザ・ワールド（stop-the-world）」ガーベッジ・コレクタは、コレクション・サイクルを実行するためにプログラムの実行を完全に停止し、したがって、コレクタが実行されている間は新しいオブジェクトが割り振られず、オブジェクトが突然到達不能にならないことを保証する。これは、コレクション・サイクルが実行されている間はプログラムが有用な作業をまったく実行できないという明らかな欠点を有する。
【００１６】
「増分（incremental）」ガーベッジ・コレクタは、その作業とメイン・プログラムからのアクティビティをインタリーブすることにより、この中断（disruption）を低減するように設計されている。メイン・プログラムがガーベッジ・コレクタを妨害しないことならびにその逆を保証するために慎重な設計が必要である。たとえば、プログラムが新しいオブジェクトを割り振る必要がある場合、ランタイム・システムは、コレクション・サイクルが完了するまでそれを中断するか、または新しい到達可能なオブジェクトが存在することを何とかしてガーベッジ・コレクタに通知する必要がある可能性がある。
【００１７】
最後に、同時（concurrent）ガーベッジ・コレクタは、対称型マルチプロセッシング・マシン上のメイン・プログラムと同時にリアルタイムで実行することができる。正しさを保証するために、複合ロック体制（complex locking regime）が必要である場合もある。その上、キャッシュ問題も、これを想像以上に役に立たないものにしている。それにもかかわらず、同時ＧＣは、高いパフォーマンス要件を有するＳＭＰアプリケーションには望ましいものである可能性がある。
【非特許文献１】２０００年にヒューレット・パッカード社から発行されたＨＰ  Ｌａｂｓ  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  ２０００−１６５に掲載されたＢｏｅｈｍの「Ｆａｓｔ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ｍｅｍｏｒｙ  Ａｌｌｏｃａｔｉｏｎ  ａｎｄ  Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｏｎ」
【発明の開示】
【発明が解決しようとする課題】
【００１８】
上述のガーベッジ・コレクション・メカニズムは、プロセッサの一様性が存在するデータ処理環境、たとえば、単一プロセッサまたは対称型マルチプロセッシング（ＳＭＰ：symmetric multiprocessing）システムのために開発されたものである。このようなガーベッジ・コレクション・メカニズムを非一様データ処理システム、すなわち、非ＳＭＰコプロセッサ・システム、ソフトウェア管理のメモリ・システム、非一様メモリ・アクセス（ＮＵＭＡ：Non-Uniform Memory Access）システムなどの異機種システムに適用しようと試みると、いくつかの問題が発生する可能性がある。アドレス・フォーマット問題、アドレス変換問題、メモリ位置へのポインタが変更されないことを保証するためにガーベッジ・コレクションが実行される時期、非一様メモリ待ち時間などは、異機種システムによってもたらされる問題のうちのいくつかに過ぎない。
【課題を解決するための手段】
【００１９】
例示的な諸実施形態は、異機種システムにおいてガーベッジ・コレクションを実行するためのシステムおよび方法を提供する。いくつかの例示的な諸実施形態では、異機種マルチプロセッサ・システム内の複数のプロセッサにわたってガーベッジ・コレクション動作が分散される。他の例示的な諸実施形態では、異機種マルチプロセッサ・システム内の単一プロセッサによってガーベッジ・コレクション動作を実行することができる。この単一ガーベッジ・コレクション・プロセッサの実施形態では、ガーベッジ・コレクション・プロセッサは、ガーベッジ・コレクションのみの実行に専念する場合もあれば、他のサービス・タスクに加えてガーベッジ・コレクションを実行する場合もある。
【００２０】
複数のプロセッサにわたってガーベッジ・コレクションが分散される例示的な一実施形態を考慮すると、各プロセッサは、システム・メモリのあるチャンク（chunk）、すなわち、問題のプログラム用のヒープのある部分と、グローバル・マーク・キュー（global mark queue）のある部分とを入手し、それらをそのプロセッサに関連するローカル・ストア（local store）に保管する。したがって、各プロセッサは、グローバル・マーク・キューの異なる部分、すなわち、典型的にはグローバル・マーク・キューのヘッドのある部分のコピーと、それが操作するシステム・メモリの対応する異なる部分のコピーとを有することになる。グローバル・マーク・キューのその部分で参照されるメモリ・オブジェクトは、ローカル・ストアに保管されたメモリのチャンク内に存在するメモリ・オブジェクトへのポインタまたはアドレスを含むローカル・マーク・スタックに追加される。
【００２１】
「マーク・アンド・スイープ」動作は、各プロセッサ内のローカル・マーク・スタックの初期内容を提供するグローバル・マーク・キューの対応する部分で参照されるシステム・メモリ・オブジェクトに基づいて、それぞれのプロセッサによってシステム・メモリの各チャンクについて実行される。一般に当技術分野で知られているように、このような「マーク・アンド・スイープ」動作は、他のメモリ・オブジェクトによるメモリ・オブジェクトへの参照を反復してトラバースし、到達可能なすべてのメモリ・オブジェクトにマークを付けることを伴う。
【００２２】
一度にシステム・メモリの１つのチャンクのみについて操作する場合、このようなトラバーサルの結果、操作中のシステム・メモリのチャンク内にないメモリ・オブジェクトが参照される場合が多い。到達可能なメモリ・オブジェクトおよび到達不能なメモリ・オブジェクトへの参照に加えて、このような参照を追跡しなければならない。
【００２３】
様々なタイプのメモリ・オブジェクトを追跡するために、例示的な諸実施形態のローカル・ガーベッジ・コレクション動作は、ローカル・マーク・スタックと非ローカル・マーク・スタックの両方を使用する。ローカル・マーク・スタックは、プロセッサのローカル・ストアにロードされるシステム・メモリのチャンク内にあるメモリ・オブジェクトへのポインタまたはアドレスを保管する。非ローカル・マーク・スタックは、他のメモリ・オブジェクトによるなど、ソフトウェア・プログラムによって参照されるが、ローカル・ストアにロードされるシステム・メモリの現行チャンク内にないメモリ・オブジェクトへのポインタまたはアドレスを保管する。
【００２４】
最初に、グローバル・マーク・キューのその部分は、ローカル・ストアにロードされるシステム・メモリのチャンク内に存在するメモリ・オブジェクトへのポインタでローカル・マーク・スタックを構成するために使用される。「マーク・アンド・スイープ」動作はローカル・マーク・スタック内のメモリ・オブジェクトへのポインタについて実行されるので、ローカル・ストアにロードされるシステム・メモリのチャンク内に存在しない他のメモリ・オブジェクトへの他のポインタが検出される可能性がある。このようなポインタが検出されると、そのポインタは非ローカル・マーク・スタックに追加される。ローカル・ストア内のシステム・メモリのチャンクで到達可能と判明したメモリ・オブジェクトは、そのメモリ・オブジェクト用のマーク記述子またはそのシステム・メモリのチャンク用のマーク記述子において到達可能というマークが付けられる。このプロセスは、ローカル・マーク・スタック内の各ポインタまたはアドレスごとに続行される。
【００２５】
ローカル・ストア内のシステム・メモリの対応するチャンクに基づいて、ローカル・マーク・スタックを構成するために使用されるグローバル・マーク・キューのその部分で参照のマーキングを実行した後、その参照またはポインタは、マーク記述子において到達可能または到達不能というマークが付けられるか、あるいはその参照がシステム・メモリのそのチャンク内にないメモリ・オブジェクトに対するものである場合に第２のマーク・スタック内に配置される。
【００２６】
メモリ・オブジェクトへのポインタをローカル・マーク・スタックおよび非ローカル・マーク・スタック内に配置することは、たとえば、到達可能であることが分かっているが、その内容がまだ検査されていないオブジェクト（すなわち、「グレー」オブジェクト）を保管するために明示スタックを使用することによって実行することができる。スタック内の各項目は、基底アドレスと、その開始アドレスに対して可能なポインタの位置を示すオフセットとを含むことができる。
【００２７】
マーク・アンド・スイープ動作中に到達したメモリ・オブジェクトに関する情報は、好ましくは、メモリ・オブジェクトの到達可能性（reachability）を示す、メモリ・オブジェクト、システム・メモリ、またはより具体的には、システム・メモリの各ページに関連するビット・マップまたはその他の適切な記述子テーブルを使用して、マーク記述子内に保管される。いくつかの諸実施形態では、たとえば、そのメモリ・オブジェクトが存在するメモリ・ページ用のページ記述子内のメモリ・オブジェクトに関連する適切なビットを使用することができる。
【００２８】
動作中に、そのプロセッサ用のグローバル・マーク・キューのその部分で参照されるメモリ・オブジェクトは最初にローカル・マーク・スタック内に配置される。次に、そのプロセッサのローカル・ストアにロードされるシステム・メモリのチャンク内のこれらのメモリ・オブジェクトの到達可能性を決定するために、マーク・アンド・スイープ動作を使用して、ローカル・マーク・スタック内の項目がチェックされる。到達可能である元のメモリ・オブジェクトに関連する他のメモリ・オブジェクトを決定するために、既知のマーク・アンド・スイープ動作と同様に、これらのメモリ・オブジェクトに関連する参照も同様にチェックされる。例示的な諸実施形態では、他の関連メモリ・オブジェクトをまったく備えていないメモリ・オブジェクトが検出されるまで、あるいはローカル・ストアにロードされるシステム・メモリのそのチャンク内に存在しないメモリ・オブジェクト（以下、「非ローカル（non-local）」メモリ・オブジェクトという）への参照が検出されるまで、このプロセスが繰り返される。後者の場合、「非ローカル」メモリ・オブジェクトへの参照は、非ローカル・マーク・スタックに追加され、対応するマーク記述子において到達可能というマークが付けられない。
【００２９】
ローカル・マーク・スタックを構成するために使用されるグローバル・マーク・キューのその部分内のすべてのシステム・メモリ・オブジェクトがプロセッサによってチェックされ、したがって、その関連メモリ・オブジェクトが上述のようにチェックされ、到達可能というマークが付けられないシステム・メモリ・オブジェクトがグローバル・マーク・キューのその部分にある場合に、そのシステム・メモリ・オブジェクトは、メモリのその部分を再利用させるための候補であるシステム・メモリ・オブジェクトになる。しかし、グローバル・マーク・キューの他の部分にシステム・メモリ・オブジェクトからのこれらのオブジェクトへの他の参照が存在する可能性があり、それが特定の実施形態に応じて異機種マルチプロセッサ・システム内の他のプロセッサによって処理される場合もあれば、処理されない場合もあるので、このシステム・メモリはこの時点で再利用することはできない。到達可能として示されるメモリ・オブジェクトは、そのシステム・メモリを再利用できないオブジェクトである。これらのメモリ・オブジェクトに関する情報は、システム・メモリ内に保管されたすべてのメモリ・オブジェクトに関する到達可能性を要約するグローバル・マーク記述子データ構造にマージして戻される。
【００３０】
その参照がローカル・マーク・スタックまたは非ローカル・マーク・スタックの一部であるオブジェクトは、「グレー」メモリ・オブジェクト、すなわち、到達可能であるが、それが他のどのオブジェクトに到達できるかについてまだ分析されていないオブジェクトである。ガーベッジ・コレクションを完了するために、オブジェクトの「グレー」セットは空でなければならず、すなわち、任意の処理エレメント内のいずれかのローカルまたは非ローカル・マーク・スタック上あるいはグローバル・マーク・キュー内にいかなるアドレスも存続することができない。これを実施するために、理想的には、ローカル・マーク・スタックが空になり、非ローカル・マーク・スタックがグローバル・マーク・スタックにマージして戻されるまで、ローカル・マーク・スタック内のすべての参照が分析される。
【００３１】
非ローカル・マーク・スタック内のメモリ・オブジェクトへの参照は、依然として追跡する必要のあるグローバル・マーク・キューの部分および他のプロセッサの他の非ローカル・マーク・スタックとマージされ、それにより、グローバル・マーク・キューの更新済み「追跡対象（to be traced）」部分が生成される。その結果、システム・メモリのチャンクのローカル・ストア・コピー内にないメモリ・オブジェクトへの参照は、システム・メモリの他のチャンクとともに、同じプロセッサまたは異なるプロセッサによって再チェックすることができる。このプロセスは、グローバル・マーク・キューの更新済み「追跡対象」部分がシステム・メモリ・オブジェクトへの参照をまったく含まなくなるまで繰り返すことができる。
【００３２】
グローバル・マーク・キューの更新済み「追跡対象」部分にシステム・メモリ・オブジェクトへの参照がそれ以上存在しない場合、システム・メモリ・オブジェクトへのそれぞれの参照は、到達可能または到達不能というマークが付けられている。グローバル・マーク・キューの「到達不能」部分内のシステム・メモリ・オブジェクトへのこのような参照は、そのシステム・メモリを再利用できるシステム・メモリ・オブジェクトに関連付けられている。他のすべてのシステム・メモリ・オブジェクトに関連するシステム・メモリは、ソフトウェア・プログラムによって到達可能であり、したがって、再利用されない。次に、グローバル・マーク・スタックの「追跡済み（traced）」部分内のシステム・メモリ・オブジェクトに関連するシステム・メモリを再利用するために、再利用プロセスを実行することができる。このような再利用プロセスは一般に当技術分野で知られているものである。
【００３３】
例示的な一実施形態では、マルチプロセッサ・データ処理システムにおいて共用メモリについてガーベッジ・コレクション動作を実行するための方法が提供される。この方法は、マルチプロセッサ・データ処理システムのプロセッサ内で共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードするステップを含むことができる。マーキング動作は、そのプロセッサに割り当てられたグローバル・マーク・キューのその部分内のメモリ・オブジェクトへの参照に基づいて、共用メモリのその部分について実行することができ、それにより、ガーベッジ・コレクション動作の一部としてその関連メモリを再利用できない到達可能なメモリ・オブジェクトが識別される。この方法は、ガーベッジ・コレクション動作の一部としてさらに処理するために、マーキング動作中に、そのプロセッサに割り当てられた共用メモリのその部分内にないメモリ・オブジェクトへの参照を識別するステップをさらに含むことができる。グローバル・マーク・キューのその部分は、グローバル・マーク・キューのある部分全体（entire portion）より小さい可能性がある。グローバル・マーク・キューのその部分に対応する共用メモリのその部分は、共用メモリのある部分全体より小さい可能性がある。
【００３４】
共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードするステップは、最初に、グローバル・マーク・キューのその部分内のメモリ・オブジェクトへの参照に基づいて、ローカル・マーク・スタックを構成するステップを含むことができる。グローバル・マーク・キューのその部分に対応する共用メモリのある部分は、プロセッサのローカル・ストアにロードすることができる。マルチプロセッサ・データ処理システムの複数のプロセッサの各プロセッサは、グローバル・マーク・キューの種々の部分と共用メモリの対応する種々の部分とをロードし、グローバル・マーク・キューの種々の部分内のメモリ・オブジェクト参照に基づいて、共用メモリの種々の部分についてマーキング動作を実行することができる。
【００３５】
メモリ・オブジェクトへの参照に基づいて、共用メモリのある部分についてマーキング動作を実行するステップは、共用メモリのその部分内にないメモリ・オブジェクトへの参照が識別されるまで、グローバル・マーク・キューのその部分内のメモリ・オブジェクト参照と従属メモリ・オブジェクト（dependent memory object）への参照を追跡するステップを含むことができる。共用メモリのその部分内にあるメモリ・オブジェクトへの参照は、ローカル・マーク・スタックに保管することができる。共用メモリのその部分内にないメモリ・オブジェクトへの参照は、非ローカル・マーク・スタックに保管することができる。
【００３６】
この方法は、ローカル・マーク・スタックに関連するローカル・マーク記述子データ構造をグローバル・マーク記述子データ構造とマージするステップをさらに含むことができる。また、この方法は、非ローカル・マーク・スタックをグローバル・マーク・キューの「追跡対象」部分とマージするステップも含むことができる。グローバル・マーク・キューの「追跡対象」部分は、マーキング動作を実行することによって処理すべきメモリ・オブジェクト参照を含むことができる。ローカル・マーク記述子データ構造は、その参照がローカル・マーク・スタック内にあるメモリ・オブジェクトに関する到達可能性情報を含むことができる。グローバル・マーク記述子データ構造は、マルチプロセッサ・データ処理システムのプロセッサのローカル・マーク・スタック内で、共用メモリのある部分内にあるものとして識別されたメモリ・オブジェクトへのすべての参照を含むことができる。
【００３７】
マルチプロセッサ・データ処理システムは、制御プロセッサと少なくとも１つのコプロセッサとを有する異機種マルチプロセッサ・データ処理システムにすることができる。制御プロセッサと少なくとも１つのコプロセッサは、種々の命令セットを使用して動作することができる。グローバル・マーク・キューのある部分のロードと、マーキング動作の実行と、共用メモリのある部分内にないメモリ・オブジェクトへの参照の識別は、少なくとも１つのコプロセッサのうちの１つまたは複数のコプロセッサによって実行することができる。このロード、実行、および識別動作は、少なくとも１つのコプロセッサのうちの１つまたは複数のコプロセッサのメモリ・フロー・コントローラによって実行することができる。
【００３８】
他の例示的な諸実施形態では、コンピュータ可読プログラムを有するコンピュータ使用可能媒体を含むコンピュータ・プログラム（computer program product）が提供される。このコンピュータ可読プログラムは、コンピューティング・デバイス上で実行されると、方法の例示的な実施形態に関して上記で概説した動作のうちの様々な動作およびその動作の組み合わせをコンピューティング・デバイスに実行させるものである。
【００３９】
さらに他の例示的な実施形態では、ガーベッジ・コレクションを実行するためのシステムが提供される。このシステムは、それぞれが関連ローカル・ストアを有する複数のプロセッサと、その複数のプロセッサに結合された共用メモリとを有することができる。複数のプロセッサのうちの１つまたは複数のプロセッサは、方法の例示的な実施形態に関して上記で概説した動作のうちの様々な動作およびその動作の組み合わせを実行することができる。
【００４０】
上記その他の特徴および利点は、例示的な諸実施形態に関する以下の詳細な説明に記載されるか、あるいは、その詳細な説明を考慮すると当業者には明らかになるであろう。
【００４１】
本発明に特有と思われる新規な特徴は特許請求の範囲に示されている。しかし、本発明そのもの、ならびにその好ましい使用態様、追加の目的および利点は、添付図面に併せて読んだときに、例示的な一実施形態に関する以下の詳細な説明を参照することにより、最も良く理解されるであろう。
【発明を実施するための最良の形態】
【００４２】
例示的な諸実施形態は、異機種システムにおいてガーベッジ・コレクションを実行するためのシステムおよび方法を提供する。例示的な諸実施形態のメカニズムは、ガーベッジ・コレクションを実行する必要がある任意の異機種マルチプロセッサ・システムで実現することができる。このような異機種マルチプロセッサ・システムの例としては、ＮＵＭＡシステム、非ＳＭＰマルチプロセッサ・システムなどを含む。例示的な諸実施形態の模範的な諸態様を実現可能なこのような異機種マルチプロセッサ・システムの１つは、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社から入手可能なセル・ブロードバンド・エンジン（ＣＢＥ：Cell Broadband Engine）である。ＣＢＥアーキテクチャで実現されるメカニズムに関して例示的な諸実施形態を説明するが、これは単に模範的なものにすぎず、例示的な諸実施形態のメカニズムは本発明の精神および範囲を逸脱せずに他の異機種マルチプロセッサ・システムでも実現できることを認識されたい。
【００４３】
図１は、本発明の諸態様を実現可能なデータ処理システムの模範的なブロック図である。図１に図示されている模範的なデータ処理システムは、セル・ブロードバンド・エンジン（ＣＢＥ）データ処理システムの一例である。本発明の好ましい諸実施形態に関する説明ではＣＢＥが使用されるが、以下の説明を読んだときに当業者には容易に明らかになるように、本発明はこれに限定されない。
【００４４】
図１に図示されている通り、ＣＢＥ１００は、プロセッサ（ＰＰＵ）１１６ならびにそのＬ１およびＬ２キャッシュ１１２および１１４を有するパワー・プロセッサ・エレメント（ＰＰＥ：Power processor element）１１０と、それぞれがそれ専用の協同プロセッサ・ユニット（ＳＰＵ：synergistic processor unit）１４０〜１５４、メモリ・フロー・コントロール１５５〜１６２、ローカル・メモリまたはストア（ＬＳ）１６３〜１７０、およびバス・インターフェース・ユニット（ＢＩＵユニット）１８０〜１９４を有する複数の協同プロセッサ・エレメント（ＳＰＥ：synergistic processor element）とを含み、そのバス・インターフェース・ユニットは、たとえば、組み合わせ直接メモリ・アクセス（ＤＭＡ：direct memory access）、メモリ管理ユニット（ＭＭＵ：memory management unit）、およびバス・インターフェース・ユニットにすることができる。高帯域幅内部エレメント相互接続バス（ＥＩＢ：element interconnect bus）１９６、バス・インターフェース・コントローラ（ＢＩＣ：bus interface controller）１９７、およびメモリ・インターフェース・コントローラ（ＭＩＣ：memory interface controller）１９８も設けられている。
【００４５】
ＣＢＥ１００は、図１に描かれているエレメントのそれぞれが単一のマイクロプロセッサ・チップ上に設けられるような１チップ上のシステム（system-on-a-chip）にすることができる。その上、ＣＢＥ１００は、ＳＰＵのそれぞれがシステム内の他のＳＰＵのそれぞれから種々の命令を受け取ることができる異機種処理環境である。その上、ＳＰＵ用の命令セットはＰＰＵのものとは異なり、たとえば、ＰＰＵは縮小命令セット・コンピュータ（ＲＩＳＣ：Reduced Instruction Set Computer）ベースの命令を実行することができ、ＳＰＵはＳＩＭＤベクトル命令を実行する。
【００４６】
ＳＰＥは、ＥＩＢ１９６を介して相互に結合され、さらにＬ２キャッシュ１１４に結合されている。加えて、ＳＰＥは、ＥＩＢ１９６を介してＭＩＣ１９８およびＢＩＣ１９７に結合されている。ＭＩＣ１９８は、共用メモリ１９９への通信インターフェースを提供する。ＢＩＣ１９７は、ＣＢＥ１００と他の外部バスおよびデバイスとの間の通信インターフェースを提供する。
【００４７】
ＰＰＥ１１０はデュアル・スレッド（dualthreaded）ＰＰＥ１１０である。このデュアル・スレッドＰＰＥ１１０と８つのＳＰＥの組み合わせにより、ＣＢＥ１００は１０個の同時スレッドと１２８個を超える未解決のメモリ要求を処理可能な状態になる。ＰＰＥ１１０は、計算ワークロードのほとんどを処理する他の８つのＳＰＥ用のコントローラとして動作する。ＰＰＥ１１０を使用して従来のオペレーティング・システムを実行することができ、ＳＰＥは、たとえば、ベクトル化された浮動小数点コード実行を実行する。
【００４８】
ＳＰＥは、協同プロセッサ・ユニット（ＳＰＵ）１４０〜１５４と、メモリ・フロー・コントロール・ユニット１５５〜１６２と、ローカル・メモリまたはストア１６３〜１７０と、インターフェース・ユニット１８０〜１９４とを有する。模範的な一実施形態のローカル・メモリまたはストア１６３〜１７０は、ＰＰＥ１１０にとって見えるものであり、ソフトウェアによって直接アドレス指定可能な２５６ＫＢの命令およびデータ・メモリを有する。
【００４９】
ＰＰＥ１１０は、複雑な動作内の各ステップを処理するためにＳＰＥをまとめてチェーニングして、ＳＰＥに小さいプログラムまたはスレッドをロードすることができる。たとえば、ＣＢＥ１００を取り入れたセットトップ・ボックスは、ＤＶＤの読み取り、ビデオおよびオーディオのデコード、ならびに表示のためのプログラムをロードすることができ、最終的に出力ディスプレイ上に送られるまでデータはＳＰＥからＳＰＥに渡されるであろう。４ＧＨｚの場合、各ＳＰＥは理論上、３２ＧＦＬＯＰＳのパフォーマンスを示し、ＰＰＥ１１０は同様のレベルのパフォーマンスを有する。
【００５０】
メモリ・フロー・コントロール・ユニット（ＭＦＣ）１５５〜１６２は、システムの残りおよびその他のエレメントへのＳＰＵ用のインターフェースとして機能する。ＭＦＣ１５５〜１６２は、主記憶装置（main storage）とローカル記憶装置（localstorage）１６３〜１７０との間のデータ転送、保護、および同期のための基本メカニズムを提供する。論理的には、１つのプロセッサ内の各ＳＰＵごとに１つのＭＦＣが存在する。いくつかの実現例は、複数のＳＰＵ間で単一ＭＦＣのリソースを共用することができる。このような場合、そのＭＦＣについて定義されたすべての機能およびコマンドは、各ＳＰＵ用のソフトウェアにとって独立しているように見えなければならない。ＭＦＣを共用することによる効果は、実現例依存機能およびコマンドに限定される。
【００５１】
図２は、本発明の模範的な一実施形態による典型的なメモリ・フロー・コントロール（ＭＦＣ）ユニット２００の模範的なブロック図である。この模範的な実施形態では、ＭＦＣ２００は、ＳＰＵへの２つのインターフェース２１０および２１２と、バス・インターフェース・ユニット（ＢＩＵ）２２０への２つのインターフェース２１４および２１６と、任意選択のＳＬ１キャッシュ２３０への２つのインターフェース２２２および２２４とを有する。ＳＰＵインターフェース２１０および２１２は、ＳＰＵチャネル・インターフェース２１０と、ＳＰＵローカル記憶装置インターフェース２１２である。ＳＰＵチャネル・インターフェース２１０により、ＳＰＵはＭＦＣ機能にアクセスし、ＭＦＣコマンドを発行することができる。ＳＰＵローカル記憶装置インターフェース２１２は、ＳＰＵ内のローカル記憶装置にアクセスするためにＭＦＣ２００によって使用される。ＢＩＵ２２０への一方のインターフェース２１６により、ＭＦＣ機能へのメモリ・マップＩ／Ｏ（ＭＭＩＯ：Memory Mapped I/O）アクセスが可能になる。また、このインターフェース２１６により、他のプロセッサもＭＦＣコマンドを発行することができる。ＭＭＩＯを使用して発行されたコマンドは、ＭＦＣプロキシ・コマンド（MFC proxy command）と呼ばれる。
【００５２】
ＳＬ１キャッシュへのインターフェース２２２および２２４は主にデータ転送用である。一方のインターフェース２２２は主記憶装置内のアドレス変換テーブルにアクセスするためにＭＦＣ２００によって使用され、もう一方のインターフェース２２４は主記憶装置とローカル記憶装置との間でデータを転送するために使用される。
【００５３】
図２に図示されている通り、典型的なＭＦＣ内の主要ユニットとしては、メモリ・マップ入出力（ＭＭＩＯ：memory mapped input/output）インターフェース２４０と、ＭＦＣレジスタ２５０と、ＤＭＡコントローラ２６０とを含む。ＭＭＩＯインターフェース２４０は、ＳＰＵのＭＦＣ機能をシステムの実アドレス・スペースにマッピングする。これにより、システム内の任意のプロセッサまたは任意のデバイスからＭＦＣ機能へのアクセスが可能になる。加えて、ＭＭＩＯインターフェース２４０は、ＳＰＵのローカル記憶装置を実アドレス・スペースにマッピングするように構成することができる。これにより、システム内の任意のプロセッサまたは任意のデバイスからローカル記憶装置への直接アクセスが可能になり、ローカル・ストア間の転送ならびにＩ／Ｏ装置がＳＰＵのローカル記憶装置領域に直接アクセスする能力を可能にする。
【００５４】
ＭＦＣレジスタ・ユニット２５０は、ＭＦＣ機能のほとんどを含むものである。本発明にとって特に重要であるのは、ＭＦＣレジスタ・ユニット２５０がＳＰＵローカル記憶装置限界レジスタ機能（limit register facility）を含むことである。この機能により、以下により詳細に説明するように、特権ソフトウェアはＳＰＥのローカル記憶装置のサイズに関する限界を設定することができる。
【００５５】
同期およびデータの転送は一般にＭＦＣ２００内のＤＭＡＣ２６０の役割である。ＤＭＡＣ２６０は、ＳＰＵのローカル記憶装置と主記憶装置領域との間でデータを移動することができる。任意選択で、そのデータはＳＬ１キャッシュにキャッシュすることができる。
【００５６】
ＳＰＥおよびＰＰＥは、コマンド・キュー２７０および２８０の一方によりＭＦＣへのＤＭＡコマンド要求をキューイングすることにより、これらのＤＭＡ動作を実行するようＭＦＣ２００に指示する。ＳＰＥによって発行されたコマンドはＭＦＣ  ＳＰＵコマンド・キュー２８０にキューイングされる。ＰＰＥによって発行されたコマンドはＭＦＣプロキシ・コマンド・キュー２７０にキューイングされる。ＭＦＣはメモリ・マッピング・ユニット（ＭＭＵ：memory mapping unit）２９０を使用して、ＤＭＡ転送に必要なすべてのＭＦＣアドレス変換およびＭＦＣアクセス保護チェックを実行する。
【００５７】
ＭＦＣコマンドは、ＳＰＵ内で実行されるコードが主記憶装置にアクセスし、システム内の他のプロセッサおよびデバイスとの同期を維持できるようにする、主な方法を提供する。任意選択のキャッシュを管理するためのコマンドも提供される。ＭＦＣコマンドは、ＳＰＵ上で実行されるコードによるかまたはＰＰＥなどの他のプロセッサまたはデバイス上で実行されるコードによって発行することができる。関連ＳＰＵ上で実行されるコードは、一連のチャネル命令を実行してＭＦＣコマンドを発行する。他のプロセッサまたはデバイス上で実行されるコードは、一連のメモリ・マップＩ／Ｏ（ＭＭＩＯ）転送を実行して、ＳＰＥに対してＭＦＣコマンドを発行する。発行されたコマンドは、コマンド・キュー２７０および２８０のうちの一方にキューイングされる。
【００５８】
一般に、コマンドは、ＭＦＣレジスタ・ユニット２５０のＭＭＩＯレジスタを使用するかまたは関連ＳＰＵによって実行されるチャネル命令により、キューイングすることができる。ＭＭＩＯ方法は、ＳＰＥのために主記憶装置と関連ローカル記憶装置との間のデータの転送を制御するためにＰＰＥが使用するためのものである。データを転送するＭＦＣコマンドは、ＭＦＣ  ＤＭＡコマンドと呼ばれる。ＭＦＣ  ＤＭＡコマンドに関するデータ転送方向は常にＳＰＥの観点から参照される。したがって、ＳＰＥ内に（主記憶装置からローカル記憶装置に）データを転送するコマンドはｇｅｔコマンドと見なされ、ＳＰＥ外へ（ローカル記憶装置から主記憶装置に）データを転送するコマンドはｐｕｔコマンドと見なされる。
【００５９】
データを転送するコマンドは、ＭＦＣ  ＤＭＡコマンドと呼ばれる。これらのコマンドは、ローカル記憶装置領域と主記憶装置領域との間のＤＭＡ転送に変換される。各ＭＦＣは、典型的には、同時に複数のＤＭＡ転送をサポートすることができ、複数のＭＦＣコマンドを維持し処理することができる。各ＭＦＣ  ＤＭＡデータ転送コマンド要求は、ローカル記憶装置アドレス（ＬＳＡ：local storage address）および有効アドレス（ＥＡ：effective address）の両方を伴う。ローカル記憶装置アドレスは、その関連ＳＰＵのローカル記憶装置領域のみを直接アドレス指定することができる。有効アドレスは、すべてのＳＰＵローカル記憶装置領域が実アドレス・スペース内に別名を付けられる場合にそれらのＳＰＵローカル記憶装置領域を含む主記憶装置を参照できるという点で、より一般的に適用される。
【００６０】
例示的な諸実施形態は、上述のセル・ブロードバンド・エンジン（ＣＢＥ）などの異機種マルチプロセッサ・システムにおいてガーベッジ・コレクション動作を実行するためのメカニズムを提供する。例示的な諸実施形態のメカニズムを使用可能な他の異機種マルチプロセッサ・システムの模範的なものとしてＣＢＥを考慮すると、以下に記載する例示的な諸実施形態のガーベッジ・コレクション動作を実行するために、ＳＰＥのそれぞれにガーベッジ・コレクション・メカニズムを設けることができる。たとえば、ガーベッジ・コレクション・メカニズムは、ＳＰＥのメモリ・フロー・コントローラ（ＭＦＣ）と統合されるハードウェア・エレメントまたはソフトウェア・エレメントあるいはその両方を有することができる。加えて、ＰＰＥ１１０には、ガーベッジ・コレクションを実行するために同様のメカニズムを設けることができる。
【００６１】
いくつかの例示的な諸実施形態では、異機種マルチプロセッサ・システム、たとえば、ＣＢＥ１００内の複数のプロセッサ、たとえば、ＳＰＥ１２０〜１３４およびＰＰＥ１１０にわたってガーベッジ・コレクション動作が分散される。他の例示的な諸実施形態では、異機種マルチプロセッサ・システム内の単一プロセッサ、たとえば、ＳＰＥ１３４によってガーベッジ・コレクション動作を実行することができる。この単一ガーベッジ・コレクション・プロセッサの実施形態では、ガーベッジ・コレクション・プロセッサ、たとえば、ＳＰＥ１３４は、ガーベッジ・コレクションのみの実行に専念する場合もあれば、他のサービス・タスクに加えてガーベッジ・コレクションを実行する場合もある。
【００６２】
例示的な諸実施形態に関する以下の説明では、区別なく使用される「システム・メモリ」および「共用メモリ」について言及することに留意されたい。このような言及は、システム・メモリまたは共用メモリのうち、問題の特定のプログラムに関するヒープとして機能する部分に言及するためのものである。したがって、共用メモリまたはシステム・メモリを使用し、メモリの動的割り振りのためにそれぞれが専用のヒープを有する多種多様なプログラムが異機種マルチプロセッサ・システム内で実行されている可能性がある。したがって、本明細書に記載するガーベッジ・コレクションは、関心のある特定のプログラムに割り振られたシステム・メモリまたは共用メモリに関して実行される。
【００６３】
複数のＳＰＥ１２０〜１３４にわたってガーベッジ・コレクションが分散される例示的な一実施形態を考慮すると、例示的な一実施形態では、ＰＰＥ１１０は、共用メモリ１９９のうち、異機種プロセッサ・システムで実行されているプログラムによってもはや参照されないメモリ・オブジェクト（以下、「システム・メモリ・オブジェクト」という）に割り振られる部分を再利用するためにガーベッジ・コレクションを実行するようＳＰＥに指示することができる。例示的な代替一実施形態では、ＳＰＥ１２０〜１３４は、所定の基準、たとえば、しきい値未満である共用メモリ１９９内のフリー・スペースの量に基づいて、ガーベッジ・コレクションが必要であることを独立して決定することができ、それ自体でガーベッジ・コレクション動作を開始することができる。このような代替一実施形態では、ガーベッジ・コレクションの必要性を検出するＳＰＥ１２０〜１３４は、この必要性を他のＳＰＥ１２０〜１３４およびＰＰＥ１１０に伝達することができる。
【００６４】
ＰＰＥ１１０または代わってＳＰＥ１２０〜１３４からの命令に応答して、ＳＰＥ１２０〜１３４は、以下に記載するガーベッジ・コレクション動作を実行するために使用されるコレクション・スレッドを作成する（spawn）。ＳＰＥ１２０〜１３４およびおそらくＰＰＥ１１０は、「ストップ・ザ・ワールド」タイプのガーベッジ・コレクション内などで他のスレッドの実行を停止し、ガーベッジ・コレクションを実行するために作成したコレクション・スレッドを実行する。
【００６５】
ガーベッジ・コレクションの一部として、ＰＰＥ１１０は、実行中のプログラムに関する共用メモリ１９９内のメモリ・オブジェクトへの参照を含むグローバル・マーク・キューを生成する。このようなグローバル・マーク・キューの生成は一般に当技術分野で知られており、本明細書には詳細を示さない。
【００６６】
グローバル・マーク・キューは、たとえば、同じメモリ・ページ上に保管されたシステム・メモリ・オブジェクトへの参照が隣接項目としてグローバル・マーク・キュー内に表されるようなメモリ・ページ単位で編成することができる。このようにして、グローバル・マーク・キューの部分は共用メモリ１９９の部分に容易に関連付けることができる。
【００６７】
それぞれのＳＰＥ１２０〜１３４のコレクション・スレッドは、共用メモリ１９９のチャンクとグローバル・マーク・キューの対応するある部分を入手し、ＳＰＥ１２０〜１３４に関連するローカル・ストア１６３〜１７０にそれを保管する。したがって、それぞれのＳＰＥ１２０〜１３４は、グローバル・マーク・キューの異なるある部分のコピーと、それが操作する共用メモリ１９９の対応する異なるチャンクのコピーとを有することになる。この説明に関連して、メモリの「チャンク」とは操作中のメモリの一領域である。好ましい一実施形態では、この領域は隣接し、同じ場所に位置しているが、他の諸実施形態では、メモリの「チャンク」は、システム・メモリまたは共用メモリ１９９内の論理的またはその他の点で関連する複数の部分のデータから構成することができる。
【００６８】
それぞれのＳＰＥ１２０〜１３４上で実行されるコレクション・スレッドは、グローバル・マーク・キューの対応する部分で参照されるシステム・メモリ・オブジェクトに基づいて、共用メモリ１９９のそれぞれのチャンクについて「マーク・アンド・スイープ」動作を実行する。グローバル・マーク・キューのうち、ＳＰＥ１２０〜１３４によって検索される部分は、プログラムから、「マーク・アンド・スイープ」動作によってチェックすべきシステム・メモリ・オブジェクトへの参照、すなわち、ポインタを有する。それにより、関心のあるプログラムによってどのメモリ・オブジェクトが到達可能であり、どのメモリ・オブジェクトが到達不能であるかを識別するために「マーク・アンド・スイープ」動作中に追跡されるのは、これらの参照と、従属メモリ・オブジェクトへの参照である。
【００６９】
これらの参照またはポインタは、共用メモリ・アドレス・スペースを使用するものであり、したがって、現在チェック中の共用メモリ１９９のチャンクがＳＰＥ１２０〜１３４に関連するローカル・ストア１６３〜１７０内に存在するので、ＳＰＥ１２０〜１３４に関するローカル・ストア・アドレス・スペースに変換する必要がある。このようなアドレス変換は、たとえば、共用メモリ１９９のアドレスを取り、ローカル・ストアに転送されるチャンクの基底アドレスを引き、ローカル・ストア・オフセットを加えることを伴う可能性がある。このアドレス変換により、グローバル・マーク・キューのその部分内のグローバル・アドレス・スペース・ポインタによって参照される同じシステム・メモリ・オブジェクトのローカル・ストア・アドレスが得られる。当業者であれば、本発明の精神および範囲を逸脱せずに例示的な諸実施形態とともにアドレス・スペース間の変換を行うその他の手段を使用できることを認識するであろう。
【００７０】
コレクション・スレッドによって実行される「マーク・アンド・スイープ」動作中に、グローバル・マーク・キューのその部分によって参照される初期メモリ・オブジェクトは、対応するローカル・ストア１６３〜１７０内にロードされる共用メモリ１９９のチャンク内に存在することになる。しかし、共用メモリ１９９のチャンクは、グローバル・マーク・キューのその部分内のポインタによって参照されない他のメモリ・オブジェクトを含む可能性があり、したがって、そのポインタがグローバル・マーク・キューの他の部分にあるメモリ・オブジェクトによって参照されないか、またはそのポインタがグローバル・マーク・キューの他の部分にある他のメモリ・オブジェクトによって参照されない場合に、「到達不能」になる可能性がある。
【００７１】
その上、「マーク・アンド・スイープ」動作中に、特定のＳＰＥのローカル・ストア１６３〜１７０内にロードされる共用メモリ１９９のチャンク内に存在しない他のオブジェクトへの参照が検出される可能性がある。ローカル・ストア１６３〜１７０内にロードされる共用メモリ１９９のチャンク内の到達可能および到達不能メモリ・オブジェクトの追跡とともに、共用メモリ１９９の他のチャンク内のメモリ・オブジェクトへのこのような参照を追跡しなければならない。
【００７２】
様々なタイプのメモリ・オブジェクトを追跡するために、例示的な諸実施形態のコレクション・スレッドによって実行されるローカル「マーク・アンド・スイープ」動作は、ＳＰＥ１２０〜１３４あたり２つのマーク・スタックを使用する。第１のマーク・スタック、すなわち、ローカル・マーク・スタックは、ＳＰＥ１２０〜１３４のローカル・ストア１６３〜１７０内にロードされる共用メモリ１９９のチャンク内のソフトウェア・プログラムによって到達可能なメモリ・オブジェクトへのポインタまたは参照を保管する。ローカル・マーク・スタックは、共用メモリ１９９のそれに対応するチャンクとともにＳＰＥ内にロードされるグローバル・マーク・キューの部分によって構成される。マーク・アンド・スイープ動作中にトラバースされるのは、このローカル・マーク・スタックであり、ローカル・マーク・スタック内で参照される各メモリ・オブジェクトはマーキング動作により追跡され、それにより、ローカル・マーク・スタック内で参照されるメモリ・オブジェクトからのすべての到達可能なメモリ・オブジェクトにマークが付けられる。
【００７３】
第２のマーク・スタック、すなわち、非ローカル・マーク・スタックは、ソフトウェアプログラムによって参照されるが、ローカル・ストア１６３〜１７０内にロードされる共用メモリ１９９の現行チャンク内にないメモリ・オブジェクトへのポインタを保管する。メモリ・オブジェクトへのポインタまたはアドレスは、ローカル・マーク・スタック内で参照されるメモリ・オブジェクトの追跡中に非ローカル・マーク・スタックに追加される。すなわち、ローカル・マーク・スタック内で参照されるメモリ・オブジェクトによって到達可能なメモリ・オブジェクトの追跡中に、ローカル・ストアに保管された共用メモリ１９９のチャンク内にない他のメモリ・オブジェクトへの参照またはポインタが検出される可能性がある。このようなオカレンスに応答して、この「非ローカル」メモリ・オブジェクトへの参照またはポインタが非ローカル・マーク・スタックに追加される。
【００７４】
様々なスタック内にメモリ・オブジェクトへのポインタを配置することは、たとえば、到達可能であることが分かっているが、その内容がまだ検査されていないオブジェクト（すなわち、「グレー」オブジェクト）を保管するために明示スタックを使用することによって実行することができる。スタック内の各項目は、基底アドレスと、その開始アドレスに対して可能なポインタの位置を示すオフセットとを含む。オフセットは、典型的には、ポインタ位置を記述するために単純な長さ指定、ビット・ベクトルなどの形を取る。
【００７５】
メモリ・オブジェクトのそれぞれは、到達可能または到達不能としてメモリ・オブジェクトを識別する関連のマーク記述子を有することができる。各メモリ・オブジェクトに関するマーク記述子は、共用メモリ１９９のチャンク、共用メモリ１９９のページなどに関する一般的なマーク記述子の一部にすることができる。ＳＰＥ１２０〜１３４のローカル・ストア１６３〜１７０内にコピーされたグローバル・マーク・キューのある部分の一部であるメモリ・オブジェクトであって、まだ追跡されていないものは、たとえば、これらのオブジェクトが到達不能であることを示すために、それぞれのマーク記述子が最初に「０」または「００」として設定されている可能性がある。その後、これらのマーク記述子値は、たとえば、「マーク・アンド・スイープ」動作のマーキング・フェーズ中に、メモリ・オブジェクトが到達可能であるという判断が行われたときに、「１」または「０１」に設定することができる。
【００７６】
したがって、最初に、問題のプログラム用のヒープ内のすべてのメモリ・オブジェクトは、ＳＰＥ１２０〜１３４に関するガーベッジ・コレクション動作の初期設定時に「到達不能」に設定することができる。グローバル・マーク・キューのある部分がＳＰＥによって検索され、それに対応する共用メモリ１９９のチャンクがローカル・ストアにロードされると、グローバル・マーク・キューのその部分内のメモリ・オブジェクトに関するアドレスおよびオフセットがローカル・マーク・スタックに追加される。加えて、そのメモリ・オブジェクト用のマーク記述子は、共用メモリ１９９のチャンク用の一般的なマーク記述子データ構造に追加することができる。明瞭にするために、マーク記述子はローカル・マーク・スタックとは別個のデータ構造として図に示され、以下の説明で言及されることになるが、マーク記述子は、ローカル・マーク・スタックに追加された様々なメモリ・オブジェクト参照のためのローカル・マーク・スタック内の項目に関連付けられ、その一部になる場合もある。
【００７７】
最初にローカル・マーク・スタックを構成した後、「マーク・アンド・スイープ」ガーベッジ・コレクション動作のマーキング動作を使用して、ローカル・マーク・スタック内の次のメモリ・オブジェクトが識別され、追跡される。すなわち、ローカル・マーク・スタック内の次のメモリ・オブジェクトは、到達可能というマークが付けられ、「現行」メモリ・オブジェクトになる。「現行」メモリ・オブジェクトによって参照されるメモリ・オブジェクトは、ローカル・ストア内にロードされた共用メモリ１９９のチャンクから識別される。「現行」メモリ・オブジェクトによって参照されるメモリ・オブジェクトがローカル・ストア内の共用メモリ１９９のチャンク内にあるかどうかに関する判断が行われる。そこにある場合、これらのメモリ・オブジェクトに関するマーク記述子は「到達可能」状態に設定される。
【００７８】
ローカル・ストア内にロードされるチャンクとは異なる共用メモリ１９９のチャンク内のメモリ・オブジェクトを指し示す、メモリ・オブジェクトへの参照またはポインタがこのマーキング動作中に検出された場合、そのメモリ・オブジェクトへの参照は非ローカル・マーク・スタックに追加される。したがって、マーキング動作により、ローカル・マーク・スタック内のメモリ・オブジェクトへの参照は、それに関連するマーク記述子において、ローカル・ストア内の共用メモリ１９９のチャンク内で到達可能であるというマークが付けられる。ローカル・マーク・スタック内のメモリ・オブジェクトによって参照される他のメモリ・オブジェクトは、現在、ローカル・ストア内にある共用メモリ１９９のチャンク内で到達可能である場合もあれば、到達不能である場合もある。したがって、これらのメモリ・オブジェクトは、共用メモリ１９９のチャンク内で到達可能であることを示すためにそのマーク記述子が更新されている可能性があるか、あるいは、それらが実際にはローカル・ストア内の共用メモリ１９９のチャンク内で到達不能である場合にその参照が非ローカル・マーク・スタックに追加される可能性がある。
【００７９】
上述の通り、「マーク・アンド・スイープ」動作により、グローバル・マーク・キューのその部分内のすべてのシステム・メモリ・オブジェクトがＳＰＥ１２０〜１３４によってチェックされた場合、共用メモリ１９９のそのチャンクについて、未到達状態で存続している、たとえば、そのマーク記述子が「０」または「００」であるシステム・メモリ・オブジェクトは、メモリのその部分を再利用させるための候補である。しかし、特定の実施形態次第で、ＣＢＥ１００内の他のＳＰＥ１２０〜１３４によって処理される場合もあれば、処理されない場合もある、グローバル・マーク・キューの他の部分内のシステム・メモリ・オブジェクトからこれらのメモリ・オブジェクトへの参照が他にも存在する可能性があるので、この時点でこのシステム・メモリを再利用することはできない。
【００８０】
共用メモリ１９９のチャンク内で到達可能（すなわち、ローカル・マーク・スタックの処理中に到達）、共用メモリ１９９のチャンク内にない（すなわち、非ローカル・マーク・スタック内にある）、共用メモリ１９９のチャンク内で到達不能（すなわち、グローバル・マーク・キューのその部分に存続する可能性がある参照を有するか、またはすでに前に到達されている）というマークをシステム・メモリ・オブジェクトに付けた後、コレクション・スレッドは、非ローカル・マーク・スタック内のメモリ・オブジェクトへの参照を、依然として追跡する必要のあるグローバル・マーク・キューの部分とマージするためのマージ動作を実行し、それにより、グローバル・マーク・キューの更新済み「追跡対象」部分を生成する。その結果、共用メモリ１９９のチャンクのローカル・ストア・コピー内にないメモリ・オブジェクトへの参照は、共用メモリ１９９の他のチャンクとともに、同じかまたは異なるＳＰＥ１２０〜１３４によって再チェックすることができる。このプロセスは、グローバル・マーク・キューの更新済み「追跡対象」部分がシステム・メモリ・オブジェクトへの参照をまったく含まなくなるまで、繰り返すことができる。
【００８１】
加えて、コレクション・スレッドは、ローカル・マーク・スタックの処理から得られるメモリ・オブジェクトに関する到達可能性情報、たとえば、マーク記述子を、他のＳＰＥ１２０〜１３４の他のローカル・マーク・スタックの処理によって得られる到達可能性情報とマージし、グローバル・マーク記述子で収集されたグローバル到達可能性情報を生成する。グローバル・マーク記述子は、ソフトウェア・プログラムによって到達可能であり、したがって、そのシステム・メモリを再利用させることができないシステム・メモリ・オブジェクトを表す。グローバル・マーク記述子内に存在する参照を備えていないシステム・メモリ・オブジェクトはメモリ再利用のための候補である。
【００８２】
到達可能なメモリ・オブジェクトを示すローカル・マーク記述子とグローバル記述子とのマージは、１組のＯＲ演算を実行することによって達成することができる。しかし、前掲文献中にＢｏｅｈｍによって記載されている通り、アトミック性（atomicity）を保証しなければならない。したがって、マージ動作は、そのメモリ・オブジェクトが問題のソフトウェア・プログラムによって到達可能であることを示すマージ済みの各メモリ・オブジェクトに関する単一項目が存在するように、メモリ・オブジェクト用のマーク記述子をマージする。すなわち、マージ動作は、同じメモリ・オブジェクトに関する重複項目を除去する。したがって、例示的な諸実施形態では、共通マーク記述子を更新する従来技術のガーベッジ・コレクタとは異なり、各マーク・スレッドは、問題のプログラムに関連するヒープ用のグローバル・マーク記述子にマージされるローカル・チャンク固有のマーク記述子を含む。
【００８３】
マージは、グローバル・マーク記述子へのローカル・マーク記述子の論理ＯＲを実行するためにアトミック読み取り−変更−書き込みサイクル（atomic read-modify-write cycle）を実行するためのサポートを有する適応メモリ・フロー・コントローラ（ＭＦＣ）によるか、特定の記述子マージ機能を含むように最適化されたＭＦＣによるか、または記述子マップ上でソフトウェア・ロックを使用することによって実行することができる。このようなソフトウェア・ロックは、理想的には、短期間のマージ・プロセス中にのみ得られる。マージを最適化し、マージ・ロックに関する競合を低減するために、マーク記述子の領域に対応する複数のマージ・ロックを維持することができる。
【００８４】
最適化された一実施形態では、処理中のメモリのチャンクに関するマーク記述子は、グローバル・マーク記述子をコピーすることによって入手することができる。この最適化は、重複追跡の数を低減することにより、実行しなければならない追跡ステップの数を有利に低減する。また、この最適化は、例示的な一実施形態でライブロック（livelock）を防止するために使用することもできる。
【００８５】
他の最適化では、コピー動作を実行してローカル記述子の初期化バージョンを入手する、いかなるロックも得られない。この最適化は、追跡しマークを付けた到達可能位置への同時更新部分を見落とし、ロック同期オーバヘッドを除去することになろう。
【００８６】
非ローカル・マーク・スタックをグローバル・マーク・キューとマージしてグローバル・マーク・キューの更新済み「追跡対象」部分を生成するために、同様のマージ動作を実行することができる。非ローカル・スタックをグローバル・マーク・キューにマージするためのマージ動作は、本質的に、システム・メモリ・オブジェクトへのポインタを含むデータ構造を生成し、それぞれのシステム・メモリ・オブジェクトはデータ構造内の１つの項目のみを有する。すなわち、マージ動作は、それぞれのシステム・メモリ・オブジェクトが結果として得られるデータ構造に１回だけ現れるように、重複項目を除去する。この結果は、依然として「マーク・アンド・スイープ」動作によって追跡する必要のあるシステム・メモリ・オブジェクトのリストになる。
【００８７】
上記のプロセスは、ＳＰＥ１２０〜１３４がそのＳＰＥ１２０〜１３４のローカル・ストアにコピーされたシステム・メモリのチャンクおよびグローバル・マーク・キューの部分についてその「マーク・アンド・スイープ」動作を完了するたびに、それぞれのＳＰＥ１２０〜１３４によって繰り返すことができる。システム・メモリ・オブジェクトへのいくつかの参照はグローバル・マーク・キューの「追跡対象」部分にマージで戻されるので、システム・メモリ・オブジェクトへの同じ参照が複数回チェックされる可能性があることを認識されたい。これにより何らかの効率の悪さがもたらされる可能性があるが、より効率的な並列「マーク・アンド・スイープ」動作では、システム・メモリ・オブジェクトの冗長チェックで経験されるわずかな効率の悪さを上回る相対パフォーマンスの利点が提供される。
【００８８】
グローバル・マーク・キューの更新済み「追跡対象」部分内にシステム・メモリ・オブジェクトへの参照がそれ以上存在しない場合、共用メモリ１９９内に存在する問題のソフトウェア・プログラム用のヒープ内のシステム・メモリ・オブジェクトへの各参照は、グローバル・マーク記述子内に到達可能というマークが付けられるか、または問題のソフトウェア・プログラムによって到達不能になる。マーク・プロセスによって到達されていないシステム・メモリ・オブジェクトへの参照は、共用メモリ１９９のそれに対応する部分を再利用できるオブジェクトである。グローバル・マーク・スタック内の他のすべてのシステム・メモリ・オブジェクトに関連する共用メモリ１９９の部分は、ソフトウェア・プログラムによって到達可能であり、したがって、再利用されない。
【００８９】
次に、グローバル・マーク記述子内に到達可能というマークを付けられていないシステム・メモリ・オブジェクトに関連するシステム・メモリを再利用するために、再利用プロセスを実行することができる。このような再利用プロセスは一般に当技術分野で知られており、したがって、このような再利用プロセスの詳細な説明は本明細書には示さない。
【００９０】
図３は、例示的な一実施形態によるガーベッジ・コレクションを実行するために使用可能なガーベッジ・コレクション・メカニズムの模範的な図である。図３に図示されているガーベッジ・コレクション・メカニズムは、たとえば、図１のＳＰＥ１２０〜１３４のメモリ・フロー・コントローラ（ＭＦＣ）、すなわち、図２のＭＦＣ２００などに統合することができる。このため、図３のガーベッジ・コレクション・メカニズムは、例示的な諸実施形態のガーベッジ・コレクション動作を実行するために、ＭＦＣレジスタ２５０，ＭＭＩＯインターフェース２４０、ＭＦＣコマンド・キュー２８０などを使用することができる。
【００９１】
例示的な一実施形態では、ガーベッジ・コレクション・メカニズムは、グローバル・マーク・キューの部分と共用メモリの対応するチャンクを入手するためにＭＦＣコマンドを使用し、グローバル・マーク・キューの部分はＭＦＣレジスタ２５０に保管され、共用メモリのチャンクはＭＦＣに関連するローカル・ストアに保管される。その上、「マーク・アンド・スイープ」動作ならびにマージ動作を実行するためにＭＦＣコマンドを使用することができ、様々なマーク・スタックは、たとえば、ＭＦＣレジスタ２５０内にＭＦＣによって維持される。
【００９２】
図３に図示されている通り、ガーベッジ・コレクション・エンジン３００は、コントローラ３１０と、グローバル・マーク・キュー・インターフェース・モジュール３２０と、共用メモリ・インターフェース・モジュール３３０と、マーキング・モジュール３４０と、マーク記述子記憶装置３４５と、グローバル・マーク・キュー部分記憶装置３５０と、ローカル・ストア・インターフェース３６０と、ローカル・マーク・スタック記憶装置３７０と、非ローカル・マーク・スタック記憶装置３８０と、マージ・モジュール３９０とを含む。これらのエレメント３１０〜３９０は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせとして実現することができる。例示的な一実施形態では、エレメント３１０〜３４０、３６０、および３９０は、１つまたは複数の処理エレメントによって実行される、ＭＦＣ機能などのソフトウェア機能として実現され、エレメント３４５、３５０、３７０、および３８０は、メモリ、レジスタなどのハードウェア・エレメントとして実現することができる。代わって、図３に図示されているすべてのエレメントは、ＭＦＣまたはＳＰＥのその他の部分に統合できるハードウェア装置としてあるいはＳＰＥ内の専用ユニットとして実現することができる。
【００９３】
コントローラ３１０は、ガーベッジ・コレクション・エンジン３００の全体的な動作を制御し、他のエレメント３２０〜３９０の動作を調整する。グローバル・マーク・キュー・インターフェース・モジュール３２０は、例示的な諸実施形態によるガーベッジ・コレクション動作を実行する際にガーベッジ・コレクション・エンジン３００による使用のためにグローバル・マーク・キューの部分を検索するためのメカニズムの提供を担当する。グローバル・マーク・キュー・インターフェース・モジュール３２０を介して検索されたグローバル・マーク・キューの部分は、グローバル・マーク・キューのこの部分内の参照についてガーベッジ・コレクション動作を実行する際に使用するために、グローバル・マーク・キュー部分記憶装置３５０に保管される。
【００９４】
共用メモリ・インターフェース・モジュール３３０は、ローカル・ストア・インターフェース３６０を介してローカル・ストアに保管するために共用メモリのある部分を検索するためのメカニズムの提供を担当する。検索された共用メモリの部分は、グローバル・マーク・キュー・インターフェース・モジュール３２０を介して検索されたグローバル・マーク・キューの部分に対応する。グローバル・マーク・キュー・インターフェース・モジュール３２０および共用メモリ・インターフェース・モジュール３３０は、グローバル・マーク・キューの適切なある部分と共用メモリの対応する部分を検索するために、コントローラ３１０内にプログラミングされたガーベッジ・コレクション方法によるコントローラ３１０の指示により、ＰＰＥと通信する。
【００９５】
マーキング・モジュール３４０は、グローバル・マーク・キュー部分記憶装置３５０内に保管されたグローバル・マーク・キューの部分内の参照のマーキングの実行を担当する。マーキング動作の一部として、グローバル・マーク・キュー・インターフェース・モジュール３２０を介してコントローラ３１０によって検索されたグローバル・マーク・キューの部分内のメモリ・オブジェクトへの参照は、ローカル・マーク・スタック記憶装置３７０に追加される。次に、これらの参照は、「マーク・アンド・スイープ」ガーベッジ・コレクション動作のマーク動作を使用して、マーキング・モジュール３４０によってチェックされ、それにより、ローカル・ストア内に保管された共用メモリのチャンク内の到達可能なメモリ・オブジェクトまたは共用メモリ・インターフェース・モジュール３３０およびローカル・ストア・インターフェース３６０を介して検索され、ローカル・ストア内に保管された共用メモリのチャンク内で到達不能なメモリ・オブジェクトあるいはその両方のメモリ・オブジェクトが識別される。メモリ・オブジェクトの反復追跡が実行されるにつれて検出される可能性があるメモリ・オブジェクト参照のうち、共用メモリの他のチャンク内のメモリ・オブジェクトへの参照であるものは、非ローカル・マーク・スタック記憶装置３８０に追加される。
【００９６】
ローカル・ストア内にロードされる共用メモリのチャンク内で到達可能なメモリ・オブジェクトは、そのメモリ・オブジェクトに対応するマーク記述子内で到達可能というマークが付けられる。共用メモリのチャンク用のマーク記述子は、マーク記述子記憶装置３４５に保管することができる。これらのマーク記述子は、それに関してガーベッジ・コレクションが実行されている問題のソフトウェア・プログラムに関連するヒープ全体に関するグローバル・マーク記述子に後でマージされるローカル・マーク記述子を構成する。
【００９７】
上述の方法によりマーキング・モジュール３４０がローカル到達可能メモリ・オブジェクトと非ローカル・メモリ・オブジェクトのマーキングを実行した後、マージ・モジュール３９０は、マーク記述子記憶装置３４５内のローカル・マーク記述子を他のＳＰＥのスタックの他のローカル・マーク記述子とマージしてグローバル・マーク・スタックを生成するためにマージ動作を実行する。これらの参照が共用メモリの適切なチャンクで追跡できるように、マージ・モジュール３９０は、非ローカル・マーク・スタック３８０をグローバル・マーク・キューの「追跡対象」部分とさらにマージする。
【００９８】
図４は、例示的な一実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。図４に図示されている通り、グローバル・マーク・キュー４１０は「クリア済み」部分４１２と「追跡対象」部分４１４とを有する。「クリア済み」部分４１２は、グローバル・マーク・キュー４１０のうち、１つまたは複数のＳＰＥ４２０〜４２６について実行された「マーク・アンド・スイープ」ガーベッジ・コレクション動作によって処理された共用メモリ・オブジェクトへの参照を含む部分である。グローバル・マーク・キューの部分はローカル「マーク・アンド・スイープ」ガーベッジ・コレクションのためにＳＰＥ４２０〜４２６に割り振られるので、グローバル・マーク・キューのこれらの部分はグローバル・マーク・キュー４１０の「クリア済み」部分４１２に追加される。
【００９９】
グローバル・マーク・キュー４１０の「追跡対象」部分４１４は、「マーク・アンド・スイープ」ガーベッジ・コレクション動作によってまだ処理されていないかまたは共用メモリ４３０の非ローカル部分内にあった共用メモリ・オブジェクトへの参照であると判断された共用メモリ・オブジェクトへの参照から構成される。グローバル・マーク・キュー４１０の「追跡対象」部分４１４の部分はガーベッジ・コレクションのためにＳＰＥ４２０〜４２６に割り振られるので、これらはグローバル・マーク・キュー４１０の「クリア済み」部分４１２に追加される。
【０１００】
図４に図示されている通り、各ＳＰＥ４２０〜４２６は、グローバル・マーク・キュー４１０の「追跡対象」部分４１４からグローバル・マーク・キュー４１０のある部分４１５〜４１８を入手し、それはその後グローバル・マーク・キュー４１０の「クリア済み」部分４１２に追加される。好ましくは、これらの部分４１５〜４１８はグローバル・マーク・キュー４１０の順次部分であるが、これは例示的な諸実施形態の動作のために必要なものではない。
【０１０１】
加えて、各ＳＰＥ４２０〜４２６は、共用メモリ４３０の対応するチャンク４３２〜４３８を入手する。各ＳＰＥ４２０〜４２６によって得られるチャンク４３２〜４３８は、そのＳＰＥ４２０〜４２６によって得られたグローバル・マーク・キュー４１０の部分に対応する。
【０１０２】
グローバル・マーク・キューのそれぞれの専用ローカル部分４１６〜４１８および共用メモリのチャンク４３４〜４３８を使用して他のＳＰＥ４２２〜４２６のそれぞれで実行される同じ動作の模範としてＳＰＥ４２０を考慮すると、グローバル・マーク・キューの部分４１５および共用メモリの対応するチャンク４３２に基づいて、ＳＰＥ４２０は共用メモリのチャンク４３２についてマーキング動作を実行する。ＳＰＥ４２０にロードされるグローバル・マーク・キューの部分４１５は、マーキング動作を使用してチェックすべきメモリ・オブジェクトへの参照またはポインタでローカル・マーク・スタック（ＬＭＳ）４４０を構成するために使用される。このマーキング動作は、ローカル・マーク・スタック４４０内の次のポインタまたは参照を取り、そのポインタによって参照されたシステム・メモリ・オブジェクトがＳＰＥのローカル・ストア内に保管された共用メモリのチャンク４３２内で到達可能であるかどうかを判断することを伴う。これは、前に上述した通り、システム・メモリ・オブジェクトへのポインタを共用メモリ・アドレス・スペースからローカル・ストア・アドレス・スペースに変換することを必要とする可能性がある。
【０１０３】
システム・メモリ・オブジェクトが共用メモリのチャンク４３２内に存在する場合、その参照は、対応するマーク記述子４６０内のローカル・ストア内で到達可能というマークが付けられ、そのメモリ・オブジェクトが参照する任意のオブジェクトは反復式に追跡され、同様にマークが付けられる。この反復追跡は、他のメモリ・オブジェクトを参照しないメモリ・オブジェクトが検出されるかまたは共用メモリのチャンク４３２内に存在しないメモリ・オブジェクトが検出されるまで続行される。ＳＰＥ４２０のローカル・ストア内の共用メモリのチャンク４３２内にないメモリ・オブジェクトへの参照は、非ローカル・メモリ・オブジェクトであるというマークが付けられる。
【０１０４】
グローバル・マーク・キューの部分４１５内のすべての参照がローカル・マーク・スタック４４０を使用してこのように追跡された後、ローカル・マーク・スタック４４０は空になり、メモリ・オブジェクト・ポインタはローカル・マーク記述子４６０内でマークを付けられるかまたは非ローカル・マーク・スタック４５０に追加される。ローカル・マーク記述子４６０は、システム・メモリのチャンク４３２内で到達可能であったグローバル・マーク・キューの部分４１５内のすべてのシステム・メモリ・オブジェクト参照を含む。非ローカル・マーク・スタック４４０は、ローカル・ストア内のシステム・メモリのチャンク４３２内になかったシステム・メモリ・オブジェクトを参照するグローバル・マーク・キューの部分４１５内の参照の追跡中に検出されたシステム・メモリ・オブジェクトへの参照を含む。
【０１０５】
ＳＰＥ４２０〜４２６のローカル・マーク記述子４６０〜４６６はまとめてマージされ、グローバル・マーク記述子４９０を形成する。このマージは、たとえば、システム・メモリ・オブジェクトへのそれぞれの参照が結果として得られるグローバル・マーク記述子４９０内に１つの項目のみを有するような、冗長項目の除去を伴う可能性がある。後続反復において、ローカル・マーク記述子４６０〜４６６、ローカル・マーク・スタック４４０〜４４６、および非ローカル・マーク・スタック４５０〜４５６は、後続マーキング動作によって再初期設定し、再構成することができる。グローバル・マーク記述子４９０を更新し続けるために、後続反復から結果として得られるローカル・マーク記述子４６０〜４６６は、既存のグローバル・マーク記述子４９０とマージすることができる。
【０１０６】
ＳＰＥ４２０〜４２６の非ローカル・マーク・スタック４５０〜４５６は、グローバル・マーク・キュー４１０の「マージ済み」部分４１３を生成するために、グローバル・マーク・キュー４１０の「追跡対象」部分４１４とマージされる。「マージ済み」部分４１３は、共用メモリ４３０の他の対応するチャンクとともに、同じかまたは他のＳＰＥ４２０〜４２６のガーベッジ・コレクション・スレッドによって処理することができる。この場合も、このマージは、それぞれの参照がグローバル・マーク・キュー４１０内に１つの項目のみを有するように、グローバル・マーク・キュー４１０の「追跡対象」部分４１４に参照を追加することを伴う可能性がある。
【０１０７】
グローバル・マーク・キューの部分４１５が追跡され、ローカル・マーク記述子４６０と非ローカル・マーク・スタック４５０のマージが完了すると、ローカル・マーク記述子４６０、ローカル・マーク・スタック４４０、および非ローカル・マーク・スタック４５０を再初期設定することができ、グローバル・マーク・キュー４１０の新しい部分と共用メモリ４３０の対応するチャンクをＳＰＥ４２０内に取り出すことができる。次に、グローバル・マーク・キュー４１０のこの新しい部分と共用メモリ４３０の対応するチャンクについてガーベッジ・コレクションを実行することができる。このプロセスは、グローバル・マーク・キュー４１０のすべてが追跡されるまで反復的にＳＰＥ４２０〜４２６のそれぞれによって実行することができ、したがって、グローバル・マーク・キュー４１０は「クリア済み」部分４１２のみを有し、「追跡対象」部分４１４は空になる。
【０１０８】
上述の反復および分散ガーベッジ・コレクション動作によりグローバル・マーク・キュー４１０全体が追跡された時点で、グローバル・マーク記述子４９０は、共用メモリ４３０内のシステム・メモリ・オブジェクトのうち、グローバル・マーク・キュー４１０に対応するプログラムによって到達可能なすべてのシステム・メモリ・オブジェクトへの参照を含むことになる。したがって、共用メモリ４３０内の他のオブジェクトのうち、グローバル・マーク記述子４９０によって参照されないオブジェクトはいずれもそのメモリ・スペースを再利用させることができる。再利用プロセスは、一般に当技術分野で知られている方法でこのような再利用を実行するように初期設定することができる。
【０１０９】
したがって、例示的な諸実施形態は、異機種マルチプロセッサ・システム内の複数のプロセッサにわたって分散式にガーベッジ・コレクション動作を実行するためのメカニズムを提供する。このようなシステムでは、ガーベッジ・コレクション動作は、図１のＰＰＥ１１０などの制御プロセッサによって調整することができ、システム・メモリの部分に関する分散ガーベッジ・コレクションは、制御プロセッサの指示で複数のコプロセッサ、たとえば、図１のＳＰＥ１２０〜１３４によって実行することができる。制御プロセッサおよびコプロセッサの種々のメモリ・ビュー（memory view）を補正するためにアドレス変換メカニズムが提供される。
【０１１０】
上述のガーベッジ・コレクション動作を実行するために提供可能ないくつかの最適化が存在する。たとえば、ＳＰＥ内のグローバル・マーク・キューのある部分の追跡を完了した後、そのＳＰＥは、他のＳＰＥの非ローカル・マーク・スタックを調べ、そのＳＰＥのローカル・ストア内に現在ロードされているシステム・メモリのチャンク内のメモリ・オブジェクトへの参照が存在するかどうかを判断することができる。このようにして、他のＳＰＥの非ローカル・マーク・スタック内のこのような参照は、その参照をグローバル・マーク・キューにマージして戻す必要なしに、しかもそれを他のＳＰＥにコピーして戻さずに、現行ＳＰＥのローカル・マーク・スタックに追加することができる。
【０１１１】
さらに、グローバル・マーク・キューは、個別のシステムまたは共用メモリ領域に対応する個別のグローバル・マーク・キュー領域が生成されるようにプリソートすることができる。非ローカル・マーク・スタックがグローバル・マーク・キューの「追跡対象」部分にマージして戻されると、非ローカル・マーク・スタック内のメモリ・オブジェクトへの参照はグローバル・マーク・キューの対応する領域にマージされる。したがって、第１の非ローカル・マーク・スタック内の参照が共用メモリの第１の領域内にあるメモリ・オブジェクトを参照する場合、その項目はグローバル・マーク・キューの第１の領域の「追跡対象」部分にマージされる。同様に、第２の非ローカル・マーク・スタック内の項目が共用メモリの第２の領域内にあるメモリ・オブジェクトを参照する場合、その項目はグローバル・マーク・キューの第２の領域の「追跡対象」部分にマージされる。ガーベッジ・コレクションの後続反復において、同じ参照が複数回システム・メモリの非ローカル部分内にあると判断される可能性は少ないので、これはガーベッジ・コレクション動作を加速することになる。
【０１１２】
図５は、プリソート済み拡張マーク・アンド・スイープ動作が使用される他の例示的な実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。図５は、いくつかの重大な例外を除いて、図４に示されている例示と同様のものである。図５に図示されている通り、グローバル・マーク・キュー５１０は、共用メモリ５３０の領域５３２〜５３６に対応する複数の領域５１２〜５１６を有するように、図１のＰＰＥ１１０などにより、プリソートされている。個々のＳＰＥ５２０〜５２６によるグローバル・マーク・キュー５１０の部分の検索は、上述とほぼ同じように実行される。しかし、ＳＰＥ５２０〜５２６の非ローカル・マーク・スタック５５０〜５５６のマージは、グローバル・マーク・キュー５１０の様々な領域を考慮するように変更される。
【０１１３】
たとえば、ＳＰＥ５２０〜５２６の非ローカル・マーク・スタック５５０〜５５６をグローバル・マーク・キューの「追跡対象」部分とマージする場合、このマージ・プロセスは、非ローカル・マーク・スタック５５０〜５５６内の参照をグローバル・マーク・キューのどの領域５１２〜５１６内に配置しなければならないかを判断する。これは、たとえば、参照された共用メモリ・アドレスを使用してその参照が共用メモリ５３０のどの領域５３２〜５３６に対応するかを判断し、次にグローバル・マーク・キュー５１０の対応する領域５１２〜５１６を識別することによって実行することができる。次にこれらの参照は、グローバル・マーク・キューのその領域の対応する「追跡対象」部分とマージされる。
【０１１４】
その参照は、グローバル・マーク・キュー５１０のうち、共用メモリ５３０の領域に対応する領域であって、その参照に対応するシステム・メモリ・オブジェクトが存在する領域にマージされるので、このようなプリソートおよび局所性を強化したガーベッジ・コレクションにより、同じ参照を繰り返しグローバル・マーク・キューにマージしなければならないインスタンスの数が低減される。その結果、同じ参照の冗長チェックの数が低減され、それにより、ガーベッジ・コレクション動作を実行するための時間が短縮される。
【０１１５】
追加の最適化として、それぞれのＳＰＥで使用されるシステムまたは共用メモリのチャンク・サイズは、ヒープの現行状態に基づいて調節することができる。ヒープが比較的空である場合、すなわち、メモリ割り振りがほとんどない場合、ガーベッジ・コレクションを実行すべきグローバル・マーク・キュー内のポインタまたは参照が比較的少なくなるので、チャンク・サイズは比較的大きくなるように選択することができる。このようにして、チャンク・サイズがより大きくなると、システムまたは共用メモリの大きいブロックを迅速にスキャンすることができる。
【０１１６】
同様に、ヒープが一杯である場合、グローバル・マーク・キュー内のポインタの数が比較的大きくなり、したがって、チャンク・サイズは比較的小さくなるように選択することができる。チャンク・サイズがより小さくなると、ガーベッジ・コレクション動作は完了するのにより長い時間を要するようになり、チャンク・サイズがより小さくなると、ローカルおよび非ローカル・マーク・スタックに関するスタック・オーバフロー例外がまったく発生しないことを保証するのに役に立つであろう。
【０１１７】
さらに追加の最適化では、ローカル・ストアの第１の部分が共用メモリの第１のチャンクを保管するために使用され、ローカル・ストアのもう１つの部分が共用メモリの次のチャンクのある部分を保管するために使用されるように、各ＳＰＥのローカル・ストアを２つに分割することができる。一般的に上述した方法で共用メモリの第１のチャンクについてマーキングを実行することができる。共用メモリのチャンクがマーキングされるにつれて、たとえば、ＤＭＡ動作を使用して、共用メモリの次のチャンクをローカル・ストア内に持ち込むことができる。このようにして、ある程度並列のロード動作が実行されるので、共用メモリのチャンクとグローバル・マーク・キューのそれに対応する部分のロードはより効率的なものにすることができる。
【０１１８】
例示的な諸実施形態のさらに他の最適化では、ローカル・マーク・キューおよび非ローカル・マーク・キューを保管するために指定されたメモリ域のオーバフローのための特殊処理を提供することができる。第１の最適化では、非ローカル・マーク・キューをシステム・メモリ内に維持されているグローバル・マーク・キューにマージし、削除することができる。第２の最適化では、ローカル・マーク・キューのある部分をシステム・メモリ内に維持されているグローバル・マーク・キューに転送し、削除することができる。第３の最適化では、据え置かれたチャンク部分に対応するマーク記述子がローカル・ストアまたはグローバル・システム・メモリのうちの一方に保持されることを保証しながら、チャンク・サイズを低減し、将来の処理のために据え置くことができる。
【０１１９】
図６は、例示的な一実施形態によるガーベッジ・コレクションを実行するための模範的な動作を概説する流れ図である。この流れ図の各ブロックおよびこの流れ図内の複数ブロックの組み合わせがコンピュータ・プログラム命令によって実現可能であることは理解されるであろう。これらのコンピュータ・プログラム命令は、プロセッサまたはその他のプログラマブル・データ処理装置上で実行される命令がこの流れ図の１つまたは複数のブロック内に指定された機能を実現するための手段を作成するようなマシンを製作するためにプロセッサまたはその他のプログラマブル・データ処理装置に提供することができる。また、これらのコンピュータ・プログラム命令は、コンピュータ可読メモリまたは記憶媒体に保管された命令が、この流れ図の１つまたは複数のブロック内に指定された機能を実現する命令手段を含む製品（article of manufacture）を製作するように特定の方法で機能するようプロセッサまたはその他のプログラマブル・データ処理装置に指示することができるコンピュータ可読メモリまたは記憶媒体に保管することもできる。
【０１２０】
したがって、この流れ図のブロックは、指定の機能を実行するための手段の組み合わせ、指定の機能を実行するためのステップの組み合わせ、ならびに指定の機能を実行するためのプログラム命令手段をサポートする。また、この流れ図の各ブロックおよびこの流れ図内の複数ブロックの組み合わせが、指定の機能またはステップを実行する特殊目的ハードウェアベースのコンピュータ・システムによって、あるいは特殊目的ハードウェアとコンピュータ命令の組み合わせによって実現可能であることも理解されるであろう。
【０１２１】
図６に図示されている通り、動作は、ＳＰＥが他のＳＰＥまたはＰＰＥなどからガーベッジ・コレクション動作を開始するための命令を受信することから始まる（ステップ６１０）。ＳＰＥまたは任意選択でＰＰＥは、受信したガーベッジ・コレクション命令で識別されたプログラムに配分されたシステムまたは共用メモリのある部分についてガーベッジ・コレクションを実行するためにガーベッジ・コレクション・エンジンを使用するコレクション・スレッドを開始する（ステップ６２０）。プログラムに割り振られたシステムまたは共用メモリのその部分、すなわち、ヒープについてＰＰＥによってグローバル・マーク・キューが生成され、初期設定される（ステップ６３０）。作成されたコレクション・スレッドは、それぞれローカル・マーク・スタックおよびローカル・ストアにコピーするために、グローバル・マーク・キューのある部分およびシステムまたは共用メモリの対応するチャンクを入手する（ステップ６４０）。
【０１２２】
コレクション・スレッドは、ローカル・マーク・スタック内の参照またはポインタについてマーキングおよび追跡動作を開始し、前記ＬＭＳはグローバル・マーク・キューのある部分によって初期設定されている。コレクション・スレッドは、ローカル・マーク・スタックから次の項目を選択し、対応するメモリ・ブロック内に含まれるすべての参照のマークおよび追跡処理を開始する（ステップ６５０）。マーキングおよび追跡動作の一部として、コレクション・スレッドは、メモリ・ブロック内の次の参照またはポインタを識別し（ステップ６６０）、その参照がシステム／共用メモリのチャンク内のメモリ・オブジェクトを指し示すかどうかを判断する（ステップ６７０）。その参照がシステム／共用メモリのチャンク内のメモリ・オブジェクトを指し示す場合、コレクション・スレッドは、その参照が前に到達不能であった参照に対応する（すなわち、マーク記述子が到達不能に設定されている）場合にその参照をローカル・マーク・スタックに追加し、たとえば、ローカル・マーク記述子データ構造にメモリ・オブジェクトへの参照を追加し、それに応じてそのマーク記述子ビットを設定することにより、ローカル・マーク記述子データ構造内で到達可能というマークをメモリ・オブジェクトに付ける（ステップ６８０）。その参照がシステムまたは共用メモリのチャンク内にないメモリ・オブジェクトを指し示す場合、コレクション・スレッドは、非ローカル・マーク参照というマークをその参照に付け、その参照を非ローカル・マーク・スタックに追加する（ステップ６９０）。
【０１２３】
次に、コレクション・スレッドは、現行メモリ・オブジェクト参照からまたはグローバル・マーク・キューのその部分内にメモリ・オブジェクトへの追加の参照またはポインタが存在するかどうかを判断する（ステップ７００）。存在する場合、コレクション・スレッドはステップ６６０に戻る。存在しない場合、コレクション・スレッドは、ローカル・マーク・スタックが空であるかどうか、すなわち、すべての項目がマークおよび追跡動作によって処理されたかどうかを判断する（ステップ７０５）。空ではない場合、動作はステップ６５０に戻り、マークおよび追跡動作を実行すべき次のローカル・マーク・スタック項目を選択する。ローカル・マーク・スタックが空である場合、コレクション・スレッドは任意選択で、現在のプロセッサのシステムまたは共用メモリの現行チャンクを参照する非ローカル・マーク・スタック内の参照またはポインタについて、異機種マルチプロセッサ・システムの他のプロセッサに対してポーリングする（ステップ７１０）。次に、ステップ６５０〜６９０と同様に、このような参照またはポインタを追跡し、マークを付ける（ステップ７２０）。
【０１２４】
次に、コレクション・スレッドは、結果として得られるローカル・マーク記述子をグローバル・マーク記述子とマージする（ステップ７３０）。また、コレクション・スレッドは、結果として得られる非ローカル・マーク・スタックをグローバル・マーク・キューの「追跡対象」部分とマージすることもできる（ステップ７４０）。これは、たとえば、非ローカル・マーク・スタック内の参照がグローバル・マーク・キューの「追跡対象」部分のどの領域に対応するかを判断し、その参照をグローバル・マーク・キューのそれぞれの領域とマージすることを伴う可能性がある。
【０１２５】
次に、コレクション・スレッドは、ローカル・マーク記述子、ローカル・マーク・スタック、および非ローカル・マーク・スタックを再初期設定する（ステップ７５０）。次に、コレクション・スレッドは、処理すべきグローバル・マーク・キューの追加の部分が存在するかどうかを判断する（ステップ７６０）。存在する場合、動作はステップ６４０に戻り、そこでグローバル・マーク・キューの次の部分およびメモリの対応するチャンクを入手し、プロセスを繰り返す。処理すべきグローバル・マーク・キューの追加の部分がまったく存在しない場合、動作は終了する。上述の分散「マーク・アンド・スイープ」動作の終了後、グローバル・マーク・スタックによって参照されないメモリ・オブジェクトに割り振られたシステムまたは共用メモリの部分を再利用するためにメモリ再利用プロセスを実行できることに留意されたい。
【０１２６】
したがって、例示的な諸実施形態は、異機種マルチプロセッサ・システムにおいてガーベッジ・コレクションを実行するためのメカニズムを提供する。ガーベッジ・コレクションは、異機種マルチプロセッサ・システム内の複数のプロセッサについて並列に実行することができ、その結果は適切にマージされ、到達可能なシステム・メモリ・オブジェクトと到達不能なシステム・メモリ・オブジェクトを識別する。このようにして、マルチプロセッサ・システム内のそれぞれのプロセッサの能力を使用する効率の良いガーベッジ・コレクション方法が提供される。
【０１２７】
上記の諸実施形態は分散ガーベッジ・コレクション動作に関して記載されているが、本発明はこれに限定されないことに留意されたい。むしろ、本発明の精神および範囲を逸脱せずに、ガーベッジ・コレクション動作の実行に異機種マルチプロセッサ・システム内の単一プロセッサを割り振ることができる。このようなプロセッサのローカル・ストアはサイズが限られているので、依然として、ガーベッジ・コレクションを実行すべきグローバル・マーク・キューの部分および共用またはシステム・メモリの対応する部分のコピーを実行することが必要である。したがって、本発明の精神および範囲を逸脱せずに、複数のプロセッサではなく単一プロセッサを使用して、上述と同じ動作を実行することができる。
【０１２８】
例示的な諸実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェア・エレメントとソフトウェア・エレメントの両方を含む実施形態の形を取ることができる。好ましい一実施形態では、本発明はソフトウェアで実現され、このソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むが、これらに限定されない。
【０１２９】
さらに、例示的な諸実施形態は、コンピュータまたは任意の命令実行システムによって使用するためのあるいはそれに関連するプログラム・コードを提供するコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータ・プログラムの形を取ることができる。この説明のため、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって使用するためのあるいはそれに関連するプログラムの収容、保管、伝達、伝搬、または転送を行うことができる任意の装置にすることができる。
【０１３０】
この媒体は、電子、磁気、光学、電磁、赤外線、または半導体システム（あるいは装置またはデバイス）、もしくは伝搬媒体にすることができる。コンピュータ可読媒体の例としては、半導体または固体メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、剛性磁気ディスク、および光ディスクを含む。光ディスクの現行例としては、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、書き換え可能なコンパクト・ディスク（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【０１３１】
前に上述した通り、プログラム・コードの保管または実行あるいはその両方に適したデータ処理システムは、直接またはシステム・バスを介して間接的にメモリ・エレメントに結合された少なくとも１つのプロセッサを含むことになる。メモリ・エレメントは、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量記憶装置、および実行中に大容量記憶装置からコードを取り出さなければならない回数を削減するために少なくとも何らかのプログラム・コードの一時記憶域を提供するキャッシュ・メモリを含むことができる。
【０１３２】
入出力またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、直接または介在するＩ／Ｏコントローラを介してシステムに結合することができる。データ処理システムが、介在する私設網または公衆網を介して他のデータ処理システムあるいはリモート・プリンタまたは記憶装置に結合された状態になるように、ネットワーク・アダプタもシステムに結合することができる。モデム、ケーブル・モデム、およびイーサネット（登録商標）・カードは、現在使用可能なタイプのネットワーク・アダプタの一部に過ぎない。
【０１３３】
完全に機能する１つのデータ処理システムに関連して本発明を説明したが、本発明のプロセスは複数命令からなるコンピュータ可読媒体の形および様々な形で分散可能であり、その分散を実行するために実際に使用される特定のタイプの信号伝送媒体にかかわらず、本発明が等しく適用されることを当業者が認識することは、留意すべき重要なことである。コンピュータ可読媒体の例としては、フレキシブル・ディスク、ハード・ディスク、ＲＡＭ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどの書き込み可能タイプの媒体、ならびに、たとえば、無線周波および光波伝送などの伝送形式を使用する、ディジタルおよびアナログ通信リンク、有線または無線通信リンクなどの伝送タイプの媒体を含む。コンピュータ可読媒体は、特定のデータ処理システムで実際に使用するためにデコードされたコード化フォーマットの形を取ることができる。
【０１３４】
本発明に関する記載は、例示および説明のために提示されており、網羅するためあるいは開示された形式の本発明に限定するためのものではない。多くの変更例および変形例は当業者にとって明白なものになるであろう。本発明の原理、実用的な適用例を最も良く説明し、企図されている特定の使用に適した様々な変更を含む様々な実施形態について他の当業者が本発明を理解できるようにするために、実施形態が選択され記載されている。
【図面の簡単な説明】
【０１３５】
【図１】例示的な諸実施形態の模範的な諸態様を実現可能な異機種マルチプロセッサ・システムの模範的なブロック図である。
【図２】例示的な諸実施形態の模範的な諸態様を実現可能なメモリ・フロー・コントローラを例示する模範的な図である。
【図３】例示的な一実施形態によるガーベッジ・コレクションを実行するために使用可能なガーベッジ・コレクション・メカニズムの模範的な図である。
【図４】例示的な一実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。
【図５】プリソート済み拡張マーク・アンド・スイープ動作が使用される他の例示的な実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。
【図６】例示的な一実施形態によるガーベッジ・コレクションを実行するための模範的な動作を概説する流れ図である。
【符号の説明】
【０１３６】
３００：ガーベッジ・コレクション・エンジン
３１０：コントローラ
３２０：グローバル・マーク・キュー・インターフェース・モジュール
３３０：共用メモリ・インターフェース・モジュール
３４０：マーキング・モジュール
３４５：マーク記述子記憶装置
３５０：グローバル・マーク・キュー部分記憶装置
３６０：ローカル・ストア・インターフェース
３７０：ローカル・マーク・スタック
３８０：非ローカル・マーク・スタック
３９０：マージ・モジュール
【図１】
0005147280.tif 000002
【図２】
0005147280.tif 000003
【図３】
0005147280.tif 000004
【図４】
0005147280.tif 000005
【図５】
0005147280.tif 000006
【図６】
0005147280.tif 000007