(57)【特許請求の範囲】
【請求項１】
コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムがコンピュータに、
前記コンピューティング環境のプロセッサ内で実行されるハンドラにより、処理の制御を取得することであって、オブジェクト・ポインタを含むデータをロードするためのロード命令の実行と、ロードされる前記オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置すると判断する第１の判断と、前記オブジェクト・ポインタがガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断する第２の判断とに基づき前記処理の制御を取得するものであって、前記第１の判断は、前記ロード命令の実行から判断された前記オブジェクト・ポインタの前記アドレスを、前記ポインタ・ストレージ領域のメモリアドレスを少なくとも含むデータと比較することを含み、前記第２の判断は、前記第１の判断に基づいて、前記オブジェクト・ポインタを、前記メモリの前記選択された部分のメモリアドレスを少なくとも含む情報と比較することを含む、取得することと、
前記ハンドラにより処理の制御を取得することに基づいて、前記ハンドラにより、前記ポインタ・ストレージ領域から前記オブジェクト・ポインタを取得することであって、前記オブジェクト・ポインタは、前記オブジェクト・ポインタにより指し示されるオブジェクトの位置を示す、取得することと、
前記ハンドラにより、前記オブジェクト・ポインタが修正されるべきかどうかを判断することと、
前記オブジェクト・ポインタが修正されるべきとの判断に基づいて、前記ハンドラにより、前記オブジェクト・ポインタを修正して、修正されたオブジェクト・ポインタを提供することと、
前記オブジェクト・ポインタを修正することに基づいて、前記修正されたオブジェクト・ポインタを選択された位置に格納することと、
を実行させる、コンピュータ・プログラム。
【請求項２】
前記選択された位置は、前記ポインタ・ストレージ領域内の位置又は前記ロード命令により指定された位置である、請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記処理の制御を取得することは、プロセッサ・ハードウェアにより発行された割り込みを介し、前記発行された割り込みは、前記ロード命令の実行と、ロードされる前記オブジェクト・ポインタの前記アドレスが前記ポインタ・ストレージ領域内に位置し、前記オブジェクト・ポインタは、ガベージ・コレクションが行われる前記メモリの選択された部分内の前記位置を示すと判断することとに基づく、請求項１又は請求項２に記載のコンピュータ・プログラム。
【請求項４】
ガベージ・コレクションが行われる前記メモリの選択された部分は、ガベージ・コレクションが行われない１つ又は複数の他のオブジェクトを含むオブジェクト領域の部分であり、ガベージ・コレクション中、ガベージ・コレクションが行われない前記オブジェクト領域にアクセスする１つ又は複数のアプリケーションは、処理を続行する、請求項１〜請求項３のいずれか一項に記載のコンピュータ・プログラム。
【請求項５】
前記修正されたオブジェクト・ポインタを選択された位置に格納することに基づいて、前記ロード命令が前記修正されたオブジェクト・ポインタに対して実行されるように、前記ハンドラが前記処理の制御を前記ロード命令に戻すことをさらに含む、請求項１〜請求項４のいずれか一項に記載のコンピュータ・プログラム。
【請求項６】
前記ポインタ・ストレージ領域は、複数のオブジェクト・ポインタ・アドレスを含むメモリの連続領域を含む、請求項１〜請求項５のいずれか一項に記載のコンピュータ・プログラム。
【請求項７】
前記ポインタ・ストレージ領域は、レジスタ又はメモリ内の位置の一方により指し示される、請求項１〜請求項５のいずれか一項に記載のコンピュータ・プログラム。
【請求項８】
前記メモリの選択された部分は、レジスタ又はメモリ内の位置の一方により指し示される、請求項１〜請求項７のいずれか一項に記載のコンピュータ・プログラム。
【請求項９】
前記レジスタは、前記メモリの選択された部分のベース・アドレスと、前記メモリの選択された部分のサイズとを含む、請求項８に記載のコンピュータ・プログラム。
【請求項１０】
前記ロード命令は、ロード操作を指定するための１つ又は複数の操作コード・フィールドと、前記オブジェクト・ポインタを取得するために用いられる結果フィールドと、前記ロード操作に用いられる１つ又は複数の他のフィールドとを含む、請求項１〜請求項９のいずれか一項に記載のコンピュータ・プログラム。
【請求項１１】
コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ・システムであって、前記コンピュータ・システムは、
メモリと、
前記メモリと通信するプロセッサを備え、
前記コンピューティング環境のプロセッサ内で実行されるハンドラにより、処理の制御を取得することであって、オブジェクト・ポインタを含むデータをロードするためのロード命令の実行と、ロードされる前記オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置すると判断する第１の判断と、前記オブジェクト・ポインタがガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断する第２の判断とに基づき前記処理の制御を取得するものであって、前記第１の判断は、前記ロード命令の実行から判断された前記オブジェクト・ポインタの前記アドレスを、前記ポインタ・ストレージ領域のメモリアドレスを少なくとも含むデータと比較することを含み、前記第２の判断は、前記第１の判断に基づいて、前記オブジェクト・ポインタを、前記メモリの前記選択された部分のメモリアドレスを少なくとも含む情報と比較することを含む、取得することと、
前記ハンドラにより処理の制御を取得することに基づいて、前記ハンドラにより、前記ポインタ・ストレージ領域から前記オブジェクト・ポインタを取得することであって、前記オブジェクト・ポインタは、前記オブジェクト・ポインタにより指し示されるオブジェクトの位置を示す、取得することと、
前記ハンドラにより、前記オブジェクト・ポインタが修正されるべきかどうかを判断することと、
前記オブジェクト・ポインタが修正されるべきとの判断に基づいて、前記ハンドラにより、前記オブジェクト・ポインタを修正して、修正されたオブジェクト・ポインタを提供することと、
前記オブジェクト・ポインタを修正することに基づいて、前記修正されたオブジェクト・ポインタを選択された位置に格納することと、
を含む、コンピュータ・システム。
【請求項１２】
前記処理の制御を取得することは、プロセッサ・ハードウェアにより発行された割り込みを介し、前記発行された割り込みは、前記ロード命令の実行と、ロードされる前記オブジェクト・ポインタの前記アドレスが前記ポインタ・ストレージ領域内に位置し、前記オブジェクト・ポインタは、ガベージ・コレクションが行われる前記メモリの選択された部分内の前記位置を示すと判断することとに基づく、請求項１１に記載のコンピュータ・システム。
【請求項１３】
ガベージ・コレクションが行われる前記メモリの選択された部分は、ガベージ・コレクションが行われない１つ又は複数の他のオブジェクトを含むオブジェクト領域の部分であり、ガベージ・コレクション中、ガベージ・コレクションが行われない前記オブジェクト領域にアクセスする１つ又は複数のアプリケーションは、処理を続行する、請求項１１又は請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記修正されたオブジェクト・ポインタを選択された位置に格納することに基づいて、前記ロード命令が前記修正されたオブジェクト・ポインタに対して実行されるように、前記ハンドラが前記処理の制御を前記ロード命令に戻すことをさらに含む、請求項１１〜請求項１３のいずれか一項に記載のコンピュータ・システム。
【請求項１５】
前記選択された位置は、前記ポインタ・ストレージ領域内の位置又は前記ロード命令により指定された位置である、請求項１１〜請求項１４のいずれか一項に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ実施方法であって、前記コンピュータ実施方法が、
前記コンピューティング環境のプロセッサ内で実行されるハンドラにより、処理の制御を取得することであって、オブジェクト・ポインタを含むデータをロードするためのロード命令の実行と、ロードされる前記オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置すると判断する第１の判断と、前記オブジェクト・ポインタがガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断する第２の判断とに基づき前記処理の制御を取得するものであって、前記第１の判断は、前記ロード命令の実行から判断された前記オブジェクト・ポインタの前記アドレスを、前記ポインタ・ストレージ領域のメモリアドレスを少なくとも含むデータと比較することを含み、前記第２の判断は、前記第１の判断に基づいて、前記オブジェクト・ポインタを、前記メモリの前記選択された部分のメモリアドレスを少なくとも含む情報と比較することを含む、取得することと、
前記ハンドラにより処理の制御を取得することに基づいて、前記ハンドラにより、前記ポインタ・ストレージ領域から前記オブジェクト・ポインタを取得することであって、前記オブジェクト・ポインタは、前記オブジェクト・ポインタにより指し示されるオブジェクトの位置を示す、取得することと、
前記ハンドラにより、前記オブジェクト・ポインタが修正されるべきかどうかを判断することと、
前記オブジェクト・ポインタが修正されるべきとの判断に基づいて、前記ハンドラにより、前記オブジェクト・ポインタを修正して、修正されたオブジェクト・ポインタを提供することと、
前記オブジェクト・ポインタを修正することに基づいて、前記修正されたオブジェクト・ポインタを選択された位置に格納することと、
を含む、コンピュータ実施方法。
【請求項１７】
前記処理の制御を取得することは、プロセッサ・ハードウェアにより発行された割り込みを介し、前記発行された割り込みは、前記ロード命令の実行と、ロードされる前記オブジェクト・ポインタの前記アドレスが前記ポインタ・ストレージ領域内に位置し、前記オブジェクト・ポインタは、ガベージ・コレクションが行われる前記メモリの選択された部分内の前記位置を示すと判断することとに基づく、請求項１６に記載のコンピュータ実施方法。
【請求項１８】
ガベージ・コレクションが行われる前記メモリの選択された部分は、ガベージ・コレクションが行われない１つ又は複数の他のオブジェクトを含むオブジェクト領域の部分であり、ガベージ・コレクション中、ガベージ・コレクションが行われない前記オブジェクト領域にアクセスする１つ又は複数のアプリケーションは、処理を続行する、請求項１６又は請求項１７に記載のコンピュータ実施方法。
【請求項１９】
前記修正されたオブジェクト・ポインタを選択された位置に格納することに基づいて、前記ロード命令が前記修正されたオブジェクト・ポインタに対して実行されるように、前記ハンドラが前記処理の制御を前記ロード命令に戻すことをさらに含む、請求項１６〜請求項１８のいずれか一項に記載のコンピュータ実施方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つ又は複数の態様は、一般に、コンピューティング環境内の処理に関し、具体的には、コンピューティング環境内のガベージ・コレクション（garbage collection）処理に関する。
【背景技術】
【０００２】
ガベージ・コレクションは、もはや参照されないメモリ内のオブジェクトを特定し、それらのオブジェクトを解放する自動メモリ管理プロセスである。種々のサイズのメモリ・オブジェクトが割り当てられ、後で解放されると、それらが格納されるメモリは、ますます断片化されるようになる。メモリの大きな空き領域はほとんどなくなり、メモリ・サイズを増大させることなく、付加的なオブジェクトを格納するのが困難になる。これが起こった場合、コンパクション（compaction）と呼ばれるガベージ・コレクション内のプロセスを用いて、割り当てられたオブジェクトを統合して１つの大きな領域にし、新しいオブジェクトに使用可能な別の大きな領域の空き領域を残す。統合の際、依然として参照されているメモリ・オブジェクトは、１つのメモリ領域から別のメモリ領域へ移動される。
【０００３】
従来、ガベージ・コレクションがオブジェクト・ストレージ領域上で実行されるとき、オブジェクト・ストレージ領域を用いるアプリケーションは、実行を一時停止しなければならない。この理由の１つは、オブジェクトが移動されたため、オブジェクトにアクセスするためにアプリケーションにより用いられるオブジェクトへのポインタが、依然として有効であるかどうかを判断するためである。場合によっては数秒の長さのこれらの一時停止により、アプリケーションは、トランザクション処理、リアルタイム・ゲーム、又は機械的制御のような時間的制約のある（time-sensitive）タスクに使用することができなくなる。従って、最適化されたガベージ・コレクションに対する必要性が存在する。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「Ｐｏｗｅｒ  ＩＳＡ（商標）Ｖｅｒｓｉｏｎ  ２．０７Ｂ」、インターナショナル・ビジネス・マシーンズ・コーポレーション、２０１５年４月９日
【非特許文献２】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、ＩＢＭ（登録商標）発行、Ｎｏ．ＳＡ２２−７８３２−１０、第１１版、２０１５年３月
【発明の概要】
【発明が解決しようとする課題】
【０００５】
コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ・プログラム、システム、及びコンピュータ実施方法を提供する。
【課題を解決するための手段】
【０００６】
本発明の１つ又は複数の実施形態によると、ガベージ・コレクション・プロセス中、アプリケーションが、ガベージ・コレクションが行われるメモリの領域内のオブジェクトにアクセスしていないときに（ガベージ・コレクションが原因で一時停止することなく）実行し続けることを可能にし、かつ、ガベージ・コレクションが行われるメモリの領域内のオブジェクトにアクセスしているアプリケーションが、非常に短い遅延後に即時再開することを可能にする、最適化されたガベージ・コレクション・プロセスが提供される。これは、コレクションが行われるオブジェクト・ストレージ領域へのポインタにいつアクセスされるかを識別し、ガベージ・コレクションが行われるメモリの領域内のオブジェクトへのポインタを取得し、ポインタを修正する、効率的な機構を提供することにより可能になる。有利なことに、これは、特殊命令を用いることなく、及び／又は特殊命令を実行するためにプログラムの修正を必要とすることなく、実行される。さらに、アプリケーション性能及び／又はプロセッサ性能を含む、コンピューティング環境内の性能が改善される。
【０００７】
１つの実施形態によると、コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ・プログラム製品が提供される。コンピュータ・プログラム製品は、処理回路より読み取り可能であり、方法を実施するために処理回路により実行される命令を格納するストレージ媒体を含む。方法は、例えば、コンピューティング環境のプロセッサ内で実行されるハンドラにより処理の制御を取得することを含む。処理の制御を取得することは、ロード命令の実行と、ロードされるオブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置し、オブジェクト・ポインタは、ガベージ・コレクションが行われるメモリの選択された部分内の位置（記憶位置、location）を示すと判断することとに基づく。ハンドラにより処理の制御を取得することに基づいて、ハンドラにより、ポインタ・ストレージ領域からオブジェクト・ポインタを取得することであって、オブジェクト・ポインタは、オブジェクト・ポインタにより指し示されるオブジェクトの位置を示す。ハンドラにより、オブジェクト・ポインタが修正されるべきかどうかを判断し、オブジェクト・ポインタが修正されるべきとの判断に基づいて、ハンドラにより、オブジェクト・ポインタを修正し、修正されたオブジェクト・ポインタを提供する。オブジェクト・ポインタを修正することに基づいて、修正されたオブジェクト・ポインタを選択された位置に格納する。
【０００８】
有利なことに、これにより、ガベージ・コレクションが行われないメモリの領域内のオブジェクトを使用しているアプリケーションが、ガベージ・コレクション中、中断することなく処理を続行すること、及び、ガベージ・コレクションが行われないメモリの領域内のオブジェクトを使用しているアプリケーションが、非常に短い気付かないほどの遅延後に処理を続行することが可能になり、従って、性能が改善される。さらに、これは、特殊命令の使用又は特殊命令を使用するためのアプリケーションの修正を必要としない。
【０００９】
１つの実施形態において、処理の制御を取得することは、プロセッサ・ハードウェアにより出されたる割り込みを介する。割り込みは、ロード命令の実行と、ロードされるオブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置し、オブジェクト・ポインタは、ガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断することとに基づく。１つの特定の例において、割り込みは、制御をアプリケーション・レベル・ハンドラに直接与える軽量割り込み（すなわち、オペレーティング・システムを要しない）である。有利なことに、これらの実施形態の１つ又は複数は、ハンドラによる即時処理を可能にし、スーパーバイザ・レベルの割り込みハンドラの遅延を被ることなく、割り込みが処理された直後、ポインタにアクセスしたアプリケーションが処理を続行することを可能にする。
【００１０】
１つの更に別の実施形態において、ガベージ・コレクションが行われるメモリの選択された部分は、ガベージ・コレクションが行われない１つ又は複数の他のオブジェクトも含むオブジェクト領域の部分であり、有利なことに、ガベージ・コレクション中、ガベージ・コレクションが行われないオブジェクト領域にアクセスする１つ又は複数のアプリケーションが、処理を続行する。例えば、それらの１つ又は複数のアプリケーションは、中断することなく、処理を続行する。さらに、ガベージ・コレクションが行われるメモリの選択された部分内のオブジェクトを示す、オブジェクト・ポインタにアクセスしたアプリケーションは、ハンドラ（例えば、軽量のアプリケーション・レベル・ハンドラ）がポインタを処理する非常に短い遅延の後、処理を即時再開する。これは、アプリケーションが、気付くほどの長い時間遅延しないので、時間的制約のある処理のためにアプリケーションを使用することを可能にする。
【００１１】
１つの実施形態において、ロード命令の実行から、オブジェクト・ポインタのアドレス（すなわち、オブジェクト・ポインタの位置を指定するアドレス）を判断し、オブジェクト・ポインタのアドレスを、ポインタ・ストレージ領域に関連するデータと比較して、オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置するかどうかを判断する。オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置するとの判断の比較に基づいて、オブジェクト・ポインタ（すなわち、オブジェクト・ポインタの位置を指定するアドレス）を、メモリの選択された部分に関連する情報と比較して、オブジェクト・ポインタがメモリの選択された部分内の位置を示すことを判断する。オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置し、オブジェクト・ポインタは、メモリの選択された部分内の位置を示すと判断することに基づいて、制御がハンドラに提供される。有利なことに、ポインタ・ストレージ領域からオブジェクト・ポインタを取得することにより、オブジェクト・ポインタを取得するために特殊命令を使用する必要性が排除され、従って、ガベージ・コレクション専用の特殊命令を定め、オブジェクト・ポインタを取得するための命令を使用するために、既存のプログラムを修正する必要性が排除される。
【００１２】
実施形態において、ポインタ・ストレージ領域は、複数のオブジェクト・ポインタを含むメモリの連続領域を含む。一例として、ポインタ・ストレージ領域は、レジスタ又はメモリ内の位置の一方により指し示される。
【００１３】
さらに、実施形態において、メモリの選択された部分は、レジスタ又はメモリ内の位置の一方により指し示され、１つの実施形態において、レジスタは、メモリの選択された部分のベース・アドレス、及びメモリの選択された部分のサイズを含む。
【００１４】
さらに、一例において、修正されたオブジェクト・ポインタが格納される選択された位置は、ポインタ・ストレージ領域内の位置又はロード命令により指定される位置である。
【００１５】
一例として、ロード命令は、ロード操作を指定するための１つ又は複数の操作コード・フィールドと、オブジェクト・ポインタを取得するために用いられる結果フィールドと、ロード操作に用いられる１つ又は複数の他のフィールドとを含む。
【００１６】
更に別の態様において、コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ・プログラム製品が提供される。コンピュータ・プログラム製品は、処理回路より読み取り可能であり、方法を実施するために処理回路により実行される命令を格納するストレージ媒体を含む。方法は、例えば、コンピューティング環境のプロセッサ内で実行されるハンドラにより処理の制御を取得することを含む。処理の制御を取得することは、アクセスされるオブジェクト・ポインタが指定されたメモリ領域内の位置を示すとの判断に基づく。ハンドラにより、処理の制御を取得することに基づいて、ハンドラは、アクションを取る。アクションを取ることは、警告を与える、指定されたメモリ領域へのアクセスを防止する、又はオブジェクト・ポインタを修正して、修正されたオブジェクト・ポインタを格納すること、のうちの少なくとも１つを含む。有利なことに、これは、アクセスの理由に関係なく、ポインタが指定されたメモリ領域にアクセスするときはいつでもアクションを取ることを可能にする。
【００１７】
別の態様によると、コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ・システムが提供され、このコンピュータ・システムは、メモリと、メモリと通信するプロセッサとを備え、かつ、方法を実施するように構成され、この方法は、コンピューティング環境のプロセッサ内で実行されるハンドラにより処理の制御を取得することであって、処理の制御を取得することは、ロード命令の実行と、ロードされるオブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置し、オブジェクト・ポインタは、ガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断することとに基づく、取得することと；ハンドラにより処理の制御を取得することに基づいて、ハンドラにより、ポインタ・ストレージ領域からオブジェクト・ポインタを取得することであって、オブジェクト・ポインタは、オブジェクト・ポインタにより指し示されるオブジェクトの位置を示す、取得することと；ハンドラにより、オブジェクト・ポインタが修正されるべきかどうかを判断することと；オブジェクト・ポインタが修正されるべきとの判断に基づいて、ハンドラによりオブジェクト・ポインタを修正し、修正されたオブジェクト・ポインタを提供することと；オブジェクト・ポインタを修正することに基づいて、修正されたオブジェクト・ポインタを選択された位置に格納することとを含む。
【００１８】
別の態様によると、コンピューティング環境内のガベージ・コレクションを容易にするためのコンピュータ実施方法が提供され、このコンピュータ実施方法は、コンピューティング環境のプロセッサ内で実行されるハンドラにより処理の制御を取得することであって、処理の制御を取得することは、ロード命令の実行と、ロードされるオブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置し、オブジェクト・ポインタは、ガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断することとに基づく、取得することと；ハンドラにより処理の制御を取得することに基づいて、ハンドラによりポインタ・ストレージ領域からオブジェクト・ポインタを取得することであって、オブジェクト・ポインタは、オブジェクト・ポインタにより指し示されるオブジェクトの位置を示す、取得することと；ハンドラにより、オブジェクト・ポインタが修正されるべきかどうかを判断することと；オブジェクト・ポインタが修正されるべきとの判断に基づいて、ハンドラによりオブジェクト・ポインタを修正し、修正されたオブジェクト・ポインタを提供することと；オブジェクト・ポインタを修正することに基づいて、修正されたオブジェクト・ポインタを選択された位置に格納することとを含む。
【００１９】
１つ又は複数の態様に関連するコンピュータ実装方法及びシステムも、本明細書で説明され、特許請求され得る。さらに、１つ又は複数の態様に関連するサービスも説明され、本明細書で特許請求され得る。
【００２０】
本明細書で説明される技術を通じて、付加的な特徴及び利点が実現される。他の実施形態及び態様は、本明細書で詳細に説明され、特許請求の範囲の態様の一部と見なされる。
【００２１】
ここで、本発明の好ましい実施形態が、単なる例として、以下の図面を参照して説明される。
【図面の簡単な説明】
【００２２】
【図１】１つ又は複数の実施形態を組み込み、用いるためのコンピューティング環境の一例を示す。
【図２】１つ又は複数の実施形態を組み込み、用いるためのコンピューティング環境の別の例を示す。
【図３】本発明の実施形態による、図２のメモリのさらなる詳細を示す。
【図４】１つ又は複数の実施形態による、ｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ命令の一例を示す。
【図５】１つ又は複数の実施形態による、ガベージ・コレクションが行われるメモリのさらなる詳細を示す。
【図６】１つ又は複数の実施形態による、ポインタ・ストレージ領域レジスタの一例を示す。
【図７】１つ又は複数の実施形態による、ロード監視領域レジスタの一例を示す。
【図８】１つ又は複数の実施形態による、ｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ命令を用いるガベージ・コレクションを行うための論理の１つの実施形態を示す。
【図９】最適化されたガベージ・コレクションを行うための１つの実施形態を示す。
【図１０】指定された条件に基づいてハンドラによりアクションをとるための論理の１つの実施形態を示す。
【図１１】１つ又は複数の実施形態による、クラウド・コンピューティング・ノードの１つの実施形態を示す。
【図１２】１つ又は複数の実施形態による、クラウド・コンピューティング環境の１つの実施形態を示す。
【図１３】１つ又は複数の実施形態による、抽象化モデル層の一例を示す。
【発明を実施するための形態】
【００２３】
１つ又は複数の実施形態によると、アプリケーション性能、アプリケーションを実行しているプロセッサの性能、及び／又はプロセッサが実行するコンピューティング環境の性能を有利に改善する最適化されたガベージ・コレクション・プロセスのための能力が提供される。
【００２４】
最適化されたガベージ・コレクション・プロセスは、アプリケーション（プログラムとも呼ばれる）が、特殊命令を利用するためにプログラムの修正又は特殊命令を実行するためのハードウェアを必要としないガベージ・コレクションを行うことを可能にする。さらに、１つ又は複数の実施形態において、最適化されたガベージ・コレクション・プロセスは、ガベージ・コレクションが行われないメモリの領域内のオブジェクトにアクセスするアプリケーションが、ガベージ・コレクション中、中断することなく処理を続行すること、及び、ガベージ・コレクションが行われるメモリの領域内のオブジェクトにアクセスするアプリケーションが、非常に短い気付かないほどの遅延後に処理を続行することを可能にし、さらに、オブジェクト・ポインタ（ポインタとも呼ばれる）の処理を改善する。
【００２５】
１つの実施形態において、オブジェクト・ポインタ（例えば、オブジェクトのアドレス）を含むデータをロードするために、ｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ（ｌｄ）命令と呼ばれる命令が用いられる。命令が実行されると、ロードされるデータのアドレス（例えば、オブジェクト・ポインタ）をポインタ・ストレージ領域と比較し、データがポインタ・ストレージ領域内にない場合、ロード命令は、従来通り実行される。しかしながら、ロードされるデータのアドレスがポインタ・ストレージ領域内にある場合、ロードされるデータが、所定のアドレス範囲（例えば、ガベージ・コレクションが行われるメモリ領域）内のオブジェクトを指し示すかどうかを判断するためにチェックを行う。ロードされるデータがアドレス範囲内のオブジェクトを指し示さない場合、ロード命令は、従来通り実行される。しかしながら、ロードされるデータが所定のアドレス範囲を指し示す場合、プロセッサは、非同期分岐（イベント・ベース分岐（Event-Based Branch、ＥＢＢ）と呼ばれる）を、ポインタ更新ハンドラ（ガベージ・コレクション・ハンドラ、ＥＢＢハンドラ、又はハンドラとも呼ばれる）に対して発生させる。これにより、進行中のガベージ・コレクション・プロセス中、指し示されたオブジェクトが移動された場合又はハンドラにより移動される場合、ポインタ更新ハンドラが、ポインタ（例えば、オブジェクトのアドレス）を更新することが可能になる。次に、更新されたポインタは、一例において、ポインタ・ストレージ領域内の位置のような、選択された位置内に格納される。
【００２６】
１つの実施形態において、ポインタのアドレスを判断するために、ポインタ更新ハンドラは、ｌｄ命令を調べて、ソース・レジスタを判断し、ソース・レジスタを読み取り、ソース・レジスタのコンテンツに基づいてポインタのアドレスを計算する。更に別の実施形態において、上述のようにポインタ・アドレスを計算するポインタ更新ハンドラの代わりに、ポインタ更新ハンドラが提供されるか、又はポインタ更新ハンドラがポインタ・アドレスに直接アクセスできる。この実施形態において、プロセッサ・ハードウェアは、例えば、命令（例えば、以下に説明されるｌｄ命令により示されるＥＡ）から、ポインタのアドレスを取得し、ポインタのアドレス（ポインタ・アドレスとも呼ばれる）を、指定されたメモリ位置、又はポインタ更新ハンドラに直接アクセス可能なレジスタなどの予め定められた位置に格納する。
【００２７】
一例として、ポインタ・アドレスは、ストレージ内の指定された位置に格納することができる。例えば、ポインタ・アドレスが格納されるストレージ・アドレスを、イベント・ベース分岐ハンドラ・レジスタ（Event Based Branch Handler：ＥＢＢＨＲ）内に格納されたＥＢＢハンドラ・アドレスの直前に来るように、又はアドレスから幾らかの指定されたオフセットで指定することができる。例示的なオフセットは、ポインタ・アドレスを、ポインタ更新ハンドラ自体の開始の直前に来るストレージ位置に格納するものである。これが行われた場合、ポインタ更新ハンドラは、ポインタ・アドレスを判断するために、単にそのストレージ位置を読み取るだけである。更に別の例として、ポインタ・アドレスは、別の目的で必要とされない既存のレジスタ内に格納される。例えば、レジスタは、性能監視ファシリティのような別のファシリティの部分とすることができる。さらに、アドレスは、ポインタ更新ハンドラのアドレスを格納するために用いられるレジスタ、すなわちＥＢＢＨＲ内に格納することができる。ＥＢＢＨＲは、ＥＢＢが発生した直後にハードウェアによりポインタ・アドレスをロードすることができ、次に、ポインタ更新ハンドラは、ポインタ・アドレスが必要とされたときに、そのレジスタを読み取り、制御を再びアプリケーションに戻す前、ポインタ更新ハンドラの開始アドレスを含むようにそのレジスタを復旧する。ポインタ更新ハンドラの実行中、ポインタ・アドレスを示すため以外にレジスタが必要とされなかった場合、及び、アプリケーションに戻る前に、ポインタ更新ハンドラによりレジスタを復旧できる場合、他のいずれかのレジスタを同様に用いることができる。
【００２８】
図１を参照して、１つ又は複数の実施形態を組み込み、用いるためのコンピューティング環境の１つの実施形態が説明される。コンピューティング環境１００は、例えば１つ又は複数のバス１０８及び／又は他の接続を介して互いに結合された、例えば、プロセッサ１０２（例えば中央処理ユニット）、メモリ１０４（例えば主メモリ）、及び１つ又は複数の入力／出力（Ｉ／Ｏ）デバイス及び／又はインターフェース１０６を含む。
【００２９】
１つ実施形態において、プロセッサ１０２は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅに基づいている。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅの１つの実施形態は、その全体が引用により本明細書に組み入れられる非特許文献１に記載される。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で用いられる他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の企業の登録商標、商標、又は製品名であり得る。
【００３０】
別の例において、プロセッサ１０２は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいており、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅを実装する、Ｓｙｓｔｅｍ  ｚサーバのようなサーバの部分であり、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの１つの実施形態は、その全体が引用により本明細書に組み入れられる非特許文献２に記載される。一例において、プロセッサは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、ｚ／ＯＳのようなオペレーティング・システムを実行する。ＩＢＭ（登録商標）、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）、及びｚ／ＯＳ（登録商標）は、インターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
【００３１】
さらに別の実施形態において、プロセッサ１０２は、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎにより提供されるＩｎｔｅｌアーキテクチャに基づいている。Ｉｎｔｅｌ（登録商標）は、カリフォルニア州Ｓａｎｔａ  Ｃｌａｒａ所在のＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標である。さらに、プロセッサ１０２は、他のアーキテクチャに基づくこともできる。本明細書で述べられるアーキテクチャは、例として提供されるに過ぎない。
【００３２】
図２を参照して、１つ又は複数の実施形態を組み込み、用いるためのコンピューティング環境の別の実施形態が説明される。この例において、コンピューティング環境２００は、例えば１つ又は複数のバス２０８及び／又は他の接続を介して互いに結合された、例えば、ネイティブ中央処理ユニット２０２、メモリ２０４、及び１つ又は複数の入力／出力（Ｉ／Ｏ）デバイス及び／又はインターフェース２０６を含む。例として、コンピューティング環境２００は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるＰｏｗｅｒＰＣ（登録商標）プロセッサ、ｚＳｅｒｉｅｓサーバ、又はｐＳｅｒｉｅｓサーバ；カリフォルニア州Ｐａｌｏ  Ａｌｔｏ所在のＨｅｗｌｅｔｔ  Ｐａｃｋａｒｄ  Ｃｏ．により提供されるＩｎｔｅｌ  Ｉｔａｎｉｕｍ  ＩＩプロセッサを伴うＨＰ  Ｓｕｐｅｒｄｏｍｅ；及び／又はインターナショナル・ビジネス・マシーンズ・コーポレーション、Ｈｅｗｌｅｔｔ  Ｐａｃｋａｒｄ、Ｉｎｔｅｌ、Ｏｒａｃｌｅ、又はその他により提供されるアーキテクチャに基づいた他のマシンを含むことができる。
【００３３】
ネイティブ中央処理ユニット２０２は、環境内での処理の際に用いられる、１つ又は複数の汎用レジスタ及び／又は１つ又は複数の専用レジスタなどの１つ又は複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
【００３４】
さらに、ネイティブ中央処理ユニット２０２は、メモリ２０４内に格納された命令及びコードを実行する。１つの特定の例において、中央処理ユニットは、メモリ２０４内に格納されたエミュレータ・コード２１２を実行する。このコードにより、１つのアーキテクチャにおいて構成された処理環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード２１２により、ｚＳｅｒｉｅｓサーバ、ｐＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバ又は他のものなどの、Ｐｏｗｅｒ（登録商標）Ａｒｃｈｉｔｅｃｕｒｅ以外のアーキテクチャに基づいたマシンが、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェア及び命令を実行することが可能になる。更に別の例において、エミュレータ・コード２１２は、ＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバ又は他のものなどの、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づいたマシンが、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェア及び命令を実行することを可能にする。他のアーキテクチャをエミュレートすることもできる。Ｐｏｗｅｒ及びＰｏｗｅｒＰＣは、インターナショナル・ビジネス・マシーンズ・コーポレーションの商標である。
【００３５】
図３を参照して、エミュレータ・コード２１２に関する更なる詳細を説明する。メモリ２０４内に格納されたゲスト命令２５０が、ネイティブＣＰＵ２０２のもの以外のアーキテクチャにおいて実行されるように開発されたソフトウェア命令（例えば、マシン命令に相関する）を含む。例えば、ゲスト命令２５０は、ＰｏｗｅｒＰＣプロセッサ又はｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ１０２上で実行されるように設計されているが、代わりに、例えばＩｎｔｅｌ  Ｉｔａｎｉｕｍ  ＩＩプロセッサとすることができるネイティブＣＰＵ２０２上でエミュレートされることもある。一例において、エミュレータ・コード２１２は、メモリ２０４から１つ又は複数のゲスト命令２５０を取得し、取得された命令に対してローカル・バッファリングを随意的に提供するための命令フェッチ・ルーチン２５２を含む。エミュレータ・コード２１２また、取得されたゲスト命令のタイプを判断し、ゲスト命令を１つ又は複数の対応するネイティブ命令２５６に変換するための命令変換ルーチン２５４も含む。この変換は、例えば、ゲスト命令により実施される機能を識別すること、及びその機能を実施するためのネイティブ命令を選択することを含む。
【００３６】
さらに、エミュレータ・コード２１２は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、ネイティブＣＰＵ２０２に、１つ又は複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又はゲスト命令のグループの取得をエミュレートするように、制御を命令フェッチ・ルーチンに戻させることができる。ネイティブ命令２５６の実行は、データをメモリ２０４からレジスタにロードすること、データをレジスタから再びメモリに格納すること、又は変換ルーチンによって定められるような何らかのタイプの算術演算又は論理演算を実施することを含むことができる。
【００３７】
各ルーチンは、例えば、メモリ内に格納され、ネイティブ中央処理ユニット２０２によって実行される、ソフトウェアで実装される。他の例において、１つ又は複数のルーチン又は演算は、ファームウェア、ハードウェア、ソフトウェア、又はそれらの幾つかの組み合わせで実装される。エミュレートされるプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２１０又はメモリ２０４内の位置を用いて、エミュレートすることができる。実施形態において、ゲスト命令２５０、ネイティブ命令２５６、及びエミュレータ・コード２１２は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間に分散されてもよい。
【００３８】
本明細書で用いられる場合、ファームウェアは、例えば、プロセッサのマイクロコード、ミリコード、及び／又はマクロコードを含む。ファームウェアは、例えば、より上位レベルのマシン・コードの実装に用いられる、ハードウェア・レベルの命令及び／又はデータ構造体を含む。１つの実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコード又は基礎をなすハードウェアに特有のマイクロコードとして配信される独自のコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【００３９】
一例において、取得され、変換され、実行されるゲスト命令２５０は、本明細書で説明される１つの命令である。１つのアーキテクチャ（例えば、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ又はｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ）のものであるこの命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ、Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅなど）のネイティブ命令２５６のシーケンスとして表される。次いで、これらのネイティブ命令が実行される。
【００４０】
１つ又は複数の実施形態に従って用いられる１つの命令は、オブジェクト・ポインタを含むデータをロードするために用いられるｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ命令である。図４を参照して、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅにおけるｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ命令の１つの特定の実装が説明される。一例において、ｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ（ｌｄ）命令３００は、ロード操作を示す操作コード（オペコード）フィールド３０２ａ（例えば、ビット０〜５）、３０２ｂ（例えば、ビット３０）；ロード操作の結果を格納するレジスタを示すために用いられる結果フィールド（ＲＴ）３０４（例えば、ビット６〜１０）；ロード操作により用いられるレジスタを指定するために用いられるレジスタ・フィールド（ＲＡ）３０６（例えば、ビット１１〜１５）；及びロード操作に用いられる別のフィールド（ＤＳ）３０８（例えば、ビット１６〜２９）を含む。フィールド３０４〜３０８の各々は、一例において、別個であり、互いに独立しているが、他の実施形態においては、１つより多いフィールドを組み合わせることができる。フィールドの使用に関する更に別の情報を以下に説明する。
【００４１】
ｌｄ命令の動作において、ロードされるデータ（例えば、オブジェクト・ポインタ）のアドレスが、ポインタ・ストレージ領域内にあるかどうかについてチェックを行う。ロードされるデータのアドレスがポインタ・ストレージ領域内にある場合、ロードされるデータが、本明細書ではロード監視領域（load monitored region）と呼ばれるメモリの選択された部分内に位置するオブジェクトを指し示すかどうかについて、更なるチェックを行う。ロードされるデータのアドレスがポインタ・ストレージ領域内にないか、又はロードされるデータがメモリの選択された部分内に位置するオブジェクトを指し示さない場合、従来のロードが実施される。例えば、一例において、従来のｌａｏｄ  ｄｏｕｂｌｅｗｏｒｄが実行される。
【００４２】
従来のｌｄ命令の動作において、実効アドレス（ＥＡ）は、
【数１】
0006697486.tif 000002
とすることができる。ＥＡによりアドレス指定されるストレージ内のダブルワードは、ＲＴ内にロードされる。
【００４３】
従来のｌｄ命令についての疑似コードの一例は、次の通りである。
【数２】
0006697486.tif 000003
ここで、ＥＡはオブジェクト・ポインタのアドレスであり、ＭＥＭ（ＥＡ，８）はオブジェクト・ポインタである。
【００４４】
しかしながら、ロードされるデータのアドレスがポインタ・ストレージ領域内に位置し、オブジェクト・ポインタが、ガベージ・コレクションが行われるメモリの選択された部分内に位置するオブジェクトを指し示す場合、本明細書で以下にさらに説明されるように、処理が中断され、ポインタを更新することを含む、ガベージ・コレクションに関連する１つ又は複数のタスクを実行するポインタ更新ハンドラ（update pointer handler）へのイベント・ベースの分岐を引き起こす。
【００４５】
１つ又は複数の実施形態による、ｌｄ命令についての疑似コードの一例は、次の通りである。
【数３】
0006697486.tif 000004
ここで、ｌｏａｄ＿ｅａはオブジェクト・ポインタであり、ＥＡはオブジェクト・ポインタのアドレスであり、ＢＥＳＣＲは、分岐イベント状況−制御レジスタ（branch event status-control register）を指し、ＧＥは全体的なイネーブル（enable）を指し、ＬＭＥ＝load monitored enabled（ロード監視イネーブル）である。
【００４６】
本明細書での例において、命令形式は、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅについてのものであるが、他のアーキテクチャに対しても同様の形式を用いることができる。
【００４７】
さらに、別の例においては、ｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ  ｉｎｄｅｘｅｄ（ｌｄｘ）命令を用いることができ、そこでは、ＤＳ３０８の代わりに、ビット１６〜２０内に別のレジスタ・フィールド（ＲＢ）３０８があり、ビット２１〜３０は、オペコード３０２ｂの一部を含む。この形式において、ＥＡ←ｂ＋（ＲＢ）である。
【００４８】
１つの実施形態において、以前に示されたように、ガベージ・コレクションが行われるメモリの選択された部分は、本明細書ではロード監視領域と呼ばれる。図５に示されるように、メモリ４００は、ロード監視領域４０２、及び複数のオブジェクト４０４を含む。オブジェクトの１つであるオブジェクトＢ  ４０６は、ロード監視領域４０２内にあり、該オブジェクトは、ガベージ・コレクションが実行されているメモリの部分内にあることを意味する。従って、例えばガベージ・コレクション・プロセスのために、ポインタが指し示すオブジェクトが移動されている場合、現在のポインタを更新する必要があり得る。
【００４９】
さらに、本明細書で用いられる場合、オブジェクト領域は、ロード監視領域と、ガベージ・コレクションが行われないオブジェクトを含むメモリの領域とを含む。
【００５０】
付加的に、１つの実施形態において、メモリ４００は、複数のポインタを含むポインタ・ストレージ領域４１０を含む。
【００５１】
この図において、さらに、アプリケーション・プログラム４２０が、ｌｄ命令４２２を実行し、この命令は、ポインタ・ストレージ領域内にあるポインタＢをロードしようと試みる。ポインタＢはロード監視領域内のオブジェクト４０６を指し示し、従って、割り込みが実行され、制御をＥＢＢハンドラ４２４（更新ポインタ・ハンドラとしても知られる）に与える。ハンドラ４２４は、必要に応じてポインタＢを修正し、一例では、修正されたポインタを、これを取得した位置４２６に格納する。次に、処理は命令に戻り、命令が再実行される。
【００５２】
更に別の実施形態において、ハンドラは、ポインタを修正し、修正されたポインタを命令のターゲット・レジスタ内に格納し、処理はｌｄ命令の後の命令に続き、それによりポインタのロードがエミュレートされる。１つ又は複数の実施形態において、アプリケーションは、ＥＢＢ処理を認識しておらず、既に述べたように、単にポインタを受け取るだけである。
【００５３】
上述のように、ロードされるデータ（例えば、オブジェクト・ポインタ）のアドレスがポインタ・ストレージ領域内にあり、かつ、オブジェクト・ポインタがメモリのロード監視領域内にあるオブジェクトを指し示すとき、割り込み処理が実行される。ポインタ・ストレージ領域は、例えば、レジスタ内のそのサイズ及びベース・アドレス又はメモリ内の指定された位置を指定することを含む、多くの方法で識別することができる。例えば、図６に示されるように、ポインタ・ストレージ領域（ＰＳＡ）レジスタ５００は、例えば、ポインタ領域ベース・アドレスを含むフィールド５０２と、領域のサイズを含むフィールド５０４とを含む。一例において、ビット０：５３は、ポインタ・ストレージ領域の開始アドレスを特定する。この例において、ベース・アドレスは、実装を容易にするために、そのサイズと同じであるアドレス境界上に位置合わせ（align）される。例えば、２５６Ｋポインタ・ストレージ領域は、２５６Ｋ境界上に位置合わせされ、２Ｋポインタ・ストレージ領域は、２Ｋ境界上に位置合わせされる。この位置合わせは、ポインタ・アドレス及びそのサイズが、６４ビット・レジスタ内に適合することを可能にするように意図され、絶対要件ではない。より大きいレジスタ又は複数のレジスタを用いて、いかなる位置合わせも可能である。
【００５４】
この実施形態において、ビット６１：６３は、次のようなポインタ・ストレージ領域のサイズを決定する。
【表１】
0006697486.tif 000005
【００５５】
ロード監視領域はまた、代替的な方法で特定することもできる。例えば、１つの実装において、そのサイズ及びベース・アドレスが、図７に示されるようなレジスタ内に格納される。示されるように、ロード監視領域レジスタ（ＬＭＲＲ）５５０は、例えば、監視領域ベース・アドレスを含むフィールド５５２と、領域のサイズを含むフィールド５５４とを含む。
【００５６】
一例において、ロード監視領域ベース・アドレスは、ロード監視領域の上位ビットを含む。この実施形態において、ロード監視領域は、そのサイズの粒度上に位置合わせされる。サイズ・フィールドは、各値が指定されたサイズに対応するようにエンコードされる。例えば、１６の可能なサイズが必要とされる場合、サイズ・フィールドは４ビットを有する。典型的なサイズは、数十ＭＢ（メガバイト）からＧＢ（ギガバイト）を上回るまでのオーダーである。ロード監視領域ベース・アドレス・フィールドにおけるビット数は、最小サポート・サイズから得ることができる。例えば、最小サポート・サイズが１６ＭＢである場合、ロード監視領域ベース・アドレス・フィールドは４０ビットであり、６４−４０＝２４なので、アドレスの２４ビットは、１６ＭＢアドレス境界上に位置合わせされたあらゆる１６ＭＢメモリ領域を識別するのに十分である。サイズ・フィールドがより小さいサイズを示すとき、ベース・アドレスを指定するために、より少ないビットが必要とされ、ロード監視領域ベース・アドレス・フィールド内の下位ビットは０に設定される。
【００５７】
他の例において、ロード監視領域及び／又はポインタ・ストレージ領域についてのサイズ及びベース・アドレスは、メモリ位置又は別の目的に用いられるレジスタ等内に指定することができる。付加的に、他の情報を用いて、ロード監視領域及び／又はポインタ・ストレージ領域のアドレス範囲を指定することもできる。
【００５８】
図８を参照して、本発明の１つの実施形態による、ｌｄ命令の実行と関連する論理の１つの実施形態が説明される。１つの実装において、プロセッサのハードウェアは、ｌｄ命令を発行するアプリケーションを実行し、プロセッサ・ハードウェアは、ｌｄをデコードする（ステップ６００）。ｌｄの実行中、プロセッサ・ハードウェアは、ロードされるデータ（例えば、ポインタ）のアドレスを、例えばＰＳＡレジスタにより示されるポインタ・ストレージ領域と比較する（問い合わせ６０１）。オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内にある場合、プロセッサ・ハードウェアは、読み取られたデータを、ガベージ・コレクションが行われるメモリの選択された部分を指定するロード監視領域レジスタ（又は、他のレジスタ若しくはメモリ位置）とさらに比較する。読み取られたポインタがロード監視領域内の位置を指し示す場合（問い合わせ６０２）、ハードウェアは、ポインタ更新ハンドラへの割り込み（例えば、イベント・ベース分岐）を引き起こす（ステップ６０６）。次に、ポインタ更新ハンドラは、ロード命令レジスタからそのアドレスを計算すること又は所定の位置からそれを読み込むことのいずれかによって、ポインタのアドレスを決定し；ポインタ・ストレージ領域からポインタを読み取り；必要な場合（すなわち、ガベージ・コレクション中に又はハンドラにより、ポインタが指し示すオブジェクトが移動された場合）、ポインタを修正し；必要に応じて及び時間が許すとき、他のガベージ・コレクション・タスクを実行し；修正されたポインタを、元のそれを読み取った位置に格納する（ステップ６１０）。次に、ハンドラは、制御をｌｄ命令におけるアプリケーションに戻し、命令を再実行する（ステップ６１２）。
【００５９】
更に別の例において、更新ハンドラは、ｌｄ命令のターゲット・レジスタを読み取り、更新されたポインタをターゲット・レジスタに格納する。これは、ポインタのロードをエミュレートする効果を有し、従って、次にハンドラは、ｌｄ命令後、制御を命令におけるアプリケーションに戻すことができる。
【００６０】
問い合わせ６０１に戻ると、ポインタがポインタ・ストレージ領域内にないか又はポインタがロード監視領域内の位置を指し示さない場合（問い合わせ６０２）、プロセッサ・ハードウェアは、イベント・ベースの岐を引き起こさず、代わりに、割り込みなしにｌｄ命令を実行する（ステップ６１４）。その後、処理は次の命令に続く（ステップ６１６）。
【００６１】
本明細書で説明されるように、ガベージ・コレクションは、ガベージ・コレクション中、ガベージ・コレクションが行われないメモリの領域内のオブジェクトにアクセスするアプリケーションが（一時停止することなく）処理を続行することを可能にし、ガベージ・コレクションが行われるメモリの領域内のオブジェクトにアクセスするアプリケーションが、短い気付かないほどの遅延後に処理を再開することを可能にすることによって、最適化される。これは、ポインタのロード中、オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置し、指し示されるオブジェクトは、ガベージ・コレクションが行われるメモリの選択された部分内に位置すると判断することによって可能になり、割り込みが、ポインタを管理するハンドラに発行される。１つの有利な実装において、ポインタはハンドラに利用可能であり、従って、ハンドラは、ポインタのアドレスを計算する必要がなく、そのため、ポインタを更新するのに必要な命令の数が減少し、コンピュータ処理が改善される。
【００６２】
図９を参照して、１つ又は複数の実施形態による、ガベージ・コレクションを容易にすることに関連する論理の１つの実施形態が説明される。最初に、プロセッサ内で実行されているハンドラ（例えば、アプリケーション・レベル・ハンドラ）が、処理の制御を取得し（ステップ７００）、例えばプロセッサ・ハードウェアにより発行された割り込み（例えば、オペレーティング・システムを要しない軽量割り込み）を介して取得する（ステップ７０２）。処理の制御は、ロード命令（例えば、ｌｄ又はｌｄｘ）の実行と、ロードされるオブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置し、オブジェクト・ポインタは、ガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断することとに基づいて、ハンドラにより取得される（ステップ７０４）。一例において、オブジェクト・ポインタのアドレスを、ロード命令により取得し（例えば、ＥＡ）、ポインタ・ストレージ領域に関連するデータと比較し、オブジェクト・ポインタがポインタ・ストレージ領域内に位置するかどうかを判断する（ステップ７０６）。比較が、オブジェクト・ポインタのアドレスがポインタ・ストレージ領域内に位置することを示すことに基づいて、オブジェクト・ポインタを、メモリの選択された部分に関連する情報と比較し、オブジェクト・ポインタがメモリの選択された部分内の位置を示すと判断する（ステップ７０８）。１つの実施形態において、ポインタ・ストレージ領域は、例として、ベース・アドレス及びサイズを含むことができるレジスタ又はメモリ位置により示される（ステップ７１０）。さらに、メモリの選択された部分は、例として、ベース・アドレス及びサイズを含むことができるレジスタ又はメモリ位置により示される（ステップ７１２）。
【００６３】
処理の制御の取得に基づいて、ハンドラは、オブジェクト・ポインタのアドレスを取得する（ステップ７２０）。一例において、アドレスは、ｌｄ命令の実行から判断され（ステップ７２２）、又は所定の位置から読み取られる（ステップ７２４）。ハンドラは、アドレスを用いて、例えばレジスタ又はメモリ位置内に示されるポインタ・ストレージ領域からオブジェクト・ポインタを取得する（例えば、読み取る）（ステップ７２６）。
【００６４】
次に、ハンドラは、オブジェクト・ポインタが修正されるべきかどうかを判断する（問い合わせ７３０）。例えば、ハンドラは、オブジェクト・ポインタにより指し示されるオブジェクトが移動されているかどうかを判断する。オブジェクトが移動されている場合、オブジェクト・ポインタが修正される（ステップ７３５）。その後、修正されたオブジェクト・ポインタは、これを読み取った位置（例えば、ポインタ・ストレージ領域内の位置）内に格納される（ステップ７４０）、処理は、ｌｄ命令に進み、ｌｄ命令は、再実行されるか、又は例えばロード命令により指定されたターゲット・レジスタなど、ロード命令によって指定された位置内に格納することができ、処理はｌｄ命令の後の命令に続く。
【００６５】
問い合わせ７３０に戻ると、オブジェクト・ポインタが修正されない場合、オブジェクト・ポインタは、例えばロード命令のターゲット・レジスタ内に格納され、ハンドラは、制御を、ｌｄの後の命令におけるアプリケーションに戻す（ステップ７３２）。
【００６６】
有利なことに、１つ又は複数の実施形態において、メモリの選択された部分内のオブジェクトにアクセスしていないアプリケーションが、ガベージ・コレクション中、処理を続行する（つまり、一時停止する必要がない）ことを可能にすることによって、ガベージ・コレクションが容易にされる（ステップ７５０）。また、メモリの選択された部分内のオブジェクトにアクセスしているアプリケーションは、短い間だけ遅延される。
【００６７】
本明細書で説明されるとき、１つ又は複数の実施形態は、ハンドラがオブジェクト・ポインタのアドレスを計算するのを必要とすることなく、オブジェクト・ポインタのアドレスを直接ハンドラに提供する。１つ又は複数の実施形態は、ソース及び宛先アドレスを判断するために、ｌｄ命令のハンドラによるデコード、ソース汎用レジスタのコンテンツの読み取り、ポインタの実効アドレスの計算を排除し、再び、代わりにハンドラは、所定の位置からアドレスを読み取り、これを計算する必要はない。１つ又は複数の実施形態は、有利なことに、ガベージ・コレクションを必要とするアプリケーションが、高速の取引、リアルタイムの機械的制御、時間的制約のあるゲーム等のような、時間的制約のある環境に入ることを可能にする。１つ又は複数の実施形態は、付加的な命令がアプリケーションに挿入され、いかなるオペレーティング・システムへの修正も要求されないので、アプリケーションのフットプリントを増大させない。さらに、アプリケーションは、修正する必要がない。
【００６８】
１つ又は複数の実施形態によると、オブジェクト・ポインタへの各アクセス時に、ポインタがポインタ・ストレージ領域内に位置し、ガベージ・コレクションが行われるメモリの領域内のオブジェクトを指し示す場合、処理をリアルタイム・ガベージ・コレクション・ハンドラ（例えば、ポインタ更新ハンドラ）に転換（divert）することができる。
【００６９】
本明細書で説明されるように、ガベージ・コレクションが容易にされる。１つの実施形態において、処理の制御は、コンピューティング環境のプロセッサ内で実行されるハンドラによって取得され、処理の制御の取得は、ロード命令の実行と、ロードされるオブジェクト・ポインタのアドレスが、ポインタ・ストレージ領域内に位置し、オブジェクト・ポインタは、ガベージ・コレクションが行われるメモリの選択された部分内の位置を示すと判断することとに基づく。ハンドラにより処理の制御を取得することに基づいて、ハンドラは、ポインタ・ストレージ領域から、オブジェクト・ポインタにより指し示されるオブジェクトの位置を示すオブジェクト・ポインタを取得する。ハンドラは、オブジェクト・ポインタが修正されるべきかどうかを判断し、オブジェクト・ポインタが修正されるべきとの判断に基づいて、オブジェクト・ポインタを修正し、修正されたオブジェクト・ポインタを提供する。オブジェクト・ポインタを修正することに基づいて、修正されたオブジェクト・ポインタは、ポインタ・ストレージ領域内の位置又はロード命令により指定された位置のような選択された位置内に格納される。
【００７０】
有利なことに、このことは、ガベージ・コレクションが行われないメモリの領域内のオブジェクトを用いるアプリケーションが、ガベージ・コレクション中、割り込みなしに処理を続行することを可能にし、ガベージ・コレクションが行われるメモリの領域内のオブジェクトを用いるアプリケーションが、非常に短い気付かないほどの遅延の後、処理を続行することを可能にし、特殊命令の使用又はプログラムの修正を必要とせず、それにより性能が改善される。
【００７１】
１つの更に別の実施形態において、ガベージ・コレクションが行われるメモリの選択された部分は、ガベージ・コレクションが行われない１つ又は複数の他のオブジェクトも含むオブジェクト領域の部分であり、有利なことに、ガベージ・コレクション中、ガベージ・コレクションが行われないオブジェクト領域にアクセスしている１つ又は複数のアプリケーションが、プロセスを続行する。例えば、プロセスは、中断することなく実行し続ける。さらに、１つの実施形態において、ガベージ・コレクションが行われるメモリの選択された部分内のオブジェクトを示すオブジェクト・ポインタにアクセスしたアプリケーションは、ハンドラ（例えば、アプリケーション・レベル・ハンドラ）がポインタを処理する間、非常に短い遅延後に処理を即時再開する。これは、アプリケーションが、気付くほど長い時間遅延しないので、時間的制約のある処理のためにアプリケーションを使用することを可能にする。
【００７２】
付加的に、１つ又は複数の実施形態を、ガベージ・コレクション以外のために用いることができる。例えば、本明細書で説明される１つ又は複数の実施形態は、指定されたストレージ・アドレス範囲へのポインタがいつロードされるかを検知するために用いることができるので、これを、制限されたメモリ空間への差し迫ったアクセスについての事前警告を与えるために使用することができる。この場合、メモリ領域を、制限されたメモリ領域になるように初期化し、ポインタ・ストレージ領域を、メモリ・ポインタの位置を示すように設定する。その後、制限された領域を指し示すポインタ・ストレージ領域内のポインタが読み取られると、ＥＢＢが発生する。次に、ＥＢＢハンドラは、アクセスを全体的に防止するか、メモリの制限された領域にアクセスがなされようとしているという事前警告信号をセキュリティ・モニタに提供するか、又は何らかの他の選択されたアクションを実行することができる。指定されたメモリ領域になされようとしている予想されるアクセスについての警告が望まれる状況において、他の関連するアプリケーションが可能である。
【００７３】
図１０を参照して、特定の条件に基づいてハンドラによりアクションをとるための論理の１つの実施形態が説明される。一例において、ロード命令がデコードされる（ステップ８００）。（別の実施形態において、それは別のタイプの命令であってもよい。）ロード命令は、例として、ｌｄ命令、ｌｄｘ命令、又は別のロード命令を含む種々のロード命令の１つとすることができる。ロード命令をデコードし、デコードに基づいて、オブジェクト・ポインタが判断される。オブジェクト・ポインタが指定されたメモリ領域内のオブジェクトを示すかどうかについての判断がなされる（問い合わせ８０２）。このメモリ領域は、例えば、１つの理由又は他の理由で制限される指定されたストレージ・アドレス範囲である。ポインタが、指定されたメモリ領域内のオブジェクトを示さない場合、ロード（又は、他の命令）は、従来通りに実行される（ステップ８０４）。次に、処理は次の命令に続く（ステップ８０６）。
【００７４】
しかしながら、問い合わせ８０２に戻ると、ポインタが、指定されたメモリ領域内のオブジェクトを示す場合、制御が、ハンドラ（例えば、アプリケーション・レベル・ハンドラ）により取得される（ステップ８１０）。例えば、プロセッサ・ハードウェアは、ハンドラへの割り込み（例えば、オペレーティング・システムに関与しない軽量割り込み）を実行する。次に、ハンドラは、１つ又は複数のアクションをとる（ステップ８１２）。例えば、１つの実施形態において、ハンドラは、随意的に、指定されたメモリ領域へのアクセスを防止し、次に、次の命令に処理を続行する（ステップ８１４）。更に別の例として、ハンドラは、ポインタ・アドレスを取得し（例えば、所定の位置から、又は命令からこれを計算する）、ポインタを読み取り、ポインタを修正し、修正されたポインタを、これが読み取られた元の位置に格納し、制御を命令に戻し、命令を再実行し、その結果、指定されたメモリ領域にアクセスされない（ステップ８１６）。他の可能性も存在する。
【００７５】
本明細書で用いられる場合、ストレージ、中央ストレージ、主ストレージ、メモリ及び主メモリは、慣例によって暗黙的に又は明示的に、特に断りのない限り、交換可能に用いられる。
【００７６】
１つ又は複数の実施形態は、クラウド・コンピューティングに関連し得る。
本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書で述べられる教示の実装は、クラウド・コンピューティング環境に限定されるものではないことが予め理解される。むしろ、本発明の実施形態は、現在知られている又は後に開発される他のいずれかのタイプのコンピューティング環境と併せて実装することができる。
【００７７】
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及び解放することができる構成可能なコンピューティング・リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス）の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするサービス配信のモデルである。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、及び少なくとも４つの配備モデルを含むことができる。
【００７８】
特徴は、以下の通りである。
オンデマンド・セルフサービス：クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス：機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、及びＰＤＡ）による使用を促進する標準的な機構を通じてアクセスされる。
リソースのプール化：プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置（例えば、国、州、又はデータセンタ）を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性：機能は、迅速かつ弾力的に、幾つかの場合自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
サービスの測定：クラウド・システムは、サービスのタイプ（例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント）に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
【００７９】
サービス・モデルは以下の通りである。
Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ）：クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ（例えば、ウェブ・ベースの電子メール）などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＰａａＳ）：プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上に配備するために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、配備されたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＩａａＳ）：コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアを配備及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、配備されたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント（例えば、ホストのファイアウォール）選択の限定された制御を有する。
【００８０】
配備モデルは以下の通りである。
プライベート・クラウド：クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
コミュニティ・クラウド：クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項（例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項）を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
パブリック・クラウド：クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術（例えば、クラウド間の負荷分散のためのクラウド・バースティング）によって結び付けられる２つ又はそれより多いクラウド（プライベート、コミュニティ、又はパブリック）の混成物である。
【００８１】
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
【００８２】
ここで図１１を参照すると、クラウド・コンピューティング・ノードの一例の概略図が示される。クラウド・コンピューティング・ノード１０は、好適なクラウド・コンピューティング・ノードの単なる一例であり、本明細書で説明される本発明の実施形態の使用又は機能の範囲に対するいずれかの制限を示唆することを意図するものではない。上記に関係なく、クラウド・コンピューティング・ノード１０は、本明細書で上述された機能のいずれかを実装及び／又は実施することができる。
【００８３】
クラウド・コンピューティング・ノード１０には、他の多数の汎用又は専用コンピューティング・システム環境又は構成で動作可能な、コンピュータ・システム／サーバ１２が存在する。コンピュータ・システム／サーバ１２と共に用いるのに好適な周知のコンピューティング・システム、環境、及び／又は構成の例としては、これらに限定されるものではないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式又はラップトップ型デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能民生電子機器、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び、上述のシステム又はデバイス等のいずれかを含む分散型クラウド・コンピューティング環境が含まれる。
【００８４】
コンピュータ・システム／サーバ１２は、コンピュータ・システムによって実行される、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的な文脈で説明することができる。一般に、プログラム・モジュールは、特定のタスクを実行する又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含むことができる。コンピュータ・システム／サーバ１２は、通信ネットワークを通じてリンクされた遠隔処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境で実施することができる。分散型クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカル及び遠隔両方のコンピュータ・システム・ストレージ媒体に配置することができる。
【００８５】
図１１に示されるように、クラウド・コンピューティング・ノード１０のコンピュータ・システム／サーバ１２は、汎用コンピューティング・デバイスの形で示される。コンピュータ・システム／サーバ１２のコンポーネントは、これらに限定されるものではないが、１つ又は複数のプロセッサ又は処理ユニット１６、システム・メモリ２８、及びシステム・メモリ２８を含む種々のシステム・コンポーネントをプロセッサ１６に結合するバス１８を含むことができる。
【００８６】
バス１８は、メモリ・バス又はメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、及び種々のバス・アーキテクチャのいずれかを用いるプロセッサ又はローカル・バスを含む、幾つかのタイプのバス構造のうちのいずれかの１つ又は複数を表す。限定ではなく例としては、このようなアーキテクチャは、業界標準アーキテクチャ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ、ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ、ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカル・バス、及びＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスを含む。
【００８７】
コンピュータ・システム／サーバ１２は、典型的には、種々のコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム／サーバ１２がアクセス可能ないずれかの利用可能媒体とすることができ、揮発性媒体及び不揮発性媒体の両方と、取り外し可能媒体及び取り外し不能媒体の両方とを含む。
【００８８】
システム・メモリ２８は、ランダム・アクセス・メモリ（ＲＡＭ）３０及び／又はキャッシュ・メモリ３２など、揮発性メモリの形のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ１２は、他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体をさらに含むことができる。単なる例として、取り外し不能の不揮発性磁気媒体（図示されておらず、典型的には「ハードドライブ」と呼ばれる）との間の読み出し及び書き込みのために、ストレージ・システム３４を設けることができる。図示されていないが、取り外し可能な不揮発性磁気ディスク（例えば、「フレキシブル・ディスク」）との間の読み出し及び書き込みのための磁気ディスク・ドライブと、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又は他の光媒体などの取り外し可能な不揮発性光ディスクとの間の読み出し及び書き込みのための光ディスク・ドライブとを設けることができる。このような例においては、それぞれを、１つ又は複数のデータ媒体インターフェースによってバス１８に接続することができる。以下でさらに示され説明されるように、メモリ２８は、本発明の実施形態の機能を実行するように構成されたプログラム・モジュールのセット（例えば、少なくとも１つ）を有する少なくとも１つのプログラム製品を含むことができる。
【００８９】
限定ではなく例として、メモリ２８内に、プログラム・モジュール４２のセット（少なくとも１つ）を有するプログラム／ユーティリティ４０、並びにオペレーティング・システム、１つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データを格納することができる。オペレーティング・システム、１つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データ、又はそれらの何らかの組み合わせの各々は、ネットワーキング環境の実装形態を含むことができる。プログラム・モジュール４２は、一般に、本明細書で説明される本発明の実施形態の機能及び／又は方法を実行する。
【００９０】
コンピュータ・システム／サーバ１２は、キーボード、ポインティング・デバイス、ディスプレイ２４等のような１つ又は複数の外部デバイス１４；ユーザがコンピュータ・システム／サーバ１２と対話することを可能にする１つ又は複数のデバイス；及び／又はコンピュータ・システム／サーバ１２が１つ又は複数の他のコンピューティング・デバイスと通信することを可能にするいずれかのデバイス（例えば、ネットワーク・カード、モデムなど）と通信することもできる。このような通信は、入力／出力（Ｉ／Ｏ）インターフェース２２を経由して行うことができる。さらにまた、コンピュータ・システム／サーバ１２は、ネットワーク・アダプタ２０を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、汎用広域ネットワーク（ＷＡＮ）、及び／又はパブリック・ネットワーク（例えば、インターネット）などの１つ又は複数のネットワークと通信することもできる。示されるように、ネットワーク・アダプタ２０は、バス１８を介して、コンピュータ・システム／サーバ１２の他のコンポーネントと通信する。図示されないが、コンピュータ・システム／サーバ１２と共に他のハードウェア及び／又はソフトウェア・コンポーネントを使用できることを理解されたい。例としては、これらに限定されるものではないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部のディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープドライブ、及びデータ・アーカイブ・ストレージ・システムなどが含まれる。
【００９１】
ここで図１２を参照すると、例示的なクラウド・コンピューティング環境５０が示される。示されるように、クラウド・コンピューティング環境５０は、例えば携帯情報端末（ＰＤＡ）又は携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、及び／又は自動車コンピュータ・システム５４Ｎなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング・デバイスと通信することができる、１つ又は複数のクラウド・コンピューティング・ノード１０を含む。ノード１０は、互いに通信することができる。これらのノードは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、１つ又は複数のネットワークにおいて物理的又は仮想的にグループ化することができる（図示せず）。これにより、クラウド・コンピューティング環境５０は、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを保持する必要のないサービスとして、インフラストラクチャ、プラットフォーム、及び／又はソフトウェアを提供することが可能になる。図１２に示されるコンピューティング・デバイス５４Ａ〜Ｎのタイプは単に例示であることを意図し、コンピューティング・ノード１０及びクラウド・コンピューティング環境５０は、いずれのタイプのネットワーク及び／又はネットワーク・アドレス指定可能な接続上でも（例えば、ウェブ・ブラウザを用いて）、いずれのタイプのコンピュータ化された装置とも通信できることを理解されたい。
【００９２】
ここで図１３を参照すると、クラウド・コンピューティング環境５０（図１２）によって提供される機能抽象化層の組が示される。図１３に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
ハードウェア及びソフトウェア層６０は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、メインフレーム６１と、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ（縮小命令セット・コンピュータ））アーキテクチャ・ベースのサーバ６２と、サーバ６３と、ブレード・サーバ６４と、ストレージ・デバイス６５と、ネットワーク及びネットワーキング・コンポーネント６６とが含まれる。幾つかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア６７及びデータベース・ソフトウェア６８を含む。
仮想化層７０は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ７１、仮想ストレージ７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーション及びオペレーティング・システム７４、並びに仮想クライアント７５を提供することができる。
【００９３】
一例においては、管理層８０は、以下で説明される機能を提供することができる。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定８２は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、リソースの消費に対する課金又は請求とを提供する。一例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル８３は、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理８４は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント（Ｓｅｒｖｉｃｅ  Ｌｅｖｅｌ  Ａｇｒｅｅｍｅｎｔ、ＳＬＡ）の計画及び履行８５は、ＳＬＡに従って将来の要件が予測されるクラウド・コンピューティング・リソースの事前配置及び調達を提供する。
【００９４】
ワークロード層９０は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロード及び機能の例には、マッピング及びナビゲーション９１、ソフトウェア開発及びライフサイクル管理９２、仮想教室教育配信９３、データ分析処理９４、トランザクション処理９５、及び本発明の１つ又は複数の実施形態のガベージ・コレクション処理９６が含まれる。
【００９５】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【００９６】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施する命令を含む製品を製造するようにすることもできる。
【００９７】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【００９８】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【００９９】
上記に加えて、１つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダによって供与、提供、配置、管理、サービス等を行うことができる。例えば、サービス・プロバイダは、１又は複数の顧客のために１つ又は複数の態様を実施するコンピュータ・コード及び／又はコンピュータ・インフラストラクチャの作成、保守、サポート等を行うことができる。見返りに、サービス・プロバイダは、例として、予約申し込み及び／又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、１又は複数の第三者に対する広告内容の販売から支払いを受けることができる。
【０１００】
一態様において、１つ又は複数の実施形態を実施するために、アプリケーションを配備することができる。一例として、アプリケーションの配備は、１つ又は複数の実施形態を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０１０１】
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することができ、そこでは、コードは、コンピューティング・システムと協働して、１つ又は複数の実施形態を実施することができる。
【０１０２】
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、プロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は、１つ又は複数の実施形態を含む。コードは、コンピュータ・システムと協働して、１つ又は複数の実施形態を実施することができる。
【０１０３】
種々の実施形態が上述されたが、これらは例にすぎない。例えば、１つ又は複数の実施形態を組み込み、使用するために、他のアーキテクチャのコンピューティング環境を使用することもできる。さらに、異なる命令、命令形式、命令フィールド、及び／又は命令の値を使用することができる。多くの変形が可能である。
【０１０４】
さらに、他のタイプのコンピューティング環境の利益を得、これを使用することができる。一例として、プログラム・コードを格納及び／又は実行するのに適しており、システム・バスを介してメモリ要素に直接又は間接的に結合された少なくとも２つのプロセッサを含む、データ処理システムを使用することができる。メモリ要素は、例えば、プログラム・コードの実際の実行中に用いられるローカル・メモリ、大容量記憶装置、及び実行中に大容量記憶装置からコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリを含む。
【０１０５】
入力／出力即ちＩ／Ｏデバイス（これらに限定されるものではないが、キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サムドライブ及び他のメモリ媒体等）は、直接システムに結合することもでき、又は介在するＩ／Ｏコントローラを介してシステムに結合することができる。ネットワーク・アダプタをシステムに結合させて、データ処理システムが、介在する私的ネットワーク又は公衆ネットワークを通じて他のデータ処理システム又は遠隔プリンタ若しくはストレージ・デバイスに結合できるようにすることもできる。モデム、ケーブル・モデム及びイーサネット・カードは、ネットワーク・アダプタの利用可能なタイプのうちのほんの数例である。
【０１０６】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む（comprise）」及び／又は「含んでいる（comprising）」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指示するが、１つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【０１０７】
以下の特許請求の範囲に存在する場合、「手段又はステップと機能との組合せ（ミーンズ又はステップ・プラス・ファンクション）」要素の対応する構造、材料、動作及び均等物は、明確に特許請求された他の請求要素と共に機能を実行するための任意の構造、材料、又は行為を含むことを意図したものである。本発明の説明は、例証及び説明のためだけに提示されたものであり、網羅的であること又は本発明を開示した形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正物及び変形物が明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最もよく説明するため、及び、当業者が、企図した特定の用途に適するように種々の修正を有する種々の実施形態に関して本発明を理解することができるように、選択され記述された。
【符号の説明】
【０１０８】
１０：クラウド・コンピューティング・ノード
１２：コンピュータ・システム／サーバ
１６、１０２：プロセッサ
１８、１０８、２０８：バス
２８、１０４、２０４、４００：メモリ
５０、１００、２００：コンピューティング環境
６０：ハードウェア及びソフトウェア層
７０：仮想化層
８０：管理層
９０：ワークロード層
１０６、２０６：インターフェース
２０２：ネイティブ中央処理ユニット
２１２：エミュレータ・コード
２５０：ゲスト命令
２５４：変換命令
２５６：ネイティブ命令
２６０：エミュレーション制御ルーチン
３００：ｌｏａｄ  ｄｏｕｂｌｅｗｏｒｄ（ｌｄ）命令
３０２ａ、３０２ｂ：操作コード（オペコード）フィールド
３０２ｂ：操作コード（オペコード）フィールド
３０４：結果フィールド（ＲＴ）
３０６：レジスタ・フィールド（ＲＡ）
３０８：別のフィールド（ＤＳ）
４０２：ロード監視領域
４０４、４０６：オブジェクト
４２０：アプリケーション・プログラム
４２２：ｌｄ命令
４２４：イベント・ベース分岐（ＥＢＢ）ハンドラ
５００：ポインタ・ストレージ領域（ＰＳＡ）レジスタ
５５０：ロード監視領域レジスタ（ＬＭＲＲ）
【図１】
0006697486.tif 000006
【図２】
0006697486.tif 000007
【図３】
0006697486.tif 000008
【図４】
0006697486.tif 000009
【図５】
0006697486.tif 000010
【図６】
0006697486.tif 000011
【図７】
0006697486.tif 000012
【図８】
0006697486.tif 000013
【図９】
0006697486.tif 000014
【図１０】
0006697486.tif 000015
【図１１】
0006697486.tif 000016
【図１２】
0006697486.tif 000017
【図１３】
0006697486.tif 000018