(57)【要約】【課題】スコープ・メモリ・システム内で参照を作成する方法を提供する。【解決手段】スコープ・メモリ・システムはスコープ・メモリ領域のスコープ・グラフを備えており、各スコープ・メモリ領域は、その中にオブジェクトをソフトウェア・スレッドによるアクセス用に割り当てるのに適しており、スコープ・メモリ領域が破棄可能であることを示すスレッド・カウントが関連付けられており、方法は、ターゲット・オブジェクトをターゲット・スコープ・メモリ領域内に割り当てるステップと、スコープ・グラフ内におけるターゲット・スコープ・メモリ領域の深度のインデックスであって、ターゲット・オブジェクトに関連付けられている該インデックスを格納するステップと、ソース・オブジェクトをソース・スコープ・メモリ領域内に割り当てるステップと、スコープ・グラフ内におけるソース・スコープ・メモリ領域の深度のインデックスであって、ソース・オブジェクトに関連付けられている該インデックスを格納するステップと、ソース・オブジェクトに関連付けられているインデックスとターゲット・オブジェクトに関連付けられているインデックスとを比較することによって、ソース・スコープ・メモリ領域がターゲット・スコープ・メモリ領域と同じ深度にあるかまたはそれよりも深いと判断されるのに応答して、ターゲット・オブジェクトからソース・オブジェクトへの参照を作成するステップとを含む。【選択図】図２
2009535682.tif 000002
【特許請求の範囲】
【請求項１】
スコープ・メモリ・システム内で参照（ｒｅｆｅｒｅｎｃｅ）を作成する方法であって、前記スコープ・メモリ・システムはスコープ・メモリ領域のスコープ・グラフを備えており、各スコープ・メモリ領域は、その中にオブジェクトをソフトウェア・スレッドによるアクセス用に割り当てるのに適しており、前記スコープ・メモリ領域が破棄可能であることを示すスレッド・カウントが関連付けられており、前記方法は、
ターゲット・オブジェクトをターゲット・スコープ・メモリ領域内に割り当てるステップと、
前記スコープ・グラフ内における前記ターゲット・スコープ・メモリ領域の深度のインデックスであって、前記ターゲット・オブジェクトに関連付けられている前記インデックスを格納するステップと、
ソース・オブジェクトをソース・スコープ・メモリ領域内に割り当てるステップと、
前記スコープ・グラフ内における前記ソース・スコープ・メモリ領域の深度のインデックスであって、前記ソース・オブジェクトに関連付けられている前記インデックスを格納するステップと、
前記ソース・オブジェクトに関連付けられている前記インデックスと、前記ターゲット・オブジェクトに関連付けられている前記インデックスとを比較することによって、前記ソース・スコープ・メモリ領域が前記ターゲット・スコープ・メモリ領域と同じ深度にあるかまたはそれよりも深いと判断されるのに応答して、前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成するステップと
を含む方法。
【請求項２】
前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成する前記ステップはさらに、前記ターゲット・スコープ・メモリ領域および前記ソース・スコープ・メモリ領域が前記スコープ・グラフの共通のブランチに位置すると判断されるのに応答するものである、請求項１に記載の方法。
【請求項３】
スコープ・メモリ・システム内で参照（ｒｅｆｅｒｅｎｃｅ）を作成する装置であって、前記スコープ・メモリ・システムはスコープ・メモリ領域のスコープ・グラフを備えており、各スコープ・メモリ領域は、その中にオブジェクトをソフトウェア・スレッドによるアクセス用に割り当てるのに適しており、前記スコープ・メモリ領域が破棄可能であることを示すスレッド・カウントが関連付けられており、前記装置は、
ターゲット・オブジェクトをターゲット・スコープ・メモリ領域内に割り当てる手段と、
前記スコープ・グラフ内における前記ターゲット・スコープ・メモリ領域の深度のインデックスであって、前記ターゲット・オブジェクトに関連付けられている前記インデックスを格納する手段と、
ソース・オブジェクトをソース・スコープ・メモリ領域内に割り当てる手段と、
前記スコープ・グラフ内における前記ソース・スコープ・メモリ領域の深度のインデックスであって、前記ソース・オブジェクトに関連付けられている前記インデックスを格納する手段と、
前記ソース・オブジェクトに関連付けられている前記インデックスと、前記ターゲット・オブジェクトに関連付けられている前記インデックスとを比較する手段によって、前記ソース・スコープ・メモリ領域が前記ターゲット・スコープ・メモリ領域と同じ深度にあるかまたはそれよりも深いと判断されるのに応答して、前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成する手段と
を含む装置。
【請求項４】
前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成する前記手段はさらに、前記ターゲット・スコープ・メモリ領域および前記ソース・スコープ・メモリ領域が前記スコープ・グラフの共通のブランチに位置すると判断する手段に応答するものである、請求項３に記載の装置。
【請求項５】
中央処理ユニットと、メモリ・サブシステムと、入出力サブシステムと、前記中央処理ユニット、前記メモリ・サブシステム、前記入出力サブシステムを相互接続するバス・サブシステムと、請求項３または４のうちのいずれかに記載の装置とを含む装置。
【請求項６】
コンピュータ・システムに読み込まれそこで実行されると前記コンピュータに請求項１または２のうちのいずれかに記載の方法のステップを実行させるコンピュータ・プログラム・コードを含んでいるコンピュータ・プログラム要素。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スコープ・メモリ・システム（ｓｃｏｐｅｄ  ｍｅｍｏｒｙ  ｓｙｓｔｅｍ）内での参照（ｒｅｆｅｒｅｎｃｅ）の作成に関する。本発明は特に、参照の作成中の処理オーバーヘッドを軽減することに関する。
【背景技術】
【０００２】
スコープ・メモリ領域は、ガーベッジ・コレクト・ヒープ（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｅｄ  ｈｅａｐｓ）に見られた欠点の一部がなくオブジェクトの割り当ておよび割り当て解除を行うのに適したメモリの領域である。ソフトウェア・スレッドはスコープ・メモリ領域に入力でき、その結果、スレッドによるすべてのオブジェクトの割り当てはこのスコープ・メモリ領域内で行われることになる。スレッドはさらに、ネストされた形の複数のスコープ・メモリ領域に入力できる。例えば、スレッドは第２スコープ・メモリ領域に入力でき、この領域が既定の割り当て領域となる。スコープ・メモリ領域はスコープ・グラフ（ｓｃｏｐｅ  ｇｒａｐｈ）に整理される。各スコープ・メモリ領域には、以前に入力されたスコープ・メモリ領域である親がある。第１スコープ・メモリ領域は始原スコープ・メモリ領域をその親とする。
【０００３】
領域内のいくつかのアクティブなスレッドの各スコープ・メモリ領域に関して、スレッド・カウント（ｔｈｒｅａｄ  ｃｏｕｎｔ）が保持されている。スコープ・グラフと一体となったスレッド・カウントは、スコープ・メモリ領域内に割り当てられた任意のオブジェクトが含まれているスコープ・メモリ領域がいつ破棄可能かを示す。例えば、スコープ・メモリ領域は、関連付けられているスレッド・カウントが１からゼロにデクリメントされ、このスコープ・メモリ領域が他のどのスコープ・メモリ領域に対しても親でないときに破棄可能であるとすればよい。このようにして、スコープ・メモリ領域は、他の部分ではＪａｖａ（ＪａｖａはＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓの登録商標）などのガーベッジ・コレクト・オブジェクト指向（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｅｄ  ｏｂｊｅｃｔ  ｏｒｉｅｎｔｅｄ）である環境の中で、オブジェクト用の代わりの割り当て空間を提供する。スコープ・メモリ領域内のすべてのオブジェクトが、メモリ領域のスレッド利用およびスコープ・グラフの整理に関して定義されている同じ時に破棄可能になるため、このようなスコープ・メモリ領域を使用することで、ガーベッジ・コレクション・アルゴリズムに起因するアプリケーションの実行遅れの問題に対処できる。
【０００４】
第１スコープ・メモリ領域内の第１オブジェクトは、第２スコープ・メモリ領域内の第２オブジェクトを参照できる。しかし、個々のスコープ・メモリ領域は完全に破棄可能になる可能性があるため、異なるスコープ・メモリ領域内のオブジェクト間の有効な参照（ｒｅｆｅｒｅｎｃｅ）および無効な参照に関して厳格な規則を強制する必要がある。子孫メモリ領域内のオブジェクトが確実に祖先メモリ領域内のオブジェクトを参照できるよう、親スコープ・メモリ領域がその子スコープ・メモリ領域の存続期間分は少なくとも存続期間を有することを保証するために、これらの規則が必要である。このようにしてダングリング参照（ｄａｎｇｌｉｎｇ  ｒｅｆｅｒｅｎｃｅ）を避けることができる。これは、「Ｅｆｆｉｃｉｅｎｔ  Ｍｅｍｏｒｙ−Ｒｅｆｅｒｅｎｃｅ  Ｃｈｅｃｋｓ  ｆｏｒ  Ｒｅａｌ−ｔｉｍｅ  Ｊａｖａ」（コルサロ（Ｃｏｒｓａｒｏ）およびシトロン（Ｃｙｔｒｏｎ）、ＡＣＭ  ＳＩＧＰＬＡＮ  第３８巻、第７刷、２００３年７月）で説明されている。
【０００５】
このような規則の１つは、スコープ・メモリ領域が最大で１つの親を有するというものである。これは「単一親規則（ｓｉｎｇｌｅ  ｐａｒｅｎｔ  ｒｕｌｅ）」として知られている。スレッドがスコープ・メモリ領域に入力する順序はスコープ・グラフ内におけるスコープ・メモリ領域の構造を定義するため、単一親規則は異なるスレッドによるスコープ・メモリ領域への入力順序が常に同じであるように定めている。さらに、ソース・スコープ・メモリ領域内に割り当てられたソース・オブジェクトは、同じスコープ・メモリ領域かまたは先祖スコープ・メモリ領域内のターゲット・オブジェクトしか参照できない。先祖スコープ・メモリ領域は、ソース・スコープ・メモリ領域より前にスレッドによって入力されるメモリ領域である。ソース・スコープ・メモリ領域は、ターゲット・オブジェクトのスコープ・メモリ領域に関して内部スコープを有するといわれている。この基準は、ソース・オブジェクトが常に必ずターゲット・オブジェクトより前に割り当て解除されるようにする。「Ｒｅａｌ−Ｔｉｍｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｆｏｒ  Ｊａｖａ」（ボレラ（Ｂｏｌｌｅｌｌａ）ら、アジソン・ウェスレイ（Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ）、２０００年）によれば、この基準を満たさない参照作成の試みは失敗に終わらなければならない。したがって、ターゲット・オブジェクトに対する新たな参照が作成されるときにはいつでも効率的な方法で基準が確認されなくてはならない。
【０００６】
オブジェクト間の参照を作成するために、この基準が満たされているかどうかを判断する方法の１つは、スコープ・グラフ内のスコープ・メモリ領域中をイテレートすることである。イテレーションは、ソース・スコープ・メモリ領域で始まり、ターゲット・スコープ・メモリ領域の有無を確認しながら各親スコープ・メモリ領域を進む。イテレーション中にスコープ・グラフ内でターゲット・スコープ・メモリ領域に遭遇すればターゲット領域はソース領域の祖先であるから、基準が満たされていると結論付けることができる。イテレーションが始原スコープ・メモリ領域（スコープ・グラフの「ルート」）に達すればターゲット・スコープ・メモリ領域はソース・スコープ・メモリ領域の祖先でないから、基準は満たされていないと結論付けることができる。
【０００７】
代わりの手法は、ターゲット・オブジェクトのスコープ・メモリ領域と始原スコープ・メモリ領域との間の距離のインデックスを判断することである。この距離は、ターゲット・スコープ・メモリ領域の「深度」と見なすことができる。さらに、ソース・オブジェクトのスコープ・メモリ領域と始原スコープ・メモリ領域との間の距離のインデックスは、ソース・スコープの「深度」として判断できる。ここでの深度という言葉は、スコープ・メモリ領域が、始原スコープ・メモリ領域からどのくらい離れたレベルに存在するかを示すために使用される。スコープ・メモリ領域が深いほど、スコープ・グラフ内で始原スコープ・メモリ領域から遠いレベルに位置している。子孫領域は常に祖先領域よりも深い（始原スコープ・メモリ領域から遠い）ため、これら深度インデックスを比較することで、ターゲット・スコープ・メモリ領域がソース・スコープ・メモリ領域の祖先であるかどうかが判断されることになる。したがって、ソース・スコープ・メモリ領域がターゲット・スコープ・メモリ領域よりも深ければ、基準は満たされており参照を作成できる。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
これらの手法は、新たな参照の作成用の基準を適用するのに効果的かもしれないが、参照作成時点で時間のかかるスコープ・グラフ中のイテレーションを必要とする。これらのイテレーションは、ターゲット・スコープ・メモリ領域を目指してスコープ・グラフ全体をスキャンするためにも、または深度インデックスを判断するためにも必要である。
【０００９】
したがって、スコープ・グラフ中のイテレーションによる望ましくない高い処理オーバーヘッドを要さずに、ソース・スコープ・メモリ領域内に割り当てられているソース・オブジェクトは先祖スコープ・メモリ領域内のターゲット・オブジェクトしか参照できないという規則が満たされているかどうかを判断することは有利であると思われる。
【課題を解決するための手段】
【００１０】
したがって、本発明は、第１の態様において、スコープ・メモリ・システム内で参照を作成する方法を提供し、このスコープ・メモリ・システムはスコープ・メモリ領域のスコープ・グラフを備えており、各スコープ・メモリ領域は、その中にオブジェクトをソフトウェア・スレッドによるアクセス用に割り当てるのに適しており、スコープ・メモリ領域が破棄可能であることを示すスレッド・カウントが関連付けられており、この方法は、ターゲット・オブジェクトをターゲット・スコープ・メモリ領域内に割り当てるステップと、スコープ・グラフ内におけるターゲット・スコープ・メモリ領域の深度のインデックスであって、ターゲット・オブジェクトに関連付けられている該インデックスを格納するステップと、ソース・オブジェクトをソース・スコープ・メモリ領域内に割り当てるステップと、スコープ・グラフ内におけるソース・スコープ・メモリ領域の深度のインデックスであって、ソース・オブジェクトに関連付けられている該インデックスを格納するステップと、ソース・オブジェクトに関連付けられているインデックスとターゲット・オブジェクトに関連付けられているインデックスとを比較することによってソース・スコープ・メモリ領域がターゲット・スコープ・メモリ領域と同じ深度にあるかまたはそれよりも深いと判断されるのに応答して、ターゲット・オブジェクトからソース・オブジェクトへの参照を作成するステップとを含む。
【００１１】
したがって、スコープ・メモリ領域の深度のインデックスであって、オブジェクトの作成時にスコープ・メモリ領域内に割り当てられたオブジェクトに関連付けられている該インデックスを格納すると、参照の作成時にスコープ・メモリ領域の深度の判断に取り掛かる必要がない。このようにして、スコープ・メモリ領域間の参照を作成するときにスコープ・メモリ・システムの基準が満たされているかどうかを確認するときの、先行技術の大変なイテレーションが避けられる。このようにして、参照作成中の処理オーバーヘッドが軽減される。
【００１２】
ターゲット・オブジェクトからソース・オブジェクトへの参照を作成するステップはさらに、ターゲット・スコープ・メモリ領域およびソース・スコープ・メモリ領域がスコープ・グラフの共通のブランチに位置するという判断に応答するものであることが好ましい。
【００１３】
したがって本発明は、第２の態様において、スコープ・メモリ・システム内で参照を作成する装置を提供し、スコープ・メモリ・システムはスコープ・メモリ領域のスコープ・グラフを備えており、各スコープ・メモリ領域は、その中にオブジェクトをソフトウェア・スレッドによるアクセス用に割り当てるのに適しており、スコープ・メモリ領域が破棄可能であることを示すスレッド・カウントが関連付けられており、装置は、ターゲット・オブジェクトをターゲット・スコープ・メモリ領域内に割り当てる手段と、スコープ・グラフ内におけるターゲット・スコープ・メモリ領域の深度のインデックスであって、ターゲット・オブジェクトに関連付けられている該インデックスを格納する手段と、ソース・オブジェクトをソース・スコープ・メモリ領域内に割り当てる手段と、スコープ・グラフ内におけるソース・スコープ・メモリ領域の深度のインデックスであって、ソース・オブジェクトに関連付けられている該インデックスを格納する手段と、ソース・オブジェクトに関連付けられているインデックスとターゲット・オブジェクトに関連付けられているインデックスとを比較する手段によってソース・スコープ・メモリ領域がターゲット・スコープ・メモリ領域と同じ深度にあるかまたはそれよりも深いと判断されるのに応答して、ターゲット・オブジェクトからソース・オブジェクトへの参照を作成する手段とを含む。
【００１４】
したがって本発明は、第３の態様において、中央処理ユニットと、メモリ・サブシステムと、入出力サブシステムと、中央処理ユニット、メモリ・サブシステム、入出力サブシステムを相互接続するバス・サブシステムと、上記の装置とを含む装置を提供する。
【００１５】
したがって本発明は、第４の態様において、コンピュータ・システムに読み込まれそこで実行されるとコンピュータに上記の方法のステップを実行させるコンピュータ・プログラム・コードを含むコンピュータ・プログラム要素を提供する。
【００１６】
ここからは、単なる一例として、本発明の好適な実施形態が添付の図面を参照して説明される。
【発明を実施するための最良の形態】
【００１７】
図１は、本発明の実施形態の動作に適したコンピュータ・システムのブロック図である。中央処理ユニット（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｏｒ  ｕｎｉｔ）１０２は、データ・バス１０８を介してストレージ１０４および入出力（Ｉ／Ｏ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）インターフェース１０６に通信可能に接続されている。ストレージ１０４は、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）または不揮発性ストレージ・デバイスなど、任意のリード／ライト・ストレージ・デバイスとすることができる。不揮発性ストレージ・デバイスの例には、ディスクまたはテープのストレージ・デバイスが挙げられる。Ｉ／Ｏインターフェース１０６は、データの入力もしくは出力、またはデータの入力および出力両方用のデバイスへのインターフェースである。Ｉ／Ｏインターフェース１０６に接続可能なＩ／Ｏデバイスの例には、キーボード、マウス、ディスプレイ（モニタなど）およびネットワーク接続が挙げられる。
【００１８】
図２は、本発明の好適な実施形態に従った例示的なスコープ・メモリ・システム２００のブロック図である。スコープ・メモリ・システムは、「Ｒｅａｌ−Ｔｉｍｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｆｏｒ  Ｊａｖａ」（ボレラら、アジソン・ウェスレイ、２０００年）で説明されているスコープ・メモリ・システムなど、コンピュータ・システムのストレージ１０４の一部の機構である。使用中、スコープ・メモリ・システム２００は、スコープ・メモリ領域２０６などゼロ以上のスコープ・メモリ領域のデータ構造配列であるスコープ・グラフ２０２を備えている。スコープ・グラフ２０２のデータ構造は必ずしもスタック・データ構造ではないが、スコープ・グラフ２０２は当該技術分野では一般に「スコープ・スタック（ｓｃｏｐｅ  ｓｔａｃｋ）」と称される。スコープ・グラフ２０２は、方向性グラフ・データ構造（ｄｉｒｅｃｔｅｄ  ｇｒａｐｈ  ｄａｔａ  ｓｔｒｕｃｔｕｒｅ）、スタック・データ構造、ツリー・データ構造、連鎖リスト、またはゼロ以上のスコープ・メモリ領域の格納に適した任意のデータ構造として実装できる。
【００１９】
スコープ・メモリ領域２０６は、ソフトウェア・オブジェクト（以下オブジェクトという）の割り当ておよび参照に適した、ストレージ１０４内の定義済みメモリ領域である。オブジェクトは、スコープ・メモリ領域２０６に関連して実行するソフトウェア・スレッドによってスコープ・メモリ領域の割り当て済みオブジェクト２１２部分に割り当てられ、アクセスされることが可能である。スコープ・メモリ領域２０６はさらに、スコープ・メモリ領域２０６に関連して実行しているいくつかのソフトウェア・スレッドのカウントとしてスレッド・カウント２１０を備えている。スレッドは、アプリケーション・プログラミング・インターフェース関数の呼び出しによってなど、スコープ・メモリ領域に明示的に入力することによってスコープ・メモリ領域２０６に関連して実行する。スレッドがスコープ・メモリ領域２０６に入力すると、スレッドによって明確に汎用ヒープ（ｇｅｎｅｒａｌ  ｈｅａｐ）または別のスコープ・メモリ領域内などの他の場所に割り当てられない限り、スコープ・メモリ領域２０６内でオブジェクトの割り当てが行われることになる。
【００２０】
スコープ・メモリ領域２０６はさらに、親スコープ・メモリ領域への参照を備えた親フィールド２０８を備えている。上述のように、スコープ・メモリ領域は最大で１つの親を有する。領域間の親子関係を手段として定義されているスコープ・メモリ領域の配列がスコープ・グラフ２０２を定義する。特定の親を持たない最初のスコープ・メモリ領域は、その親としての代替物として始原スコープ・メモリ領域２０４を参照する。
【００２１】
図３は、本発明の好適な実施形態に従ったスコープ・メモリ領域３００から３１２の例示的なスコープ・グラフ３５０のブロック図である。スコープ・グラフ３５０は、スコープ・メモリ・システムと共に実行しているソフトウェア・スレッドの動作から生じるスコープ・メモリ領域の考えられる配列を図示している。スコープ・メモリ領域Ａ３０２が初めにソフトウェア・スレッドによって入力され、始原スコープ・メモリ領域３００をその親とする。続いて、スコープ・メモリ領域Ｂ３０４がソフトウェア・スレッドによって入力され、スコープ・メモリ領域Ａ３０２をその親とする。続いて、スコープ・メモリ領域Ｃ３０６がソフトウェア・スレッドにより入力され、スコープ・メモリ領域Ｂ３０４をその親とする。第２スコープ・メモリ領域Ｄ３０８もソフトウェア・スレッドにより入力され、これもまたスコープ・メモリ領域Ｂ３０４をその親とする。スコープ・グラフ３５０のこの分岐は、例えば、スコープ・メモリ・システム内で複数のスレッドが実行していることに起因して生じる可能性がある。さらに、スコープ・メモリ領域Ｅ３１０およびＦ３１２が１つ以上のスレッドによって入力され、両方ともスコープ・メモリ領域Ｃ３０６をその親とする。
【００２２】
このように図３は、実行中、スコープ・メモリ領域に入力するときのソフトウェア・スレッドの動作に起因して生じる、スコープ・グラフ３５０の考えられる配列を単なる例として図示している。明らかに、スコープ・グラフ３５０中、各スコープ・メモリ領域は、始原スコープ・メモリ領域３００から特定の距離でそろえられていると見ることができる。例えば、スコープ・メモリ領域Ａ３０２は、始原スコープ・メモリ領域に最も近いレベル３２０にある。スコープ・メモリ領域Ｂ３０４はレベル３２２にある。スコープ・メモリ領域Ｃ３０６およびＤ３０８は両方ともレベル３２４にあり、スコープ・メモリ領域Ｅ３１０およびＦ３１２は両方ともレベル３２６にある。これらのレベル３２０から３２６は、スコープ・グラフ３５０内の「深度」であり、始原スコープ・メモリ領域３００からのスコープ・メモリ領域の距離を表すと見なすことができる。レベル３２０（およびスコープ・メモリ領域Ａ３０２）は、始原スコープ・メモリ領域３００に最も近いためスコープ・グラフ内において最も浅いレベルである一方、レベル３２６（およびスコープ・メモリ領域Ｅ３１０およびＦ３１２）は最も深いレベルである。
【００２３】
ソース・スコープ・メモリ領域に割り当てられたソース・オブジェクトが同じ領域かまたは先祖スコープ・メモリ領域内のターゲット・オブジェクトしか参照できないという上述のスコープ・メモリ・システムの動作の基準は、スコープ・グラフ３５０内におけるスコープ・メモリ領域の深度の観点から説明できる。これらの観点からすると、基準は、ソース・オブジェクトは、ソース・オブジェクトを含んでいるソース・スコープ・メモリ領域の深度がターゲット・オブジェクトを含んでいるターゲット・スコープ・メモリ領域の深度と同じかそれよりも深い場合にしか、ターゲット・オブジェクトを参照できないというものである。
【００２４】
図４は、本発明の好適な実施形態に従った例示的なソース３５６およびターゲット３７０スコープ・メモリ領域のブロック図である。ソース・スコープ・メモリ領域３５６は、オブジェクト・データ３６６と深度インデックス３６８とを有するソース・オブジェクト３６４を備えている。オブジェクト・データ３６６は、オブジェクト指向のシステム内のインスタンス化されたオブジェクト内に格納されたデータであり、変数およびソフトウェア・メソッドが含まれ得る。深度インデックス３６８は、スコープ・グラフ内におけるソース・スコープ・メモリ領域３５６の深度のインデックスである。図４はさらに、ソース・スコープ・メモリ領域３５６と同じスコープ・グラフ内のターゲット・スコープ・メモリ領域３７０を図示している。ターゲット・スコープ・メモリ領域３７０は、オブジェクト・データ３８８と深度インデックス３８２とを有するターゲット・オブジェクト３７８を備えている。
【００２５】
深度インデックス３６８および３８２は、オブジェクト３６４および３７８それぞれの割り当て時に判断可能である。この早期の判断が可能なのは、スコープ・メモリ領域が破棄可能になるまでスコープ・グラフ内で同じ位置を保つことを要求するスコープ・メモリ・システムの単一親規則が原因で、当該の領域内に割り当てられたオブジェクトの寿命中スコープ・メモリ領域の深度は変化できないためである。例えば、ソース・スコープ・メモリ領域３５６の深度は、ソース・オブジェクト３６４の寿命中変化できない。したがって、このようにして、オブジェクト３６４および３７６のオブジェクト割り当てプロセスの一部としてソースおよびターゲット・スコープ・メモリ領域３５６および２７０の深度を判断できる。したがって、参照作成時などの後の段階でこのような大変な判断に取り掛かる必要はない。
【００２６】
図５は、本発明の好適な実施形態に従った、図４のターゲット・オブジェクト３７８を割り当てる方法の流れ図である。初めにステップ４０２で、ターゲット・オブジェクト３７８がターゲット・スコープ・メモリ領域３７０内に割り当てられる。続いてステップ４０４で、ターゲット・スコープ・メモリ領域３７０の深度について判断される。この判断が下され得る１つの方法は、ターゲット・スコープ・メモリ領域３７０から始めて、始原スコープ・メモリ領域３５４に達するまで親スコープ・メモリ領域へ向かって移動しながらスコープ・グラフを解析することによる。各スコープ・メモリ領域において、ターゲット・スコープ・メモリ領域３７０の深度３８２のインデックスを増加させることができる。したがって、このようにして、深度インデックス３８２の大きい値ほど、より深いスコープ・メモリ領域に対応することができる。より低い値の深度インデックス３８２ほどより深いスコープ・メモリ領域を表すようにすることによってなど、スコープ・メモリ領域の深度を表す代わりの取り決めが使用されることも考えられる。続いてステップ４０６で、ターゲット・スコープ・メモリ領域３７０の深度がターゲット・オブジェクト３７８に関連付けられた深度インデックス３８２として格納される。深度インデックス３８２は、ターゲット・オブジェクト３７８内に格納されること、あるいはターゲット・オブジェクト３７８の外に格納されながらターゲット・オブジェクト３７８に関連付けられることが可能である。
【００２７】
図６は、本発明の好適な実施形態に従った図４のソース・オブジェクト３６４を割り当てる方法の流れ図である。ソース・オブジェクト３６４に関する図６のステップは、概して、ターゲット・オブジェクト３７８に関して図５について上述されたものに一致する。
【００２８】
図７は、本発明の好適な実施形態に従った図４のソース・オブジェクト３６４からターゲット・オブジェクト３７８への参照を作成する方法の流れ図である。これは、当該技術分野でよく知られているように、ソース・オブジェクト３６４内にターゲット・オブジェクト３７８への参照を格納することに相当する。初めに、方法はステップ５０２で、ターゲット・オブジェクト３７８の深度インデックス３８２がソース・オブジェクト３６４の深度インデックス３６８と同じであるかどうかを判断する。深度が同じであれば方法はステップ５０６へ進み、そうでなければ、方法は、深度インデックス３６８および３８２が、ターゲット・スコープ・メモリ領域３７０よりもソース・スコープ・メモリ領域が深いと示すかどうかを確認する。ソース・スコープ・メモリ領域がターゲット・スコープ・メモリ領域よりも深ければ、方法はステップ５０６へ進む。ステップ５０６で、方法はソース・オブジェクト３６４からターゲット・オブジェクト３７８への参照の作成を許可する。あるいは、ステップ５０４が、ソース・スコープ・メモリ領域はターゲット・スコープ・メモリ領域よりも深くないと判断すれば、方法は参照の作成を防ぐステップ５０８へ進む。
【００２９】
あるいは、ステップ５０６には、参照の作成を許可する前にターゲット・スコープ・メモリ領域３７０がソース・スコープ・メモリ領域３５６の祖先である（親である）と判断するステップなどの追加のステップが含まれることも可能である。ソースとターゲット・スコープ・メモリ領域との間のこの先祖関係は、ソースおよびターゲット・スコープ・メモリ領域がスコープ・グラフの共通のブランチに位置していれば（スコープ・グラフが分岐している場合）判断できる。例えば、図３を参照すると、スコープ・メモリ領域Ｆ３１２およびＣ３０６は、それらの間に先祖関係があるため（スコープ・メモリ領域Ｃ３０６はスコープ・メモリ領域Ｆ３１２の親である）、スコープ・グラフ３５０の共通のブランチに位置している。しかし、スコープ・メモリ領域Ｆ３１２およびスコープ・メモリ領域Ｄ３０８は、スコープ・メモリ領域Ｄ３０８がスコープ・メモリ領域Ｆ３１２の祖先ではなく、逆もまた同じであるため、共通のブランチには位置していない。
【００３０】
スコープ・メモリ領域の深度のインデックスであって、スコープ・メモリ領域内に割り当てられたオブジェクトに関連付けられている該インデックスをオブジェクトの作成時に格納することによって、参照の作成時にスコープ・メモリ領域の深度の判断に取り掛かる必要がなくなる。このようにして、スコープ・メモリ領域間の参照を作成するときにスコープ・メモリ・システムに関する基準が満たされているかどうかを確認する際の、先行技術の大変なイテレーションが避けられる。
【００３１】
説明された本発明の実施形態の場合、マイクロプロセッサ、デジタル信号プロセッサまたは他の処理デバイス、データ処理装置またはシステムなど、ソフトウェアにより制御されるプログラマブル処理デバイスを使用して少なくとも部分的に実装可能であり、先に説明された方法を実装するプログラマブル・デバイス、装置またはシステムを設定するコンピュータ・プログラムが本発明の態様として認識されるということが分かる。コンピュータ・プログラムは、例えば、処理デバイス、装置もしくはシステム上での実装用に、ソース・コードとして具現化されても、もしくはコンパイルされてもよく、またはオブジェクト・コードとして具現化されてもよい。
【００３２】
コンピュータ・プログラムは、例えば固体メモリ、ディスクまたはテープなどの磁気メモリ、コンパクト・ディスクまたはデジタル多用途ディスクなどの光学的もしくは磁気光学的に読み取り可能なメモリなど、機械またはデバイスに読み取り可能な形式で搬送媒体に適切に格納され、処理デバイスはこのプログラムまたはその一部を利用し、動作を目的としてこのデバイスを設定する。コンピュータ・プログラムは、電気信号、無線周波数搬送波または光学搬送波などの通信媒体に具現化されてリモート・ソースから供給されてもよい。このような搬送媒体も本発明の態様として認識される。
【００３３】
当業者には当然のことながら、一連の実施形態例に関して本発明が説明されてきたが、本発明はこれに限定されず、本発明の範囲に入る可能な変形物および変更が数多くある。
【００３４】
本発明の範囲には、本願明細書で開示されたあらゆる新たな特徴および特徴の組み合わせが含まれる。出願人は、この出願もしくはそこから派生するさらなる出願の審査中にこのような特徴または特徴の組み合わせに対して新たな特許請求の範囲が考案されることもあるということをここに予告する。特に、添付の特許請求の範囲に関しては、従属請求項の特徴が独立請求項の特徴と組み合わされてもよく、各独立請求項の特徴が特許請求の範囲で列挙されている特定の組み合わせのみではなく任意の適切な方法で組み合わされてもよい。
【００３５】
疑いを回避する目的で、本願明細書中、明細書および特許請求の範囲全体で使用されている「含む」という言葉は、「のみから成る」という意味として解釈されてはならない。
【図面の簡単な説明】
【００３６】
【図１】本発明の実施形態の動作に適したコンピュータ・システムのブロック図である。
【図２】本発明の好適な実施形態に従った例示的なスコープ・メモリ・システムのブロック図である。
【図３】本発明の好適な実施形態に従ったスコープ・メモリ領域の例示的なスコープ・グラフのブロック図である。
【図４】本発明の好適な実施形態に従った例示的なソースおよびターゲット・スコープ・メモリ領域のブロック図である。
【図５】本発明の好適な実施形態に従った図４のターゲット・オブジェクトを割り当てる方法の流れ図である。
【図６】本発明の好適な実施形態に従った図４のソース・オブジェクトを割り当てる方法の流れ図である。
【図７】本発明の好適な実施形態に従った図４のソース・オブジェクトからターゲット・オブジェクトへの参照を作成する方法の流れ図である。
【図１】
2009535682.tif 000003
【図２】
2009535682.tif 000004
【図３】
2009535682.tif 000005
【図４】
2009535682.tif 000006
【図５】
2009535682.tif 000007
【図６】
2009535682.tif 000008
【図７】
2009535682.tif 000009
【手続補正書】
【提出日】平成21年4月14日(2009.4.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
スコープ・メモリ・システム内で参照（ｒｅｆｅｒｅｎｃｅ）を作成する方法であって、前記スコープ・メモリ・システムはスコープ・メモリ領域のスコープ・グラフを備えており、各スコープ・メモリ領域は、その中にオブジェクトをソフトウェア・スレッドによるアクセス用に割り当てるのに適しており、前記スコープ・メモリ領域が破棄可能であることを示すスレッド・カウントが関連付けられており、前記方法は、
ターゲット・オブジェクトをターゲット・スコープ・メモリ領域内に割り当てるステップと、
前記スコープ・グラフ内における前記ターゲット・スコープ・メモリ領域の深度のインデックスであって、前記ターゲット・オブジェクトに関連付けられている前記インデックスを格納するステップと、
ソース・オブジェクトをソース・スコープ・メモリ領域内に割り当てるステップと、
前記スコープ・グラフ内における前記ソース・スコープ・メモリ領域の深度のインデックスであって、前記ソース・オブジェクトに関連付けられている前記インデックスを格納するステップと、
前記ソース・オブジェクトに関連付けられている前記インデックスと、前記ターゲット・オブジェクトに関連付けられている前記インデックスとを比較することによって、前記ソース・スコープ・メモリ領域が前記ターゲット・スコープ・メモリ領域と同じ深度にあるかまたはそれよりも深いと判断されるのに応答して、前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成するステップと
を含む方法。
【請求項２】
前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成する前記ステップはさらに、前記ターゲット・スコープ・メモリ領域および前記ソース・スコープ・メモリ領域が前記スコープ・グラフの共通のブランチに位置すると判断されるのに応答するものである、請求項１に記載の方法。
【請求項３】
スコープ・メモリ・システム内で参照（ｒｅｆｅｒｅｎｃｅ）を作成する装置であって、前記スコープ・メモリ・システムはスコープ・メモリ領域のスコープ・グラフを備えており、各スコープ・メモリ領域は、その中にオブジェクトをソフトウェア・スレッドによるアクセス用に割り当てるのに適しており、前記スコープ・メモリ領域が破棄可能であることを示すスレッド・カウントが関連付けられており、前記装置は、
ターゲット・オブジェクトをターゲット・スコープ・メモリ領域内に割り当てる手段と、
前記スコープ・グラフ内における前記ターゲット・スコープ・メモリ領域の深度のインデックスであって、前記ターゲット・オブジェクトに関連付けられている前記インデックスを格納する手段と、
ソース・オブジェクトをソース・スコープ・メモリ領域内に割り当てる手段と、
前記スコープ・グラフ内における前記ソース・スコープ・メモリ領域の深度のインデックスであって、前記ソース・オブジェクトに関連付けられている前記インデックスを格納する手段と、
前記ソース・オブジェクトに関連付けられている前記インデックスと、前記ターゲット・オブジェクトに関連付けられている前記インデックスとを比較する手段によって、前記ソース・スコープ・メモリ領域が前記ターゲット・スコープ・メモリ領域と同じ深度にあるかまたはそれよりも深いと判断されるのに応答して、前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成する手段と
を含む装置。
【請求項４】
前記ターゲット・オブジェクトから前記ソース・オブジェクトへの参照を作成する前記手段はさらに、前記ターゲット・スコープ・メモリ領域および前記ソース・スコープ・メモリ領域が前記スコープ・グラフの共通のブランチに位置すると判断する手段に応答するものである、請求項３に記載の装置。
【請求項５】
中央処理ユニットと、メモリ・サブシステムと、入出力サブシステムと、前記中央処理ユニット、前記メモリ・サブシステム、前記入出力サブシステムを相互接続するバス・サブシステムと、請求項３または４のうちのいずれかに記載の装置とを含む装置。
【請求項６】
請求項１または２のいずれか１項に記載の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【国際調査報告】
2009535682.tif 000010
2009535682.tif 000011