(57)【特許請求の範囲】
【請求項１】
コンピューティング環境における処理を容易にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
処理回路によって読取可能であり、方法を実行するために前記処理回路による実行のための命令を記憶したコンピュータ可読記憶媒体を含み、前記方法は、
ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、
前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定したことに基づいて、前記ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む、コンピュータ・プログラム。
【請求項２】
前記マーク付けすることは、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを前記コンピューティング環境のプロセッサにおいて実行しているリンカに示すための擬似命令を前記ルーチンへ加えることを含む、請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカを、シンボル・テーブル内に設定することを含む、請求項２に記載のコンピュータ・プログラム。
【請求項４】
前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することを含む、請求項２に記載のコンピュータ・プログラム。
【請求項５】
前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すためのマーカを、前記ルーチンのシンボル・データ構造へ追加することを含む、請求項１ないし４のいずれかに記載のコンピュータ・プログラム。
【請求項６】
前記マーク付けすることは、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することを含む、請求項１ないし５のいずれかに記載のコンピュータ・プログラム。
【請求項７】
前記方法はさらに、
前記コンピューティング環境のプロセッサにおいて実行しているリンカによって、前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていることを判定することと、
前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていると判定することに基づいて、前記ルーチンの呼び出し元へ戻る前記ルーチンによってコールされた外部のシブリング・ルーチンに基づいて使用されるべきコンテキストを提供することとを含む、請求項１ないし６のいずれかに記載のコンピュータ・プログラム。
【請求項８】
前記コンテキストは、グローバル・オフセット・テーブルを復元するための情報を含む、請求項７に記載のコンピュータ・プログラム。
【請求項９】
前記ルーチンは、１つのモジュール内にあり、前記１つのモジュール内の呼び出し側のルーチンによってコールされる、請求項１ないし８のいずれかに記載のコンピュータ・プログラム。
【請求項１０】
前記ルーチンは、１つのモジュール内にあり、別のモジュール内の呼び出し側のルーチンによってコールされる、請求項１ないし９のいずれかに記載のコンピュータ・プログラム。
【請求項１１】
前記判定することおよび前記マーク付けすることは、コンパイラによって実行される、請求項１ないし１０のいずれかに記載のコンピュータ・プログラム。
【請求項１２】
コンピューティング環境における処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムは、
メモリと、
前記メモリと通信するプロセッサとを含み、
前記コンピュータ・システムは、方法を実行するように構成され、前記方法は、
ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、
前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定したことに基づいて、前記ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む、コンピュータ・システム。
【請求項１３】
前記マーク付けすることは、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを前記コンピューティング環境のプロセッサにおいて実行しているリンカに示すための擬似命令を前記ルーチンへ加えることを含む、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカを、シンボル・テーブル内に設定することを含む、請求項１３に記載のコンピュータ・システム。
【請求項１５】
前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することを含む、請求項１３に記載のコンピュータ・システム。
【請求項１６】
前記方法はさらに、
前記コンピューティング環境のプロセッサにおいて実行しているリンカによって、前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていることを判定することと、
前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていると判定することに基づいて、前記ルーチンの呼び出し元へ戻る前記ルーチンによってコールされた外部のシブリング・ルーチンに基づいて使用されるべきコンテキストを提供することとを含む、請求項１２ないし１５のいずれかに記載のコンピュータ・システム。
【請求項１７】
コンピューティング環境における処理を容易にするコンピュータによって実施される方法であって、
ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、
前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定したことに基づいて、前記ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む、コンピュータによって実施される方法。
【請求項１８】
前記マーク付けすることは、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを前記コンピューティング環境のプロセッサにおいて実行しているリンカに示すための擬似命令を前記ルーチンへ加えることを含む、請求項１７に記載のコンピュータによって実施される方法。
【請求項１９】
前記擬似命令に基づいて、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカを、シンボル・テーブル内に設定することをさらに含む、請求項１８に記載のコンピュータによって実施される方法。
【請求項２０】
前記擬似命令に基づいて、前記ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することをさらに含む、請求項１８に記載のコンピュータによって実施される方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、コンピューティング環境内での処理に関し、詳細には、シブリング・コール（sibling call）に関連付けられた処理に関する。
【背景技術】
【０００２】
シブリング・コール（シブコール（sibcall）とも称される）は、呼び出し側のルーチンの最後に実行される、ファンクションやサブルーチンなどのルーチンへのコールである。呼び出し元が、シブリング・コールを行うとき、呼び出し元は、コールされたルーチンが、呼び出し元に戻ることを期待していない。呼び出し側のルーチンと、呼び出されたルーチンとは、同じルーチンであり得る。これが発生すると、コールは、テールコールと称され得る。本明細書で使用されているシブコールおよびその派生語である用語は、テールコールおよびその派生語を含む。
【０００３】
シブリング・コールを検出して実施することは、コード性能を向上させる機会を提供する。しかしながら、今日、多くの環境では、シブコールの有効性は、シブコールが、ローカルな呼び出し先のみに対してなされるべきであるという制約によって制限される。シブコーラ（すなわち、そのシブリング・ルーチンをコールするファンクション）が、ローカルにコールされた場合、オリジナルのコールは、外部のファンクションからの戻りを実行するための十分な情報を生成していないことがあり得る。シブコーラが、ローカルなコール、または、外部のコールのどちらを使用してコールされるかは不明であるため、コンパイラは、いずれの外部のシンボルに対してもシブコールを生成することはできない。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】"Power ISA(TM) Version 2.07B," International Business Machines Corporation, April 9, 2015
【非特許文献２】IBM publication entitled,"z/Architecture Principles of Operation," IBM Publication No.SA22-7832-10, Eleventh Edition, March 2015
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法を提供する。
【課題を解決するための手段】
【０００６】
コンピューティング環境内での処理を容易にするためのコンピュータ・プログラム製品を設けることにより、従来技術の欠点が克服され、追加の利点が提供される。コンピュータ・プログラム製品は、処理回路によって読み取り可能であり、方法を実行するために、処理回路による実行のための命令を記憶する記憶媒体を含む。この方法は、たとえば、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定することに基づいて、ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む。ルーチンを、外部のシブリング・コーラとしてマーク付けすることによって、様々な最適化が実行され得、これによって、コンピューティング環境内の性能を向上させる。
【０００７】
１つの実施形態では、マーク付けすることは、擬似命令をルーチンに追加することを含む。擬似命令は、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを、コンピューティング環境のプロセッサにおいて実行しているリンカに示す。
【０００８】
一例として、擬似命令に基づいて、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカが、シンボル・データ構造内に設定される。
【０００９】
別の例として、擬似命令に基づいて、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、ルーチンに関連付けられた再配置エントリが提供される。
【００１０】
別の実施形態では、マーク付けすることは、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すためのマーカを、ルーチンのシンボル・データ構造に追加することを含む。
【００１１】
さらに別の実施形態では、マーク付けすることは、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、ルーチンに関連付けられた再配置エントリを提供することを含む。
【００１２】
１つの態様では、方法はさらに、コンピューティング環境のプロセッサにおいて実行しているリンカによって、ルーチンが外部のシブリング・コーラとしてマーク付けされていることを判定することと、ルーチンが外部のシブリング・コーラとしてマーク付けされていることを判定することに基づいて、そのルーチンの呼び出し元に戻るルーチンによってコールされたシブリング・ルーチンに基づいて使用されるべきコンテキストを提供することとを含む。
【００１３】
例として、コンテキストは、インジケータをグローバル・オフセット・テーブルへのインジケータに復元するための情報を含む。
【００１４】
実施形態では、ルーチンは、１つのモジュール内にあり、１つのモジュール内の呼び出し側のルーチンによってコールされるか、または、そのルーチンは、１つのモジュール内にあり、別のモジュール内の呼び出し側のルーチンによってコールされる。
【００１５】
一例として、判定することおよびマーク付けすることは、コンパイラによって実行される。
【００１６】
本明細書では、１つまたは複数の態様に関連する方法およびシステムもまた、説明および特許請求される。さらに、本明細書では、１つまたは複数の態様に関連するサービスも説明され、また、特許請求され得る。
【００１７】
追加の特徴および利点が、本明細書において説明された技術によって実現される。他の実施形態および態様が、本明細書において詳細に説明されており、特許請求された態様の一部と見なされる。
【００１８】
１つまたは複数の態様が、本明細書の終わりに特許請求の範囲における例として特に指摘され、明確に特許請求されている。１つまたは複数の態様の前述の目的、特徴、および利点は、添付の図面と連携して採用された以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１９】
【図１】本発明の態様にしたがって、子ルーチンをコールし、次に子ルーチンがシブリング・ルーチンをコールする親ルーチンの一例を描写する図である。
【図２】本発明の１つの態様にしたがって、複数のシブリング・ルーチンの使用を描写する図である。
【図３】ローカルな子ルーチンをコールする親ルーチンの１つの実施形態を描写する図である。
【図４】外部のシブリング・ルーチンをコールするローカルな子ルーチンの１つの実施形態を描写する図である。
【図５】本発明の態様にしたがって、子ルーチンをシブコーラとしてマーク付けする１つの実施形態を描写する図である。
【図６】本発明の態様にしたがって使用されるシンボル・テーブルの一例を描写する図である。
【図７】本発明の態様にしたがって、子ルーチンがシブコーラとしてマーク付けされていることに基づいて復元されているコンテキスト情報の一例を描写する図である。
【図８】本発明の態様にしたがって、シブコーラに関連付けられた処理の１つの実施形態を描写する図である。
【図９】本発明の態様にしたがって、潜在的に外部のシブコーラに関連付けられる処理の１つの実施形態を描写する図である。
【図１０】本発明の態様にしたがって、シブコーラがコールされているか否かに基づいて、記憶されるべき情報を選択するために使用される処理の１つの実施形態を描写する図である。
【図１１】本発明の態様にしたがって、シブコーラをコールすることに関連付けられた処理の１つの実施形態を描写する図である。
【図１２】本発明の態様にしたがって、外部のシブリング・ルーチンをコールする外部の子ルーチンの一例を描写する図である。
【図１３】本発明の態様にしたがって、外部のシブリング・ルーチンをコールすることに関連付けられた処理の１つの実施形態を描写する図である。
【図１４】本発明の態様にしたがって、親ルーチンが、ローカルな子ルーチンをコールしていたが、そうではなく、外部の子ルーチンをコールしていた、または、ローカルな子ルーチンが、外部のシブリング・ルーチンをコールしたと、親ルーチンが考えていた状況のための訂正を提供する１つの実施形態を描写する図である。
【図１５】本発明の態様にしたがって、コンピューティング環境における処理を容易にする１つの実施形態を描写する図である。
【図１６】本発明の態様にしたがって、コンピューティング環境における処理を容易にする１つの実施形態を描写する図である。
【図１７】本発明の１つまたは複数の態様を組み込み、使用するためのコンピューティング環境の１つの実施形態を描写する図である。
【図１８】本発明の１つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の実施形態を描写する図である。
【図１９】図１８のメモリの１つの実施形態を描写する図である。
【図２０】クラウド・コンピューティング・ノードの１つの実施形態を描写する図である。
【図２１】クラウド・コンピューティング環境の１つの実施形態を描写する図である。
【図２２】抽象化モデル層の一例を描写する図である。
【発明を実施するための形態】
【００２０】
本発明の１つまたは複数の態様にしたがって、シブリング・コールの使用を容易にするための能力が提供される。たとえば、シブリング・コールを効率的に使用し、それに関連付けられた処理を強化するための最適化が提供される。
【００２１】
シブリング・コールは、他のファンクション・コールよりも効率的である。たとえば、次の子ルーチンを取り上げる。
ｃｈｉｌｄ（）
｛
ｒｅｔｕｒｎ  ｓｉｂ（ａ＋１）；
｛
【００２２】
一例では、シブリングを使用せずに、以下の処理が行われる。
ｃｈｉｌｄ：
（ａｌｌｏｃａｔｅ  ｓｔａｃｋｆｒａｍｅ）
ｌｄ  ｒ３，ｒ２，ａ＠ｇｏｔ
ａｄｄｉ  ｒ３，ｒ３，１
ｂｌ  ｓｉｂ
ＮＯＰ
（ｄｅａｌｌｏｃａｔｅ  ｓｔａｃｋｆｒａｍｅ）
ｂｌｒ
【００２３】
ここで、ｌｄがロード、ａｄｄｉが即時加算、ｂｌが分岐リンク、ＮＯＰがノー・オペレーション、およびｂｌｒが、たとえば、Ｐｏｗｅｒアーキテクチャにしたがうリンク・レジスタへの分岐である。
【００２４】
しかしながら、シブコールを使用すると、一例において、処理は次のようになる。
ｃｈｉｌｄ：
（ａｌｌｏｃａｔｅ  ｓｔａｃｋｆｒａｍｅ）
ｌｄ  ｒ３，ｒ２，ａ＠ｇｏｔ
ａｄｄｉ  ｒ３，ｒ３，１
ｂ  ｓｉｂ
ＮＯＰ
（ｄｅａｌｌｏｃａｔｅ  ｓｔａｃｋｆｒａｍｅ）
ｂｌｒ
【００２５】
したがって、シブコールを使用することによって、子ルーチンは、ファンクションｓｉｂ（）へのサブルーチン・コールが戻った後、その呼び出し元へ戻るためにファンクションｃｈｉｌｄ（）によって使用されるべき戻り情報を保存するために使用されるスタックフレームを割り当てる、または割り当て解除する必要はないか、または、ファンクションｃｈｉｌｄ（）のモジュールに対して外部にあるファンクションに対応するｓｉｂ（）に対するコールをリンカが解決する場合、可能性のあるグローバル・オフセット・テーブル（ＧＯＴ）復元命令のためのプレースホルダとしてサービス提供するＮＯＰを実行する必要はない。ファンクションｃｈｉｌｄ（）は、分岐命令ｂを使用して、制御をｓｉｂ（）に移動させ、ファンクションｓｉｂ（）は、ｃｈｉｌｄ（）の呼び出し元へ直接戻る。その結果、コードは、より単純で、より効率的になる。
【００２６】
シブコールに関するさらなる詳細が、図１〜図２を参照して説明される。図１に図示されるように、親ルーチン１００が、子ルーチン１０２をコールする。子ルーチンが、その後、シブリング・ルーチン１０４をコールする。子ルーチン１０２は、シブコーラと称され、シブリング・ルーチン１０４は、シブコーリ（sibcallee）と称される。シブリング・ルーチン１０４は、子ルーチン１０２に戻る代わりに、親ルーチン１００に直接戻り、子ルーチン１０２は、その後、親ルーチン１００に戻る。
【００２７】
図２に図示されるように、シブコーリ１０４はさらに、シブリング・ルーチン１０６をコールし得、シブリング・ルーチン１０６は、その後、親ルーチン１００に直接戻る。この場合、シブリング・ルーチン１０４は、シブコーラでもあり、シブリング・ルーチン１０６は、シブコーリである。
【００２８】
ファンクションをコールする際には、ファンクションがどのようにコールされるのかを決定するアプリケーション・バイナリ・インターフェース（ＡＢＩ）が使用され得る。ＡＢＩは、変数へのアクセスを提供するリンカ管理されたグローバル・オフセット・テーブル（ＧＯＴ）を使用し得る。特に、コンパイラは、コード／データの最終アドレスまたは置換を知ることなく、ソース・コードからオブジェクト・コードを生成する。具体的には、コンパイラは、データ構造の最終サイズ、または、様々なデータ・セクションのオフセット／アドレスを知らずに、変数値のために、可変アドレス参照データ構造（たとえば、グローバル・オフセット・テーブルまたはコンテンツのテーブル（ＴＯＣ））にアクセスするオブジェクト・コードを生成する。この情報のプレースホルダは、オブジェクト・コードに残され、リンカによって更新される。
【００２９】
リンカによって管理されたＧＯＴ（または同様の構造）を有するＡＢＩの場合、シブコールは、現在、コンパイラによって決定されたローカルなコールに制限されている。ローカルなコールの例が、図３を参照して説明される。親ルーチン２００は、親ルーチンと同じモジュール内にある子ルーチン２０２をコールする。子ルーチンは、ローカルであることが知られているため、ＧＯＴの更新はない。すなわち、たとえば、ＧＯＴへのインジケータ（たとえば、ＧＯＴポインタ）、または他の情報、あるいはその両方などの戻り情報を含むコンテキスト情報に対する更新はない。子ルーチンはローカルであるので、親ルーチンに戻ったときに、コンテキストは、更新される必要はなく、したがって、親ルーチン２００は、コンテキストを復元する命令の代わりに、ＮＯＰ命令２１０を含む。
【００３０】
コンテキストは復元されないため、ローカルの子ルーチンが、外部のシブリング・ルーチンをコールすると、コンテキストは、正しくないであろう。たとえば、図４に図示されるように、子ルーチン２０２は、子ルーチン２０２および親ルーチン２００とは異なるモジュール内にある、したがって、外部のシブリング・ルーチンである、シブリング（ｓｉｂ）ルーチン２２０をコールし得る。リンカは、たとえば、プロシージャ・リンク・テーブル（ＰＬＴ）スタブによって、子ルーチン２０２を、外部のシブリング・ルーチン２２０に接続する。ＰＬＴスタブは、トランポリンを、外部のファンクション２２０に提供する。外部のファンクション２２０は、それ自体のグローバル変数を参照するために、ＧＯＴを実行し使用する。外部のファンクション２２０はまた、たとえばＧＯＴなどのコンテキスト情報を更新する。外部のファンクション２２０は、戻るときに、リンク・レジスタへの分岐（ｂｌｒ）命令２２２を使用して、親ルーチン内のＮＯＰ２１０に戻る。しかしながら、ファンクションｃｈｉｌｄ（）へのコールは、モジュールローカルなコールとして生成されたため、ＧＯＴポインタ（実行が行われるモジュールに対応するファンクション・コンテキストの例）を復元する必要がないため、ＧＯＴは復元されておらず、次回に、親ルーチンがＧＯＴを使用すると、親ルーチンは、モジュール１ではなく、モジュール２のＧＯＴを誤って使用する。したがって、シブコールは、現在、コンパイラによって決定されたローカルなコールに制限されている。
【００３１】
外部のファンクション（または、潜在的な外部のファンクションでさえ）へのコールが、リンカから隠されているため、問題が生じる。リンカは、ローカルなコールを見て、ＧＯＴポインタなどのコンテキスト情報の復元を省略する。したがって、本発明の態様にしたがって、子ファンクション２０２などの子ルーチンは、シブリング・ルーチンをコールする可能性があるルーチンとしてマーク付けされる。１つの実施形態では、外部のシブリング・ルーチンをコールし得るシブコーラのみがマーク付けされる。このマーク付けは、図５に図示されるように、たとえば、シブコーラ３００と称される擬似命令（すなわち、プロセッサによって実行されないが、リンカにインジケーションを提供する命令）を、子ルーチンに配置することを含み得る。シブコーラ擬似命令３００は、たとえば、ルーチンが、シブコーラであるか、またはシブコーラであり得ることを示すインジケーションを、リンカに提供する。たとえば、擬似命令３００に基づいて、アセンブラまたは他のバイナリ・オブジェクト・トランスレータは、たとえばシンボル・データ構造（たとえばテーブル）にマーク付けするか、または、ルーチンが、シブコーラであるか、シブコーラであり得ることを示すルーチンのための再配置（ｒｅｌｏｃ）エントリを提供する。
【００３２】
例として、シブリング・ルーチンをコールすることと、外部のシブリング・ルーチンをコールすることとを区別するために、異なる擬似命令、マーク付け、または再配置、あるいはその組合せが使用され得る。多くの変形が可能である。
【００３３】
１つの特定の例では、図６に図示されるように、シンボル・テーブル３３０が生成され、アプリケーションのオブジェクト・コード３３２内に記憶される（たとえば、メモリ内、ディスク等に記憶される）。シンボル・テーブルは、シンボル名３３６、タイプ３４０、範囲３４２などのいくつかのフィールドと、本発明の態様にしたがって、そのファンクションがシブコーラであるか否かを示すマーク付けフィールド３３８とを含む。擬似命令３００によって示されるように、ファンクションが、シブコーラであるか、または、シブコーラである可能性がある場合、マーク付けフィールド３３８は、たとえば１に設定され、そうでなければ、たとえば、０に設定される。
【００３４】
さらなる例では、擬似命令３００に基づいて、アプリケーション・バイナリ・インターフェース（ＡＢＩ）にしたがって再配置エントリ（たとえば、．ｒｅｌｏｃ）が生成され、そのファンクションが、シブコーラであるか、または、シブコーラである可能性があることを示すファンクションに関連付けられる。再配置エントリ（．ｒｅｌｏｃ）は、ＥＬＦ（ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  ｌｉｎｋａｂｌｅ  ｆｏｒｍａｔ）、または同様のオブジェクト・ファイル定義にしたがって生成され得る。
【００３５】
さらなる例では、インジケーションは、たとえば、．ローカルエントリ、シンボル・テーブル、または．ｒｅｌｏｃ再配置エントリなどの他の場所に配置され得るか、または、ファンクションの別のマーク付け、またはその関連付けられたファンクション・シンボル、あるいはその両方が提供され得る。例として、マーク付けは、シンボル・テーブル内に設定され得るか、または、再配置エントリが、擬似命令を使用せずに生成され得る。多くの変形が可能である。
【００３６】
１つまたは複数の実施形態にしたがって、テキスト・アセンブリ言語表現などの中間コード内にあるマーカ・インジケーションは、順に、（たとえば、ＥＬＦ（ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  ｌｉｎｋａｂｌｅ  ｆｏｒｍａｔ）ＡＢＩにしたがって、例示的なＥＬＦフォーマットと連携して使用されるようなシンボル・テーブル・エントリのｓｔ＿ｏｔｈｅｒフィールドまたは別のフィールドからなる少なくとも１ビットを使用した）シンボル・テーブル・エントリ内のマーカへ、バイナリ再配置インジケータへ、または、オブジェクト・ファイル・フォーマットにおけるシブコーラに対応するようなファンクションまたはファンクション・シンボルのいずれかをマーク付けするための別のオブジェクト表現へ変換され得る。さらに別の実施形態では、オブジェクト・ファイル・フォーマットは、コンパイラなどのコード生成ツールによって直接生成され得る。
【００３７】
またさらなる実施形態では、それがシブリングであることを示すために、ファンクションに、再配置エントリが追加され得る。一般に、ファンクション・コールは、いくつかのファンクション・コール再配置のうちの１つで示される。したがって、ファンクション・コールとは異なる、シブリング・コールのために、再配置が使用され得る。そのような再配置の存在は、それ自体では、ファンクションがシブリング・ルーチンをコールすることを示すインジケータとなる可能性があり得る。ファンクションは、シブコールが存在するか否かを判定するためにスキャンされる。より迅速な判定のために、シンボル・テーブル内のインジケータまたは特別な「マーカ再配置」をファンクションの先頭に配置することは、ファンクションを見てそのような再配置が存在するか否かを判定するよりも、処理がより容易／高速であり得る。
【００３８】
マーク付けされたシブコーラがリンカによってリンクされ、シブコーラへの呼び出し元が、ローカルな呼び出し元である場合、リンカは、シブコーラをコールした呼び出し元に基づいて、十分なコンテキストを記憶するコール・シーケンスを生成する。たとえば、ＧＯＴポインタの現在値が記憶され、ＧＯＴポインタ復元コードなどのコンテキスト復元コードが挿入され、外部のシブコールが実行されるようになり得る。たとえば、図５に戻ると、シブコーラ擬似命令３００に基づいて、リンカは、このファンクションが非ローカルなシブリング・ルーチンをコールし得ることを示すインジケーションを取得し（たとえば、通知される、判定される等）、したがって、リンカは、ローカルなコールの場合であっても、ＮＯＰ２１０の代わりに、たとえば、ＧＯＴポインタ復元コード３１０を挿入する。この例では、ｒ２は、ＧＯＴレジスタであり、ｌｄは、ロードを表す。
【００３９】
図７を参照すると、リンカがこのインジケーションを取得し、リンカが復元コードを提供することに基づいて、子ルーチン２０２が、ｓｉｂルーチン２２０をコールし、ｓｉｂ２２０が、ｂｌｒ２２２を介して親ルーチン２００に戻ると、コンテキスト情報、たとえばＧＯＴが復元３１０され、次に、親ルーチン２００がＧＯＴを参照するとき、親ルーチン２００は正しいＧＯＴを参照する。たとえば、１つの実施形態では、子ルーチン２０２が、外部のシブリング・ルーチンに対する可能性のあるシブコーラである場合、コンテキスト（たとえば、ＧＯＴポインタ）は、それがｓｉｂルーチン２２０から戻ったときに復元され得るように記憶される。１つの例として、コンテキストは、短縮プロシージャ・リンク・テーブル（ＰＬＴ）スタブ、またはコンテキスト情報を記憶する他のスタブなどのスタブに記憶され得る。別の実施形態では、外部のコールのためのＧＯＴ記憶命令のためのプレースホルダを提供するために、親ルーチン内（たとえば、ｂｌ子命令の上）に配置されたプレースホルダ命令（たとえば、ＮＯＰ命令）が、ＧＯＴ記憶命令と置き換えられる。コンテキスト情報を記憶するために他の例が使用され得る。
【００４０】
親ルーチンと子ルーチンとが同じモジュールまたは異なるモジュールにある場合、上記の技術が使用され得る。すなわち、子ルーチンは、親ルーチンに対してローカルであり得るか、または親ルーチンから外部であり得、子ルーチンは、たとえばＰＬＴスタブを介してアクセスされる。子ルーチンは、外部の場合（コールされたファンクションのためのシブコーラ・インジケーションが、リンカにとって見えないことがあり得る）に動作する。なぜなら、（リンクされている現在のモジュールの外部であるので、定義によって利用可能ではない）シブコーラ子ファンクションにおけるシブコーラ擬似命令３００の存在に関わらず、子は外部であるため、静的リンカは、ＧＯＴ保存／復元（save/restore）の復元（restoration）シーケンスを挿入するからである。
【００４１】
シブコーラをマーク付けすることに関するさらなる詳細は、図８〜図９を参照して説明される。先ず、図８を参照すると、コンパイラは、ステップ４００において、可能性のあるシブコーラを探索するコードを分析する。たとえば、コンパイラは、コールされたファンクションの結果のさらなる処理が、呼び出し元によって実行されないファンクション・コールを探索するコードを分析する。問合せ４０２において、ルーチンが、可能性のあるシブコーラであると判定されると、ステップ４０４において、ルーチンは、シブコーラとしてマーク付けされる。たとえば、コンパイラは、シブコーラ擬似命令を挿入し、シンボル・テーブルをマーク付けし、または再配置エントリを追加するか、あるいはその両方を行う。しかしながら、ルーチンが、シブコーラ（または、可能性のあるシブコーラ）であると判定されない場合、ステップ４０６において、そのようなマーク付けは実行されない。
【００４２】
さらなる態様では、潜在的な外部のシブリングをコールし得るシブコーラが判定され、（たとえば、すべてのシブコーラの代わりに）マーク付けされる。たとえば、図９に図示されるように、ステップ４２０において、コードは、潜在的に外部のシブコーラ、すなわち、潜在的な外部のシブコーリをコールする可能性のあり得るシブコーラを探索するために、コンパイラによって分析される。この場合、コンパイラは、コールされたファンクションの結果のさらなる処理が、呼び出し元によって実行されないコード探索ファンクション・コールを分析する。さらに、コンパイラは、（たとえば、プログラミング構築に基づいて）シブコールが、ローカルのシブコールであると知られているか否かを判定する。ローカルのシブコールであると知られている場合は、潜在的な外部のシブリングをコールし得る、潜在的な外部のシブコーラとしてマーク付けされない。しかしながら、コールがローカルなシブコールであると知られていない場合、シブコーラは、潜在的な外部のシブリングをコールする可能性があるとしてマーク付けされる。
【００４３】
１つの実施形態では、コンパイラは、シブコーラ再配置情報と連携して、シブコーリに関する情報を提供する。別の実施形態では、リンカは、シブコーリを判定するために、コンパイラが生成したコードを分析する。１つの実施形態では、たとえば、各ファンクションの長さまたは範囲を、あるいはファンクションが不連続な方式でコンパイルされた場合には、多数の範囲を示すことによって、リンカが、シブコーラ・ファンクションを分析することを支援するために、コンパイラによって、追加のヒントが発行される。
【００４４】
問合せ４２２において、外部のシブリング・ルーチンをコールし得るシブコーラが判定されると、ステップ４２４において、シブコーラは、潜在的に外部のシブコーラとしてマーク付けされる。１つの実施形態では、コンパイラは、シブコーラ擬似命令（または、潜在的に外部のシブコーラに特有の別のシブコーラ擬似命令）を挿入し、シンボル・テーブルをマーク付けし、または再配置エントリを追加し、あるいはその組合せを行う。さらに別の実施形態では、リンカは、シブコール・サイトについてコードを分析する。しかしながら、そのような潜在的に外部のシブコーラが発見されない場合、ステップ４２６において、そのようなマーク付けは実行されない。
【００４５】
さらなる態様において、図１０を参照すると、問合せ５００において、リンカが、オブジェクトのセットをリンクして、ローカルなコールが実行され得ると判定すると、リンカは、コールされたファンクションが、外部のシブリングをコールし得るシブコーラに対応するか否かを判定するテストを実行する。１つの実施形態において、これは、図９を参照して説明されたように、コールされたファンクションが、シブコーラとしてマーク付けされているか否かを判定することに対応する。別の実施形態では、テストは、シブコーラが、外部のシブコーリをコールする可能性があり得るか否かを考慮せずに、シブコーラがコールされているか否かである。一例では、これは、たとえば、図８の技術にしたがって、コールされたファンクションが、シブコーラとしてマーク付けされているか否かを判定することに対応する。さらに別の実施形態では、これは、たとえば、図８の技術にしたがって、コールされたファンクションが、シブコーラとしてマーク付けされているか否かを判定することに対応し、さらに、たとえば、オブジェクト・コードおよび関連付けられた再配置のうちの１つ、または、ファイル・フォーマットにおけるシブコーラに特有のシブコーラのリストに基づく、シブコーリのうちのいずれかが、外部のシブコーリに対応し得るか否かのリンカ・ベースの分析を含む。
【００４６】
ステップ５０２において、外部のシブコーリをコールする可能性があり得るシブコーラ（または、別の実施形態では、外部のシブコーリまたはローカルのシブコーリをコールするか否かに関わらずシブコーラ）がコールされた場合、リンカは、十分なコンテキスト情報を記憶および復元する外部のコール・シーケンスを生成し、これによって、シブコーラは、（たとえば、ＧＯＴまたはＴＯＣ情報を記憶している）外部のシブリング・ルーチンをコールするようになり得る。
【００４７】
しかしながら、ステップ５０４において、外部のシブコーリをコールする可能性があり得るシブコーラ（または、別の実施形態では、外部のシブコーリまたはローカルなシブコーリをコールするか否かに関わらずシブコーラ）がコールされていない場合、リンカは、短縮コール・シーケンスを生成する。すなわち、シブコーラが、外部のシブリング・ルーチンをコールできるように、十分なコンテキスト情報を記憶および復元しない、より効率的なコールが生成される。コードは効率化のために省略される。
【００４８】
実行中、１つの実施形態では、生成されたコードは、（そのようにマーク付けされている）シブコーラへのコールを実行し、外部のモジュールからの戻りを実行できるように、コンテキスト情報を記憶する。その後、シブコーラがコールされる。シブコーラは、その外部のシブリングであるシブコーリに対して、外部のシブコールを実行する。外部のファンクションの戻りは、シブコーラが、ローカルでコールされたときに、呼び出し元によってシブコーラに記憶されたグローバル戻り情報を使用して、シブコーリによって実行される。シブコーリから戻ったときに、（ＧＯＴポインタなどの）コンテキスト情報が復元される。
【００４９】
さらなる態様では、シブコーリが実際に外部にあるか否かに関して判定がなされ、それに基づいてアクションが講じられる。図１１を参照すると、１つの実施形態では、リンカは、問合せ６００において、外部のシブコーリをコールする可能性があり得るシブコーラ（または、別の実施形態では、外部のシブコーリまたはローカルのシブコーリをコールする可能性があるか否かに関わらずシブコーラ）が、コールされているか否かを判定する。ステップ６０２において、外部のシブコーリをコールする可能性があり得るシブコーラ（または、外部のシブコーリまたはローカルなシブコーリをコールする可能性があるか否かに関わらずシブコーラ）がコールされると、リンカは、リンケージ結果に基づいて、シブコール宛先を判定する。ステップ６０４において、シブコーラが実際に、経路のいずれかにおいて、外部のシブリングをコールしているか否かに関する判定がなされる。ステップ６０６において、外部のシブリングがコールされると、シブコーラが、外部のシブリング（たとえば、ＧＯＴ情報）をコールできるように、十分なコンテキスト情報が記憶される。しかしながら、問合せ６０４において、シブコーラが、外部のシブリングをコールしない場合、または、問合せ６００において、外部のシブコーリをコールする可能性があり得るシブコーラ（または、外部のシブコーリまたはローカルなシブコーリをコールする可能性があるか否かに関わらずシブコーラ）がコールされない場合、ステップ６０８において、より効率的なコールが生成される。すなわち、コンテキスト情報の保存／復元などの情報は省略される。
【００５０】
１つの実施形態では、第１のシブコーラのシブコーリのいずれかが、シブコーラとしてマーク付けされた場合、シブコーリは、外部のシブリングとして取り扱われる。別の実施形態では、第１のシブコーラのシブコーリのいずれかが、シブコーラとしてマーク付けされ、第１のシブコーラのシブコールが、テールコールではない（すなわち、第１のシブコーラのシブコーリが、自身をコールしている第１のシブコーラではない）場合、シブコーリは、外部のシブリングとして取り扱われる。
【００５１】
さらなる実施形態として、シブコーラの推移閉包が、外部のモジュール・コールに関して計算され（すなわち、シブコーラによってコールされたシブコーリのいずれかが、外部のシブリングをコールしているか、または、外部のシブリングをコールし得るシブコーラをコールしているか等のいずれかであるかを判定するために）、コールされたシブリングの推移閉包に、外部のシブコールが発見された場合、シブコーラは、そのような最終的な外部のシブリングから戻るために十分な情報を保存するコールでコールされる。
【００５２】
１つの実施形態では、最適化分析、コンフィギュレーション・ファイル、プログラマのヒント、またはプロファイル指向のフィードバックは、いくつかのファンクションのためにシブコーラ最適化のうちの１つまたは複数を実行するが、他のものは実行しないことを示し得る。たとえば、シブコーラが、シブリング・ルーチンを稀にしかコールしない場合、最適化は、有利ではなく、プログラマ、フィードバック構成要素、または分析構成要素のうちの１つは、特定のシブコーラに対する最適化を抑制することを判定し得る。一例では、この適応ステップは、シブコーラのコール・サイトを抑制し、シブコールではなく通常のファンクション・コールを実行し、シブコーラがマーク付けされないようにする。他の例もまた可能である。
【００５３】
別の実施形態では、最適化分析、コンフィギュレーション・ファイル、プログラマのヒント、またはプロファイル指向のフィードバックは、あるシブコーラのいくつかのコールされたシブリング・ルーチンのために１つまたは複数のシブコーラ最適化を実行するが、他のものは実行しないことを示し得る。たとえば、１つのシブコーラが、一般にコールされローカルであり、別のシブコーラが、稀にしかコールされずに外部である場合、シブコーラが、シブリング・ルーチンを稀にしかコールしないのであれば、最適化は、そのコール・サイトにおいて有利ではなく、プログラマ、フィードバック構成要素、または分析構成要素のうちの１つは、特定のシブコーラのための最適化を抑制することを判定し得る。一例では、この適応ステップは、シブコーラのシブリング・ルーチンへのおそらく１つのコール・サイトを抑制し、外部の戻りを可能にするために、コンテキスト情報を記憶することを決定するときに考慮されるべきシブコーリのリストから、そのシンボルを除外する。
【００５４】
本発明のさらなる態様は、子ルーチンが、その親ルーチンの外部にある状況に対処する。一例では、そのようなコールは、コンテキスト情報（たとえば、ＧＯＴポインタ）を破壊し得るので、その親ルーチンの外部にある子ルーチンは、外部のシブリングをコールすることはない。たとえば、図１２を参照すると、親ルーチン２００が１つのモジュール７００（たとえば、モジュール３）内にあり、たとえばＰＬＴスタブ７０６（または、ファンクション・コール）を介して別のモジュール７０２（たとえば、モジュール１）内の子ルーチン２０２をコールする場合、ＰＬＴスタブ７０６は、モジュール３に対応するコンテキスト情報（たとえば、ＧＯＴポインタ）を記憶する。次に、子ルーチン２０２が、たとえばＰＬＴスタブ７１０（または、ファンクション・コール）を介してさらに別のモジュール７０４（たとえば、モジュール２）内のシブリング・ルーチン２２０をコールすると、ＰＬＴスタブ７１０は、モジュール３に対応する第１のコンテキスト情報を上書きする他のコンテキスト情報を記憶する。しかしながら、モジュール２内のシブリング・ルーチン２２０から、モジュール３内の親ルーチン２００へ戻るとき（たとえば、ｂｌｒ２２２）、それは、所望されるモジュール３に対応する第１のコンテキスト情報である。
【００５５】
ＰＬＴスタブの１つの実施形態では、標準的な記憶ダブル命令を使用して、モジュール２に対応するＧＯＴポインタを記憶している間、モジュール１からモジュール２へ制御を移動させるために、以下のコード・シーケンスが使用される。
ｓｔｄ  ｒ２，２４（ｒ１）
ａｄｄｉｓ  ｒ１２，ｒ２，ｆｕｎｃ＠ｐｌｔ＠ｔｏｃ＠ｈａ
ｌｄ  ｒ１２，ｆｕｎｃ＠ｐｌｔ＠ｔｏｃ＠ｌ（ｒ１２）
ｍｔｃｔｒ  ｒ１２
ｂｃｔｒ
ここで、ｓｔｄは記憶ダブル、ａｄｄｉｓは即値加算、ｔｏｃは目次、ｌｄはロード、ｍｔｃｔｒはカウント・レジスタへの移動、ｂｃｔｒは分岐カウンタレジスタである。
【００５６】
別の実施形態では、ｓｔｄ命令は、コンパイラによって以前に割り当てられたプレースホルダ位置に配置され、ＰＬＴスタブは、制御移動のみを実行する。
ａｄｄｉｓ  ｒ１２，ｒ２，ｆｕｎｃ＠ｐｌｔ＠ｔｏｃ＠ｈａ
ｌｄ  ｒ１２，ｆｕｎｃ＠ｐｌｔ＠ｔｏｃ＠ｌ（ｒ１２）
ｍｔｃｔｒ  ｒ１２
ｂｃｔｒ
【００５７】
しかしながら、本発明の態様にしたがって、第２のコンテキスト情報の保存が抑制される。たとえば、リンカまたはコンパイラは、シブコールのためのコンテキスト情報を保存せずに（たとえば、ＧＯＴポインタ保存なしで、たとえば、ｓｔｄ命令なしで）ＰＬＴスタブを生成する。例として、再配置は、通常のコールではなく、シブコーラによる特定のコールとして、シブコールの存在を示すために使用され得、それにより、ｓｔｄが、ＰＬＴスタブまたはスケジュールされたプレースホルダに配置されることを抑制する。したがって、シブコールのためのＰＬＴスタブは、ＰＬＴ  ｓｕｂの一部としてｓｔｄ命令なしで、または、そのようなＧＯＴ記憶命令を受け取るために、コンパイラによって生成されたプレースホルダに配置することなく、次のシーケンスに対応し得る。
ａｄｄｉｓ  ｒ１２，ｒ２，ｓｉｂ＠ｐｌｔ＠ｔｏｃ＠ｈａ
ｌｄ  ｒ１２，ｓｉｂ＠ｐｌｔ＠ｔｏｃ＠ｌ（ｒ１２）
ｍｔｃｔｒ  ｒ１２
ｂｃｔｒ
【００５８】
別の実施形態では、コードが生成されると、新たに定義されたシブコール再配置コマンド（ｒｅｌｏｃｓ）を理解するために、リンカが更新されることを必要とする、新たなｒｅｌｏｃｓの作成を回避するために、コンパイラは、たとえば、シブコールと連携して、ダミー位置を指し示すＴＯＣＳＡＶＥ  ｒｅｌｏｃを生成し、リンカは、実行されていない未使用の場所を埋め、ＧＯＴ保存を効果的に抑制する。
【００５９】
外部のシブリング・ルーチンに関連付けられた処理に関連するさらなる詳細が、図１３を参照して説明される。先ず、問合せ７２０において、非シブリングの外部のファンクション・コールとは対照的に、子ルーチン（または、他のシブリング・ルーチン）が、外部のシブリング・ルーチンをコールしているか否かについての判定が（たとえば、リンカまたはコンパイラによって）なされる。外部のシブコールは、たとえば、それがシブコールであり、非シブリング・ファンクション・コールではないことを示すシブコールの新たな再配置コマンドの使用によって、または、外部のシンボルに戻ることなく分岐があると判定することによって認識され得る。本発明の態様にしたがって、外部のシブリング・ルーチンが、シブコールを使用してコールされている場合、ステップ７２２において、ＧＯＴへのインジケータ（たとえば、ＧＯＴポインタ）を含むコンテキスト情報は保存されず（これは、本明細書では、ＧＯＴを保存しないと称される）、これによって、シブコーラへの呼び出し元のオリジナルのコンテキストは、シブコーリから戻ると復元され得る。しかしながら、ステップ７２４において、外部のファンクション・コール（シブコールではない）が実行されている場合、ＧＯＴへのインジケータ（たとえば、ＧＯＴポインタ）を含むコンテキスト情報が保存され（これは、本明細書では、ＧＯＴを保存すると称される）、これによって、コンテキスト情報は、後に復元され得るようになる。
【００６０】
上記に加えて、コードでは、コールはローカルなコールとして定義され得、これによって、コンパイラは、ＮＯＰ命令を、外部のコールからのＧＯＴ復元命令のためのプレースホルダとして抑制し得る。しかしながら、子が外部のシブリングをコールすることが示された場合、従来技術にしたがって、コンテキスト復元命令を受け取るための場所に、プレースホルダＮＯＰ命令が提供されていないため、コンテキストを復元することができない。したがって、本発明の態様にしたがって、外部のシブリング・ルーチンをコールし得る子シブコーラに直接分岐するのではなく、サブルーチン分岐は、子ルーチンへの分岐リンクから、スタブ・ファンクションへの分岐へ編集され得る。これは、コンテキスト情報（たとえば、ＧＯＴ情報）の記憶および復元命令のみならず、子ルーチンへの分岐リンクを含む。特に、図１４に図示されるように、親ルーチン２００は、ローカルルーチンであると知られている子ルーチン２０２をコールする。したがって、親ルーチン２００はＮＯＰ命令を含まない。しかしながら、子ルーチン２０２は、外部のシブリング２２０をコールする。したがって、本発明の態様にしたがって、分岐リンク（ｂｌ）ステートメント８００が、スタブ８１０へ分岐するスタブ命令８０２への分岐に置き換えられる。そのスタブでは、コンテキスト情報が保存８１２され、後に、シブリング・ルーチン２２０から戻る８２０と復元８１４される。
【００６１】
本明細書に詳細に説明されているものは、シブリング・コールを効率的に処理するために実行され得るいくつかの最適化である。本発明の１つまたは複数の態様は、コンピュータ技術と密接に関連しており、コンピュータ内の処理を容易にし、全体的な性能を向上させる。
【００６２】
コンピューティング環境における処理を容易にする１つの特定の実施形態が、図１５〜図１６を参照して説明される。この実施形態は、関連付けられた処理を最適化するために、外部のシブコーリをコールするか、またはコールする可能性があるシブリング・コーラ・ルーチンをマーク付けすることを含む。
【００６３】
先ず、図１５を参照すると、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かに関する判定が行われる（９００）。例として、ルーチンは、１つのモジュール内にあり、その１つのモジュール内の呼び出し側のルーチンによってコールされるか、または、そのルーチンは、１つのモジュール内にあり、別のモジュール内の呼び出し側のルーチンによってコールされる（９０１）。そのルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定することに基づいて、そのルーチンは、外部のシブリング・コーラとしてマーク付けされる（９０２）。一例では、判定すること、およびマーク付けすることは、コンパイラによって実行される（９０３）。他の実施形態および例も可能であり、特許請求された発明の範囲内にあると考慮される。
【００６４】
１つの実施形態では、マーク付けすることは、ルーチンに擬似命令を追加することを含む（９０４）。擬似命令は、ルーチンが、１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることをコンピューティング環境のプロセッサにおいて実行しているリンカに示す（９０６）。擬似命令に基づいて、１つの例では、ルーチンが、１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカが、シンボル・データ構造内に設定される（９０８）。別の例では、擬似命令に基づいて、ルーチンが、１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すために、ルーチンに関連付けられた再配置エントリが提供される（９１０）。
【００６５】
図１６を参照すると、（たとえば、擬似命令が使用されないことがある）別の実施形態では、マーク付けすることは、ルーチンのシンボル・データ構造にマーカを追加することを含む（９１２）。マーカ（たとえば、１に設定される）は、ルーチンが、１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示す（９１４）。（たとえば、擬似命令が使用されないことがある）またさらなる実施形態では、マーク付けすることは、ルーチンが１つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すために、ルーチンに関連付けられた再配置エントリを提供することを含む（９１６）。
【００６６】
さらなる態様では、コンピューティング環境のプロセッサにおいて実行しているリンカは、ルーチンが、外部のシブリング・コーラとしてマーク付けされていることを判定し（９２０）、ルーチンが、外部のシブリング・コーラとしてマーク付けされていることを判定することに基づいて、ルーチンの呼び出し元へ戻るルーチンによってコールされた外部のシブリング・ルーチンに基づいて使用されるべきコンテキストを提供する（９２２）。一例では、コンテキストは、グローバル・オフセット・テーブルへのインジケータを復元するための情報を含む（９２４）。
【００６７】
本明細書において説明されるように、本発明の１つまたは複数の態様にしたがって、シブコーラは、たとえばコンパイラによってマーク付けされる。１つの実施形態では、外部のシブリング・ルーチン（たとえば、異なるモジュール内のシブリング・ルーチン）をコールし得るシブコーラは、マーク付けされ、（たとえば、シブコーラと同じモジュール内の）ローカルなシブリング・ルーチンをコールし得るシブコーラは、マーク付けされない。
【００６８】
１つの実施形態では、マーク付けされたシブコーラがリンカによってリンクされ、シブコーラへの呼び出し元が、ローカルな呼び出し元である（たとえば、呼び出し元と、シブコーラとが、同じモジュール内にある）とき、リンカは、外部のシブコールがシブコーラによって実行され得るように、十分な情報を記憶するコール・シーケンスを生成する。さらなる実施形態では、マーク付けされたシブコーラが、リンカによってリンクされ、シブコーラへの呼び出し元がローカルな呼び出し元であり、シブコーラが、外部のシブコーラとしてマーク付けされると、リンカは、外部のシブコールが実行され得るように、十分な情報を記憶するコール・シーケンスを生成する。
【００６９】
１つの実施形態において、シブコーラが（たとえば、シブコール・シーケンスを使用してシブリング・ルーチンをコールし得る、コールされたファンクションとして）識別され、その結果、たとえば、シブコーラが外部のシブリングに移動したい場合に、リンカが、フル・コンテキストを保存するためのコード（たとえば、ＧＯＴポインタを記憶／復元するためのコード）を挿入でき得る。コンパイラは、マーク付けを実行し、１つの実施形態では、外部のシブリング・ルーチンをコールする可能性があり得るシブコーラだけが、コンパイラによってマーク付けされる。外部のシブリング・ルーチンをコールせず、代わりに、ローカルなシブリング・ルーチンをコールするシブコーラをマーク付けすることによって、余分なオーバヘッドが回避される。
【００７０】
一例として、マーク付けは、インジケータを用いて実行される。たとえば、インジケータは、ＥＬＦ  ＡＢＩなどのアプリケーション・バイナリ・インターフェースにしたがう再配置タイプである。別の例として、インジケータは、このファンクションのためのシンボル・テーブル・エントリ内のフラグである。一例では、インジケータは、コンパイラによってシブコーラ内に配置された擬似命令に基づいて、（たとえば、アセンブラまたは他のバイナリ・オブジェクト・トランスレータによって）設定される。擬似命令は、選択された実施形態に基づいて、すべてのシブコーラ、または、外部のシブリング・ルーチンをコールする可能性があると判定されたシブコーラのいずれかに配置される。一例として、コンパイラは、インジケータを有するファイルを発行し、リンカはそのファイルを読み取る。
【００７１】
１つの実施形態では、リンカは、ファンクションのためのインジケータを読み出し、シブコーラが、シブリング・ルーチンまたは外部のシブリング・ルーチンをコールする可能性があることを示すインジケータが（たとえば、１に）設定されていることに基づいて、実施形態に依存して、外部のシブリング・ルーチンをコールし得るシブコーラをコールしていることに基づいて、フル・コンテキストを保存（たとえば、ＧＯＴポインタのためのコードを記憶／復元）する。しかしながら、シブコーラが、ローカルなシブリング・ルーチンをコールしている場合、シブコーラが、シブコールを使用してローカルなシブコーラのみをコールすると判定することに基づいて、コンテキストの保存は、シブコーラへのコール・サイトにおいて抑制される。
【００７２】
示されているように、シブコーラは、たとえば、コンパイラによってマーク付けされる。１つの特定の実施形態では、外部のシブリング・ルーチンをコールし得るシブコーラが、そのようにマーク付けされる。一例では、コンパイラは、たとえば、シブコーラの再配置と連携して、シブコーリのリストを提供することによって、可能性のあるシブコーリに関する情報を提供する。別の例では、リンカは、シブコーリを判定するために、コンパイラが生成したコードを分析する。１つの実施形態では、（たとえば、ルーチンが不連続な方式でコンパイルされている場合、各ルーチンの長さまたは範囲、または多数の範囲を示すことによって）リンカがシブコーラ・ルーチンを分析するのを支援するために、コンパイラによって追加のヒントが発行される。
【００７３】
１つの実施形態では、マーク付けされたシブコーラが、リンカによってリンクされ、シブコーラへの呼び出し元が、ローカルな呼び出し元であり、シブコーラが、潜在的に外部のシブコーラとしてマーク付けされているとき、リンカは、コールされたシブリングのいずれかが、実際に、外部のシブリング・ルーチンであるか否かを判定するための分析ステップを実行する。外部のシブリング・ルーチンが存在しない場合（たとえば、シブリング・ルーチンが、たとえば、静的リンカによってローカルに解決されている場合）、シブコーラへのローカルなコールが実行される。シブコーラによってコールされたシブリング・ルーチンのうちの少なくとも１つが、外部である場合、外部のルーチンの戻りを実行するのに十分な情報が、ローカルなシブコーラをコールする前に記憶される。１つの実施形態では、リンカは、外部のシブコールが実行され得るように十分な情報を記憶するコール・シーケンスを生成する。
【００７４】
１つの実施形態では、コンパイラは、シブコーラためのシブリング・ルーチンと呼ばれ得るルーチンのリストを生成し、オブジェクト・ファイル内にそのリストを提供する。例として、リストは、シブコーラであるファンクションに関連付けられているか、または、ルーチンの開始時に、再配置（または、一連の再配置）として関連付けられる。リンカは、この情報を、以下のように使用する。すべてのシブコーリがローカルである場合、シブコーラは、ファンクションとしてコールされると、「ローカルなコール」コンテキストを保存するシーケンス（たとえば、ＧＯＴポインタの記憶／復元なし）でコールされ得るか、そうでなければ、コールは、フル・コンテキストで（たとえば、ＧＯＴポインタの記憶／復元で）保存される。なぜなら、それは外部のルーチンのためにコンテキストを戻し復元する外部のルーチンに制御をハンドオフし得るからである。
【００７５】
別の実施形態では、インジケータは、シブコーラであるとして示されたルーチンによって、おそらくはシブリング・ルーチンとして呼ばれるルーチンのリストを関連付けるインジケータが提供され得る。このリストは、シブコーラであるルーチンに関連付けられているか、または、ルーチンの先頭において再配置（または、一連の再配置）として関連付けられる。
【００７６】
またさらなる実施形態では、コンパイラは、シブリング・ルーチンへの各コールを、シブコールとしてマーク付けし得る。またさらなる実施形態では、コンパイラは、シブコーラの一部である命令をマーク付けする。
【００７７】
示されるように、一例では、シブコールを、（たとえば、シンボル・テーブル内の再配置またはフラグを使用して）典型的なファンクション・コールではなく、シブコールとしてマーク付けするためのインジケータが提供される。さらなる実施形態では、ルーチンの範囲（たとえば、どの命令がどのルーチンに属するか）をマーク付けするために、マーカが提供される。１つの態様では、リンカは、作成されているシブコールのためのマーカを読み取り、マーカは、特定のルーチンに対応するシブコールを判定するために、どの命令がどのルーチンに属するかを示す。例として、リンカは、潜在的な外部のシブコーラのためのシブコーリのリストを構築し、そのリストに基づいて、これらのどれが外部であるかに関して判定する。シブコーリがローカルである場合、このシブコーラは、コールされると、ローカルなコール・コンテキストを保存するシーケンスでコールされ得るか、そうでなければ、このコールは、上記で説明されたように、フル（外部のコール）コンテキストで保存される。
【００７８】
１つの実施形態では、外部のシブコールがなされるべきである場合、（たとえば、シブコーラに対して外部である呼び出し元によって外部のシブコーラがコールされた場合）コンテキスト情報の記憶は、以前に記憶されたコンテキスト情報を上書きするので、コンテキスト情報は、記憶されるべきではない。したがって、１つまたは複数の態様にしたがって、コンテキスト情報の保存は抑制される。１つの実施形態では、これは、コンテキスト情報（たとえば、ＧＯＴポインタ）の記憶／復元を含まないＰＬＴスタブを（コンパイラまたはリンカのいずれかによって）作成することによって実行される。
【００７９】
外部のシブコーラ（すなわち、外部のシブリング・ルーチンである、または、外部のシブリング・ルーチンをコールする可能性のあるシブコーラ）は、たとえば、シブコールのために特に定義された再配置によって、外部のシンボルへの戻りを有さない分岐を診断することによって、または、別の手段によって認識される。１つの実施形態では、コンパイラが、リンカによって理解されないコードを生成する場合、コンパイラは、保守的になるようにコンテキスト情報の生成を抑制する。
【００８０】
１つの実施形態では、コンパイラは、シブコールと連携して、ダミー位置を指し示す特別に定義された再配置を挿入し、その後、リンカは、実行されていないアドレスで、位置を埋め、コンテキスト保存を効果的に抑制する。
【００８１】
別の実施形態では、レジスタ間接シブコールのため、コンパイラは、コンテキスト保存なしで、コール・シーケンスを発行する。
【００８２】
本発明の態様は、外部のシブコーラと連携して、リンカ／コンパイラ管理コンテキスト保存を提供する。１つの実施形態では、プログラムが、コンパイラおよびリンカによって管理されたＧＯＴを使用するときに、外部のシブコールを実行するアプリケーションを生成するように適合されたプログラムが提供される。
【００８３】
シブコールの使用を最適化するために、いくつかの実施形態および例が上記で提供され、それによって、コンピューティング環境における処理を容易にし、性能を向上させるが、他の実施形態および例もまた可能であり、本発明の態様と見なされる。
【００８４】
本発明の１つまたは複数の態様を組み込み、使用するコンピューティング環境の１つの実施形態が、図１７を参照して説明される。コンピューティング環境１０００は、たとえば、１つまたは複数のプロセッサ・コアを有するプロセッサ１００２（たとえば中央処理装置（ＣＰＵ））を含み、各プロセッサ・コアは、回路構造１００４と称され得る。プロセッサ１００２は、１つまたは複数のレジスタ１００６を含み得、各レジスタは、ＣＰＵまたは他のデジタル・プロセッサの一部として利用可能な小容量の記憶装置である。回路構造１００４による算術操作のために、メモリ１０１０からレジスタ１００６へ、データがロードされ得る。レジスタ１００６は、例として、レジスタ１（ｒ１）乃至レジスタＮ（ｒＮ）として個々にラベル付けされる。
【００８５】
メモリ１０１０は、様々な演算を実行するためのプログラム論理を有する１つまたは複数のソフトウェア・アプリケーション１０１４を含み得、オペレーティング・システム１０２０を含み得る。オペレーティング・システム１０２０は、リンカ１０３０（たとえば、静的リンカ）およびコンパイラ１０４０を含み得る。メモリ１０１０はまた、１つまたは複数の共有ライブラリ（たとえば、ローカルなモジュール）１０５０、または１つまたは複数の共有ライブラリ（たとえば、外部のモジュール）１０６０、あるいはその両方を含み得る。
【００８６】
１つの実施形態では、プロセッサ１００２は、インターナショナル・ビジネス・マシーンズ社によって販売されているＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅに基づく。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅの１つの実施形態は、"Power ISATM Version 2.07B," International Business Machines Corporation, April 9, 2015に説明されており、その全体が参照により本明細書に組み込まれる。一例では、プロセッサはまた、インターナショナル・ビジネス・マシーンズ社によって販売されているＡＩＸなどのオペレーティング・システムを実行する。Ｐｏｗｅｒ  ＡｒｃｈｉｔｅｃｔｕｒｅおよびＡＩＸは、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社の登録商標である。本明細書で使用されている他の名称は、インターナショナル・ビジネス・マシーンズ社または他の会社の登録商標、商標、または製品名であり得る。
【００８７】
別の例では、プロセッサ１００２は、インターナショナル・ビジネス・マシーンズ社によって販売されているｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいており、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅを実施し、やはりインターナショナル・ビジネス・マシーンズ社によって販売されているＳｙｓｔｅｍ  ｚ（Ｒ）サーバなどのサーバの一部である。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの１つの実施形態は、IBM publication entitled, "z/Architecture Principles of Operation," IBM Publication No. SA22-7832-10, Eleventh Edition, March 2015に説明されており、その全体が参照により本明細書に組み込まれる。一例では、プロセッサは、やはりインターナショナル・ビジネス・マシーンズ社によって販売されているｚ／ＯＳなどのオペレーティング・システムを実行する。ＩＢＭ、Ｚ／ＯＳ、およびＺ／Ａｒｃｈｉｔｅｃｔｕｒｅは、インターナショナル・ビジネス・マシーンズ社の登録商標である。
【００８８】
またさらなる実施形態では、プロセッサ１００２は、インテル社によって販売されているインテル・アーキテクチャに基づく。インテルは、カリフォルニア州サンタクララのインテル社の登録商標である。さらにまた、プロセッサ１００２は、他のアーキテクチャに基づき得る。本明細書において述べられたアーキテクチャ、サーバ、システム、またはオペレーティング・システム、あるいはその組合せは、単なる例として提供される。
【００８９】
１つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の実施形態が、図１８を参照して説明される。この例では、コンピューティング環境１１００は、たとえば、ネイティブ中央処理装置１１０２と、メモリ１１０４と、たとえば、１つまたは複数のバス１１０８、または他の接続、あるいはその両方を介して互いに結合された１つまたは複数の入力／出力デバイス、またはインターフェース１１０６と、あるいはその組合せを含む。例として、コンピューティング環境１１００は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社によって販売されているＰｏｗｅｒＰＣ（Ｒ）プロセッサ、ｚＳｅｒｉｅｓ（Ｒ）サーバ、またはｐＳｅｒｉｅｓ（Ｒ）サーバ、カリフォルニア州パロアルトのヒューレット・パッカード社によって販売されているインテルＩｔａｎｉｕｍ  ＩＩプロセッサを搭載したＨＰ  Ｓｕｐｅｒｄｏｍｅ、または、インターナショナル・ビジネス・マシーンズ社、ヒューレット・パッカード社、インテル社、オラクル社、またはその他によって販売されているアーキテクチャに基づく他のマシン、あるいはその組合せを含み得る。
【００９０】
ネイティブ中央処理装置１１０２は、１つまたは複数の汎用レジスタ、または環境内での処理中に使用される１つまたは複数の専用レジスタ、あるいはその組合せ等の１つまたは複数のネイティブ・レジスタ１１１０を含む。これらのレジスタは、特定の時点における環境の状態を表す情報を含む。
【００９１】
さらに、ネイティブ中央処理装置１１０２は、メモリ１１０４に記憶されている命令およびコードを実行する。１つの特定の例では、中央処理装置は、メモリ１１０４に記憶されているエミュレータ・コード１１１２を実行する。このコードは、１つのアーキテクチャにおいて構成された処理環境が、別のアーキテクチャをエミュレートすることを可能にする。たとえば、エミュレータ・コード１１１２は、ｚＳｅｒｉｅｓサーバ、ｐＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバまたはその他などの、Ｐｏｗｅｒ  ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づくマシンが、Ｐｏｗｅｒ  ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、Ｐｏｗｅｒ  ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。さらなる例では、エミュレータ・コード１１１２は、ＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバまたはその他などのｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づくマシンが、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。他のアーキテクチャもまたエミュレートされ得る。
【００９２】
エミュレータ・コード１１１２に関連するさらなる詳細が、図１９を参照して説明される。メモリ１１０４に記憶されたゲスト命令１１５０は、ネイティブＣＰＵ１１０２のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された（たとえば、マシン命令に相関付けられた）ソフトウェア命令を含む。たとえば、ゲスト命令１１５０は、ＰｏｗｅｒＰＣプロセッサ、または、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ１００２において実行するように設計され得るが、代わりに、たとえば、インテルＩｔａｎｉｕｍ  ＩＩプロセッサであり得るネイティブＣＰＵ１１０２においてエミュレートされている。一例では、エミュレータ・コード１１１２は、メモリ１１０４から１つまたは複数のゲスト命令１１５０を取得し、オプションで、取得された命令のためのローカルなバッファリングを提供するための命令フェッチ・ルーチン１１５２を含む。エミュレータ・コード１１１２はまた、取得されたゲスト命令のタイプを判定し、ゲスト命令を１つまたは複数の対応するネイティブ命令１１５６に変換するための命令変換ルーチン１１５４を含む。この変換は、たとえば、ゲスト命令によって実行されるべきファンクションを識別することと、そのファンクションを実行するためのネイティブ命令を選択することとを含む。
【００９３】
さらに、エミュレータ・コード１１１２は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン１１６０を含む。エミュレーション制御ルーチン１１６０は、ネイティブＣＰＵ１１０２に、以前に取得された１つまたは複数のゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令、または、ゲスト命令のグループの取得をエミュレートするために、命令フェッチ・ルーチンに制御を戻し得る。ネイティブ命令１１５６の実行は、メモリ１１０４からレジスタにデータをロードすること、レジスタからデータをメモリに記憶し戻すこと、または、変換ルーチンによって判定されたように、ある種の算術演算または論理演算を実行することを含み得る。
【００９４】
各ルーチンは、たとえば、メモリに記憶され、ネイティブ中央処理装置１１０２によって実行される、ソフトウェアにおいて実施される。他の例では、ルーチンまたは演算の１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらのある組合せで実施される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ１１１０を使用して、または、メモリ１１０４内の位置を使用することによって、エミュレートされ得る。実施形態では、ゲスト命令１１５０、ネイティブ命令１１５６、およびエミュレータ・コード１１１２は、同じメモリ内に存在し得るか、または異なるメモリ・デバイス間で分散され得る。
【００９５】
本明細書で使用されるように、ファームウェアは、たとえば、プロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはその組合せを含む。ファームウェアは、たとえば、より高いレベルのマシンコードの実施において使用されるハード・ウェアレベルの命令、またはデータ構造、あるいはその両方を含む。１つの実施形態では、ファームウェアは、たとえば、信頼できるソフトウェアを含むマイクロコード、または基盤となるハードウェアに特有のマイクロコードとして、通常配信される独自のコードを含み、システム・ハードウェアへのオペレーティング・システム・アクセスを制御する。
【００９６】
一例では、ゲスト命令１１５０が取得され、変換され、実行される。１つのアーキテクチャ（たとえば、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅまたはｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ）である命令は、メモリからフェッチされ、別のアーキテクチャ（たとえば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ、インテルａｒｃｈｉｔｅｃｔｕｒｅ等）のネイティブ命令１１５６のシーケンスとして変換され表される。その後、これらのネイティブ命令が実行される。
【００９７】
１つまたは複数の態様は、クラウド・コンピューティングに関連し得る。
【００９８】
この開示は、クラウド・コンピューティングに関する詳細な説明を含むが、本明細書に記載された教示の実施は、クラウド・コンピューティング環境に限定されないことが事前に理解されている。むしろ、本発明の実施形態は、現在知られているかまたは後に開発される他の任意のタイプのコンピューティング環境と連携して実施されることが可能である。
【００９９】
クラウド・コンピューティングは、設定可能なコンピューティング・リソース（たとえば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシン、およびサービス）の共有プールへの、利便性の高い、オンデマンドのネットワーク・アクセスを可能にするサービス配信のモデルであり、最小限の管理作業またはサービスのプロバイダとのインタラクションで、迅速にプロビジョンおよびリリースされ得る。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、および少なくとも４つの展開モデルを含み得る。
【０１００】
特徴は以下の通りである。
オンデマンド・セルフサービス：クラウド・コンシューマは、サービスのプロバイダとの人的なインタラクションを必要とせずに、必要に応じて自動的に、サーバ時間やネットワーク記憶装置などのコンピューティング能力を一方的にプロビジョンし得る。
広範なネットワーク・アクセス：能力は、ネットワークを介して利用可能であり、異種のシンまたはシック・クライアント・プラットフォーム（たとえば、モバイル電話、ラップトップ、およびＰＤＡ）による使用を促進する標準的なメカニズムを介してアクセスされる。
リソース・プール：プロバイダのコンピューティング・リソースは、マルチテナント・モデルを使用して多数のコンシューマにサービス提供するためにプールされ、異なる物理リソースおよび仮想リソースは、要求にしたがって動的に割り当てられ、再割り当てされる。コンシューマは一般に、提供されたリソースの正確な位置に関して制御も知識も持たないが、より高い抽象化レベル（たとえば、国、州、またはデータセンタ）における位置を特定することができ得るという点で位置独立性の意味がある。
迅速な弾力性：能力は、迅速かつ弾力的にプロビジョンされ、場合によっては自動的に、直ちにスケール・アウトし、迅速にリリースして直ちにスケール・インすることができる。コンシューマにとって、プロビジョニングのために利用可能な能力は、しばしば、無制限であるように見え、常時、任意の量が購入可能であり得る。
測定サービス：クラウド・システムは、サービスのタイプ（たとえば、記憶装置、処理、帯域幅、およびアクティブ・ユーザ・アカウント）に適した抽象化レベルでメータリング能力を利用することで、リソースの使用を、自動的に制御および最適化する。リソース使用量が、監視、制御、および報告され、利用されたサービスのプロバイダとコンシューマとの両方のための透明性を提供する。
【０１０１】
サービス・モデルは、以下の通りである。
サービスとしてのソフトウェア（ＳａａＳ：Software as a Service）：コンシューマに提供される能力は、クラウド・インフラストラクチャにおいて実行しているプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ（たとえば、ウェブベースの電子メール）などのシン・クライアント・インターフェースを介して、様々なクライアント・デバイスからアクセス可能である。コンシューマは、ユーザ特有のアプリケーション・コンフィギュレーション設定が制限されているという例外はあるものの、ネットワーク、サーバ、オペレーティング・システム、記憶装置、さらには個々のアプリケーション能力を含む基盤となるクラウド・インフラストラクチャを、管理または制御しない。
サービスとしてのプラットフォーム（ＰａａＳ：Platform as a Service）：コンシューマに提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して生成された、コンシューマが生成または取得したアプリケーションを、クラウド・インフラストラクチャに展開することである。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、または記憶装置を含む、基盤となるクラウド・インフラストラクチャを管理または制御しないが、展開されたアプリケーション、および場合によっては、環境コンフィギュレーションをホストするアプリケーションに対する制御を有する。
サービスとしてのインフラストラクチャ（ＩａａＳ：Infrastructure as a Service）：コンシューマに提供される能力は、コンシューマが、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアを展開および実行することができる処理、記憶装置、ネットワーク、および他の基本的なコンピューティング・リソースをプロビジョンすることである。コンシューマは、基盤となるクラウド・インフラストラクチャを管理または制御しないが、オペレーティング・システム、記憶装置、展開されたアプリケーションに対する制御を、および場合によっては、選択されたネットワーキング構成要素（たとえば、ホスト・ファイアウォール）の制限された制御を有する。
【０１０２】
展開モデルは以下の通りである。
プライベート・クラウド：クラウド・インフラストラクチャが、組織のために専用に運営される。プライベート・クラウドは、組織またはサード・パーティによって管理され得、オン・プレミスまたはオフ・プレミスに存在し得る。
コミュニティ・クラウド：クラウド・インフラストラクチャが、いくつかの組織によって共有され、共有された問題（たとえば、ミッション、セキュリティ要件、ポリシ、およびコンプライアンス考慮事項）を有する特有のコミュニティをサポートする。コミュニティ・クラウドは、組織またはサード・パーティによって管理され得、オン・プレミスまたはオフ・プレミスに存在し得る。
公衆クラウド：クラウド・インフラストラクチャが、一般の公衆または大規模な業界グループによって利用可能とされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：クラウド・インフラストラクチャは、固有のエンティティを残しているが、データとアプリケーションの可搬性を可能にする標準化された、または独自の技術によってともに結合されている２つ以上のクラウド（プライベート、コミュニティ、または公衆）の合成である（たとえば、クラウド間のロードバランシングのためのクラウド・バースティング）。
【０１０３】
クラウド・コンピューティング環境は、ステートレス性、低結合、モジュール性、およびセマンティック相互運用性を中心に指向されたサービスである。クラウド・コンピューティングの中心にあるものは、相互接続されたノードのネットワークを含むインフラストラクチャである。
【０１０４】
図２０を参照すると、クラウド・コンピューティング・ノードの例の概略図が図示されている。クラウド・コンピューティング・ノード１０は、適切なクラウド・コンピューティング・ノードの単なる一例に過ぎず、本明細書において説明された本発明の実施形態の使用または機能性の範囲に関して、いかなる限定を示唆することも意図されていない。それにも関わらず、クラウド・コンピューティング・ノード１０は、上述した機能性のうちのいずれかを、実施または実行、あるいはその両方を行うことが可能である。
【０１０５】
クラウド・コンピューティング・ノード１０には、他の多数の汎用または専用のコンピューティング・システム環境またはコンフィギュレーションで動作可能であるコンピュータ・システム／サーバ１２が存在する。コンピュータ・システム／サーバ１２と共に使用するのに適切であり得る周知のコンピューティング・システム、環境、またはコンフィギュレーション、あるいはその組合せの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラマブル家電製品、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および、上記のシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境等を含むが、これらに限定されない。
【０１０６】
コンピュータ・システム／サーバ１２は、コンピュータ・システムによって実行されるプログラム・モジュールなどのコンピュータ・システムで実行可能な命令の一般的なコンテキストで説明され得る。一般に、プログラム・モジュールは、特定のタスクを実行する、または、特定の抽象的なデータ・タイプを実施する、ルーチン、プログラム、オブジェクト、構成要素、ロジック、データ構造等を含み得る。コンピュータ・システム／サーバ１２は、通信ネットワークを介してリンクされているリモート処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境で実現され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ記憶デバイスを含むローカルおよびリモートの両方のコンピュータ・システム記憶媒体に配置され得る。
【０１０７】
図２０に図示されるように、クラウド・コンピューティング・ノード１０内のコンピュータ・システム／サーバ１２が、汎用コンピューティング・デバイスの形態で図示される。コンピュータ・システム／サーバ１２の構成要素は、１つまたは複数のプロセッサまたは処理ユニット１６、システム・メモリ２８、およびシステム・メモリ２８を含む様々なシステム構成要素をプロセッサ１６に結合するバス１８を含み得るが、これらに限定されない。
【０１０８】
バス１８は、様々なバス・アーキテクチャのいずれかを使用する、メモリ・バスまたはメモリ・コントローラ、周辺バス、加速グラフィックス・ポート、および、プロセッサまたはローカル・バスを含む、いくつかのタイプのバス構造のいずれかのうちの１つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス規格協会（ＶＥＳＡ）ローカル・バス、および周辺機器相互接続（ＰＣＩ）バスを含む。
【０１０９】
コンピュータ・システム／サーバ１２は、典型的には、様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム／サーバ１２によってアクセス可能な任意の利用可能な媒体であり得、揮発性および不揮発性の媒体、リムーバブルおよび非リムーバブルな媒体の両方を含む。
【０１１０】
システム・メモリ２８は、ランダム・アクセス・メモリ（ＲＡＭ）３０、またはキャッシュ・メモリ３２、あるいはその両方などの揮発性メモリの形態のコンピュータ・システム可読媒体を含み得る。コンピュータ・システム／サーバ１２はさらに、他のリムーバブル／非リムーバブル、揮発性／不揮発性のコンピュータ・システム記憶媒体を含み得る。単なる一例として、記憶システム３４は、非リムーバブルな不揮発性磁気媒体（図示されず、一般に、「ハード・ドライブ」と呼ばれる）との読出および書込のために提供され得る。図示されていないが、リムーバブルな不揮発性磁気ディスク（たとえば「フロッピー・ディスク」）との読出および書込のための磁気ディスク・ドライブと、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体などのリムーバブルな不揮発性光ディスクとの読出および書込のための光学ディスク・ドライブとが提供され得る。そのような事例では、各々が、１つまたは複数のデータ媒体インターフェースによってバス１８に接続され得る。以下にさらに描写され説明されるように、メモリ２８は、本発明の実施形態のファンクションを実行するように構成されたプログラム・モジュールのセット（たとえば、少なくとも１つ）を有する少なくとも１つのプログラム製品を含み得る。
【０１１１】
プログラム・モジュール４２のセット（少なくとも１つ）を有するプログラム／ユーティリティ４０は、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、限定ではなく例として、メモリ２８に記憶され得る。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはこれらのいずれかの組合せの各々は、ネットワーキング環境の実施を含み得る。プログラム・モジュール４２は、一般に、本明細書において説明された本発明の実施形態のファンクション、または方法、あるいはその両方を実行する。
【０１１２】
コンピュータ・システム／サーバ１２はまた、キーボード、ポインティング・デバイス、ディスプレイ２４等などの１つまたは複数の外部のデバイス１４、ユーザがコンピュータ・システム／サーバ１２とインタラクトすることを可能にする１つまたは複数のデバイス、またはコンピュータ・システム／サーバ１２が１つまたは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス（たとえば、ネットワーク・カード、モデム等）、あるいはその組合せと通信し得る。そのような通信は、入力／出力（Ｉ／Ｏ）インターフェース２２を介して生じ得る。それでもなお、コンピュータ・システム／サーバ１２は、ネットワーク・アダプタ２０を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、一般的な広域ネットワーク（ＷＡＮ）、または公衆ネットワーク（たとえば、インターネット）などの１つまたは複数のネットワーク、あるいはその組合せと通信し得る。描写されるように、ネットワーク・アダプタ２０は、バス１８を介してコンピュータ・システム／サーバ１２の他の構成要素と通信する。図示されていないが、他のハードウェア、またはソフトウェア構成要素、あるいはその両方が、コンピュータ・システム／サーバ１２と連携して使用され得ることを理解されたい。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部のディスク・ドライブアレイ、ＲＡＩＤシステム、テープ・ドライブ、および、データ・アーカイブ記憶システム等を含むが、これらに限定されない。
【０１１３】
図２１を参照すると、例示的なクラウド・コンピューティング環境５０が描写されている。図示されるように、クラウド・コンピューティング環境５０は、１つまたは複数のクラウド・コンピューティング・ノード１０を含み、これを用いて、たとえば、携帯情報端末（ＰＤＡ）またはセルラ電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、または自動車コンピュータ・システム５４Ｎ、あるいはその組合せなどのクラウド・コンシューマによって使用されるローカル・コンピューティング・デバイスが通信し得る。ノード１０は、互いに通信し得る。ノード１０は、上記で説明したように、プライベート、コミュニティ、公衆、またはハイブリッドのクラウドなどの１つまたは複数のネットワーク、またはこれらの組合せにおいて、物理的または仮想的にグループ化（図示せず）され得る。これにより、クラウド・コンピューティング環境５０は、クラウド・コンシューマが、ローカル・コンピューティング・デバイスにおいてリソースを維持する必要がないサービスとして、インフラストラクチャ、プラットフォーム、またはソフトウェア、あるいはその組合せを販売することが可能となる。図２１に図示されるコンピューティング・デバイス５４Ａ〜５４Ｎのタイプは、例示のみを意図しており、コンピューティング・ノード１０およびクラウド・コンピューティング環境５０は、任意のタイプのネットワーク、またはネットワーク・アドレス指定可能な接続、あるいはその両方を介して（たとえば、ウェブ・ブラウザを使用して）任意のタイプのコンピュータ化されたデバイスと通信でき得ることが理解される。
【０１１４】
図２２を参照すると、クラウド・コンピューティング環境５０（図２１）によって提供される機能的抽象化層のセットが図示される。図２２に図示される構成要素、層、およびファンクションは、例示のみを意図しており、本発明の実施形態はそれに限定されないことを事前に理解されたい。描写されるように、以下の層および対応するファンクションが提供される。
【０１１５】
ハードウェアおよびソフトウェア層６０は、ハードウェアおよびソフトウェア構成要素を含む。ハードウェア構成要素の例は、メインフレーム６１、ＲＩＳＣ（縮小命令セット・コンピュータ）アーキテクチャ・ベースのサーバ６２、サーバ６３、ブレード・サーバ６４、記憶デバイス６５、および、ネットワークおよびネットワーキング構成要素６６を含む。いくつかの実施形態では、ソフトウェア構成要素は、ネットワーク・アプリケーションサーバ・ソフトウェア６７およびデータベース・ソフトウェア６８を含む。
【０１１６】
仮想化層７０は、抽象化層を提供し、ここから、仮想エンティティの以下の例、すなわち、仮想サーバ７１、仮想記憶装置７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーション、およびオペレーティング・システム７４、ならびに仮想クライアント７５が提供され得る。
【０１１７】
一例では、管理層８０は、以下に説明されるファンクションを提供し得る。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソースおよび他のリソースの動的プロキュアメントを提供する。メータリングおよび価格設定８２は、クラウド・コンピューティング環境内でリソースが利用されるときのコスト追跡、およびこれらのリソースの消費に対する課金または請求を提供する。一例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、クラウド・コンシューマおよびタスクの身元確認のみならず、データおよび他のリソースの保護を提供する。ユーザ・ポータル８３は、コンシューマおよびシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理８４は、必要なサービス・レベルが満たされるように、クラウド・コンピューティング・リソース割当および管理を提供する。サービス・レベル合意（ＳＬＡ）計画および履行８５は、ＳＬＡにしたがって将来の要件が予想されるクラウド・コンピューティング・リソースの事前手配およびプロキュアメントを提供する。
【０１１８】
ワークロード層９０は、クラウド・コンピューティング環境が利用され得るファンクションの例を提供する。この層から提供され得る作業負荷およびファンクションの例は、マッピングおよびナビゲーション９１、ソフトウェア開発およびライフサイクル管理９２、仮想教室教育配信９３、データ分析処理９４、トランザクション処理９５、およびシブリング処理９６を含む。
【０１１９】
本発明は、任意の可能な技術的な詳細な統合レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体（または複数の媒体）を含み得る。
【０１２０】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し、記憶することができる有形のデバイスであり得る。コンピュータ可読記憶媒体は、たとえば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の適切な組合せであり得るが、これらに限定されない。コンピュータ可読記憶媒体のさらなる具体例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、消去可能プログラマブル読取専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカード、または記録された命令を有する溝の中の隆起構造などの機械的に符号化されたデバイス、および、前述したものの任意の適切な組合せを含む。本明細書で使用されるコンピュータ可読記憶媒体は、電波または他の自由に伝播する電磁波、導波路または他の伝送媒体を伝播する電磁波（たとえば、光ファイバ・ケーブルを通過する光パルス）、または、ワイヤを介して送信される電気信号のように、それ自体が一時的な信号であると解釈されるべきではない。
【０１２１】
本明細書で説明されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスへ、または、たとえば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、あるいはその組合せといったネットワークを介して、外部のコンピュータまたは外部の記憶デバイスへダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含み得る。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【０１２２】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令と、命令セット・アーキテクチャ（ＩＳＡ）命令と、マシン命令と、マシン依存命令と、マイクロコードと、ファームウェア命令と、状態設定データと、集積回路構造のためのコンフィギュレーション・データと、または、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のようなオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語または類似のプログラミング言語などの手続型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードのいずれかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータにおいて、部分的にユーザのコンピュータにおいて、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータにおいて、部分的にリモート・コンピュータにおいて、または完全にリモート・コンピュータまたはサーバにおいて実行し得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータへ接続され得るか、または、（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部のコンピュータへの接続がなされ得る。いくつかの実施形態において、たとえば、プログラマブル・ロジック回路構造、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路構造は、本発明の態様を実行するために、電子回路構造をパーソナル化するコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【０１２３】
本発明の態様は、本発明の実施形態にしたがう方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート例示、またはブロック図、あるいはその両方を参照して本明細書に説明される。フローチャート例示、またはブロック図、あるいはその両方の各ブロック、およびフローチャート例示、またはブロック図、あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されよう。
【０１２４】
これらのコンピュータ可読プログラム命令は、マシンを生成するために、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサへ提供され得、これによって、これら命令が、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行した場合、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定されたファンクション／動作を実施するための手段を生成できるようになる。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはその組合せを、特定の方式で機能するように指示し得るコンピュータ可読記憶媒体に記憶され得、これによって、記憶されている命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定されたファンクション／動作の態様を実施する命令を含む製品を含むようになる。
【０１２５】
コンピュータ可読プログラム命令はまた、コンピュータによって実施される処理を生成するために、一連の動作ステップが、コンピュータ、他のプログラマブル装置、または、他のデバイスにおいて実行されるようにするために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスへロードされ、これによって、コンピュータ、他のプログラマブル装置、または他のデバイスにおいて実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定されたファンクション／動作を実行できるようになる。
【０１２６】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態にしたがうシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、および操作を例示する。これに関して、フローチャートまたはブロック図における各ブロックは、指定された論理ファンクションを実施するための１つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。いくつかの代替実装形態では、ブロックにおいて注目されるファンクションは、図面に書かれている順序と異なって行われ得る。たとえば、連続して図示されている２つのブロックは、実際には、実質的に同時に実行され得るか、または、これらブロックは、関連する機能に依存して、時には逆の順序で実行され得る。ブロック図、またはフローチャート例示あるいはその両方の各ブロック、および、ブロック図、またはフローチャート例示あるいはその両方におけるブロックの組合せは、指定されたファンクションまたは動作を実行する、または、専用のハードウェアとコンピュータ命令との組合せを実行する専用のハードウェア・ベースのシステムによって実施され得ることも留意されたい。
【０１２７】
上記に加えて、１つまたは複数の態様は、たとえば、カスタマ環境の管理を提案するサービス・プロバイダによって提供、販売、展開、管理、サービス等なされ得る。たとえば、サービス・プロバイダは、１つまたは複数のカスタマのために１つまたは複数の態様を実行するコンピュータ・コード、またはコンピュータ・インフラストラクチャ、あるいはその両方を生成、維持、サポート等し得る。見返りに、サービス・プロバイダは、例として、購読契約中、または手数料契約中、あるいはその両方のカスタマから、支払いを受け取り得る。それに加えて、または、その代わりに、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売からの支払いを受け取り得る。
【０１２８】
１つの態様では、アプリケーションは、１つまたは複数の実施形態を実行するために展開され得る。例として、アプリケーションの展開は、１つまたは複数の実施形態を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０１２９】
さらなる態様として、コンピュータ可読コードをコンピューティング・システムへ統合することを含むコンピューティング・インフラストラクチャが展開され得、ここでは、コンピューティング・システムと組み合わされたコードが、１つまたは複数の実施形態を実行することができる。
【０１３０】
またさらなる態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピューティング・インフラストラクチャを統合するための処理が提供され得る。コンピュータ・システムは、コンピュータ可読媒体を含み、コンピュータ媒体は、１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わされたコードは、１つまたは複数の実施形態を実行することができる。
【０１３１】
様々な実施形態が上記で説明されているが、これらは単なる一例である。たとえば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令フォーマット、命令フィールド、または命令値、あるいはその組合せが使用され得る。多くの変形が可能である。
【０１３２】
さらに、コンピューティング環境の他のタイプの恩恵を受けることができ、かつ使用することができる。例として、システム・バスを介してメモリ素子に直接的または間接的に結合された少なくとも２つのプロセッサを含む、プログラム・コードを記憶、または実行、あるいはその両方のために適切なデータ処理システムが使用可能である。メモリ素子は、たとえば、プログラム・コードの実際の実行中に適用されるローカル・メモリと、大容量記憶装置と、実行中にコードが大容量記憶装置から検索されねばならない回数を低減するために、少なくともいくつかのプログラム・コードの一時的な記憶装置を提供するキャッシュ・メモリとを含む。
【０１３３】
入力／出力、または、（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、および他のメモリ媒体等を含むが、これらに限定されない）Ｉ／Ｏデバイスが、直接的に、または、介在するＩ／Ｏコントローラを介して、システムへ結合され得る。ネットワーク・アダプタをシステムに結合して、介在するプライベート・ネットワークまたは公衆ネットワークを介して、データ処理システムを他のデータ処理システムまたはリモート・プリンタまたは記憶デバイスに結合することもできる。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードは、利用可能なタイプのネットワーク・アダプタの単なる一部である。
【０１３４】
本明細書で使用される用語は、特定の実施形態を説明する目的のみのためであり、限定することは意図されていない。本明細書で使用されるように、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことが意図されている。本明細書で使用される場合、「含む」、または「含んでいる」、あるいはその両方の用語は、記述された特徴、整数、ステップ、演算、要素、または構成要素、あるいはその組合せの存在を特定するが、１つまたは複数の他の特徴、整数、ステップ、演算、要素、構成要素、またはこれらのグループ、あるいはその組合せの存在または追加を排除しないことをさらに理解されたい。
【０１３５】
以下の特許請求の範囲における対応する構造、材料、動作、およびすべての手段またはステップにファンクション要素を加えた均等物は、具体的に特許請求されているように、特許請求された他の要素と組み合わせてファンクションを実行するための構造、材料、または動作を含むことが意図される。１つまたは複数の実施形態の説明は、例示および説明を目的として提示されているが、網羅的であること、または、開示された形態に限定されることも意図されていない。多くの変更および変形が、当業者に明らかになるであろう。本実施形態は、様々な態様および実用的用途を最も良く説明し、企図される特定の用途に適した様々な変更を加えた様々な実施形態を当業者が理解できるようにするために選択および説明された。
【図１】
0006951442.tif 000002
【図２】
0006951442.tif 000003
【図３】
0006951442.tif 000004
【図４】
0006951442.tif 000005
【図５】
0006951442.tif 000006
【図６】
0006951442.tif 000007
【図７】
0006951442.tif 000008
【図８】
0006951442.tif 000009
【図９】
0006951442.tif 000010
【図１０】
0006951442.tif 000011
【図１１】
0006951442.tif 000012
【図１２】
0006951442.tif 000013
【図１３】
0006951442.tif 000014
【図１４】
0006951442.tif 000015
【図１５】
0006951442.tif 000016
【図１６】
0006951442.tif 000017
【図１７】
0006951442.tif 000018
【図１８】
0006951442.tif 000019
【図１９】
0006951442.tif 000020
【図２０】
0006951442.tif 000021
【図２１】
0006951442.tif 000022
【図２２】
0006951442.tif 000023