JP6951442B2 - シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法 - Google Patents

シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法 Download PDF

Info

Publication number
JP6951442B2
JP6951442B2 JP2019527553A JP2019527553A JP6951442B2 JP 6951442 B2 JP6951442 B2 JP 6951442B2 JP 2019527553 A JP2019527553 A JP 2019527553A JP 2019527553 A JP2019527553 A JP 2019527553A JP 6951442 B2 JP6951442 B2 JP 6951442B2
Authority
JP
Japan
Prior art keywords
routine
call
sibling
external
cola
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2019527553A
Other languages
English (en)
Other versions
JP2020503597A (ja
Inventor
グシュヴィント、マイケル、カール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2020503597A publication Critical patent/JP2020503597A/ja
Application granted granted Critical
Publication of JP6951442B2 publication Critical patent/JP6951442B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Stored Programmes (AREA)

Description

1つまたは複数の態様は、一般に、コンピューティング環境内での処理に関し、詳細には、シブリング・コール(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
本発明は、シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法を提供する。
コンピューティング環境内での処理を容易にするためのコンピュータ・プログラム製品を設けることにより、従来技術の欠点が克服され、追加の利点が提供される。コンピュータ・プログラム製品は、処理回路によって読み取り可能であり、方法を実行するために、処理回路による実行のための命令を記憶する記憶媒体を含む。この方法は、たとえば、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定することに基づいて、ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む。ルーチンを、外部のシブリング・コーラとしてマーク付けすることによって、様々な最適化が実行され得、これによって、コンピューティング環境内の性能を向上させる。
1つの実施形態では、マーク付けすることは、擬似命令をルーチンに追加することを含む。擬似命令は、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを、コンピューティング環境のプロセッサにおいて実行しているリンカに示す。
一例として、擬似命令に基づいて、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカが、シンボル・データ構造内に設定される。
別の例として、擬似命令に基づいて、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、ルーチンに関連付けられた再配置エントリが提供される。
別の実施形態では、マーク付けすることは、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すためのマーカを、ルーチンのシンボル・データ構造に追加することを含む。
さらに別の実施形態では、マーク付けすることは、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、ルーチンに関連付けられた再配置エントリを提供することを含む。
1つの態様では、方法はさらに、コンピューティング環境のプロセッサにおいて実行しているリンカによって、ルーチンが外部のシブリング・コーラとしてマーク付けされていることを判定することと、ルーチンが外部のシブリング・コーラとしてマーク付けされていることを判定することに基づいて、そのルーチンの呼び出し元に戻るルーチンによってコールされたシブリング・ルーチンに基づいて使用されるべきコンテキストを提供することとを含む。
例として、コンテキストは、インジケータをグローバル・オフセット・テーブルへのインジケータに復元するための情報を含む。
実施形態では、ルーチンは、1つのモジュール内にあり、1つのモジュール内の呼び出し側のルーチンによってコールされるか、または、そのルーチンは、1つのモジュール内にあり、別のモジュール内の呼び出し側のルーチンによってコールされる。
一例として、判定することおよびマーク付けすることは、コンパイラによって実行される。
本明細書では、1つまたは複数の態様に関連する方法およびシステムもまた、説明および特許請求される。さらに、本明細書では、1つまたは複数の態様に関連するサービスも説明され、また、特許請求され得る。
追加の特徴および利点が、本明細書において説明された技術によって実現される。他の実施形態および態様が、本明細書において詳細に説明されており、特許請求された態様の一部と見なされる。
1つまたは複数の態様が、本明細書の終わりに特許請求の範囲における例として特に指摘され、明確に特許請求されている。1つまたは複数の態様の前述の目的、特徴、および利点は、添付の図面と連携して採用された以下の詳細な説明から明らかである。
本発明の態様にしたがって、子ルーチンをコールし、次に子ルーチンがシブリング・ルーチンをコールする親ルーチンの一例を描写する図である。 本発明の1つの態様にしたがって、複数のシブリング・ルーチンの使用を描写する図である。 ローカルな子ルーチンをコールする親ルーチンの1つの実施形態を描写する図である。 外部のシブリング・ルーチンをコールするローカルな子ルーチンの1つの実施形態を描写する図である。 本発明の態様にしたがって、子ルーチンをシブコーラとしてマーク付けする1つの実施形態を描写する図である。 本発明の態様にしたがって使用されるシンボル・テーブルの一例を描写する図である。 本発明の態様にしたがって、子ルーチンがシブコーラとしてマーク付けされていることに基づいて復元されているコンテキスト情報の一例を描写する図である。 本発明の態様にしたがって、シブコーラに関連付けられた処理の1つの実施形態を描写する図である。 本発明の態様にしたがって、潜在的に外部のシブコーラに関連付けられる処理の1つの実施形態を描写する図である。 本発明の態様にしたがって、シブコーラがコールされているか否かに基づいて、記憶されるべき情報を選択するために使用される処理の1つの実施形態を描写する図である。 本発明の態様にしたがって、シブコーラをコールすることに関連付けられた処理の1つの実施形態を描写する図である。 本発明の態様にしたがって、外部のシブリング・ルーチンをコールする外部の子ルーチンの一例を描写する図である。 本発明の態様にしたがって、外部のシブリング・ルーチンをコールすることに関連付けられた処理の1つの実施形態を描写する図である。 本発明の態様にしたがって、親ルーチンが、ローカルな子ルーチンをコールしていたが、そうではなく、外部の子ルーチンをコールしていた、または、ローカルな子ルーチンが、外部のシブリング・ルーチンをコールしたと、親ルーチンが考えていた状況のための訂正を提供する1つの実施形態を描写する図である。 本発明の態様にしたがって、コンピューティング環境における処理を容易にする1つの実施形態を描写する図である。 本発明の態様にしたがって、コンピューティング環境における処理を容易にする1つの実施形態を描写する図である。 本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の1つの実施形態を描写する図である。 本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の実施形態を描写する図である。 図18のメモリの1つの実施形態を描写する図である。 クラウド・コンピューティング・ノードの1つの実施形態を描写する図である。 クラウド・コンピューティング環境の1つの実施形態を描写する図である。 抽象化モデル層の一例を描写する図である。
本発明の1つまたは複数の態様にしたがって、シブリング・コールの使用を容易にするための能力が提供される。たとえば、シブリング・コールを効率的に使用し、それに関連付けられた処理を強化するための最適化が提供される。
シブリング・コールは、他のファンクション・コールよりも効率的である。たとえば、次の子ルーチンを取り上げる。
child()

return sib(a+1);
一例では、シブリングを使用せずに、以下の処理が行われる。
child:
(allocate stackframe)
ld r3,r2,a@got
addi r3,r3,1
bl sib
NOP
(deallocate stackframe)
blr
ここで、ldがロード、addiが即時加算、blが分岐リンク、NOPがノー・オペレーション、およびblrが、たとえば、Powerアーキテクチャにしたがうリンク・レジスタへの分岐である。
しかしながら、シブコールを使用すると、一例において、処理は次のようになる。
child:
(allocate stackframe)
ld r3,r2,a@got
addi r3,r3,1
b sib
NOP
(deallocate stackframe)
blr
したがって、シブコールを使用することによって、子ルーチンは、ファンクションsib()へのサブルーチン・コールが戻った後、その呼び出し元へ戻るためにファンクションchild()によって使用されるべき戻り情報を保存するために使用されるスタックフレームを割り当てる、または割り当て解除する必要はないか、または、ファンクションchild()のモジュールに対して外部にあるファンクションに対応するsib()に対するコールをリンカが解決する場合、可能性のあるグローバル・オフセット・テーブル(GOT)復元命令のためのプレースホルダとしてサービス提供するNOPを実行する必要はない。ファンクションchild()は、分岐命令bを使用して、制御をsib()に移動させ、ファンクションsib()は、child()の呼び出し元へ直接戻る。その結果、コードは、より単純で、より効率的になる。
シブコールに関するさらなる詳細が、図1〜図2を参照して説明される。図1に図示されるように、親ルーチン100が、子ルーチン102をコールする。子ルーチンが、その後、シブリング・ルーチン104をコールする。子ルーチン102は、シブコーラと称され、シブリング・ルーチン104は、シブコーリ(sibcallee)と称される。シブリング・ルーチン104は、子ルーチン102に戻る代わりに、親ルーチン100に直接戻り、子ルーチン102は、その後、親ルーチン100に戻る。
図2に図示されるように、シブコーリ104はさらに、シブリング・ルーチン106をコールし得、シブリング・ルーチン106は、その後、親ルーチン100に直接戻る。この場合、シブリング・ルーチン104は、シブコーラでもあり、シブリング・ルーチン106は、シブコーリである。
ファンクションをコールする際には、ファンクションがどのようにコールされるのかを決定するアプリケーション・バイナリ・インターフェース(ABI)が使用され得る。ABIは、変数へのアクセスを提供するリンカ管理されたグローバル・オフセット・テーブル(GOT)を使用し得る。特に、コンパイラは、コード/データの最終アドレスまたは置換を知ることなく、ソース・コードからオブジェクト・コードを生成する。具体的には、コンパイラは、データ構造の最終サイズ、または、様々なデータ・セクションのオフセット/アドレスを知らずに、変数値のために、可変アドレス参照データ構造(たとえば、グローバル・オフセット・テーブルまたはコンテンツのテーブル(TOC))にアクセスするオブジェクト・コードを生成する。この情報のプレースホルダは、オブジェクト・コードに残され、リンカによって更新される。
リンカによって管理されたGOT(または同様の構造)を有するABIの場合、シブコールは、現在、コンパイラによって決定されたローカルなコールに制限されている。ローカルなコールの例が、図3を参照して説明される。親ルーチン200は、親ルーチンと同じモジュール内にある子ルーチン202をコールする。子ルーチンは、ローカルであることが知られているため、GOTの更新はない。すなわち、たとえば、GOTへのインジケータ(たとえば、GOTポインタ)、または他の情報、あるいはその両方などの戻り情報を含むコンテキスト情報に対する更新はない。子ルーチンはローカルであるので、親ルーチンに戻ったときに、コンテキストは、更新される必要はなく、したがって、親ルーチン200は、コンテキストを復元する命令の代わりに、NOP命令210を含む。
コンテキストは復元されないため、ローカルの子ルーチンが、外部のシブリング・ルーチンをコールすると、コンテキストは、正しくないであろう。たとえば、図4に図示されるように、子ルーチン202は、子ルーチン202および親ルーチン200とは異なるモジュール内にある、したがって、外部のシブリング・ルーチンである、シブリング(sib)ルーチン220をコールし得る。リンカは、たとえば、プロシージャ・リンク・テーブル(PLT)スタブによって、子ルーチン202を、外部のシブリング・ルーチン220に接続する。PLTスタブは、トランポリンを、外部のファンクション220に提供する。外部のファンクション220は、それ自体のグローバル変数を参照するために、GOTを実行し使用する。外部のファンクション220はまた、たとえばGOTなどのコンテキスト情報を更新する。外部のファンクション220は、戻るときに、リンク・レジスタへの分岐(blr)命令222を使用して、親ルーチン内のNOP210に戻る。しかしながら、ファンクションchild()へのコールは、モジュールローカルなコールとして生成されたため、GOTポインタ(実行が行われるモジュールに対応するファンクション・コンテキストの例)を復元する必要がないため、GOTは復元されておらず、次回に、親ルーチンがGOTを使用すると、親ルーチンは、モジュール1ではなく、モジュール2のGOTを誤って使用する。したがって、シブコールは、現在、コンパイラによって決定されたローカルなコールに制限されている。
外部のファンクション(または、潜在的な外部のファンクションでさえ)へのコールが、リンカから隠されているため、問題が生じる。リンカは、ローカルなコールを見て、GOTポインタなどのコンテキスト情報の復元を省略する。したがって、本発明の態様にしたがって、子ファンクション202などの子ルーチンは、シブリング・ルーチンをコールする可能性があるルーチンとしてマーク付けされる。1つの実施形態では、外部のシブリング・ルーチンをコールし得るシブコーラのみがマーク付けされる。このマーク付けは、図5に図示されるように、たとえば、シブコーラ300と称される擬似命令(すなわち、プロセッサによって実行されないが、リンカにインジケーションを提供する命令)を、子ルーチンに配置することを含み得る。シブコーラ擬似命令300は、たとえば、ルーチンが、シブコーラであるか、またはシブコーラであり得ることを示すインジケーションを、リンカに提供する。たとえば、擬似命令300に基づいて、アセンブラまたは他のバイナリ・オブジェクト・トランスレータは、たとえばシンボル・データ構造(たとえばテーブル)にマーク付けするか、または、ルーチンが、シブコーラであるか、シブコーラであり得ることを示すルーチンのための再配置(reloc)エントリを提供する。
例として、シブリング・ルーチンをコールすることと、外部のシブリング・ルーチンをコールすることとを区別するために、異なる擬似命令、マーク付け、または再配置、あるいはその組合せが使用され得る。多くの変形が可能である。
1つの特定の例では、図6に図示されるように、シンボル・テーブル330が生成され、アプリケーションのオブジェクト・コード332内に記憶される(たとえば、メモリ内、ディスク等に記憶される)。シンボル・テーブルは、シンボル名336、タイプ340、範囲342などのいくつかのフィールドと、本発明の態様にしたがって、そのファンクションがシブコーラであるか否かを示すマーク付けフィールド338とを含む。擬似命令300によって示されるように、ファンクションが、シブコーラであるか、または、シブコーラである可能性がある場合、マーク付けフィールド338は、たとえば1に設定され、そうでなければ、たとえば、0に設定される。
さらなる例では、擬似命令300に基づいて、アプリケーション・バイナリ・インターフェース(ABI)にしたがって再配置エントリ(たとえば、.reloc)が生成され、そのファンクションが、シブコーラであるか、または、シブコーラである可能性があることを示すファンクションに関連付けられる。再配置エントリ(.reloc)は、ELF(executable and linkable format)、または同様のオブジェクト・ファイル定義にしたがって生成され得る。
さらなる例では、インジケーションは、たとえば、.ローカルエントリ、シンボル・テーブル、または.reloc再配置エントリなどの他の場所に配置され得るか、または、ファンクションの別のマーク付け、またはその関連付けられたファンクション・シンボル、あるいはその両方が提供され得る。例として、マーク付けは、シンボル・テーブル内に設定され得るか、または、再配置エントリが、擬似命令を使用せずに生成され得る。多くの変形が可能である。
1つまたは複数の実施形態にしたがって、テキスト・アセンブリ言語表現などの中間コード内にあるマーカ・インジケーションは、順に、(たとえば、ELF(executable and linkable format)ABIにしたがって、例示的なELFフォーマットと連携して使用されるようなシンボル・テーブル・エントリのst_otherフィールドまたは別のフィールドからなる少なくとも1ビットを使用した)シンボル・テーブル・エントリ内のマーカへ、バイナリ再配置インジケータへ、または、オブジェクト・ファイル・フォーマットにおけるシブコーラに対応するようなファンクションまたはファンクション・シンボルのいずれかをマーク付けするための別のオブジェクト表現へ変換され得る。さらに別の実施形態では、オブジェクト・ファイル・フォーマットは、コンパイラなどのコード生成ツールによって直接生成され得る。
またさらなる実施形態では、それがシブリングであることを示すために、ファンクションに、再配置エントリが追加され得る。一般に、ファンクション・コールは、いくつかのファンクション・コール再配置のうちの1つで示される。したがって、ファンクション・コールとは異なる、シブリング・コールのために、再配置が使用され得る。そのような再配置の存在は、それ自体では、ファンクションがシブリング・ルーチンをコールすることを示すインジケータとなる可能性があり得る。ファンクションは、シブコールが存在するか否かを判定するためにスキャンされる。より迅速な判定のために、シンボル・テーブル内のインジケータまたは特別な「マーカ再配置」をファンクションの先頭に配置することは、ファンクションを見てそのような再配置が存在するか否かを判定するよりも、処理がより容易/高速であり得る。
マーク付けされたシブコーラがリンカによってリンクされ、シブコーラへの呼び出し元が、ローカルな呼び出し元である場合、リンカは、シブコーラをコールした呼び出し元に基づいて、十分なコンテキストを記憶するコール・シーケンスを生成する。たとえば、GOTポインタの現在値が記憶され、GOTポインタ復元コードなどのコンテキスト復元コードが挿入され、外部のシブコールが実行されるようになり得る。たとえば、図5に戻ると、シブコーラ擬似命令300に基づいて、リンカは、このファンクションが非ローカルなシブリング・ルーチンをコールし得ることを示すインジケーションを取得し(たとえば、通知される、判定される等)、したがって、リンカは、ローカルなコールの場合であっても、NOP210の代わりに、たとえば、GOTポインタ復元コード310を挿入する。この例では、r2は、GOTレジスタであり、ldは、ロードを表す。
図7を参照すると、リンカがこのインジケーションを取得し、リンカが復元コードを提供することに基づいて、子ルーチン202が、sibルーチン220をコールし、sib220が、blr222を介して親ルーチン200に戻ると、コンテキスト情報、たとえばGOTが復元310され、次に、親ルーチン200がGOTを参照するとき、親ルーチン200は正しいGOTを参照する。たとえば、1つの実施形態では、子ルーチン202が、外部のシブリング・ルーチンに対する可能性のあるシブコーラである場合、コンテキスト(たとえば、GOTポインタ)は、それがsibルーチン220から戻ったときに復元され得るように記憶される。1つの例として、コンテキストは、短縮プロシージャ・リンク・テーブル(PLT)スタブ、またはコンテキスト情報を記憶する他のスタブなどのスタブに記憶され得る。別の実施形態では、外部のコールのためのGOT記憶命令のためのプレースホルダを提供するために、親ルーチン内(たとえば、bl子命令の上)に配置されたプレースホルダ命令(たとえば、NOP命令)が、GOT記憶命令と置き換えられる。コンテキスト情報を記憶するために他の例が使用され得る。
親ルーチンと子ルーチンとが同じモジュールまたは異なるモジュールにある場合、上記の技術が使用され得る。すなわち、子ルーチンは、親ルーチンに対してローカルであり得るか、または親ルーチンから外部であり得、子ルーチンは、たとえばPLTスタブを介してアクセスされる。子ルーチンは、外部の場合(コールされたファンクションのためのシブコーラ・インジケーションが、リンカにとって見えないことがあり得る)に動作する。なぜなら、(リンクされている現在のモジュールの外部であるので、定義によって利用可能ではない)シブコーラ子ファンクションにおけるシブコーラ擬似命令300の存在に関わらず、子は外部であるため、静的リンカは、GOT保存/復元(save/restore)の復元(restoration)シーケンスを挿入するからである。
シブコーラをマーク付けすることに関するさらなる詳細は、図8〜図9を参照して説明される。先ず、図8を参照すると、コンパイラは、ステップ400において、可能性のあるシブコーラを探索するコードを分析する。たとえば、コンパイラは、コールされたファンクションの結果のさらなる処理が、呼び出し元によって実行されないファンクション・コールを探索するコードを分析する。問合せ402において、ルーチンが、可能性のあるシブコーラであると判定されると、ステップ404において、ルーチンは、シブコーラとしてマーク付けされる。たとえば、コンパイラは、シブコーラ擬似命令を挿入し、シンボル・テーブルをマーク付けし、または再配置エントリを追加するか、あるいはその両方を行う。しかしながら、ルーチンが、シブコーラ(または、可能性のあるシブコーラ)であると判定されない場合、ステップ406において、そのようなマーク付けは実行されない。
さらなる態様では、潜在的な外部のシブリングをコールし得るシブコーラが判定され、(たとえば、すべてのシブコーラの代わりに)マーク付けされる。たとえば、図9に図示されるように、ステップ420において、コードは、潜在的に外部のシブコーラ、すなわち、潜在的な外部のシブコーリをコールする可能性のあり得るシブコーラを探索するために、コンパイラによって分析される。この場合、コンパイラは、コールされたファンクションの結果のさらなる処理が、呼び出し元によって実行されないコード探索ファンクション・コールを分析する。さらに、コンパイラは、(たとえば、プログラミング構築に基づいて)シブコールが、ローカルのシブコールであると知られているか否かを判定する。ローカルのシブコールであると知られている場合は、潜在的な外部のシブリングをコールし得る、潜在的な外部のシブコーラとしてマーク付けされない。しかしながら、コールがローカルなシブコールであると知られていない場合、シブコーラは、潜在的な外部のシブリングをコールする可能性があるとしてマーク付けされる。
1つの実施形態では、コンパイラは、シブコーラ再配置情報と連携して、シブコーリに関する情報を提供する。別の実施形態では、リンカは、シブコーリを判定するために、コンパイラが生成したコードを分析する。1つの実施形態では、たとえば、各ファンクションの長さまたは範囲を、あるいはファンクションが不連続な方式でコンパイルされた場合には、多数の範囲を示すことによって、リンカが、シブコーラ・ファンクションを分析することを支援するために、コンパイラによって、追加のヒントが発行される。
問合せ422において、外部のシブリング・ルーチンをコールし得るシブコーラが判定されると、ステップ424において、シブコーラは、潜在的に外部のシブコーラとしてマーク付けされる。1つの実施形態では、コンパイラは、シブコーラ擬似命令(または、潜在的に外部のシブコーラに特有の別のシブコーラ擬似命令)を挿入し、シンボル・テーブルをマーク付けし、または再配置エントリを追加し、あるいはその組合せを行う。さらに別の実施形態では、リンカは、シブコール・サイトについてコードを分析する。しかしながら、そのような潜在的に外部のシブコーラが発見されない場合、ステップ426において、そのようなマーク付けは実行されない。
さらなる態様において、図10を参照すると、問合せ500において、リンカが、オブジェクトのセットをリンクして、ローカルなコールが実行され得ると判定すると、リンカは、コールされたファンクションが、外部のシブリングをコールし得るシブコーラに対応するか否かを判定するテストを実行する。1つの実施形態において、これは、図9を参照して説明されたように、コールされたファンクションが、シブコーラとしてマーク付けされているか否かを判定することに対応する。別の実施形態では、テストは、シブコーラが、外部のシブコーリをコールする可能性があり得るか否かを考慮せずに、シブコーラがコールされているか否かである。一例では、これは、たとえば、図8の技術にしたがって、コールされたファンクションが、シブコーラとしてマーク付けされているか否かを判定することに対応する。さらに別の実施形態では、これは、たとえば、図8の技術にしたがって、コールされたファンクションが、シブコーラとしてマーク付けされているか否かを判定することに対応し、さらに、たとえば、オブジェクト・コードおよび関連付けられた再配置のうちの1つ、または、ファイル・フォーマットにおけるシブコーラに特有のシブコーラのリストに基づく、シブコーリのうちのいずれかが、外部のシブコーリに対応し得るか否かのリンカ・ベースの分析を含む。
ステップ502において、外部のシブコーリをコールする可能性があり得るシブコーラ(または、別の実施形態では、外部のシブコーリまたはローカルのシブコーリをコールするか否かに関わらずシブコーラ)がコールされた場合、リンカは、十分なコンテキスト情報を記憶および復元する外部のコール・シーケンスを生成し、これによって、シブコーラは、(たとえば、GOTまたはTOC情報を記憶している)外部のシブリング・ルーチンをコールするようになり得る。
しかしながら、ステップ504において、外部のシブコーリをコールする可能性があり得るシブコーラ(または、別の実施形態では、外部のシブコーリまたはローカルなシブコーリをコールするか否かに関わらずシブコーラ)がコールされていない場合、リンカは、短縮コール・シーケンスを生成する。すなわち、シブコーラが、外部のシブリング・ルーチンをコールできるように、十分なコンテキスト情報を記憶および復元しない、より効率的なコールが生成される。コードは効率化のために省略される。
実行中、1つの実施形態では、生成されたコードは、(そのようにマーク付けされている)シブコーラへのコールを実行し、外部のモジュールからの戻りを実行できるように、コンテキスト情報を記憶する。その後、シブコーラがコールされる。シブコーラは、その外部のシブリングであるシブコーリに対して、外部のシブコールを実行する。外部のファンクションの戻りは、シブコーラが、ローカルでコールされたときに、呼び出し元によってシブコーラに記憶されたグローバル戻り情報を使用して、シブコーリによって実行される。シブコーリから戻ったときに、(GOTポインタなどの)コンテキスト情報が復元される。
さらなる態様では、シブコーリが実際に外部にあるか否かに関して判定がなされ、それに基づいてアクションが講じられる。図11を参照すると、1つの実施形態では、リンカは、問合せ600において、外部のシブコーリをコールする可能性があり得るシブコーラ(または、別の実施形態では、外部のシブコーリまたはローカルのシブコーリをコールする可能性があるか否かに関わらずシブコーラ)が、コールされているか否かを判定する。ステップ602において、外部のシブコーリをコールする可能性があり得るシブコーラ(または、外部のシブコーリまたはローカルなシブコーリをコールする可能性があるか否かに関わらずシブコーラ)がコールされると、リンカは、リンケージ結果に基づいて、シブコール宛先を判定する。ステップ604において、シブコーラが実際に、経路のいずれかにおいて、外部のシブリングをコールしているか否かに関する判定がなされる。ステップ606において、外部のシブリングがコールされると、シブコーラが、外部のシブリング(たとえば、GOT情報)をコールできるように、十分なコンテキスト情報が記憶される。しかしながら、問合せ604において、シブコーラが、外部のシブリングをコールしない場合、または、問合せ600において、外部のシブコーリをコールする可能性があり得るシブコーラ(または、外部のシブコーリまたはローカルなシブコーリをコールする可能性があるか否かに関わらずシブコーラ)がコールされない場合、ステップ608において、より効率的なコールが生成される。すなわち、コンテキスト情報の保存/復元などの情報は省略される。
1つの実施形態では、第1のシブコーラのシブコーリのいずれかが、シブコーラとしてマーク付けされた場合、シブコーリは、外部のシブリングとして取り扱われる。別の実施形態では、第1のシブコーラのシブコーリのいずれかが、シブコーラとしてマーク付けされ、第1のシブコーラのシブコールが、テールコールではない(すなわち、第1のシブコーラのシブコーリが、自身をコールしている第1のシブコーラではない)場合、シブコーリは、外部のシブリングとして取り扱われる。
さらなる実施形態として、シブコーラの推移閉包が、外部のモジュール・コールに関して計算され(すなわち、シブコーラによってコールされたシブコーリのいずれかが、外部のシブリングをコールしているか、または、外部のシブリングをコールし得るシブコーラをコールしているか等のいずれかであるかを判定するために)、コールされたシブリングの推移閉包に、外部のシブコールが発見された場合、シブコーラは、そのような最終的な外部のシブリングから戻るために十分な情報を保存するコールでコールされる。
1つの実施形態では、最適化分析、コンフィギュレーション・ファイル、プログラマのヒント、またはプロファイル指向のフィードバックは、いくつかのファンクションのためにシブコーラ最適化のうちの1つまたは複数を実行するが、他のものは実行しないことを示し得る。たとえば、シブコーラが、シブリング・ルーチンを稀にしかコールしない場合、最適化は、有利ではなく、プログラマ、フィードバック構成要素、または分析構成要素のうちの1つは、特定のシブコーラに対する最適化を抑制することを判定し得る。一例では、この適応ステップは、シブコーラのコール・サイトを抑制し、シブコールではなく通常のファンクション・コールを実行し、シブコーラがマーク付けされないようにする。他の例もまた可能である。
別の実施形態では、最適化分析、コンフィギュレーション・ファイル、プログラマのヒント、またはプロファイル指向のフィードバックは、あるシブコーラのいくつかのコールされたシブリング・ルーチンのために1つまたは複数のシブコーラ最適化を実行するが、他のものは実行しないことを示し得る。たとえば、1つのシブコーラが、一般にコールされローカルであり、別のシブコーラが、稀にしかコールされずに外部である場合、シブコーラが、シブリング・ルーチンを稀にしかコールしないのであれば、最適化は、そのコール・サイトにおいて有利ではなく、プログラマ、フィードバック構成要素、または分析構成要素のうちの1つは、特定のシブコーラのための最適化を抑制することを判定し得る。一例では、この適応ステップは、シブコーラのシブリング・ルーチンへのおそらく1つのコール・サイトを抑制し、外部の戻りを可能にするために、コンテキスト情報を記憶することを決定するときに考慮されるべきシブコーリのリストから、そのシンボルを除外する。
本発明のさらなる態様は、子ルーチンが、その親ルーチンの外部にある状況に対処する。一例では、そのようなコールは、コンテキスト情報(たとえば、GOTポインタ)を破壊し得るので、その親ルーチンの外部にある子ルーチンは、外部のシブリングをコールすることはない。たとえば、図12を参照すると、親ルーチン200が1つのモジュール700(たとえば、モジュール3)内にあり、たとえばPLTスタブ706(または、ファンクション・コール)を介して別のモジュール702(たとえば、モジュール1)内の子ルーチン202をコールする場合、PLTスタブ706は、モジュール3に対応するコンテキスト情報(たとえば、GOTポインタ)を記憶する。次に、子ルーチン202が、たとえばPLTスタブ710(または、ファンクション・コール)を介してさらに別のモジュール704(たとえば、モジュール2)内のシブリング・ルーチン220をコールすると、PLTスタブ710は、モジュール3に対応する第1のコンテキスト情報を上書きする他のコンテキスト情報を記憶する。しかしながら、モジュール2内のシブリング・ルーチン220から、モジュール3内の親ルーチン200へ戻るとき(たとえば、blr222)、それは、所望されるモジュール3に対応する第1のコンテキスト情報である。
PLTスタブの1つの実施形態では、標準的な記憶ダブル命令を使用して、モジュール2に対応するGOTポインタを記憶している間、モジュール1からモジュール2へ制御を移動させるために、以下のコード・シーケンスが使用される。
std r2,24(r1)
addis r12,r2,func@plt@toc@ha
ld r12,func@plt@toc@l(r12)
mtctr r12
bctr
ここで、stdは記憶ダブル、addisは即値加算、tocは目次、ldはロード、mtctrはカウント・レジスタへの移動、bctrは分岐カウンタレジスタである。
別の実施形態では、std命令は、コンパイラによって以前に割り当てられたプレースホルダ位置に配置され、PLTスタブは、制御移動のみを実行する。
addis r12,r2,func@plt@toc@ha
ld r12,func@plt@toc@l(r12)
mtctr r12
bctr
しかしながら、本発明の態様にしたがって、第2のコンテキスト情報の保存が抑制される。たとえば、リンカまたはコンパイラは、シブコールのためのコンテキスト情報を保存せずに(たとえば、GOTポインタ保存なしで、たとえば、std命令なしで)PLTスタブを生成する。例として、再配置は、通常のコールではなく、シブコーラによる特定のコールとして、シブコールの存在を示すために使用され得、それにより、stdが、PLTスタブまたはスケジュールされたプレースホルダに配置されることを抑制する。したがって、シブコールのためのPLTスタブは、PLT subの一部としてstd命令なしで、または、そのようなGOT記憶命令を受け取るために、コンパイラによって生成されたプレースホルダに配置することなく、次のシーケンスに対応し得る。
addis r12,r2,sib@plt@toc@ha
ld r12,sib@plt@toc@l(r12)
mtctr r12
bctr
別の実施形態では、コードが生成されると、新たに定義されたシブコール再配置コマンド(relocs)を理解するために、リンカが更新されることを必要とする、新たなrelocsの作成を回避するために、コンパイラは、たとえば、シブコールと連携して、ダミー位置を指し示すTOCSAVE relocを生成し、リンカは、実行されていない未使用の場所を埋め、GOT保存を効果的に抑制する。
外部のシブリング・ルーチンに関連付けられた処理に関連するさらなる詳細が、図13を参照して説明される。先ず、問合せ720において、非シブリングの外部のファンクション・コールとは対照的に、子ルーチン(または、他のシブリング・ルーチン)が、外部のシブリング・ルーチンをコールしているか否かについての判定が(たとえば、リンカまたはコンパイラによって)なされる。外部のシブコールは、たとえば、それがシブコールであり、非シブリング・ファンクション・コールではないことを示すシブコールの新たな再配置コマンドの使用によって、または、外部のシンボルに戻ることなく分岐があると判定することによって認識され得る。本発明の態様にしたがって、外部のシブリング・ルーチンが、シブコールを使用してコールされている場合、ステップ722において、GOTへのインジケータ(たとえば、GOTポインタ)を含むコンテキスト情報は保存されず(これは、本明細書では、GOTを保存しないと称される)、これによって、シブコーラへの呼び出し元のオリジナルのコンテキストは、シブコーリから戻ると復元され得る。しかしながら、ステップ724において、外部のファンクション・コール(シブコールではない)が実行されている場合、GOTへのインジケータ(たとえば、GOTポインタ)を含むコンテキスト情報が保存され(これは、本明細書では、GOTを保存すると称される)、これによって、コンテキスト情報は、後に復元され得るようになる。
上記に加えて、コードでは、コールはローカルなコールとして定義され得、これによって、コンパイラは、NOP命令を、外部のコールからのGOT復元命令のためのプレースホルダとして抑制し得る。しかしながら、子が外部のシブリングをコールすることが示された場合、従来技術にしたがって、コンテキスト復元命令を受け取るための場所に、プレースホルダNOP命令が提供されていないため、コンテキストを復元することができない。したがって、本発明の態様にしたがって、外部のシブリング・ルーチンをコールし得る子シブコーラに直接分岐するのではなく、サブルーチン分岐は、子ルーチンへの分岐リンクから、スタブ・ファンクションへの分岐へ編集され得る。これは、コンテキスト情報(たとえば、GOT情報)の記憶および復元命令のみならず、子ルーチンへの分岐リンクを含む。特に、図14に図示されるように、親ルーチン200は、ローカルルーチンであると知られている子ルーチン202をコールする。したがって、親ルーチン200はNOP命令を含まない。しかしながら、子ルーチン202は、外部のシブリング220をコールする。したがって、本発明の態様にしたがって、分岐リンク(bl)ステートメント800が、スタブ810へ分岐するスタブ命令802への分岐に置き換えられる。そのスタブでは、コンテキスト情報が保存812され、後に、シブリング・ルーチン220から戻る820と復元814される。
本明細書に詳細に説明されているものは、シブリング・コールを効率的に処理するために実行され得るいくつかの最適化である。本発明の1つまたは複数の態様は、コンピュータ技術と密接に関連しており、コンピュータ内の処理を容易にし、全体的な性能を向上させる。
コンピューティング環境における処理を容易にする1つの特定の実施形態が、図15〜図16を参照して説明される。この実施形態は、関連付けられた処理を最適化するために、外部のシブコーリをコールするか、またはコールする可能性があるシブリング・コーラ・ルーチンをマーク付けすることを含む。
先ず、図15を参照すると、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かに関する判定が行われる(900)。例として、ルーチンは、1つのモジュール内にあり、その1つのモジュール内の呼び出し側のルーチンによってコールされるか、または、そのルーチンは、1つのモジュール内にあり、別のモジュール内の呼び出し側のルーチンによってコールされる(901)。そのルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定することに基づいて、そのルーチンは、外部のシブリング・コーラとしてマーク付けされる(902)。一例では、判定すること、およびマーク付けすることは、コンパイラによって実行される(903)。他の実施形態および例も可能であり、特許請求された発明の範囲内にあると考慮される。
1つの実施形態では、マーク付けすることは、ルーチンに擬似命令を追加することを含む(904)。擬似命令は、ルーチンが、1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることをコンピューティング環境のプロセッサにおいて実行しているリンカに示す(906)。擬似命令に基づいて、1つの例では、ルーチンが、1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカが、シンボル・データ構造内に設定される(908)。別の例では、擬似命令に基づいて、ルーチンが、1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すために、ルーチンに関連付けられた再配置エントリが提供される(910)。
図16を参照すると、(たとえば、擬似命令が使用されないことがある)別の実施形態では、マーク付けすることは、ルーチンのシンボル・データ構造にマーカを追加することを含む(912)。マーカ(たとえば、1に設定される)は、ルーチンが、1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示す(914)。(たとえば、擬似命令が使用されないことがある)またさらなる実施形態では、マーク付けすることは、ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すために、ルーチンに関連付けられた再配置エントリを提供することを含む(916)。
さらなる態様では、コンピューティング環境のプロセッサにおいて実行しているリンカは、ルーチンが、外部のシブリング・コーラとしてマーク付けされていることを判定し(920)、ルーチンが、外部のシブリング・コーラとしてマーク付けされていることを判定することに基づいて、ルーチンの呼び出し元へ戻るルーチンによってコールされた外部のシブリング・ルーチンに基づいて使用されるべきコンテキストを提供する(922)。一例では、コンテキストは、グローバル・オフセット・テーブルへのインジケータを復元するための情報を含む(924)。
本明細書において説明されるように、本発明の1つまたは複数の態様にしたがって、シブコーラは、たとえばコンパイラによってマーク付けされる。1つの実施形態では、外部のシブリング・ルーチン(たとえば、異なるモジュール内のシブリング・ルーチン)をコールし得るシブコーラは、マーク付けされ、(たとえば、シブコーラと同じモジュール内の)ローカルなシブリング・ルーチンをコールし得るシブコーラは、マーク付けされない。
1つの実施形態では、マーク付けされたシブコーラがリンカによってリンクされ、シブコーラへの呼び出し元が、ローカルな呼び出し元である(たとえば、呼び出し元と、シブコーラとが、同じモジュール内にある)とき、リンカは、外部のシブコールがシブコーラによって実行され得るように、十分な情報を記憶するコール・シーケンスを生成する。さらなる実施形態では、マーク付けされたシブコーラが、リンカによってリンクされ、シブコーラへの呼び出し元がローカルな呼び出し元であり、シブコーラが、外部のシブコーラとしてマーク付けされると、リンカは、外部のシブコールが実行され得るように、十分な情報を記憶するコール・シーケンスを生成する。
1つの実施形態において、シブコーラが(たとえば、シブコール・シーケンスを使用してシブリング・ルーチンをコールし得る、コールされたファンクションとして)識別され、その結果、たとえば、シブコーラが外部のシブリングに移動したい場合に、リンカが、フル・コンテキストを保存するためのコード(たとえば、GOTポインタを記憶/復元するためのコード)を挿入でき得る。コンパイラは、マーク付けを実行し、1つの実施形態では、外部のシブリング・ルーチンをコールする可能性があり得るシブコーラだけが、コンパイラによってマーク付けされる。外部のシブリング・ルーチンをコールせず、代わりに、ローカルなシブリング・ルーチンをコールするシブコーラをマーク付けすることによって、余分なオーバヘッドが回避される。
一例として、マーク付けは、インジケータを用いて実行される。たとえば、インジケータは、ELF ABIなどのアプリケーション・バイナリ・インターフェースにしたがう再配置タイプである。別の例として、インジケータは、このファンクションのためのシンボル・テーブル・エントリ内のフラグである。一例では、インジケータは、コンパイラによってシブコーラ内に配置された擬似命令に基づいて、(たとえば、アセンブラまたは他のバイナリ・オブジェクト・トランスレータによって)設定される。擬似命令は、選択された実施形態に基づいて、すべてのシブコーラ、または、外部のシブリング・ルーチンをコールする可能性があると判定されたシブコーラのいずれかに配置される。一例として、コンパイラは、インジケータを有するファイルを発行し、リンカはそのファイルを読み取る。
1つの実施形態では、リンカは、ファンクションのためのインジケータを読み出し、シブコーラが、シブリング・ルーチンまたは外部のシブリング・ルーチンをコールする可能性があることを示すインジケータが(たとえば、1に)設定されていることに基づいて、実施形態に依存して、外部のシブリング・ルーチンをコールし得るシブコーラをコールしていることに基づいて、フル・コンテキストを保存(たとえば、GOTポインタのためのコードを記憶/復元)する。しかしながら、シブコーラが、ローカルなシブリング・ルーチンをコールしている場合、シブコーラが、シブコールを使用してローカルなシブコーラのみをコールすると判定することに基づいて、コンテキストの保存は、シブコーラへのコール・サイトにおいて抑制される。
示されているように、シブコーラは、たとえば、コンパイラによってマーク付けされる。1つの特定の実施形態では、外部のシブリング・ルーチンをコールし得るシブコーラが、そのようにマーク付けされる。一例では、コンパイラは、たとえば、シブコーラの再配置と連携して、シブコーリのリストを提供することによって、可能性のあるシブコーリに関する情報を提供する。別の例では、リンカは、シブコーリを判定するために、コンパイラが生成したコードを分析する。1つの実施形態では、(たとえば、ルーチンが不連続な方式でコンパイルされている場合、各ルーチンの長さまたは範囲、または多数の範囲を示すことによって)リンカがシブコーラ・ルーチンを分析するのを支援するために、コンパイラによって追加のヒントが発行される。
1つの実施形態では、マーク付けされたシブコーラが、リンカによってリンクされ、シブコーラへの呼び出し元が、ローカルな呼び出し元であり、シブコーラが、潜在的に外部のシブコーラとしてマーク付けされているとき、リンカは、コールされたシブリングのいずれかが、実際に、外部のシブリング・ルーチンであるか否かを判定するための分析ステップを実行する。外部のシブリング・ルーチンが存在しない場合(たとえば、シブリング・ルーチンが、たとえば、静的リンカによってローカルに解決されている場合)、シブコーラへのローカルなコールが実行される。シブコーラによってコールされたシブリング・ルーチンのうちの少なくとも1つが、外部である場合、外部のルーチンの戻りを実行するのに十分な情報が、ローカルなシブコーラをコールする前に記憶される。1つの実施形態では、リンカは、外部のシブコールが実行され得るように十分な情報を記憶するコール・シーケンスを生成する。
1つの実施形態では、コンパイラは、シブコーラためのシブリング・ルーチンと呼ばれ得るルーチンのリストを生成し、オブジェクト・ファイル内にそのリストを提供する。例として、リストは、シブコーラであるファンクションに関連付けられているか、または、ルーチンの開始時に、再配置(または、一連の再配置)として関連付けられる。リンカは、この情報を、以下のように使用する。すべてのシブコーリがローカルである場合、シブコーラは、ファンクションとしてコールされると、「ローカルなコール」コンテキストを保存するシーケンス(たとえば、GOTポインタの記憶/復元なし)でコールされ得るか、そうでなければ、コールは、フル・コンテキストで(たとえば、GOTポインタの記憶/復元で)保存される。なぜなら、それは外部のルーチンのためにコンテキストを戻し復元する外部のルーチンに制御をハンドオフし得るからである。
別の実施形態では、インジケータは、シブコーラであるとして示されたルーチンによって、おそらくはシブリング・ルーチンとして呼ばれるルーチンのリストを関連付けるインジケータが提供され得る。このリストは、シブコーラであるルーチンに関連付けられているか、または、ルーチンの先頭において再配置(または、一連の再配置)として関連付けられる。
またさらなる実施形態では、コンパイラは、シブリング・ルーチンへの各コールを、シブコールとしてマーク付けし得る。またさらなる実施形態では、コンパイラは、シブコーラの一部である命令をマーク付けする。
示されるように、一例では、シブコールを、(たとえば、シンボル・テーブル内の再配置またはフラグを使用して)典型的なファンクション・コールではなく、シブコールとしてマーク付けするためのインジケータが提供される。さらなる実施形態では、ルーチンの範囲(たとえば、どの命令がどのルーチンに属するか)をマーク付けするために、マーカが提供される。1つの態様では、リンカは、作成されているシブコールのためのマーカを読み取り、マーカは、特定のルーチンに対応するシブコールを判定するために、どの命令がどのルーチンに属するかを示す。例として、リンカは、潜在的な外部のシブコーラのためのシブコーリのリストを構築し、そのリストに基づいて、これらのどれが外部であるかに関して判定する。シブコーリがローカルである場合、このシブコーラは、コールされると、ローカルなコール・コンテキストを保存するシーケンスでコールされ得るか、そうでなければ、このコールは、上記で説明されたように、フル(外部のコール)コンテキストで保存される。
1つの実施形態では、外部のシブコールがなされるべきである場合、(たとえば、シブコーラに対して外部である呼び出し元によって外部のシブコーラがコールされた場合)コンテキスト情報の記憶は、以前に記憶されたコンテキスト情報を上書きするので、コンテキスト情報は、記憶されるべきではない。したがって、1つまたは複数の態様にしたがって、コンテキスト情報の保存は抑制される。1つの実施形態では、これは、コンテキスト情報(たとえば、GOTポインタ)の記憶/復元を含まないPLTスタブを(コンパイラまたはリンカのいずれかによって)作成することによって実行される。
外部のシブコーラ(すなわち、外部のシブリング・ルーチンである、または、外部のシブリング・ルーチンをコールする可能性のあるシブコーラ)は、たとえば、シブコールのために特に定義された再配置によって、外部のシンボルへの戻りを有さない分岐を診断することによって、または、別の手段によって認識される。1つの実施形態では、コンパイラが、リンカによって理解されないコードを生成する場合、コンパイラは、保守的になるようにコンテキスト情報の生成を抑制する。
1つの実施形態では、コンパイラは、シブコールと連携して、ダミー位置を指し示す特別に定義された再配置を挿入し、その後、リンカは、実行されていないアドレスで、位置を埋め、コンテキスト保存を効果的に抑制する。
別の実施形態では、レジスタ間接シブコールのため、コンパイラは、コンテキスト保存なしで、コール・シーケンスを発行する。
本発明の態様は、外部のシブコーラと連携して、リンカ/コンパイラ管理コンテキスト保存を提供する。1つの実施形態では、プログラムが、コンパイラおよびリンカによって管理されたGOTを使用するときに、外部のシブコールを実行するアプリケーションを生成するように適合されたプログラムが提供される。
シブコールの使用を最適化するために、いくつかの実施形態および例が上記で提供され、それによって、コンピューティング環境における処理を容易にし、性能を向上させるが、他の実施形態および例もまた可能であり、本発明の態様と見なされる。
本発明の1つまたは複数の態様を組み込み、使用するコンピューティング環境の1つの実施形態が、図17を参照して説明される。コンピューティング環境1000は、たとえば、1つまたは複数のプロセッサ・コアを有するプロセッサ1002(たとえば中央処理装置(CPU))を含み、各プロセッサ・コアは、回路構造1004と称され得る。プロセッサ1002は、1つまたは複数のレジスタ1006を含み得、各レジスタは、CPUまたは他のデジタル・プロセッサの一部として利用可能な小容量の記憶装置である。回路構造1004による算術操作のために、メモリ1010からレジスタ1006へ、データがロードされ得る。レジスタ1006は、例として、レジスタ1(r1)乃至レジスタN(rN)として個々にラベル付けされる。
メモリ1010は、様々な演算を実行するためのプログラム論理を有する1つまたは複数のソフトウェア・アプリケーション1014を含み得、オペレーティング・システム1020を含み得る。オペレーティング・システム1020は、リンカ1030(たとえば、静的リンカ)およびコンパイラ1040を含み得る。メモリ1010はまた、1つまたは複数の共有ライブラリ(たとえば、ローカルなモジュール)1050、または1つまたは複数の共有ライブラリ(たとえば、外部のモジュール)1060、あるいはその両方を含み得る。
1つの実施形態では、プロセッサ1002は、インターナショナル・ビジネス・マシーンズ社によって販売されているPower Architectureに基づく。Power Architectureの1つの実施形態は、"Power ISATM Version 2.07B," International Business Machines Corporation, April 9, 2015に説明されており、その全体が参照により本明細書に組み込まれる。一例では、プロセッサはまた、インターナショナル・ビジネス・マシーンズ社によって販売されているAIXなどのオペレーティング・システムを実行する。Power ArchitectureおよびAIXは、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社の登録商標である。本明細書で使用されている他の名称は、インターナショナル・ビジネス・マシーンズ社または他の会社の登録商標、商標、または製品名であり得る。
別の例では、プロセッサ1002は、インターナショナル・ビジネス・マシーンズ社によって販売されているz/Architectureに基づいており、z/Architectureを実施し、やはりインターナショナル・ビジネス・マシーンズ社によって販売されているSystem z(R)サーバなどのサーバの一部である。z/Architectureの1つの実施形態は、IBM publication entitled, "z/Architecture Principles of Operation," IBM Publication No. SA22-7832-10, Eleventh Edition, March 2015に説明されており、その全体が参照により本明細書に組み込まれる。一例では、プロセッサは、やはりインターナショナル・ビジネス・マシーンズ社によって販売されているz/OSなどのオペレーティング・システムを実行する。IBM、Z/OS、およびZ/Architectureは、インターナショナル・ビジネス・マシーンズ社の登録商標である。
またさらなる実施形態では、プロセッサ1002は、インテル社によって販売されているインテル・アーキテクチャに基づく。インテルは、カリフォルニア州サンタクララのインテル社の登録商標である。さらにまた、プロセッサ1002は、他のアーキテクチャに基づき得る。本明細書において述べられたアーキテクチャ、サーバ、システム、またはオペレーティング・システム、あるいはその組合せは、単なる例として提供される。
1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の実施形態が、図18を参照して説明される。この例では、コンピューティング環境1100は、たとえば、ネイティブ中央処理装置1102と、メモリ1104と、たとえば、1つまたは複数のバス1108、または他の接続、あるいはその両方を介して互いに結合された1つまたは複数の入力/出力デバイス、またはインターフェース1106と、あるいはその組合せを含む。例として、コンピューティング環境1100は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社によって販売されているPowerPC(R)プロセッサ、zSeries(R)サーバ、またはpSeries(R)サーバ、カリフォルニア州パロアルトのヒューレット・パッカード社によって販売されているインテルItanium IIプロセッサを搭載したHP Superdome、または、インターナショナル・ビジネス・マシーンズ社、ヒューレット・パッカード社、インテル社、オラクル社、またはその他によって販売されているアーキテクチャに基づく他のマシン、あるいはその組合せを含み得る。
ネイティブ中央処理装置1102は、1つまたは複数の汎用レジスタ、または環境内での処理中に使用される1つまたは複数の専用レジスタ、あるいはその組合せ等の1つまたは複数のネイティブ・レジスタ1110を含む。これらのレジスタは、特定の時点における環境の状態を表す情報を含む。
さらに、ネイティブ中央処理装置1102は、メモリ1104に記憶されている命令およびコードを実行する。1つの特定の例では、中央処理装置は、メモリ1104に記憶されているエミュレータ・コード1112を実行する。このコードは、1つのアーキテクチャにおいて構成された処理環境が、別のアーキテクチャをエミュレートすることを可能にする。たとえば、エミュレータ・コード1112は、zSeriesサーバ、pSeriesサーバ、HP Superdomeサーバまたはその他などの、Power architecture以外のアーキテクチャに基づくマシンが、Power architectureをエミュレートし、Power architectureに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。さらなる例では、エミュレータ・コード1112は、PowerPCプロセッサ、pSeriesサーバ、HP Superdomeサーバまたはその他などのz/Architecture以外のアーキテクチャに基づくマシンが、z/Architectureをエミュレートし、z/Architectureに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。他のアーキテクチャもまたエミュレートされ得る。
エミュレータ・コード1112に関連するさらなる詳細が、図19を参照して説明される。メモリ1104に記憶されたゲスト命令1150は、ネイティブCPU1102のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された(たとえば、マシン命令に相関付けられた)ソフトウェア命令を含む。たとえば、ゲスト命令1150は、PowerPCプロセッサ、または、z/Architectureプロセッサ1002において実行するように設計され得るが、代わりに、たとえば、インテルItanium IIプロセッサであり得るネイティブCPU1102においてエミュレートされている。一例では、エミュレータ・コード1112は、メモリ1104から1つまたは複数のゲスト命令1150を取得し、オプションで、取得された命令のためのローカルなバッファリングを提供するための命令フェッチ・ルーチン1152を含む。エミュレータ・コード1112はまた、取得されたゲスト命令のタイプを判定し、ゲスト命令を1つまたは複数の対応するネイティブ命令1156に変換するための命令変換ルーチン1154を含む。この変換は、たとえば、ゲスト命令によって実行されるべきファンクションを識別することと、そのファンクションを実行するためのネイティブ命令を選択することとを含む。
さらに、エミュレータ・コード1112は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン1160を含む。エミュレーション制御ルーチン1160は、ネイティブCPU1102に、以前に取得された1つまたは複数のゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令、または、ゲスト命令のグループの取得をエミュレートするために、命令フェッチ・ルーチンに制御を戻し得る。ネイティブ命令1156の実行は、メモリ1104からレジスタにデータをロードすること、レジスタからデータをメモリに記憶し戻すこと、または、変換ルーチンによって判定されたように、ある種の算術演算または論理演算を実行することを含み得る。
各ルーチンは、たとえば、メモリに記憶され、ネイティブ中央処理装置1102によって実行される、ソフトウェアにおいて実施される。他の例では、ルーチンまたは演算の1つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらのある組合せで実施される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ1110を使用して、または、メモリ1104内の位置を使用することによって、エミュレートされ得る。実施形態では、ゲスト命令1150、ネイティブ命令1156、およびエミュレータ・コード1112は、同じメモリ内に存在し得るか、または異なるメモリ・デバイス間で分散され得る。
本明細書で使用されるように、ファームウェアは、たとえば、プロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはその組合せを含む。ファームウェアは、たとえば、より高いレベルのマシンコードの実施において使用されるハード・ウェアレベルの命令、またはデータ構造、あるいはその両方を含む。1つの実施形態では、ファームウェアは、たとえば、信頼できるソフトウェアを含むマイクロコード、または基盤となるハードウェアに特有のマイクロコードとして、通常配信される独自のコードを含み、システム・ハードウェアへのオペレーティング・システム・アクセスを制御する。
一例では、ゲスト命令1150が取得され、変換され、実行される。1つのアーキテクチャ(たとえば、Power Architectureまたはz/Architecture)である命令は、メモリからフェッチされ、別のアーキテクチャ(たとえば、z/Architecture、Power Architecture、インテルarchitecture等)のネイティブ命令1156のシーケンスとして変換され表される。その後、これらのネイティブ命令が実行される。
1つまたは複数の態様は、クラウド・コンピューティングに関連し得る。
この開示は、クラウド・コンピューティングに関する詳細な説明を含むが、本明細書に記載された教示の実施は、クラウド・コンピューティング環境に限定されないことが事前に理解されている。むしろ、本発明の実施形態は、現在知られているかまたは後に開発される他の任意のタイプのコンピューティング環境と連携して実施されることが可能である。
クラウド・コンピューティングは、設定可能なコンピューティング・リソース(たとえば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシン、およびサービス)の共有プールへの、利便性の高い、オンデマンドのネットワーク・アクセスを可能にするサービス配信のモデルであり、最小限の管理作業またはサービスのプロバイダとのインタラクションで、迅速にプロビジョンおよびリリースされ得る。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つの展開モデルを含み得る。
特徴は以下の通りである。
オンデマンド・セルフサービス:クラウド・コンシューマは、サービスのプロバイダとの人的なインタラクションを必要とせずに、必要に応じて自動的に、サーバ時間やネットワーク記憶装置などのコンピューティング能力を一方的にプロビジョンし得る。
広範なネットワーク・アクセス:能力は、ネットワークを介して利用可能であり、異種のシンまたはシック・クライアント・プラットフォーム(たとえば、モバイル電話、ラップトップ、およびPDA)による使用を促進する標準的なメカニズムを介してアクセスされる。
リソース・プール:プロバイダのコンピューティング・リソースは、マルチテナント・モデルを使用して多数のコンシューマにサービス提供するためにプールされ、異なる物理リソースおよび仮想リソースは、要求にしたがって動的に割り当てられ、再割り当てされる。コンシューマは一般に、提供されたリソースの正確な位置に関して制御も知識も持たないが、より高い抽象化レベル(たとえば、国、州、またはデータセンタ)における位置を特定することができ得るという点で位置独立性の意味がある。
迅速な弾力性:能力は、迅速かつ弾力的にプロビジョンされ、場合によっては自動的に、直ちにスケール・アウトし、迅速にリリースして直ちにスケール・インすることができる。コンシューマにとって、プロビジョニングのために利用可能な能力は、しばしば、無制限であるように見え、常時、任意の量が購入可能であり得る。
測定サービス:クラウド・システムは、サービスのタイプ(たとえば、記憶装置、処理、帯域幅、およびアクティブ・ユーザ・アカウント)に適した抽象化レベルでメータリング能力を利用することで、リソースの使用を、自動的に制御および最適化する。リソース使用量が、監視、制御、および報告され、利用されたサービスのプロバイダとコンシューマとの両方のための透明性を提供する。
サービス・モデルは、以下の通りである。
サービスとしてのソフトウェア(SaaS:Software as a Service):コンシューマに提供される能力は、クラウド・インフラストラクチャにおいて実行しているプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ(たとえば、ウェブベースの電子メール)などのシン・クライアント・インターフェースを介して、様々なクライアント・デバイスからアクセス可能である。コンシューマは、ユーザ特有のアプリケーション・コンフィギュレーション設定が制限されているという例外はあるものの、ネットワーク、サーバ、オペレーティング・システム、記憶装置、さらには個々のアプリケーション能力を含む基盤となるクラウド・インフラストラクチャを、管理または制御しない。
サービスとしてのプラットフォーム(PaaS:Platform as a Service):コンシューマに提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して生成された、コンシューマが生成または取得したアプリケーションを、クラウド・インフラストラクチャに展開することである。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、または記憶装置を含む、基盤となるクラウド・インフラストラクチャを管理または制御しないが、展開されたアプリケーション、および場合によっては、環境コンフィギュレーションをホストするアプリケーションに対する制御を有する。
サービスとしてのインフラストラクチャ(IaaS:Infrastructure as a Service):コンシューマに提供される能力は、コンシューマが、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアを展開および実行することができる処理、記憶装置、ネットワーク、および他の基本的なコンピューティング・リソースをプロビジョンすることである。コンシューマは、基盤となるクラウド・インフラストラクチャを管理または制御しないが、オペレーティング・システム、記憶装置、展開されたアプリケーションに対する制御を、および場合によっては、選択されたネットワーキング構成要素(たとえば、ホスト・ファイアウォール)の制限された制御を有する。
展開モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャが、組織のために専用に運営される。プライベート・クラウドは、組織またはサード・パーティによって管理され得、オン・プレミスまたはオフ・プレミスに存在し得る。
コミュニティ・クラウド:クラウド・インフラストラクチャが、いくつかの組織によって共有され、共有された問題(たとえば、ミッション、セキュリティ要件、ポリシ、およびコンプライアンス考慮事項)を有する特有のコミュニティをサポートする。コミュニティ・クラウドは、組織またはサード・パーティによって管理され得、オン・プレミスまたはオフ・プレミスに存在し得る。
公衆クラウド:クラウド・インフラストラクチャが、一般の公衆または大規模な業界グループによって利用可能とされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティを残しているが、データとアプリケーションの可搬性を可能にする標準化された、または独自の技術によってともに結合されている2つ以上のクラウド(プライベート、コミュニティ、または公衆)の合成である(たとえば、クラウド間のロードバランシングのためのクラウド・バースティング)。
クラウド・コンピューティング環境は、ステートレス性、低結合、モジュール性、およびセマンティック相互運用性を中心に指向されたサービスである。クラウド・コンピューティングの中心にあるものは、相互接続されたノードのネットワークを含むインフラストラクチャである。
図20を参照すると、クラウド・コンピューティング・ノードの例の概略図が図示されている。クラウド・コンピューティング・ノード10は、適切なクラウド・コンピューティング・ノードの単なる一例に過ぎず、本明細書において説明された本発明の実施形態の使用または機能性の範囲に関して、いかなる限定を示唆することも意図されていない。それにも関わらず、クラウド・コンピューティング・ノード10は、上述した機能性のうちのいずれかを、実施または実行、あるいはその両方を行うことが可能である。
クラウド・コンピューティング・ノード10には、他の多数の汎用または専用のコンピューティング・システム環境またはコンフィギュレーションで動作可能であるコンピュータ・システム/サーバ12が存在する。コンピュータ・システム/サーバ12と共に使用するのに適切であり得る周知のコンピューティング・システム、環境、またはコンフィギュレーション、あるいはその組合せの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラマブル家電製品、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および、上記のシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境等を含むが、これらに限定されない。
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行されるプログラム・モジュールなどのコンピュータ・システムで実行可能な命令の一般的なコンテキストで説明され得る。一般に、プログラム・モジュールは、特定のタスクを実行する、または、特定の抽象的なデータ・タイプを実施する、ルーチン、プログラム、オブジェクト、構成要素、ロジック、データ構造等を含み得る。コンピュータ・システム/サーバ12は、通信ネットワークを介してリンクされているリモート処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境で実現され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ記憶デバイスを含むローカルおよびリモートの両方のコンピュータ・システム記憶媒体に配置され得る。
図20に図示されるように、クラウド・コンピューティング・ノード10内のコンピュータ・システム/サーバ12が、汎用コンピューティング・デバイスの形態で図示される。コンピュータ・システム/サーバ12の構成要素は、1つまたは複数のプロセッサまたは処理ユニット16、システム・メモリ28、およびシステム・メモリ28を含む様々なシステム構成要素をプロセッサ16に結合するバス18を含み得るが、これらに限定されない。
バス18は、様々なバス・アーキテクチャのいずれかを使用する、メモリ・バスまたはメモリ・コントローラ、周辺バス、加速グラフィックス・ポート、および、プロセッサまたはローカル・バスを含む、いくつかのタイプのバス構造のいずれかのうちの1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロ・チャネル・アーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス規格協会(VESA)ローカル・バス、および周辺機器相互接続(PCI)バスを含む。
コンピュータ・システム/サーバ12は、典型的には、様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12によってアクセス可能な任意の利用可能な媒体であり得、揮発性および不揮発性の媒体、リムーバブルおよび非リムーバブルな媒体の両方を含む。
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30、またはキャッシュ・メモリ32、あるいはその両方などの揮発性メモリの形態のコンピュータ・システム可読媒体を含み得る。コンピュータ・システム/サーバ12はさらに、他のリムーバブル/非リムーバブル、揮発性/不揮発性のコンピュータ・システム記憶媒体を含み得る。単なる一例として、記憶システム34は、非リムーバブルな不揮発性磁気媒体(図示されず、一般に、「ハード・ドライブ」と呼ばれる)との読出および書込のために提供され得る。図示されていないが、リムーバブルな不揮発性磁気ディスク(たとえば「フロッピー・ディスク」)との読出および書込のための磁気ディスク・ドライブと、CD−ROM、DVD−ROM、または他の光学媒体などのリムーバブルな不揮発性光ディスクとの読出および書込のための光学ディスク・ドライブとが提供され得る。そのような事例では、各々が、1つまたは複数のデータ媒体インターフェースによってバス18に接続され得る。以下にさらに描写され説明されるように、メモリ28は、本発明の実施形態のファンクションを実行するように構成されたプログラム・モジュールのセット(たとえば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含み得る。
プログラム・モジュール42のセット(少なくとも1つ)を有するプログラム/ユーティリティ40は、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、限定ではなく例として、メモリ28に記憶され得る。オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはこれらのいずれかの組合せの各々は、ネットワーキング環境の実施を含み得る。プログラム・モジュール42は、一般に、本明細書において説明された本発明の実施形態のファンクション、または方法、あるいはその両方を実行する。
コンピュータ・システム/サーバ12はまた、キーボード、ポインティング・デバイス、ディスプレイ24等などの1つまたは複数の外部のデバイス14、ユーザがコンピュータ・システム/サーバ12とインタラクトすることを可能にする1つまたは複数のデバイス、またはコンピュータ・システム/サーバ12が1つまたは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(たとえば、ネットワーク・カード、モデム等)、あるいはその組合せと通信し得る。そのような通信は、入力/出力(I/O)インターフェース22を介して生じ得る。それでもなお、コンピュータ・システム/サーバ12は、ネットワーク・アダプタ20を介して、ローカル・エリア・ネットワーク(LAN)、一般的な広域ネットワーク(WAN)、または公衆ネットワーク(たとえば、インターネット)などの1つまたは複数のネットワーク、あるいはその組合せと通信し得る。描写されるように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12の他の構成要素と通信する。図示されていないが、他のハードウェア、またはソフトウェア構成要素、あるいはその両方が、コンピュータ・システム/サーバ12と連携して使用され得ることを理解されたい。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部のディスク・ドライブアレイ、RAIDシステム、テープ・ドライブ、および、データ・アーカイブ記憶システム等を含むが、これらに限定されない。
図21を参照すると、例示的なクラウド・コンピューティング環境50が描写されている。図示されるように、クラウド・コンピューティング環境50は、1つまたは複数のクラウド・コンピューティング・ノード10を含み、これを用いて、たとえば、携帯情報端末(PDA)またはセルラ電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組合せなどのクラウド・コンシューマによって使用されるローカル・コンピューティング・デバイスが通信し得る。ノード10は、互いに通信し得る。ノード10は、上記で説明したように、プライベート、コミュニティ、公衆、またはハイブリッドのクラウドなどの1つまたは複数のネットワーク、またはこれらの組合せにおいて、物理的または仮想的にグループ化(図示せず)され得る。これにより、クラウド・コンピューティング環境50は、クラウド・コンシューマが、ローカル・コンピューティング・デバイスにおいてリソースを維持する必要がないサービスとして、インフラストラクチャ、プラットフォーム、またはソフトウェア、あるいはその組合せを販売することが可能となる。図21に図示されるコンピューティング・デバイス54A〜54Nのタイプは、例示のみを意図しており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意のタイプのネットワーク、またはネットワーク・アドレス指定可能な接続、あるいはその両方を介して(たとえば、ウェブ・ブラウザを使用して)任意のタイプのコンピュータ化されたデバイスと通信でき得ることが理解される。
図22を参照すると、クラウド・コンピューティング環境50(図21)によって提供される機能的抽象化層のセットが図示される。図22に図示される構成要素、層、およびファンクションは、例示のみを意図しており、本発明の実施形態はそれに限定されないことを事前に理解されたい。描写されるように、以下の層および対応するファンクションが提供される。
ハードウェアおよびソフトウェア層60は、ハードウェアおよびソフトウェア構成要素を含む。ハードウェア構成要素の例は、メインフレーム61、RISC(縮小命令セット・コンピュータ)アーキテクチャ・ベースのサーバ62、サーバ63、ブレード・サーバ64、記憶デバイス65、および、ネットワークおよびネットワーキング構成要素66を含む。いくつかの実施形態では、ソフトウェア構成要素は、ネットワーク・アプリケーションサーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化層70は、抽象化層を提供し、ここから、仮想エンティティの以下の例、すなわち、仮想サーバ71、仮想記憶装置72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーション、およびオペレーティング・システム74、ならびに仮想クライアント75が提供され得る。
一例では、管理層80は、以下に説明されるファンクションを提供し得る。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソースおよび他のリソースの動的プロキュアメントを提供する。メータリングおよび価格設定82は、クラウド・コンピューティング環境内でリソースが利用されるときのコスト追跡、およびこれらのリソースの消費に対する課金または請求を提供する。一例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、クラウド・コンシューマおよびタスクの身元確認のみならず、データおよび他のリソースの保護を提供する。ユーザ・ポータル83は、コンシューマおよびシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理84は、必要なサービス・レベルが満たされるように、クラウド・コンピューティング・リソース割当および管理を提供する。サービス・レベル合意(SLA)計画および履行85は、SLAにしたがって将来の要件が予想されるクラウド・コンピューティング・リソースの事前手配およびプロキュアメントを提供する。
ワークロード層90は、クラウド・コンピューティング環境が利用され得るファンクションの例を提供する。この層から提供され得る作業負荷およびファンクションの例は、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育配信93、データ分析処理94、トランザクション処理95、およびシブリング処理96を含む。
本発明は、任意の可能な技術的な詳細な統合レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し、記憶することができる有形のデバイスであり得る。コンピュータ可読記憶媒体は、たとえば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の適切な組合せであり得るが、これらに限定されない。コンピュータ可読記憶媒体のさらなる具体例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取専用メモリ(ROM)、消去可能プログラマブル読取専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読取専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカード、または記録された命令を有する溝の中の隆起構造などの機械的に符号化されたデバイス、および、前述したものの任意の適切な組合せを含む。本明細書で使用されるコンピュータ可読記憶媒体は、電波または他の自由に伝播する電磁波、導波路または他の伝送媒体を伝播する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、または、ワイヤを介して送信される電気信号のように、それ自体が一時的な信号であると解釈されるべきではない。
本明細書で説明されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスへ、または、たとえば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、あるいはその組合せといったネットワークを介して、外部のコンピュータまたは外部の記憶デバイスへダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令と、命令セット・アーキテクチャ(ISA)命令と、マシン命令と、マシン依存命令と、マイクロコードと、ファームウェア命令と、状態設定データと、集積回路構造のためのコンフィギュレーション・データと、または、Smalltalk、C++等のようなオブジェクト指向プログラミング言語、および、「C」プログラミング言語または類似のプログラミング言語などの手続型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードのいずれかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータにおいて、部分的にユーザのコンピュータにおいて、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータにおいて、部分的にリモート・コンピュータにおいて、または完全にリモート・コンピュータまたはサーバにおいて実行し得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータへ接続され得るか、または、(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部のコンピュータへの接続がなされ得る。いくつかの実施形態において、たとえば、プログラマブル・ロジック回路構造、フィールド・プログラマブル・ゲートアレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路構造は、本発明の態様を実行するために、電子回路構造をパーソナル化するコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
本発明の態様は、本発明の実施形態にしたがう方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート例示、またはブロック図、あるいはその両方を参照して本明細書に説明される。フローチャート例示、またはブロック図、あるいはその両方の各ブロック、およびフローチャート例示、またはブロック図、あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されよう。
これらのコンピュータ可読プログラム命令は、マシンを生成するために、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサへ提供され得、これによって、これら命令が、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行した場合、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定されたファンクション/動作を実施するための手段を生成できるようになる。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはその組合せを、特定の方式で機能するように指示し得るコンピュータ可読記憶媒体に記憶され得、これによって、記憶されている命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定されたファンクション/動作の態様を実施する命令を含む製品を含むようになる。
コンピュータ可読プログラム命令はまた、コンピュータによって実施される処理を生成するために、一連の動作ステップが、コンピュータ、他のプログラマブル装置、または、他のデバイスにおいて実行されるようにするために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスへロードされ、これによって、コンピュータ、他のプログラマブル装置、または他のデバイスにおいて実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定されたファンクション/動作を実行できるようになる。
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態にしたがうシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、および操作を例示する。これに関して、フローチャートまたはブロック図における各ブロックは、指定された論理ファンクションを実施するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。いくつかの代替実装形態では、ブロックにおいて注目されるファンクションは、図面に書かれている順序と異なって行われ得る。たとえば、連続して図示されている2つのブロックは、実際には、実質的に同時に実行され得るか、または、これらブロックは、関連する機能に依存して、時には逆の順序で実行され得る。ブロック図、またはフローチャート例示あるいはその両方の各ブロック、および、ブロック図、またはフローチャート例示あるいはその両方におけるブロックの組合せは、指定されたファンクションまたは動作を実行する、または、専用のハードウェアとコンピュータ命令との組合せを実行する専用のハードウェア・ベースのシステムによって実施され得ることも留意されたい。
上記に加えて、1つまたは複数の態様は、たとえば、カスタマ環境の管理を提案するサービス・プロバイダによって提供、販売、展開、管理、サービス等なされ得る。たとえば、サービス・プロバイダは、1つまたは複数のカスタマのために1つまたは複数の態様を実行するコンピュータ・コード、またはコンピュータ・インフラストラクチャ、あるいはその両方を生成、維持、サポート等し得る。見返りに、サービス・プロバイダは、例として、購読契約中、または手数料契約中、あるいはその両方のカスタマから、支払いを受け取り得る。それに加えて、または、その代わりに、サービス・プロバイダは、1つまたは複数のサード・パーティへの広告コンテンツの販売からの支払いを受け取り得る。
1つの態様では、アプリケーションは、1つまたは複数の実施形態を実行するために展開され得る。例として、アプリケーションの展開は、1つまたは複数の実施形態を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
さらなる態様として、コンピュータ可読コードをコンピューティング・システムへ統合することを含むコンピューティング・インフラストラクチャが展開され得、ここでは、コンピューティング・システムと組み合わされたコードが、1つまたは複数の実施形態を実行することができる。
またさらなる態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピューティング・インフラストラクチャを統合するための処理が提供され得る。コンピュータ・システムは、コンピュータ可読媒体を含み、コンピュータ媒体は、1つまたは複数の実施形態を含む。コンピュータ・システムと組み合わされたコードは、1つまたは複数の実施形態を実行することができる。
様々な実施形態が上記で説明されているが、これらは単なる一例である。たとえば、1つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令フォーマット、命令フィールド、または命令値、あるいはその組合せが使用され得る。多くの変形が可能である。
さらに、コンピューティング環境の他のタイプの恩恵を受けることができ、かつ使用することができる。例として、システム・バスを介してメモリ素子に直接的または間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードを記憶、または実行、あるいはその両方のために適切なデータ処理システムが使用可能である。メモリ素子は、たとえば、プログラム・コードの実際の実行中に適用されるローカル・メモリと、大容量記憶装置と、実行中にコードが大容量記憶装置から検索されねばならない回数を低減するために、少なくともいくつかのプログラム・コードの一時的な記憶装置を提供するキャッシュ・メモリとを含む。
入力/出力、または、(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、および他のメモリ媒体等を含むが、これらに限定されない)I/Oデバイスが、直接的に、または、介在するI/Oコントローラを介して、システムへ結合され得る。ネットワーク・アダプタをシステムに結合して、介在するプライベート・ネットワークまたは公衆ネットワークを介して、データ処理システムを他のデータ処理システムまたはリモート・プリンタまたは記憶デバイスに結合することもできる。モデム、ケーブル・モデム、およびイーサネット(R)・カードは、利用可能なタイプのネットワーク・アダプタの単なる一部である。
本明細書で使用される用語は、特定の実施形態を説明する目的のみのためであり、限定することは意図されていない。本明細書で使用されるように、単数形「a」、「an」、および「the」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことが意図されている。本明細書で使用される場合、「含む」、または「含んでいる」、あるいはその両方の用語は、記述された特徴、整数、ステップ、演算、要素、または構成要素、あるいはその組合せの存在を特定するが、1つまたは複数の他の特徴、整数、ステップ、演算、要素、構成要素、またはこれらのグループ、あるいはその組合せの存在または追加を排除しないことをさらに理解されたい。
以下の特許請求の範囲における対応する構造、材料、動作、およびすべての手段またはステップにファンクション要素を加えた均等物は、具体的に特許請求されているように、特許請求された他の要素と組み合わせてファンクションを実行するための構造、材料、または動作を含むことが意図される。1つまたは複数の実施形態の説明は、例示および説明を目的として提示されているが、網羅的であること、または、開示された形態に限定されることも意図されていない。多くの変更および変形が、当業者に明らかになるであろう。本実施形態は、様々な態様および実用的用途を最も良く説明し、企図される特定の用途に適した様々な変更を加えた様々な実施形態を当業者が理解できるようにするために選択および説明された。

Claims (20)

  1. コンピューティング環境における処理を容易にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
    処理回路によって読取可能であり、方法を実行するために前記処理回路による実行のための命令を記憶したコンピュータ可読記憶媒体を含み、前記方法は、
    ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、
    前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定したことに基づいて、前記ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む、コンピュータ・プログラム
  2. 前記マーク付けすることは、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを前記コンピューティング環境のプロセッサにおいて実行しているリンカに示すための擬似命令を前記ルーチンへ加えることを含む、請求項1に記載のコンピュータ・プログラム
  3. 前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカを、シンボル・テーブル内に設定することを含む、請求項2に記載のコンピュータ・プログラム
  4. 前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することを含む、請求項2に記載のコンピュータ・プログラム
  5. 前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すためのマーカを、前記ルーチンのシンボル・データ構造へ追加することを含む、請求項1ないし4のいずれかに記載のコンピュータ・プログラム
  6. 前記マーク付けすることは、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することを含む、請求項1ないし5のいずれかに記載のコンピュータ・プログラム
  7. 前記方法はさらに、
    前記コンピューティング環境のプロセッサにおいて実行しているリンカによって、前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていることを判定することと、
    前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていると判定することに基づいて、前記ルーチンの呼び出し元へ戻る前記ルーチンによってコールされた外部のシブリング・ルーチンに基づいて使用されるべきコンテキストを提供することとを含む、請求項1ないし6のいずれかに記載のコンピュータ・プログラム
  8. 前記コンテキストは、グローバル・オフセット・テーブルを復元するための情報を含む、請求項7に記載のコンピュータ・プログラム
  9. 前記ルーチンは、1つのモジュール内にあり、前記1つのモジュール内の呼び出し側のルーチンによってコールされる、請求項1ないし8のいずれかに記載のコンピュータ・プログラム
  10. 前記ルーチンは、1つのモジュール内にあり、別のモジュール内の呼び出し側のルーチンによってコールされる、請求項1ないし9のいずれかに記載のコンピュータ・プログラム
  11. 前記判定することおよび前記マーク付けすることは、コンパイラによって実行される、請求項1ないし10のいずれかに記載のコンピュータ・プログラム
  12. コンピューティング環境における処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムは、
    メモリと、
    前記メモリと通信するプロセッサとを含み、
    前記コンピュータ・システムは、方法を実行するように構成され、前記方法は、
    ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、
    前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定したことに基づいて、前記ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む、コンピュータ・システム。
  13. 前記マーク付けすることは、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを前記コンピューティング環境のプロセッサにおいて実行しているリンカに示すための擬似命令を前記ルーチンへ加えることを含む、請求項12に記載のコンピュータ・システム。
  14. 前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカを、シンボル・テーブル内に設定することを含む、請求項13に記載のコンピュータ・システム。
  15. 前記方法はさらに、前記擬似命令に基づいて、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することを含む、請求項13に記載のコンピュータ・システム。
  16. 前記方法はさらに、
    前記コンピューティング環境のプロセッサにおいて実行しているリンカによって、前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていることを判定することと、
    前記ルーチンが前記外部のシブリング・コーラとしてマーク付けされていると判定することに基づいて、前記ルーチンの呼び出し元へ戻る前記ルーチンによってコールされた外部のシブリング・ルーチンに基づいて使用されるべきコンテキストを提供することとを含む、請求項12ないし15のいずれかに記載のコンピュータ・システム。
  17. コンピューティング環境における処理を容易にするコンピュータによって実施される方法であって、
    ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があるか否かを判定することと、
    前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があると判定したことに基づいて、前記ルーチンを外部のシブリング・コーラとしてマーク付けすることとを含む、コンピュータによって実施される方法。
  18. 前記マーク付けすることは、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを前記コンピューティング環境のプロセッサにおいて実行しているリンカに示すための擬似命令を前記ルーチンへ加えることを含む、請求項17に記載のコンピュータによって実施される方法。
  19. 前記擬似命令に基づいて、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すマーカを、シンボル・テーブル内に設定することをさらに含む、請求項18に記載のコンピュータによって実施される方法。
  20. 前記擬似命令に基づいて、前記ルーチンが1つまたは複数の外部のシブリング・ルーチンをコールする可能性があることを示すため、前記ルーチンに関連付けられた再配置エントリを提供することをさらに含む、請求項18に記載のコンピュータによって実施される方法。
JP2019527553A 2016-12-14 2017-11-16 シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法 Active JP6951442B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/378,211 US10152338B2 (en) 2016-12-14 2016-12-14 Marking external sibling caller routines
US15/378,211 2016-12-14
PCT/IB2017/057170 WO2018109581A1 (en) 2016-12-14 2017-11-16 Processing sibling calls

Publications (2)

Publication Number Publication Date
JP2020503597A JP2020503597A (ja) 2020-01-30
JP6951442B2 true JP6951442B2 (ja) 2021-10-20

Family

ID=62489156

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019527553A Active JP6951442B2 (ja) 2016-12-14 2017-11-16 シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法

Country Status (6)

Country Link
US (2) US10152338B2 (ja)
JP (1) JP6951442B2 (ja)
CN (1) CN110140108B (ja)
DE (1) DE112017005015T5 (ja)
GB (1) GB2571498A (ja)
WO (1) WO2018109581A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10241769B2 (en) 2016-12-14 2019-03-26 International Business Machines Corporation Marking sibling caller routines
US10152338B2 (en) * 2016-12-14 2018-12-11 International Business Machines Corporation Marking external sibling caller routines
US10180827B2 (en) 2016-12-14 2019-01-15 International Business Machines Corporation Suppressing storing of context information
US20180165073A1 (en) 2016-12-14 2018-06-14 International Business Machines Corporation Context information based on type of routine being called
US10235190B2 (en) 2016-12-14 2019-03-19 International Business Machines Corporation Executing instructions to store context information based on routine to be executed

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5182807A (en) 1987-12-18 1993-01-26 Nec Corporation Assembler system for determining when to compile source code modules
US5428793A (en) 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
US6126329A (en) * 1993-06-08 2000-10-03 Rational Software Coporation Method and apparatus for accurate profiling of computer programs
CN1126523A (zh) * 1993-07-01 1996-07-10 英国电讯有限公司 为语言请求产生指令的系统
US5845118A (en) 1995-12-14 1998-12-01 International Business Machines Corporation Method for generating shared library executable code with lazy global offset table address calculation
US6553426B2 (en) * 1997-10-06 2003-04-22 Sun Microsystems, Inc. Method apparatus for implementing multiple return sites
WO2001023998A1 (en) 1999-09-24 2001-04-05 Phoenix Technologies Ltd. Software development system for facilitating selection of components
US6487713B1 (en) 1999-09-24 2002-11-26 Phoenix Technologies Ltd. Software development system that presents a logical view of project components, facilitates their selection, and signals missing links prior to compilation
US6647466B2 (en) 2001-01-25 2003-11-11 Hewlett-Packard Development Company, L.P. Method and apparatus for adaptively bypassing one or more levels of a cache hierarchy
US8473922B2 (en) 2001-09-19 2013-06-25 Hewlett-Packard Development Company, L.P. Runtime monitoring in component-based systems
US7430586B2 (en) 2002-04-16 2008-09-30 Zoran Corporation System and method for managing memory
US7890543B2 (en) * 2003-03-06 2011-02-15 Microsoft Corporation Architecture for distributed computing system and automated design, deployment, and management of distributed applications
JP4046100B2 (ja) * 2004-05-21 2008-02-13 株式会社デンソー 放熱装置
US7350034B2 (en) 2005-06-20 2008-03-25 International Business Machines Corporation Architecture support of best-effort atomic transactions for multiprocessor systems
KR101358750B1 (ko) * 2007-01-22 2014-02-06 삼성전자주식회사 관계형 데이터베이스를 이용한 프로그램 트레이스 방법
US8250551B2 (en) * 2008-01-17 2012-08-21 International Business Machines Corporation Refining tail call optimizations at link-time
US8239836B1 (en) 2008-03-07 2012-08-07 The Regents Of The University Of California Multi-variant parallel program execution to detect malicious code injection
US8621183B2 (en) * 2008-07-28 2013-12-31 Advanced Micro Devices, Inc. Processor with support for nested speculative sections with different transactional modes
US8495606B2 (en) * 2008-11-14 2013-07-23 Oracle America, Inc. Redundant exception handling code removal
US8443343B2 (en) * 2009-10-28 2013-05-14 Intel Corporation Context-sensitive slicing for dynamically parallelizing binary programs
US8839186B2 (en) 2009-11-05 2014-09-16 Sap Ag Entity morphing in metamodel-based tools
US8464230B2 (en) 2010-04-13 2013-06-11 Intel Corporation Methods and systems to implement non-ABI conforming features across unseen interfaces
US8375373B2 (en) * 2010-04-19 2013-02-12 Microsoft Corporation Intermediate language support for change resilience
US8881101B2 (en) 2011-05-24 2014-11-04 Microsoft Corporation Binding between a layout engine and a scripting engine
US9195443B2 (en) * 2012-01-18 2015-11-24 International Business Machines Corporation Providing performance tuned versions of compiled code to a CPU in a system of heterogeneous cores
US10055227B2 (en) * 2012-02-07 2018-08-21 Qualcomm Incorporated Using the least significant bits of a called function's address to switch processor modes
US9063759B2 (en) 2012-03-28 2015-06-23 International Business Machines Corporation Optimizing subroutine calls based on architecture level of called subroutine
GB2507758A (en) 2012-11-08 2014-05-14 Ibm Cache hierarchy with first and second level instruction and data caches and a third level unified cache
US10140210B2 (en) 2013-09-24 2018-11-27 Intel Corporation Method and apparatus for cache occupancy determination and instruction scheduling
US9569360B2 (en) 2013-09-27 2017-02-14 Facebook, Inc. Partitioning shared caches
US9021511B1 (en) * 2014-03-14 2015-04-28 International Business Machines Corporation Runtime management of TOC pointer save and restore commands
US9329875B2 (en) * 2014-04-28 2016-05-03 International Business Machines Corporation Global entry point and local entry point for callee function
US9274769B1 (en) 2014-09-05 2016-03-01 International Business Machines Corporation Table of contents pointer value save and restore placeholder positioning
US9146715B1 (en) * 2014-09-05 2015-09-29 International Business Machines Corporation Suppression of table of contents save actions
US9250881B1 (en) * 2014-09-30 2016-02-02 International Business Machines Corporation Selection of an entry point of a function having multiple entry points
US9354947B2 (en) * 2014-10-28 2016-05-31 International Business Machines Corporation Linking a function with dual entry points
US9244663B1 (en) * 2014-12-22 2016-01-26 International Business Machines Corporation Managing table of contents pointer value saves
US9544403B2 (en) 2015-02-02 2017-01-10 Linkedin Corporation Estimating latency of an application
US20160274878A1 (en) * 2015-03-19 2016-09-22 Google Inc. Methods and systems for removing plt stubs from dynamically linked binaries
US10180827B2 (en) 2016-12-14 2019-01-15 International Business Machines Corporation Suppressing storing of context information
US10235190B2 (en) 2016-12-14 2019-03-19 International Business Machines Corporation Executing instructions to store context information based on routine to be executed
US20180165073A1 (en) 2016-12-14 2018-06-14 International Business Machines Corporation Context information based on type of routine being called
US10152338B2 (en) 2016-12-14 2018-12-11 International Business Machines Corporation Marking external sibling caller routines
US10095493B2 (en) 2016-12-14 2018-10-09 International Business Machines Corporation Call sequence generation based on type of routine
US10241769B2 (en) 2016-12-14 2019-03-26 International Business Machines Corporation Marking sibling caller routines

Also Published As

Publication number Publication date
WO2018109581A1 (en) 2018-06-21
JP2020503597A (ja) 2020-01-30
CN110140108A (zh) 2019-08-16
US10152338B2 (en) 2018-12-11
US20180165102A1 (en) 2018-06-14
GB201908773D0 (en) 2019-07-31
GB2571498A (en) 2019-08-28
US20180165103A1 (en) 2018-06-14
US10140133B2 (en) 2018-11-27
CN110140108B (zh) 2023-04-07
DE112017005015T5 (de) 2019-07-25

Similar Documents

Publication Publication Date Title
JP6951442B2 (ja) シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法
US11016744B2 (en) Context information based on type of routine being called
US10481902B2 (en) Initialization status of a register employed as a pointer
US10949221B2 (en) Executing instructions to store context information based on routine to be executed
US10095493B2 (en) Call sequence generation based on type of routine
US10108442B1 (en) Optimization and affinity for hypervisor-based just-in-time translator
CN111095201B (zh) 响应于到子例程的分支而预测内容表指针值
US10241769B2 (en) Marking sibling caller routines
US10180827B2 (en) Suppressing storing of context information
JP2019506666A (ja) ハードウェア管理スタック・アーキテクチャにおける呼び出し元により保護されるスタック・リターンアドレス
US10732930B2 (en) Compiler controls for program language constructs
US10671386B2 (en) Compiler controls for program regions
JP6916874B2 (ja) 第1の値と第2の値の比較を行う命令のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータ実装方法
US10684853B2 (en) Employing prefixes to control floating point operations
US10481908B2 (en) Predicted null updated
US10740067B2 (en) Selective updating of floating point controls
KR102598930B1 (ko) 우측에서 좌측 방향으로 데이터를 이동시키기 위한 명령
JP2022521046A (ja) キー機能制御に基づくデータ移動および記憶キー設定

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190918

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200527

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210528

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210608

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210827

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210921

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210924

R150 Certificate of patent or registration of utility model

Ref document number: 6951442

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150