JP2023547070A - アプリケーションの実行を停止しない更新された共有ライブラリの再読み込み - Google Patents
アプリケーションの実行を停止しない更新された共有ライブラリの再読み込み Download PDFInfo
- Publication number
- JP2023547070A JP2023547070A JP2023524136A JP2023524136A JP2023547070A JP 2023547070 A JP2023547070 A JP 2023547070A JP 2023524136 A JP2023524136 A JP 2023524136A JP 2023524136 A JP2023524136 A JP 2023524136A JP 2023547070 A JP2023547070 A JP 2023547070A
- Authority
- JP
- Japan
- Prior art keywords
- shared library
- field
- resolved
- updating
- software program
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 53
- 230000004044 response Effects 0.000 claims abstract description 34
- 230000006870 function Effects 0.000 claims description 66
- 238000004590 computer program Methods 0.000 claims description 20
- 238000010586 diagram Methods 0.000 description 32
- 238000012545 processing Methods 0.000 description 17
- 230000003068 static effect Effects 0.000 description 13
- 230000008569 process Effects 0.000 description 10
- 230000008901 benefit Effects 0.000 description 7
- 238000012360 testing method Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 239000000203 mixture Substances 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 230000001902 propagating effect Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000012384 transportation and delivery Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 241000408529 Libra Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000011230 binding agent Substances 0.000 description 1
- 230000009172 bursting Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000013439 planning Methods 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Abstract
技術は、共有ライブラリに対する関数呼び出しを含んでいるソフトウェア・プログラムを実行し、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことを含む。関数呼び出しに関連付けられたリンク・アドレスを解決することに応答して、グローバル・オフセット・テーブル(GOT)が更新される。GOT内のエントリは、リンク・アドレス・フィールド、インデックス・フィールド、および解決済みフィールドを含み、更新することは、GOT内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることを含む。共有ライブラリを再び読み込むことに応答して、インデックス・フィールド内の肯定的値および解決済みフィールド内の肯定的フラグを含んでいるGOT内のエントリが検出される。共有ライブラリに対する関数呼び出しのその後の実行に応答して、インデックス・フィールドに肯定的値を含んでいるエントリのリンク・アドレス・フィールド内のアドレス値が返される。
Description
本発明は、一般に、コンピュータ・システムに関連しており、より詳細には、アプリケーションの実行を停止せずに更新された共有ライブラリの再読み込みを実行するためのコンピュータ・システム、コンピュータ実装方法、およびコンピュータ・プログラム製品に関連している。
コンピューティングでは、位置独立コードまたは位置独立実行ファイルが、機械語の本体であり、一次メモリ内のどこかに配置され、その絶対アドレスにかかわらず、適切に実行される。絶対アドレスという用語は、先頭からのバイト数に関する、実際のストレージ内の物理的に固定された位置、またはディスク、セクタ、およびバイトに関する、周辺機器内の物理的に固定された位置を識別する数値のことを指す。位置独立コードは、一般に、同じライブラリ・コードが、メモリのどの他の使用(例えば、他の共有ライブラリ)とも重複しない各プログラムのアドレス空間内のある位置に読み込まれ得るように、共有ライブラリに使用される。共有ライブラリまたは共有オブジェクトは、実行ファイルおよびさらなる共有オブジェクト・ファイルによって共有されるよう意図されたファイルである。プログラムによって使用されるモジュールは、プログラムの単一のモノリシックな実行ファイルを作成するときに、リンカによってコピーされるのではなく、読み込み時または実行時に、個別の共有オブジェクトからメモリに読み込まれる。特に、共有ライブラリは、プログラムの開始時にプログラムによって読み込まれるライブラリである。共有ライブラリが適切にインストールされた場合、その後に開始するすべてのプログラムは、新しい共有ライブラリを自動的に使用する。共有ライブラリは、コンパイル時に静的にリンクされる(すなわち、実行ファイルが作成されるときに、ライブラリ・モジュールへの参照が解決され、モジュールにメモリが割り当てられる)か、または後で動的にリンクされ得る。
共有ライブラリを使用する場合、共有ライブラリが更新されるときに、問題または課題が生じる可能性がある。例えば、プログラムが実行されているときに、共有ライブラリ内のソース・コードが更新されたか、使用されるコンパイル・オプションが変更されたか、または検索パスが変更されたか、あるいはその組み合わせが行われた場合、明確な独立したコードが使用されているとしても、問題がある可能性がある。そのような場合、ユーザは、更新された共有ライブラリを有効にするために、プログラムの実行またはデバッグを停止し、ソフトウェア・プログラムを再び読み込む必要がある。
本発明の実施形態は、アプリケーションの実行を停止せずに更新された共有ライブラリの再読み込みを実行することを対象にする。非限定的な例示的コンピュータ実装方法は、プロセッサによって、共有ライブラリに対する関数呼び出しを必要とするソフトウェア・プログラムを実行し、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことを含み、共有ライブラリは、ソフトウェア・プログラムの実行後に更新されている。コンピュータ実装方法は、関数呼び出しに関連付けられたリンク・アドレスを解決することに応答してグローバル・オフセット・テーブル(GOT:global offset table)を更新することを含み、
GOT内のエントリは、リンク・アドレス・フィールド、インデックス・フィールド、および解決済みフィールドを含み、更新することは、GOT内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることを含む。コンピュータ実装方法は、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことに応答して、インデックス・フィールド内の肯定的値および解決済みフィールド内の肯定的フラグを含んでいるGOT内のエントリを見つけることを含む。また、コンピュータ実装方法は、共有ライブラリに対する関数呼び出しのその後の実行に応答して、インデックス・フィールドに肯定的値を含んでいるエントリのリンク・アドレス・フィールド内のアドレス値を返すことを含む。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、GOTを更新する前に、リンク・アドレス・フィールドをデフォルト値に設定することを含むことができる。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、GOTを更新する前に、解決済みフィールドが肯定的値をすでに含んでいる場合、非肯定的値を使用して解決済みフィールドにマーク付けすることを含むことができる。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことが、更新されている共有ライブラリの新しいアドレスを解決することを含む場合を含むことができる。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、GOTを更新することが、リンク・アドレス・フィールド内のデフォルト値を新しいアドレスに置き換えることを含む場合を含むことができる。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、リンク・アドレス・フィールド内のアドレス値が、共有ライブラリの解決されている新しいアドレスである場合を含むことができる。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、共有ライブラリの再読み込みの前に、ソフトウェア・プログラムの実行中に、共有ライブラリに対する関数呼び出しのために、共有ライブラリが最初に読み込まれる場合を含むことができる。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、ソフトウェア・プログラム/アプリケーションの実行を停止せずに更新された共有ライブラリの再読み込みを実行することを含むことができる。
上記または下記で説明されている特徴のうちの1つまたは複数に加えて、または代替として、さらなる実施形態は、更新された共有ライブラリを再び読み込むことを考慮するために、新しいライブラリ・インデックス・フィールドおよび新しいアドレス解決済みフラグ・フィールドを使用してグローバル・オフセット・テーブルのサイズを拡張することを含むことができる。
非限定的な例示的システムは、コンピュータ可読命令を含んでいるメモリ、およびコンピュータ可読命令を実行するための1つまたは複数のプロセッサを含む。コンピュータ可読命令は、共有ライブラリに対する関数呼び出しを必要とするソフトウェア・プログラムを実行し、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことを含む動作を実行するように、1つまたは複数のプロセッサを制御し、共有ライブラリは、ソフトウェア・プログラムの実行後に更新されている。動作は、関数呼び出しに関連付けられたリンク・アドレスを解決することに応答してグローバル・オフセット・テーブル(GOT)を更新することを含み、GOT内のエントリは、リンク・アドレス・フィールド、インデックス・フィールド、および解決済みフィールドを含み、更新することは、GOT内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることを含む。動作は、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことに応答して、インデックス・フィールド内の肯定的値および解決済みフィールド内の肯定的フラグを含んでいるGOT内のエントリを見つけることを含む。また、動作は、共有ライブラリに対する関数呼び出しのその後の実行に応答して、インデックス・フィールドに肯定的値を含んでいるエントリのリンク・アドレス・フィールド内のアドレス値を返すことを含む。
非限定的な例は、プログラム命令が具現化されているコンピュータ可読ストレージ媒体を備えているコンピュータ・プログラム製品を含み、プログラム命令は、プロセッサによって実行可能であり、プロセッサに、共有ライブラリに対する関数呼び出しを必要とするソフトウェア・プログラムを実行することを含む動作を実行させる。動作は、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことを含み、共有ライブラリは、ソフトウェア・プログラムの実行後に更新されている。動作は、関数呼び出しに関連付けられたリンク・アドレスを解決することに応答してグローバル・オフセット・テーブル(GOT)を更新することを含み、GOT内のエントリは、リンク・アドレス・フィールド、インデックス・フィールド、および解決済みフィールドを含み、更新することは、GOT内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることを含む。動作は、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことに応答して、インデックス・フィールド内の肯定的値および解決済みフィールド内の肯定的フラグを含んでいるGOT内のエントリを見つけることを含む。また、動作は、共有ライブラリに対する関数呼び出しのその後の実行に応答して、インデックス・フィールドに肯定的値を含んでいるエントリのリンク・アドレス・フィールド内のアドレス値を返すことを含む。
非限定的な例は、共有ライブラリを呼び出すソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことを含んでいるコンピュータ実装方法を含む。コンピュータ実装方法は、共有ライブラリへのリンク・アドレスを解決することに応答して、グローバル・オフセット・テーブル(GOT)内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることを含む。コンピュータ実装方法は、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことに応答して、共有ライブラリの解決されたリンク・アドレスを含んでいるGOT内のエントリを見つけることを含む。
非限定的な例は、コンピュータ可読命令を含んでいるメモリ、およびコンピュータ可読命令を実行するための1つまたは複数のプロセッサを備えているシステムを含む。コンピュータ可読命令は、共有ライブラリを呼び出すソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことを含む動作を実行するように、1つまたは複数のプロセッサを制御する。動作は、共有ライブラリへのリンク・アドレスを解決することに応答して、グローバル・オフセット・テーブル(GOT)内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることを含む。動作は、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことに応答して、共有ライブラリの解決されたリンク・アドレスを含んでいるGOT内のエントリを見つけることを含む。
本発明の他の実施形態は、コンピュータ・システムおよびコンピュータ・プログラム製品において、前述の方法の特徴を実装する。
その他の技術的特徴および利点が、本発明の技術によって実現される。本発明の実施形態および態様は、本明細書において詳細に説明され、請求される対象の一部と見なされる。さらによく理解するために、詳細な説明および図面を参照すること。
本明細書に記載された権利の詳細は、本明細書の最後にある特許請求の範囲において具体的に指摘され、明確に請求される。本発明の実施形態の前述およびその他の特徴と長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
本発明の1つまたは複数の実施形態は、対象のプログラム/アプリケーションの実行を停止せずに更新された共有ライブラリの再読み込みを実行する。本発明の1つまたは複数の実施形態は、デバッガまたは他のツールがライブラリ再読み込み動作をトリガーした場合に、ソフトウェア・プログラム/アプリケーションによって呼び出された更新された動的ライブラリをシームレスに再び読み込むための技術を提供する。1つまたは複数の実施形態によれば、静的リンカが、新しいライブラリ・インデックス・フィールドおよび新しいアドレス解決済みフラグ・フィールドを使用してグローバル・オフセット・テーブル(GOT)項目のサイズを拡張するように構成される。デバッガまたは他のツールは、更新された動的ライブラリを再び読み込み、GOTのライブラリ・インデックス・フィールドをひと通り調べ、次に、前のアドレス解決済みフラグがTRUEである一致するGOT項目に格納されたリンク・アドレス(デフォルト値を使用する)および解決済みフラグ(デフォルト値を使用する)をリセットするように構成される。そのため、更新された共有ライブラリからアプリケーション・プログラミング・インターフェイス(API:application programming interface)が後で呼び出されるときに、リンク・アドレス・フィールド内のリセットされたリンク・アドレスが、ローダにリンク・アドレスを解決させる。本発明の1つまたは複数の実施形態は、更新された動的ライブラリのAPIを呼び出すソフトウェア・プログラム/アプリケーションの実行またはデバッグを停止せずに、更新された動的共有ライブラリを効果的に再び読み込む。したがって、この有益な技術は、ユーザが質問/要求/入力をより素早く効率的に解決するのに役立つだけでなく、より柔軟なテストまたはデバッグあるいはその両方を実行する方法もユーザに提供する。
1つまたは複数の実施形態は、アプリケーションが実行された後に、共有ライブラリ内のソース・コードが更新されたか、使用されるコンパイル・オプションが変更されたか、または検索パスが変更されたか、あるいはその組み合わせが行われた場合に、明確な独立したコードが使用されているとしても、ユーザが、更新された共有ライブラリを有効にするために、ソフトウェア・プログラム/アプリケーションの実行またはデバッグを停止して、ソフトウェア・プログラム/アプリケーションを再び読み込む必要があるという、現在の技術において発生する問題に対処する。ソフトウェア・プログラム/アプリケーションを停止する理由は、ソフトウェア・プログラム/アプリケーションの実行中に、異なるアドレスと共に更新された動的共有ライブラリが読み込まれた場合に、現在のローダがリンク・アドレスを有効に解決できないためである。プログラム/アプリケーションの開発およびバグの位置特定中のそのような頻繁な再起動動作は、開発者にとって厄介であり、特に、非常に複雑な(長い)ソース・コードを含むプログラム/アプリケーションの場合に、時間を浪費する。しかし、本発明の1つまたは複数の実施形態は、この状況に対処するための新しい革新的方法を提供し、それによって、実行中のプログラム/アプリケーションの実行またはデバッグを一時停止することも停止することもなく、更新された動的ライブラリをシームレスに再び読み込むための効果的な方法を導入する。
ここで図1を参照すると、本発明の1つまたは複数の実施形態に従って、コンピュータ・システム100が概して示されている。コンピュータ・システム100は、本明細書において説明されているように、さまざまな通信技術を利用する任意の数および組み合わせのコンピューティング・デバイスおよびネットワークを備えるか、または採用するか、あるいはその両方である、電子的コンピュータ・フレームワークであることができる。コンピュータ・システム100は、容易にスケーリング可能であり、拡張可能であり、モジュール式であり、異なるサービスに変化する能力、または他の機能とは無関係に、一部の機能を再構成する能力を有するようにすることができる。コンピュータ・システム100は、例えば、サーバ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、またはスマートフォンであってよい。一部の例では、コンピュータ・システム100は、クラウド・コンピューティング・ノードであってよい。コンピュータ・システム100は、コンピュータ・システムによって実行されているプログラム・モジュールなどの、コンピュータ・システムによって実行可能な命令との一般的な関連において説明されてよい。通常、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含んでよい。コンピュータ・システム100は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散クラウド・コンピューティング環境内で実践されてよい。分散クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカルおよびリモートの両方のコンピュータ・システム・ストレージ媒体に配置されてよい。
図1に示されているように、コンピュータ・システム100は、1つまたは複数の中央処理装置(CPU:central processing units)101a、101b、101cなど(総称して、または一般的に、プロセッサ101と呼ばれる)を含んでいる。プロセッサ101は、シングルコア・プロセッサ、マルチコア・プロセッサ、コンピューティング・クラスタ、または任意の数の他の構成であることができる。プロセッサ101は、処理回路とも呼ばれ、システム・バス102を介してシステム・メモリ103およびさまざまな他のコンポーネントに結合される。システム・メモリ103は、読み取り専用メモリ(ROM:read only memory)104およびランダム・アクセス・メモリ(RAM:random access memory)105を含むことができる。ROM104は、システム・バス102に結合され、コンピュータ・システム100の特定の基本機能を制御する基本入出力システム(BIOS:basic input/output system)または統合拡張可能ファームウェア・インターフェイス(UEFI:Unified Extensible Firmware Interface)のようなその後継を含んでよい。RAMは、プロセッサ101で使用するためにシステム・バス102に結合された読み取り書き込みメモリである。システム・メモリ103は、動作中の前述の命令の動作のための一時的メモリ空間を提供する。システム・メモリ103は、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ、フラッシュ・メモリ、または任意の他の適切なメモリ・システムを含むことができる。
コンピュータ・システム100は、システム・バス102に結合された入出力(I/O:input/output)アダプタ106および通信アダプタ107を備えている。I/Oアダプタ106は、ハード・ディスク108または任意の他の類似するコンポーネントあるいはその両方と通信する小型コンピュータ・システム・インターフェイス(SCSI:small computer system interface)アダプタであってよい。I/Oアダプタ106およびハード・ディスク108は、本明細書では、マス・ストレージ110と総称される。
コンピュータ・システム100上で実行するためのソフトウェア111は、マス・ストレージ110に格納されてよい。マス・ストレージ110は、プロセッサ101によって読み取り可能な有形のストレージ媒体の例であり、ソフトウェア111は、プロセッサ101による実行のための命令として格納され、コンピュータ・システム100に、さまざまな図に関して本明細書において以下で説明されているように動作させる。本明細書では、コンピュータ・プログラム製品およびそのような命令の実行の例がさらに詳細に説明される。通信アダプタ107は、システム・バス102を、外部のネットワークであってよいネットワーク112と相互接続し、コンピュータ・システム100が他のそのようなシステムと通信できるようにする。1つの実施形態では、システム・メモリ103およびマス・ストレージ110の一部は、図1に示されたさまざまなコンポーネントの機能を調整するために、任意の適切なオペレーティング・システムであってよいオペレーティング・システムを集合的に格納する。
ディスプレイ・アダプタ115およびインターフェイス・アダプタ116を介してシステム・バス102に接続されているように、その他の入出力デバイスが示されている。1つの実施形態では、アダプタ106、107、115、および116は、1つまたは複数のI/Oバスに接続されてよく、I/Oバスは、中間バス・ブリッジ(図示されていない)を介してシステム・バス102に接続される。ディスプレイ119(例えば、画面または表示モニタ)は、ディスプレイ・アダプタ115によってシステム・バス102に接続され、ディスプレイ・アダプタ115は、グラフィックス重視のアプリケーションおよびビデオ・コントローラの性能を向上するために、グラフィック・コントローラを含んでよい。キーボード121、マウス122、スピーカ123などは、インターフェイス・アダプタ116を介してシステム・バス102に相互接続されることが可能であり、例えばインターフェイス・アダプタ116は、複数のデバイス・アダプタを単一の集積回路に統合するスーパーI/Oチップを含んでよい。ハード・ディスク・コントローラ、ネットワーク・アダプタ、およびグラフィックス・アダプタなどの周辺機器を接続するのに適したI/Oバスは、通常、PCI(Peripheral Component Interconnect)およびPCIe(Peripheral Component Interconnect Express)などの一般的なプロトコルを含む。したがって、図1で構成されているように、コンピュータ・システム100は、プロセッサ101の形態での処理能力と、システム・メモリ103およびマス・ストレージ110を含んでいるストレージ能力と、キーボード121およびマウス122などの入力手段と、スピーカ123およびディスプレイ119を含んでいる出力能力とを含む。
一部の実施形態では、通信アダプタ107は、特に、インターネット、小型コンピュータ・システム・インターフェイスなどの任意の適切なインターフェイスまたはプロトコルを使用して、データを送信することができる。ネットワーク112は、特に、セルラー・ネットワーク、無線ネットワーク、広域ネットワーク(WAN:wide area network)、ローカル・エリア・ネットワーク(LAN:local area network)、またはインターネットであってよい。外部コンピューティング・デバイスは、ネットワーク112を介してコンピュータ・システム100に接続してよい。一部の例では、外部コンピューティング・デバイスは、外部Webサーバまたはクラウド・コンピューティング・ノードであってよい。
図1のブロック図は、コンピュータ・システム100が図1に示されたコンポーネントのすべてを含むことになるということを示すよう意図されていないということが、理解されるべきである。むしろ、コンピュータ・システム100は、図1に示されていない任意の適切なより少ないコンポーネントまたは追加のコンポーネント(例えば、追加のメモリ・コンポーネント、組み込まれたコントローラ、モジュール、追加のネットワーク・インターフェイスなど)を含むことができる。さらに、コンピュータ・システム100に関して本明細書に記載された実施形態は、任意の適切な論理を使用して実装されてよく、論理は、本明細書で参照されるとき、さまざまな実施形態において、任意の適切なハードウェア(例えば、特に、プロセッサ、組み込みコントローラ、または特定用途向け集積回路)、ソフトウェア(例えば、特に、アプリケーション)、ファームウェア、またはハードウェア、ソフトウェア、およびファームウェアの任意の適切な組み合わせを含むことができる。
図2は、本発明の1つまたは複数の実施形態に従って、ソフトウェア・プログラム/アプリケーションの実行を停止せずに更新された共有ライブラリ214を再び読み込むためのシステム200のブロック図である。図2は、1つまたは複数のコンピュータ・システム202を示す。例えば、コンピュータ・システム202は、さまざまなユーザにサービスを提供するデータセンター内の多数のコンピュータを表すことができる。コンピュータ・システム100の要素は、コンピュータ・システム202内で使用されるか、またはコンピュータ・システム202に統合されるか、あるいはその両方であってよい。1つまたは複数のソフトウェア・プログラム/アプリケーション230、1つまたは複数のデバッガ240、1つまたは複数の静的リンカ210および動的リンカ212、1つまたは複数のGOT208、ならびに1つまたは複数の共有ライブラリ214は、図1で説明されたように、1つまたは複数のプロセッサ101上で実行されるソフトウェア111を利用するか、またはソフトウェア111として実装されるか、あるいはその両方であってよい。
ソフトウェア・プログラム/アプリケーション230は、コンピュータ・システム202上で実行されており、ソフトウェア・プログラム/アプリケーション230は、実行の一部として共有ライブラリ214を使用するか、または共有ライブラリ214に対するアクセス権限を必要とするか、あるいはその両方である。共有ライブラリは、「soname」と呼ばれる特殊な名前を有してよい。sonameは、接頭辞「lib」、ライブラリの名前、語句「.so」を含み、その後に、ピリオド、およびインターフェイスが変わるたびにインクリメントされるバージョン番号が続く。完全修飾sonameは、接頭辞として、sonameが存在するディレクトリを含んでよい。稼働中のシステムでは、完全修飾sonameは、単に、共有ライブラリの「実際の名前」へのシンボリック・リンクである。実際の名前は、実際のライブラリ・コードを含んでいるファイル名である。
コンピューティングでは、静的リンカ210および動的リンカ212などのリンカまたはリンク・エディタは、(コンパイラまたはアセンブラによって生成された)1つまたは複数のオブジェクト・ファイルを受け取り、それらを単一の実行ファイル、ライブラリ・ファイル、または別の「オブジェクト」ファイルに結合するコンピュータ・システムのプログラムである。ソフトウェア・プログラム/アプリケーション230などのコンピュータ・プログラムは、通常、複数の部分またはモジュールで構成される。これらの部分/モジュールは、すべて単一のオブジェクト内に含まれる必要はなく、そのような場合、実行のためにリンクされるときに、(例えば、シンボル・テーブル216内の)シンボルを、(メモリ206の)メモリ・アドレスにマッピングされた他のモジュールへのアドレスとして用いて、互いに参照する。通常、オブジェクト・ファイルは、3種類のシンボルを含むことができ、それらは、シンボルが他のモジュールによって呼び出されることを可能にする、「パブリック」または「エントリ」シンボルと呼ばれることもある定義された「外部」シンボル、これらのシンボルが定義された場合に他のモジュールを参照する未定義の「外部」シンボル、および再配置を容易にするためにオブジェクト・ファイルの内部で使用されるローカル・シンボルである。再配置は、静的リンカ(バインダ)によるリンク時、または動的リンカ(ローダ)による実行時に、後で書き込まれるために残されているバイナリでのエントリである。
多くのオペレーティング・システム環境は、(例えば、動的リンカ212を使用する)動的リンクを可能にし、動的リンクは、プログラム(例えば、ソフトウェア・プログラム/アプリケーション230)が実行されるまで、一部の未定義のシンボルの解決を延期する。これは、ソフトウェア・プログラム/アプリケーション230の実行コードが未定義のシンボルをまだ含んでおり、それに加えて、これらの未定義のシンボルの定義を提供するオブジェクトまたはライブラリ(例えば、1つまたは複数の共有ライブラリ214)のリストを含んでいるということを意味する。動的にリンクされるプログラム(例えば、ソフトウェア・プログラム/アプリケーション230)は、プログラムが開始するときに呼び出される、小さい静的にリンクされた関数を含む。この静的関数は、リンク・ライブラリ(例えば、1つまたは複数の共有ライブラリ214)をメモリ206にマッピングし、関数が含んでいるコードを実行する。動的リンカ212は、共有ライブラリのセクションに含まれている情報を読み取ることによって、プログラムが必要とするすべての動的共有ライブラリを、それらのライブラリから必要とされる変数および関数の名前と共に、決定する。その後、動的リンカ212は、共有ライブラリを仮想メモリの中央にマッピングし、それらの共有ライブラリに含まれているシンボルへの参照を解決する。ソフトウェア・プログラムは、これらの共有ライブラリ(例えば、1つまたは複数の共有ライブラリ214)がメモリ206内のどこに実際にマッピングされているかを知らない。共有ライブラリは、メモリ内の任意のアドレスで実行され得る位置独立コード(PIC:position-independent code)にコンパイルされる。
一方、(例えば、静的リンカ210を使用する)静的リンクは、リンカがソフトウェア・プログラム/アプリケーション230において使用されるすべてのライブラリ・ルーチンを実行可能イメージ/ファイルにコピーすることの結果である。静的リンクは、動的リンクより多くのディスク空き容量およびメモリ206を必要とすることがあるが、プログラムが、それが実行されるシステム上の共有ライブラリの存在を必要としないため、より移植可能である。例えば、プログラムの実行(.exe)ファイルをクリックし、プログラムが実行を開始するときに、バイナリ・ファイルの必要なすべての内容が、プロセスの仮想アドレス空間に読み込まれている。しかし、ほとんどのプログラムは、システムの共有ライブラリからの関数も実行する必要があり、これらのライブラリ関数も読み込まれる必要がある。最も単純な事例では、必要とされるライブラリ関数が、プログラムの実行バイナリ・ファイルに直接埋め込まれる。そのようなプログラムは、ライブラリに静的にリンクされ、静的にリンクされた実行コードは、それらが読み込まれるとすぐに実行を開始することができる。
デバッガ240またはデバッグ・ツールは、ソフトウェア・プログラム/アプリケーション230などの他のプログラムをテストおよびデバッグするために使用されるコンピュータ・プログラムである。デバッガ240は、制御された条件下でソフトウェア・プログラム/アプリケーション230を実行するように構成され、プログラマが、進行中のソフトウェア・プログラム/アプリケーション230の動作を追跡し、ソフトウェア・プログラム/アプリケーション230内の正常に機能しないコードを示すことがあるコンピュータ・リソース(例えば、プログラムまたはコンピュータのオペレーティング・システムによって使用されるメモリ領域など)における変化を監視できるようにする。デバッガ240は、特定の位置でプログラムを実行または一時停止し、メモリ、CPUのレジスタ(例えば、レジスタ250)、またはストレージ・デバイス(ディスク・ドライブなど)の内容を表示し、欠陥のあるプログラムの実行の原因になることがある選択されたテスト・データを入力するために、メモリまたはレジスタの内容を変更する能力を有する。
コンピュータ・システム202は、実行時にプログラムのコードまたはデータが読み込まれたメモリ・アドレスと無関係に(例えば、ELFファイルとしてコンパイルされた)コンピュータ・プログラム・コードを正しく実行できるようにするために使用される、コンピュータ・プログラム(実行ファイルおよび共有ライブラリ)のメモリのセクションであるグローバル・オフセット・テーブル(GOT)208を含んでいる。GOT208は、ソフトウェア・プログラムが開始されるたびに異なるメモリ・アドレスに読み込まれる位置独立コード(PIC)および位置独立実行ファイル(PIE:position-independent executables)を容易にするために、プログラミング・コード内のシンボルを、対応する絶対メモリ・アドレスにマッピングする。PICまたはPIEコードが実行される場合、プログラムが開始される前に、変数および関数の絶対メモリ・アドレスとも呼ばれる実行時メモリ・アドレス(runtime memory address)が不明であるため、実行時メモリ・アドレスは、コンパイラによるコンパイル時にハードコードされ得ない。GOTは、開始時にプログラムのメモリに読み込まれるファイル(例えば、ELFファイル)内の.gotおよび.got.pltセクションとして表され得る。例えば、プログラムの開始時またはシンボルがアクセスされるときに、グローバル・オフセット・テーブルの(シンボルから絶対メモリ・アドレスへの)再配置を更新するために、オペレーティング・システムの動的リンカが使用される。GOT208は、開始時に共有ライブラリ(例えば、.so)が異なるメモリ・アドレスに再配置され、主プログラムまたは他の共有ライブラリとのメモリ・アドレスの競合を防ぐことを可能にするメカニズムである。GOT208は、データ・セクションに存在するアドレスのテーブルである。GOT208は、位置独立アドレス計算を絶対位置に変換する。プロシージャ・リンク・テーブル(PLT:Procedure linkage table)(図示されていない)は、位置独立関数呼び出し(position-independent function calls)を絶対位置にリダイレクトするテーブルである。リンク・エディタは、異なる動的オブジェクト間の関数呼び出しなどの実行の移動を解決することができない。そのため、リンク・エディタは、プログラムに制御をプロシージャ・リンク・テーブル内のエントリに移動させるように準備する。このようにして、実行時リンカは、プログラムのテキストの位置独立性および共有可能性を損なわずにエントリをリダイレクトする。実行ファイルおよび共有オブジェクト・ファイルは、別々のプロシージャ・リンク・テーブルを含むことができる。
図3は、本発明の1つまたは複数の実施形態に従う、例示的なアーキテクチャ・フロー300のブロック図である。図2を参照して、アーキテクチャ・フロー300が説明される。前述したように、ソフトウェア・プログラム/アプリケーション230は、コンピュータ・システム202上で実行されており、その後、ソフトウェア・プログラム/アプリケーション230の実行を停止することも一時停止することもなく、共有ライブラリ214が更新されて再び読み込まれる。ブロック302で、デバッガ240が、ソフトウェア・プログラム/アプリケーション230のためのデバッグ・セッションを開始するように構成され、デバッグ・セッション中に、デバッガ240は、例えば、reload liba.soなどの、再読み込みコマンドを発行するように構成され、それによって、共有ライブラリ214が更新されているため、共有ライブラリ214を再び読み込む。デバッガ240は、ソフトウェア・プログラム/アプリケーション230を実行するときに、本明細書において説明されるように実行するために、静的リンカ210、動的リンカ212、GOT208、および共有ライブラリ214の各々にそれぞれ関連付けられたソフトウェア(API)を呼び出すか、またはそれらのソフトウェア(API)と通信するか、あるいはその両方を実行するように構成される。
ブロック304は、共有ライブラリ214(例えば、liba.so)に関して前に解決されたアドレスをリセットすることによって、GOT208のフィール・バックを開始/実行するように構成される。例えば、GOTテーブル208内の特定のGOTエントリで、共有ライブラリ214のGOT208のリンク・アドレス・フィールド(例えば、図5に示されているリンク・アドレス・フィールド504)内で、古いアドレス320がすでに解決されている。古いアドレス320は、動的リンカ212によってすでに解決されている。共有ライブラリ214が再び読み込まれ/更新されているため、GOT208は、図5に示されているリンク・アドレス・フィールド504内の古いアドレス320を初期値322にリセットするように構成される。初期値は、デフォルト値として事前に定義される。さらに、本明細書において見られるように、GOTのフィール・バックを実行することは、リンク・アドレスを(もともとリンクされていた)古いアドレスから初期値(すなわち、デフォルト値)にリセットすることを含むだけでなく、(例えば、図5に示されている解決済みフラグ・フィールド508内の)GOT解決済みフラグをTRUEからFALSEにリセットすることも含む。
ブロック306で、共有ライブラリ214が更新されているため、共有ライブラリ214(例えば、liba.so)の新しいアドレスを解決するために、動的リンカ212が再び(すなわち、後で)呼び出される。ブロック308で、動的リンカ212が、動的読み込みを実行するように構成される。更新されたliba.soが再び読み込まれた後に、動的ライブラリ(例えば、liba.so)内で定義されたシンボル(例えば、関数foo)が初めて呼び出されるときに、動的リンカ212は、新しいアドレス324との一致に関して未解決エントリ・テーブル215およびシンボル・テーブル216を検索することによって、未解決(再配置済み)エントリの解決を実行する。未解決エントリ・テーブル215内で検出された未解決エントリに関して、動的リンカ212は、共有ライブラリ214(liba.so)の新しいアドレスを解決するために使用されるシンボル・テーブル216内のシンボルを検索し、取り出す。動的リンカ212は、シンボル・テーブル216を使用して、共有ライブラリ214(liba.so)のシンボルを解決するように機能する。シンボルが解決された後に、動的リンカ212は、共有ライブラリ214に関連付けられたインデックス・テーブル218内の(解決済みシンボルの)エントリを更新する。ブロック310で、動的リンカ212が、解決されている新しいアドレス324(すなわち、図5に示されているリンク・アドレス・フィールド504の新しい値)を使用してGOT208を更新するように構成される。また、動的リンカ212は、(例えば、図5に示されている解決済みフラグ・フィールド508内の)GOT解決済みフラグをFALSEからTRUEに設定する。
ブロック312で、動的リンカ212(またはローダ)が、ソフトウェア・プログラム/アプリケーション230によって使用するために、メモリ空間内の共有ライブラリ214の新たに解決されたアドレスを読み込むように構成される。メモリ空間は、ソフトウェア・プログラム/アプリケーション230によって使用されるメモリ206内の1つまたは複数の位置、プロセッサ(プロセッサ101など)の1つまたは複数のレジスタ250などであることができる。デバッガ240または動的リンカ212あるいはその両方の例示的な結果は、入力330であることができる。入力330は、ライブラリ・ファイル名(例えば、liba.so)を共有ライブラリ214または別の出力ファイル(例えば、a.out)あるいはその両方に含めることができる。図4は、本発明の1つまたは複数の実施形態に従う、ソフトウェア・プログラム/アプリケーション230のためのデバッグ・セッションの例示的なフローチャート400のブロック図である。前述したように、ソフトウェア・プログラム/アプリケーション230は、コンピュータ・システム202上で実行されており、その後、共有ライブラリ214が更新されて再び読み込まれる。ブロック402で、デバッガ240が、ソフトウェア・プログラム/アプリケーション230のためのデバッグ・セッションを開始するように構成される。ブロック404で、デバッガ240が、ユーザ入力を受信するように構成される。ユーザ入力は、デバッグを続けること、ソフトウェア・プログラム/アプリケーション230内のコードの特定のセクションを調べるために指定することなどの、許可であることができる。例えば、コマンド「reload liba.so」がユーザによって入力され得る。ブロック406で、デバッガ240が、共有ライブラリ214の再読み込みが必要とされるかどうかをチェックするように構成される。再読み込みが必要とされない場合、フローがブロック410に移動する。1つまたは複数のメモリ・アドレスが変更された(例えば、新しいアドレスが共有ライブラリ214内の前のアドレスを置き換える)場合など、共有ライブラリ214が更新された場合、デバッガ240は、変更/更新を有効にするために、共有ライブラリ214の再読み込みが必要とされるということを決定する。1つの例では、デバッガ240は、共有ライブラリ214がメモリ206に再び読み込まれるべきであるということのトリガーまたは命令を受信してよい。
ブロック408で、デバッガ240が、GOTのフィール・バックを実行するか、またはGOTのフィール・バックが実行されることを引き起こすか、あるいはその両方を実行するように構成される。特に、GOTのフィール・バック中に、デバッガ240または別のソフトウェア・ツールあるいはその両方は、更新されたアドレス(またはシンボル)に対応するGOT208内のGOTエントリをフィール・バックするように構成され、それに応じて、初期値322(例えば、デフォルト値としての0x80000000の初期値)を使用してGOT208がリセットされる。1つまたは複数の実施形態では、デバッガ240がGOTフィール・バック・モジュール242を含んでよく、または他ツールがGOTフィール・バック・モジュール242を含むことができ、あるいはその両方である。GOTフィール・バック・モジュール242は、本明細書において説明されたGOTのフィール・バックを実行するように構成されたコンピュータ実行可能命令を含む。1つまたは複数の実施形態では、GOTフィール・バック・モジュール242は、動的リンカ212、GOT208、または他のソフトウェア・ツール、あるいはその組み合わせと統合されてよい。ブロック410で、デバッガ240が、新しいアドレスを解決するか、または動的リンカ212に新しいアドレスを解決させるか、あるいはその両方を実行するように構成される。再び読み込まれた共有ライブラリ214の(新しいアドレスである)未解決のアドレスを解決するために、読み込みのプロセスがトリガーされる。図3のブロック306および308で、新しいアドレスを解決することが説明される。ブロック412で、デバッガ240が、デバッガ出力を提供するように構成される。デバッガ240は、ユーザの要求(例えば、デバッグ・コマンド「続行」、「次へ」などの実行後にどのソース行が停止されるか)に従って結果を出力する。例えば、ブロック404でのユーザ入力に従って、ユーザがデバッガ・プログラムを終了するたびに、デバッガ・セッションが終了する。
GOTのフィール・バックを実行するために、1つまたは複数の実施形態は、図5で説明されるように、新しいGOT208(すなわち、新しいグローバル・オフセット・テーブル)を提示する。図5に示されているように、例示的なGOT208が3つの列を含んでいる。オフセット502は、動的ライブラリ内で定義されたシンボルのリンク・アドレスを格納するためにどのGOT項目が使用されるかを示す。例えば、オフセットは0x00から始まることができ、各GOT項目またはエントリ(例えば、行)は、この例では8バイトを含む。1番目の行はリンク・アドレス・フィールド504を示しており、リンク・アドレス・フィールド504は、GOT208内のGOT項目/エントリの解決済みリンク・アドレスを含んでいる項目値である。GOT208は、本発明の1つまたは複数の実施形態に従って、2番目および3番目の列である2つの新しい列を含むように拡張される。拡張されたGOTのフィールドのために、静的リンカ210は、GOT項目またはエントリのサイズを、例えば4バイトから8バイトに拡張し、動的ライブラリ(DLL:dynamic library)インデックス・フィールドおよび解決済みフラグ・フィールドという2つの新しいフィールドを、拡張された4バイトに導入する。2番目の列は、解決された後に、リンクされたモジュール(すなわち、共有ライブラリ214)のDLLインデックス・フィールド506を示す。3番目の列は、モジュールのアドレス(すなわち、リンク・アドレス)が解決されているかどうかを示す、解決済みフラグ・フィールド508を示す。デフォルトでは、解決済みフラグは「FALSE」に設定され、ローダ(例えば、動的リンカ212)によって(ソフトウェア・プログラム/アプリケーション230の)シンボルのアドレスが解決されたときに「TRUE」に設定される。
図6は、本発明の1つまたは複数の実施形態に従って、GOTのフィール・バックのさらなる詳細を含む、例示的なアーキテクチャ・フロー600である。本明細書において説明されるように、ソフトウェア・プログラム/アプリケーション230は、コンピュータ・システム202上で(例えば、デバッグ・セッション中に)実行されており、その後、共有ライブラリ214が更新されて再び読み込まれる。ブロック602で、デバッガ240によってソフトウェア・プログラム/アプリケーション230のデバッグまたはテストが開始される。デバッグ・セッション中に、ソフトウェア・プログラム/アプリケーション230のコードは、例えばliba.so内で定義されている関数bar()などの、共有ライブラリ214を呼び出す関数を含むことができる。ブロック604で、(例えば、GOTフィール・バック・モジュール242を使用する)デバッガ240が、関数による呼び出しに関連付けられたGOT208内のGOTエントリまたは項目がメモリ・アドレスの初期値に等しいかどうかをチェックするように構成される。メモリ・アドレス(すなわち、GOT208内のリンク・アドレス)の例示的な初期値(例えば、初期値322)は、0x80000000であることができる。GOT208内の呼び出されるGOTエントリまたは項目のメモリ・アドレスが初期値でない場合、フローがブロック602に戻る。GOT208内の呼び出されるGOTエントリまたは項目のメモリ・アドレスが初期値である場合、フローが、下でさらに説明されるブロック614に進む。
本明細書で述べたように、ソフトウェア・プログラム/アプリケーション230が実行をすでに開始した後に、共有ライブラリ214内のメモリ・アドレスが、更新されているか、または変更されているか、あるいはその両方である。デバガ240が、デバッグ・セッションを開始しており、例えば、共有ライブラリ214が呼び出されるときに、共有ライブラリ214に対する更新/変更を通知され/知らされている。例えば、デバッガ・コマンド(例えば、「reload liba.so」)が、liba.soが再び読み込まれる必要があるということをデバッガ240に知らせる。したがって、ブロック606で、デバッガ240が、ソフトウェア・プログラム/アプリケーション230を一時停止することも、再起動することも、その両方を行うこともなく、更新された共有ライブラリ214(例えば、liba.so)およびGOT208を再び読み込むように構成される。ブロック608で、デバッガ240が、GOTエントリまたは項目の解決済みフラグ・フィールド508内のGOT解決済みフラグがTRUEであるかどうかをチェックするように構成される。例えば、デバッガ240は、GOT208を使用して、GOTエントリ/項目(すなわち、行)の解決済みフラグ・フィールド508をチェックすることができる。GOTエントリ/項目のGOT解決済みフラグがFALSEである場合、フローがブロック602に進む。GOTエントリ/項目のGOT解決済みフラグがTRUEである場合、ブロック610で、デバッガ240は、GOT208内のGOTエントリ/項目のDLLインデックス・フィールド506内のDLLインデックスの値が、共有ライブラリ214(例えば、liba.so)内のDLLインデックス・テーブル218内の対応するエントリ/項目のDLLインデックスの値に等しいかどうかをチェックするように構成される。GOT208内のGOTエントリ/項目のDLLインデックス・フィールド506の値が共有ライブラリ214(例えば、liba.so)のDLLインデックス・テーブル218内のDLLインデックスの対応するエントリ/項目の値に等しくない場合、フローがブロック602に戻る。GOT208内のGOTエントリ/項目のDLLインデックス・フィールド506の値が共有ライブラリ214(例えば、liba.so)内のDLLインデックス・テーブル218のDLLインデックス内の対応するエントリ/項目の値に等しい場合、ブロック612で、デバッガ240が、GOTのフィール・バックを実行するように構成される。本明細書で述べたように、共有ライブラリ214内の対応するメモリ・アドレスを更新する前に、動的リンカ212を使用して、リンク・アドレス・フィールド504内の古いリンク・アドレス(例えば、古いアドレス320)がすでに解決されている。共有ライブラリ214が再び読み込まれる/更新されるため、デバッガ240は、(ブロック304に関して前述したように)GOT208のGOTエントリ/項目のリンク・アドレス・フィールド内のリンク・アドレスをリセットし(例えば、古いアドレス320を、0x8000000などの初期値322にリセットし)、解決済みフラグ・フィールド内のGOT解決済みフラグをFALSEにリセットするように構成される。
フローがブロック602に戻り、ブロック602で、デバッガ240が、liba.so(現在更新されている共有ライブラリ214)に対するbar()の呼び出しを再び実行するように構成される。ブロック604に戻り、デバッガ240は、関数による呼び出し(例えば、bar()の呼び出し)に関連付けられたGOTエントリまたは項目が、メモリ・アドレス(すなわち、GOT208内のリンク・アドレス)の初期値に設定されているかどうかをチェックするように構成される。GOT208内の呼び出されるGOTエントリまたは項目のメモリ・アドレス(例えば、図5のリンク・アドレス・フィールド504内のリンク・アドレス)が初期値(例えば、初期値322)である場合、ブロック614で、デバッガ240が、動的リンカ212に、新しいリンク・アドレスを解決するように指示するか、または解決させる。ブロック616で、(例えば、デバッガ240によって引き起こされたように)動的リンカ212が、(例えば、ブロック308で前述したように)動的読み込みを実行するように構成される。動的リンカ212は、未解決エントリを見つけるために、未解決(再配置済み)エントリ・テーブル215内の新しいアドレス324との一致を検索する。未解決エントリ・テーブル215内で検出された未解決エントリに関して、動的リンカ212は、共有ライブラリ214(liba.so)の新しいアドレスを解決するために使用されるシンボル・テーブル216内のシンボルを検索し、取り出す。動的リンカ212は、シンボル・テーブル216を使用して、共有ライブラリ214(liba.so)のシンボルを解決するように機能する。シンボルが解決された後に、動的リンカ212は、共有ライブラリ214に関連付けられたインデックス・テーブル218内の(解決済みシンボルの)エントリを更新する。ブロック310で、デバッガ240が、解決されている新しいアドレス324(すなわち、図5に示されているリンク・アドレス・フィールド504の新しい値)を使用してGOT208を更新するように構成される。また、デバッガ240は、GOT解決済みフラグをFALSEからTRUEに設定できる。ブロック618で、デバッガ240が、GOT208を更新するか、または動的リンカ212にGOT208を更新させるか、あるいはその両方を実行するように構成される。GOT208内のGOTエントリまたは項目に対する更新中に、デバッガ240または動的リンカ212あるいはその両方は、新しい解決されたアドレスをリンク・アドレス・フィールド504内のリンク・アドレスとして書き込み、DLLインデックス・フィールド506内のDLLインデックスを更新し、解決済みフラグ・フィールド508内のリンク・アドレスの解決済みフラグにTRUEとしてマークを付けるように構成される。
制限ではなく説明の目的で、図7~11で、例示的な状況が説明される。図7は、本発明の1つまたは複数の実施形態に従って、動的リンカおよびデバッガによって実行される詳細な動作を示すブロック図である。通常、共有ライブラリを再び読み込むことは、プログラム/アプリケーションの実行を停止することを必要とする。しかし、標準的なシステムがプログラム/アプリケーションの実行を停止せずに継続しようとする場合、標準的なシステムは、再コンパイルされた共有ライブラリ(例えば、liba.so)を再び読み込むが、再び読み込まれたliba.so内の呼び出される関数(例えば、bar())のアドレスが、0x7ff8100(古い共有ライブラリ)から0x7ff9100(更新された共有ライブラリ)に変化している。GOT項目に格納されたアドレスが、標準的なシステムにおけるデフォルト値でない(すなわち、0x80000000でない)ため、プログラム/アプリケーションは、bar()の元の(古い)読み込みアドレスである0x7ff8100に分岐し、これによって、標準的なシステムでは、共有ライブラリ(例えば、liba.so)の再読み込みが機能しなくなる。図7では、1つまたは複数の実施形態が、拡張されたGOT208(図5に示されている)を使用しながら、ソフトウェア・プログラム/アプリケーション230の実行を停止せずに共有ライブラリ214を再び読み込むように構成される。共有ライブラリ214が更新されているため、動的リンカ212は、動作702に示されているように、「1」をDLLインデックス・フィールド506のDLLインデックスに割り当て、GOTエントリまたは項目の解決済みフラグ・フィールド508内のアドレスの解決済みフラグにTRUEのマークを付けるように構成される。また、動的リンカ212は、bar()の解決されたアドレスを、共有ライブラリ214の古いバージョン(例えば、古いlibra.so)において示されている0x7ff8100に割り当てる。このとき、動作705が共有ライブラリ214の古いアドレス(例えば、0x7ff8100)を指し示していることに注意する。ソフトウェア・プログラム/アプリケーション230が実行されている間に、共有ライブラリ214が再び読み込まれか、または再コンパイルされる。例えば、デバッガ240は、共有ライブラリ214が再コンパイルされた後に、コマンド(例えば、「reload liba.so」)を発行することによって、動的リンカ212(例えば、ローダ)を呼び出し、更新された共有ライブラリ214(例えば、新しいliba.so)を再び読み込む。動作704で、デバッガ240は、DLLインデックス・フィールド506内にDLLインデックス「1」を含むGOTエントリまたは項目を取り出すことによって、すべてのマッピングされたGOTエントリまたは項目(すなわち、GOT+0x28)を取得し、解決済みフラグ・フィールド508内の解決済みフラグがTRUEである場合、デバッガ240は、デフォルト値(すなわち、0x80000000)を使用して対象のGOTエントリ/項目(例えば、GOT+0x28)に格納された(リンク・アドレス・フィールド504内の)リンク・アドレスをリセットし、FALSEを使用してアドレス解決済みフラグをリセットする。動作706で、動的リンカ212は、「1」をDLLインデックス・フィールド506に割り当て、GOTエントリ/項目の解決済みフラグ・フィールド508内のアドレス解決済みフラグにTRUEとしてマークを付け、その後、シンボルbarが再び呼び出されたときに、barの解決されたアドレスにリンク・アドレス・フィールド504内の0x7ff9100を割り当てるように構成される。barの解決されたアドレス(すなわち、0x7ff9100)は、古い共有ライブラリ(例えば、古いliba.so)の代わりに、更新された共有ライブラリ214(すなわち、新しいliba.so)へのリンク・アドレスであり、動作708は、更新された共有ライブラリ214を指し示す/にリンクする。図7では、ソフトウェア・プログラム/アプリケーション230の例示的な部分が示されており、例示的な関数(例えば、bar())が、barのアドレスに対する呼び出しであるということに注意する。図7および8では、PLTおよびGOTを使用する共有および動的ライブラリのための標準的な動作/遷移を示す動作(動作A~Kなど)は、これらの動作/遷移が当業者によって理解されているため、説明されないということに注意する。
図7の動作702に関するさらなる詳細を提供するために、図8は、本発明の1つまたは複数の実施形態に従って動的リンカによって実行されるリンカの動作を示すブロック図である。図8では、動作802で、動的リンカ212が、共有ライブラリ214(例えば、liba.so)を読み込んだ後に、解決されたアドレスを取得し、呼び出される関数barのアドレスを解決するように構成される。動作804で、動的リンカ212が、リンク・アドレス・フィールド504内の0x7ff8100を使用してbarのGOT+0x28(すなわち、GOTエントリ/項目)の内容を更新するように構成される。動作806で、GOTエントリ/項目に関して、動的リンカ212が、「1」をDLLインデックス・フィールド506内のDLLインデックスに割り当て、解決済みフラグ・フィールド508内のアドレスの解決済みフラグにTRUEのマークを付けるように構成される。
図7および8についてさらに詳しく説明すると、図9は、本発明の1つまたは複数の実施形態に従ってGOTのフィール・バックを示すブロック図である。本明細書で述べたように、デバッガ240は、共有ライブラリ214が再コンパイルされた後に、コマンド(すなわち、「reload liba.so」)を発行することによって、動的リンカ212(例えば、ローダ)を呼び出し、更新された共有ライブラリ214(例えば、liba.so)を再び読み込み、動的リンカ212が、DLLインデックス/テーブル218を検索することによってDLLインデックスを取得する。動作902で、動的リンカ212が、各DLLインデックス・フィールド506内にDLLインデックス「1」を含むGOTエントリ/項目を取り出すことによって、マッピングされたすべてのGOTエントリ/項目(すなわち、GOT+0x28)を取得する。GOT208内のGOTエントリ/項目の解決済みフラグがTRUEである場合、図9の動作904で、フィール・バック・モジュール242(例えば、図3のブロック304)が、デフォルト値(すなわち、0x80000000)を使用して、対象のGOTエントリ/項目(例えば、GOT+0x28)に格納されたリンク・アドレス・フィールド506内のアドレスをリセットし、解決済みフラグ・フィールド508内のアドレスの解決済みフラグをFALSEにリセットする。
GOT208のさらなる使用を説明するために、図10は、本発明の1つまたは複数の実施形態に従ってさらなるローダの動作を示すブロック図である。動的リンカ212は、本明細書において説明されるように、アドレス解決プロセスを実行し、再コンパイルされた共有ライブラリ214からの新しいアドレスを更新する。例えば、動作1002で、ソフトウェア・プログラム/アプリケーション230がbar()を再び呼び出す場合、GOT+0X28に格納されたアドレスがデフォルト値0x8000000であるため、動的リンカ212が、もう一度、関数barのアドレスを解決する。動作1004で、動的リンカ212が、新しいbarのアドレス0x7ff910を使用してGOT+0x28のリンク・アドレスを更新し、「1」をDLLインデックスに割り当て、GOTエントリ/項目内の解決済みフラグにTRUEとしてマークを付ける。GOT208のGOTエントリ/項目内で、共有ライブラリ214の古いアドレス(0x7ff8100)が、新しいアドレス(すなわち、新しいリンク・アドレス0x7ff9100)に更新されている。インデックス・フィールドは値「-1」であることができ、「-1」はライブラリ・インデックス・フィールドの初期値である。インデックス・フィールドは、ライブラリ・インデックス218を意味する値「1」であることができ、すなわち、liba.soのライブラリ・インデックスは1である。
更新されたGOT208およびPTLの使用を説明するために、図11は、本発明の1つまたは複数の実施形態に従って、その後、関数が呼び出されたときに、新しいアドレス(例えば、リンク・アドレス・フィールド504内の新しいアドレス324)に直接分岐することを示すブロック図である。動作1102で、ソフトウェア・プログラム/アプリケーション230がコンパイルされ、PLTが使用されて、位置独立関数呼び出しを絶対位置にリダイレクトする。動作1104で、bar()が再び(後で)呼び出されたときに、GOX+0X28に格納された値が新しいアドレス0x7ff9100であるため、命令「b @GOT+0X28」が0x7ff9100に直接ジャンプする。
技術的優位性および利点は、動的ライブラリが更新されたときに、ソフトウェア・プログラム/アプリケーションまたはデバッグ・プロセスあるいはその両方の実行を続ける、すなわち、ソフトウェア・プログラム/アプリケーションまたはデバッグ・プロセスを停止しない、1つまたは複数の実施形態を含む。1つまたは複数の実施形態によれば、ソフトウェア・プログラム/アプリケーションの実行の停止も、一時停止も、中断も必要としないことによって、静的リンカによって追加の命令の生成が必要とされず、動的リンカ(例えば、ローダ)によって余分な動作が実行されないため、性能に影響を与えない。さらなる技術的優位性および利点は、特に、複雑な状況の場合に、ソフトウェア・プログラム/アプリケーションの開発/テスト中、および根本原因の位置特定中の、ソフトウェア・プログラマの時間および労力の削減を含み、その間、常にソフトウェア・プログラマに、テストおよびデバッグのためのより柔軟な方法を提供する。
図12は、本発明の1つまたは複数の実施形態に従う、ソフトウェア・プログラム/アプリケーション230の実行を停止せずに更新された共有ライブラリの再読み込みを実行するための方法1200のフロー・チャートである。ブロック1202で、デバッガ240が、プロセッサ101を介して、共有ライブラリ214に対する関数呼び出し(例えば、bar())を必要とするソフトウェア・プログラム/アプリケーション230を実行するか、またはソフトウェア・プログラム/アプリケーション230が実行されることを引き起こすか、あるいはその両方を実行するように構成される。ブロック1204で、デバッガ240が、ソフトウェア・プログラム/アプリケーション230の実行を停止せずに、共有ライブラリ214を再び読み込むか、または動的リンカ212に再び読み込ませるか、あるいはその両方を実行するように構成され、共有ライブラリ214は、ソフトウェア・プログラムの実行後に更新されている。ブロック1206で、デバッガ240が、関数呼び出しに関連付けられたリンク・アドレスを解決することに応答してグローバル・オフセット・テーブル(GOT)208を更新するように構成され、GOT208内のエントリは、リンク・アドレス・フィールド504、インデックス・フィールド506、および解決済みフラグ・フィールド508を含み、更新することは、GOT208内のエントリに対して、肯定的値(例えば、「1」)を使用してインデックス・フィールドを更新し、肯定的フラグ(例えば、TRUE)を使用して解決済みフィールドにマーク付けすることを含む。ブロック1208で、デバッガ240が、ソフトウェア・プログラム/アプリケーション230の実行を停止せずに共有ライブラリ214を再び読み込むことに応答して、インデックス・フィールド内の肯定的値(例えば、「1」)および解決済みフィールド内の肯定的フラグ(例えば、TRUE)を含んでいるGOT208内のエントリを見つけるか、または動的リンカ212に見つけさせるか、あるいはその両方を実行するように構成される。ブロック1210で、デバッガ240が、共有ライブラリ214に対する関数呼び出しのその後の実行に応答して、インデックス・フィールドに肯定的値を含んでいるエントリのリンク・アドレス・フィールド内のアドレス値を返すか、または動的リンカ212に返させるか、あるいはその両方を実行するように構成される。
GOT208を更新する前に、リンク・アドレス・フィールドがデフォルト値(例えば、0x80000000)に設定される。GOT208を更新する前に、解決済みフィールドが肯定的値(例えば、TRUE)をすでに含んでいる場合、非肯定的値(例えば、FALSE)を使用して解決済みフィールドがマーク付けされる。ソフトウェア・プログラム/アプリケーション230の実行を停止しない共有ライブラリ214の再読み込みは、更新された共有ライブラリ214の新しいアドレス(例えば、0x7ff9100)を解決することを含む。GOT208の更新は、新しいアドレスを解決した後に、リンク・アドレス・フィールド内のデフォルト値を新しいアドレスに置き換えることを含む。リンク・アドレス・フィールド内のアドレス値は、共有ライブラリ214の解決されている新しいアドレスである。共有ライブラリ214の再読み込みの前に、ソフトウェア・プログラム/アプリケーション230の実行中に、共有ライブラリに対する関数呼び出しのために、共有ライブラリ214が最初に/すでに読み込まれている。
図13は、本発明の1つまたは複数の実施形態に従う、ソフトウェア・プログラム/アプリケーション230の実行を停止せずに更新された共有ライブラリの再読み込みを実行するための方法1300のフロー・チャートである。ブロック1302で、デバッガ240が、共有ライブラリ214を呼び出すソフトウェア・プログラム/アプリケーション230の実行を停止せずに、共有ライブラリ214を再び読み込むか、または動的リンカ212に再び読み込ませるか、あるいはその両方を実行するように構成される。ブロック1304で、デバッガ240が、共有ライブラリ214への(例えば、リンク・アドレス・フィールド504の)リンク・アドレスを解決することに応答して、グローバル・オフセット・テーブル(GOT)内のエントリに対して、肯定的値(例えば、「1」)を使用してインデックス・フィールド(例えば、DLLインデックス・フィールド506)を更新することと、肯定的フラグ(例えば、TRUE)を使用して解決済みフィールド(例えば、解決済みフラグ・フィールド508)にマーク付けすることとを実行するように構成される。ブロック1306で、デバッガ240が、ソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことに応答して、共有ライブラリ214の解決されたリンク・アドレスを含んでいるGOT208内のエントリを見つけるように構成される。
本開示にはクラウド・コンピューティングに関する詳細な説明が含まれているが、本明細書において示された教示の実装は、クラウド・コンピューティング環境に限定されないと理解されるべきである。本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
クラウド・コンピューティングは、構成可能な計算リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つのデプロイメント・モデルを含んでよい。
特徴は、次のとおりである。
オンデマンドのセルフ・サービス:クラウドの利用者は、サーバの時間およびネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
幅広いネットワーク・アクセス:能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による利用を促進する。
リソース・プール:プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供され、さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所(例えば、国、州、またはデータセンター)を指定できる場合がある。
迅速な順応性:能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、無制限のように見え、任意の量をいつでも購入できる。
測定されるサービス:クラウド・システムは、計測機能を活用することによって、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント)に適したある抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用状況は、監視、制御、および報告されることが可能であり、利用されるサービスのプロバイダと利用者の両方に透明性を提供する。
オンデマンドのセルフ・サービス:クラウドの利用者は、サーバの時間およびネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
幅広いネットワーク・アクセス:能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による利用を促進する。
リソース・プール:プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供され、さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所(例えば、国、州、またはデータセンター)を指定できる場合がある。
迅速な順応性:能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、無制限のように見え、任意の量をいつでも購入できる。
測定されるサービス:クラウド・システムは、計測機能を活用することによって、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント)に適したある抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用状況は、監視、制御、および報告されることが可能であり、利用されるサービスのプロバイダと利用者の両方に透明性を提供する。
サービス・モデルは、次のとおりである。
SaaS(Software as a Service):利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションを利用することである。それらのアプリケーションは、Webブラウザ(例えば、Webベースの電子メール)などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定は例外の可能性はあるが、管理することも制御することもない。
PaaS(Platform as a Service):利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
IaaS(Infrastructure as a Service):利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースをプロビジョニングすることであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御できる。
SaaS(Software as a Service):利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションを利用することである。それらのアプリケーションは、Webブラウザ(例えば、Webベースの電子メール)などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定は例外の可能性はあるが、管理することも制御することもない。
PaaS(Platform as a Service):利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
IaaS(Infrastructure as a Service):利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースをプロビジョニングすることであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御できる。
デプロイメント・モデルは、次のとおりである。
プライベート・クラウド:このクラウド・インフラストラクチャは、組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
コミュニティ・クラウド:このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項)を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
パブリック・クラウド:このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト)によって固有の実体を残したまま互いに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の組成である。
プライベート・クラウド:このクラウド・インフラストラクチャは、組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
コミュニティ・クラウド:このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項)を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
パブリック・クラウド:このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト)によって固有の実体を残したまま互いに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の組成である。
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを含んでいるインフラストラクチャである。
ここで図14を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示されているように、クラウド・コンピューティング環境50は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス(例えば、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)または携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組み合わせなど)が通信できる1つまたは複数のクラウド・コンピューティング・ノード10を含んでいる。ノード10は、互いに通信してよい。ノード10は、1つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組み合わせなどに、物理的または仮想的にグループ化されてよい(図示されていない)。これによって、クラウド・コンピューティング環境50は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはSaaS、あるいはその組み合わせを提供できる。図14に示されたコンピューティング・デバイス54A~Nの種類は、例示のみが意図されており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続(例えば、Webブラウザを使用した接続)あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信することができると理解される。
ここで図15を参照すると、クラウド・コンピューティング環境50(図14)によって提供される機能的抽象レイヤのセットが示されている。図15に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム61、RISC(Reduced Instruction Set Computer)アーキテクチャベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーク・コンポーネント66が挙げられる。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化レイヤ70は、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75などの仮想的実体を提供できる抽象レイヤを備える。
一例を挙げると、管理レイヤ80は、以下で説明される機能を提供してよい。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定82は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書またはインボイスの送付を行う。一例を挙げると、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでよい。セキュリティは、クラウドの利用者およびタスクのID検証を行うとともに、データおよびその他のリソースの保護を行う。ユーザ・ポータル83は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理84は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意(SLA:Service Level Agreement)計画および実行85は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、SLAに従って行う。
ワークロード・レイヤ90は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されてよいワークロードおよび機能の例としては、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育の配信93、データ解析処理94、トランザクション処理95、およびソフトウェア・アプリケーション96(例えば、ソフトウェア・プログラム/アプリケーション230、デバッガ240、静的リンカ210、動的リンカ212、およびフィール・バック・モジュール242)が挙げられる。また、ソフトウェア・アプリケーションは、リソース・プロビジョニング81と共に機能するか、またはリソース・プロビジョニング81に統合されるか、あるいはその両方であることができる。
本明細書では、関連する図面を参照して、本発明のさまざまな実施形態が説明される。本発明の範囲を逸脱することなく、本発明の代替の実施形態が考案され得る。以下の説明および図面において、要素間のさまざまな接続および位置関係(例えば、上、下、隣接など)が示される。それらの接続または位置関係あるいはその両方は、特に規定されない限り、直接的または間接的であることができ、本発明はこの点において限定するよう意図されていない。したがって、実体の結合は、直接的結合または間接的結合を指すことができ、実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書に記載されたさまざまな作業および工程段階は、本明細書に詳細に記載されない追加の段階または機能を含んでいるさらに包括的な手順または工程に組み込まれ得る。
本明細書に記載された方法のうちの1つまたは複数は、データ信号上で論理機能を実装するための論理ゲートを含んでいる個別の論理回路、適切な組み合わせ論理ゲートを含んでいる特定用途向け集積回路(ASIC:application specific integrated circuit)、プログラマブル・ゲート・アレイ(PGA:programmable gate array)、フィールド・プログラマブル・ゲート・アレイ(FPGA:field programmable gate array)などの、それぞれ従来技術においてよく知られている、技術のいずれかまたは組み合わせを使用して実装され得る。
簡潔さの目的で、本発明の態様の作成および使用に関連する従来技術は、本明細書に詳細に記載されることもあれば、記載されないこともある。具体的には、本明細書に記載されたさまざまな技術的特徴を実装するためのコンピューティング・システムおよび特定のコンピュータ・プログラムのさまざまな態様は、よく知られている。したがって、簡潔さのために、多くの従来の実装に関する詳細は、本明細書では、既知のシステムまたは工程あるいはその両方の詳細を提供することなく、簡潔にのみ述べられるか、または全体的に省略される。
一部の実施形態では、さまざまな機能または動作は、特定の位置で、または1つまたは複数の装置もしくはシステムの動作に関連して、あるいはその両方で行われ得る。一部の実施形態では、特定の機能または動作の一部は、第1のデバイスまたは位置で実行されることが可能であり、機能または動作の残りの部分は、1つまたは複数の追加のデバイスまたは位置で実行され得る。
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「a」、「an」、および「the」は、特に文脈上明示的に示されない限り、複数形も含むことが意図されている。「備える」または「備えている」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を明示するが、1つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
下の特許請求におけるすべての手段またはステップおよび機能要素の対応する構造、材料、動作、および等価なものは、具体的に請求されるその他の請求された要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。本開示は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。本開示の範囲から逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかである。本開示の原理および実際的な適用を最も適切に説明するため、およびその他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態に関して、本開示を理解できるようにするために、実施形態が選択されて説明された。
本明細書において示された図は、例示である。本開示の範囲から逸脱することなく、本明細書に記載された図またはステップ(または動作)の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語は、2つの要素間に信号経路が存在することを表しており、それらの要素間に要素/接続が介在しない要素間の直接的接続を意味していない。これらすべての変形は、本開示の一部であると見なされる。
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されているように、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、「含有している」という用語、またはこれらの任意のその他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、または装置に固有の、その他の要素を含むことができる。
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも1つ」および「1つまたは複数」という用語は、1以上の任意の整数(すなわち、1、2、3、4など)を含んでいると理解される。「複数」という用語は、2以上の任意の整数(すなわち、2、3、4、5など)を含んでいると理解される。「接続」という用語は、間接的「接続」および直接的「接続」の両方を含むことができる。
「約」、「実質的に」、「近似的に」、およびこれらの変形の用語は、本願書の出願時に使用できる機器に基づいて、特定の量の測定に関連付けられた誤差の程度を含むよう意図されている。例えば、「約」は、特定の値の±8%または5%、あるいは2%の範囲を含むことができる。
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読ストレージ媒体を含んでよい。
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー(R)・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル・バーサタイル・ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、命令が記録されているパンチカードまたは溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を介して伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードのいずれかであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図のブロックあるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図のブロックあるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図のブロックあるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、または開示された実施形態に制限されない。説明された実施形態の範囲を逸脱することのない多くの変更および変形が、当業者にとって明らかである。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書に記載された実施形態を理解できるようにするために選択されている。
Claims (26)
- プロセッサによって、共有ライブラリに対する関数呼び出しを必要とするソフトウェア・プログラムを実行することと、
前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを再び読み込むことであって、前記共有ライブラリが、前記ソフトウェア・プログラムの前記実行後に更新されている、前記再び読み込むことと、
前記関数呼び出しに関連付けられたリンク・アドレスを解決することに応答してグローバル・オフセット・テーブル(GOT)を更新することであって、前記GOT内のエントリが、リンク・アドレス・フィールド、インデックス・フィールド、および解決済みフィールドを含み、前記更新することが、前記GOT内の前記エントリに対して、肯定的値を使用して前記インデックス・フィールドを更新し、肯定的フラグを使用して前記解決済みフィールドにマーク付けすることを含む、前記更新することと、
前記ソフトウェア・プログラムの前記実行を停止せずに前記共有ライブラリを再び読み込むことに応答して、前記インデックス・フィールド内の前記肯定的値および前記解決済みフィールド内の前記肯定的フラグを含んでいる前記GOT内の前記エントリを見つけることと、
前記共有ライブラリに対する前記関数呼び出しのその後の実行に応答して、前記インデックス・フィールドに前記肯定的値を含んでいる前記エントリの前記リンク・アドレス・フィールド内のアドレス値を返すこととを含む、コンピュータ実装方法。 - 前記GOTを更新する前に、前記リンク・アドレス・フィールドをデフォルト値に設定することをさらに含む、請求項1に記載のコンピュータ実装方法。
- 前記GOTを更新する前に、前記解決済みフィールドが前記肯定的値をすでに含んでいる場合、非肯定的値を使用して前記解決済みフィールドにマーク付けすることをさらに含む、請求項1に記載のコンピュータ実装方法。
- 前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを前記再び読み込むことが、更新されている前記共有ライブラリの新しいアドレスを解決することを含む、請求項1に記載のコンピュータ実装方法。
- 前記GOTの前記更新が、前記リンク・アドレス・フィールド内のデフォルト値を前記新しいアドレスに置き換えることを含む、請求項4に記載のコンピュータ実装方法。
- 前記リンク・アドレス・フィールド内の前記アドレス値が、前記共有ライブラリの解決されている前記新しいアドレスである、請求項4に記載のコンピュータ実装方法。
- 前記共有ライブラリの前記再読み込みの前に、前記ソフトウェア・プログラムの前記実行中に、前記共有ライブラリに対する前記関数呼び出しのために、前記共有ライブラリが最初に読み込まれる、請求項1に記載のコンピュータ実装方法。
- コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサとを備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
共有ライブラリに対する関数呼び出しを必要とするソフトウェア・プログラムを実行することと、
前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを再び読み込むことであって、前記共有ライブラリが、前記ソフトウェア・プログラムの前記実行後に更新されている、前記再び読み込むことと、
前記関数呼び出しに関連付けられたリンク・アドレスを解決することに応答してグローバル・オフセット・テーブル(GOT)を更新することであって、前記GOT内のエントリが、リンク・アドレス・フィールド、インデックス・フィールド、および解決済みフィールドを含み、前記更新することが、前記GOT内の前記エントリに対して、肯定的値を使用して前記インデックス・フィールドを更新し、肯定的フラグを使用して前記解決済みフィールドにマーク付けすることを含む、前記更新することと、
前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを再び読み込むことに応答して、前記インデックス・フィールド内の前記肯定的値および前記解決済みフィールド内の前記肯定的フラグを含んでいる前記GOT内の前記エントリを見つけることと、
前記共有ライブラリに対する前記関数呼び出しのその後の実行に応答して、前記インデックス・フィールドに前記肯定的値を含んでいる前記エントリの前記リンク・アドレス・フィールド内のアドレス値を返すこととを含む動作を実行する、システム。 - 前記GOTを更新する前に、前記リンク・アドレス・フィールドをデフォルト値に設定することをさらに含む、請求項8に記載のシステム。
- 前記GOTを更新する前に、前記解決済みフィールドが前記肯定的値をすでに含んでいる場合、非肯定的値を使用して前記解決済みフィールドにマーク付けすることをさらに含む、請求項8に記載のシステム。
- 前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを前記再び読み込むことが、更新されている前記共有ライブラリの新しいアドレスを解決することを含む、請求項8に記載のシステム。
- 前記GOTの前記更新が、前記リンク・アドレス・フィールド内のデフォルト値を前記新しいアドレスに置き換えることを含む、請求項11に記載のシステム。
- 前記リンク・アドレス・フィールド内の前記アドレス値が、前記共有ライブラリの解決されている前記新しいアドレスである、請求項11に記載のシステム。
- 前記共有ライブラリの前記再読み込みの前に、前記ソフトウェア・プログラムの前記実行中に、前記共有ライブラリに対する前記関数呼び出しのために、前記共有ライブラリが最初に読み込まれる、請求項8に記載のシステム。
- プログラム命令が具現化されているコンピュータ可読ストレージ媒体を備えているコンピュータ・プログラム製品であって、前記プログラム命令が、プロセッサによって実行可能であり、前記プロセッサに、
共有ライブラリに対する関数呼び出しを必要とするソフトウェア・プログラムを実行することと、
前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを再び読み込むことであって、前記共有ライブラリが、前記ソフトウェア・プログラムの前記実行後に更新されている、前記再び読み込むことと、
前記関数呼び出しに関連付けられたリンク・アドレスを解決することに応答してグローバル・オフセット・テーブル(GOT)を更新することであって、前記GOT内のエントリが、リンク・アドレス・フィールド、インデックス・フィールド、および解決済みフィールドを含み、前記更新することが、前記GOT内の前記エントリに対して、肯定的値を使用して前記インデックス・フィールドを更新し、肯定的フラグを使用して前記解決済みフィールドにマーク付けすることを含む、前記更新することと、
前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを再び読み込むことに応答して、前記インデックス・フィールド内の前記肯定的値および前記解決済みフィールド内の前記肯定的フラグを含んでいる前記GOT内の前記エントリを見つけることと、
前記共有ライブラリに対する前記関数呼び出しのその後の実行に応答して、前記インデックス・フィールドに前記肯定的値を含んでいる前記エントリの前記リンク・アドレス・フィールド内のアドレス値を返すこととを含む動作を実行させる、コンピュータ・プログラム製品。 - 前記GOTを更新する前に、前記リンク・アドレス・フィールドをデフォルト値に設定することをさらに含む、請求項15に記載のコンピュータ・プログラム製品。
- 前記GOTを更新する前に、前記解決済みフィールドが前記肯定的値をすでに含んでいる場合、非肯定的値を使用して前記解決済みフィールドにマーク付けすることをさらに含む、請求項15に記載のコンピュータ・プログラム製品。
- 前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを前記再び読み込むことが、更新されている前記共有ライブラリの新しいアドレスを解決することを含む、請求項15に記載のコンピュータ・プログラム製品。
- 前記GOTの前記更新が、前記リンク・アドレス・フィールド内のデフォルト値を前記新しいアドレスに置き換えることを含む、請求項18に記載のコンピュータ・プログラム製品。
- 前記リンク・アドレス・フィールド内の前記アドレス値が、前記共有ライブラリの解決されている前記新しいアドレスである、請求項18に記載のコンピュータ・プログラム製品。
- 前記共有ライブラリを呼び出すソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことと、
前記共有ライブラリへのリンク・アドレスを解決することに応答して、グローバル・オフセット・テーブル(GOT)内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることと、
前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを再び読み込むことに応答して、前記共有ライブラリの解決された前記リンク・アドレスを含んでいる前記GOT内の前記エントリを見つけることとを含む、コンピュータ実装方法。 - 前記共有ライブラリの解決された前記リンク・アドレスを含んでいる前記GOT内の前記エントリを前記見つけることが、前記共有ライブラリに対する呼び出しのその後の実行に応答する、請求項21に記載のコンピュータ実装方法。
- 前記GOT内の前記エントリに対して、前記肯定的値を使用して前記インデックス・フィールドを前記更新し、前記肯定的フラグを使用して前記解決済みフィールドにマーク付けする前に、前記リンク・アドレス・フィールドをデフォルト値に設定することをさらに含む、請求項21に記載のコンピュータ実装方法。
- 前記GOT内の前記エントリに対して、前記肯定的値を使用して前記インデックス・フィールドを前記更新し、前記肯定的フラグを使用して前記解決済みフィールドにマーク付けする前に、前記解決済みフィールドが前記肯定的値をすでに含んでいる場合、非肯定的値を使用して前記解決済みフィールドにマーク付けすることをさらに含む、請求項1に記載のコンピュータ実装方法。
- コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサとを備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
前記共有ライブラリを呼び出すソフトウェア・プログラムの実行を停止せずに共有ライブラリを再び読み込むことと、
前記共有ライブラリへのリンク・アドレスを解決することに応答して、グローバル・オフセット・テーブル(GOT)内のエントリに対して、肯定的値を使用してインデックス・フィールドを更新し、肯定的フラグを使用して解決済みフィールドにマーク付けすることと、
前記ソフトウェア・プログラムの実行を停止せずに前記共有ライブラリを再び読み込むことに応答して、前記共有ライブラリの解決された前記リンク・アドレスを含んでいる前記GOT内の前記エントリを見つけることとを含む動作を実行する、システム。 - 前記共有ライブラリの解決された前記リンク・アドレスを含んでいる前記GOT内の前記エントリを前記見つけることが、前記共有ライブラリに対する呼び出しのその後の実行に応答する、請求項25に記載のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/089,847 US11347523B2 (en) | 2020-11-05 | 2020-11-05 | Updated shared library reloading without stopping the execution of an application |
US17/089,847 | 2020-11-05 | ||
PCT/IB2021/060126 WO2022097020A1 (en) | 2020-11-05 | 2021-11-02 | Updated shared library reloading without stopping execution of an application |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023547070A true JP2023547070A (ja) | 2023-11-09 |
Family
ID=81380233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023524136A Pending JP2023547070A (ja) | 2020-11-05 | 2021-11-02 | アプリケーションの実行を停止しない更新された共有ライブラリの再読み込み |
Country Status (6)
Country | Link |
---|---|
US (1) | US11347523B2 (ja) |
JP (1) | JP2023547070A (ja) |
CN (1) | CN116685946A (ja) |
DE (1) | DE112021004940T5 (ja) |
GB (1) | GB2614864A (ja) |
WO (1) | WO2022097020A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11755313B2 (en) * | 2021-07-12 | 2023-09-12 | Microsoft Technology Licensing, Llc | Implementing changes made to source code of reloadable types at runtime |
US20240184550A1 (en) * | 2022-12-05 | 2024-06-06 | Salesforce, Inc. | Dynamically applying profile-guided optimization to a dbms |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5615400A (en) | 1993-06-30 | 1997-03-25 | Apple Computer, Inc. | System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers |
US5835743A (en) * | 1994-06-30 | 1998-11-10 | Sun Microsystems, Inc. | Application binary interface and method of interfacing binary application program to digital computer |
JPH11110194A (ja) | 1997-10-06 | 1999-04-23 | Toshiba Corp | 外部ライブラリ関数との結合方法ならびに同方法がプログラムされ記録される記録媒体 |
US6442752B1 (en) | 1999-08-26 | 2002-08-27 | Unisys Corporation | Method, apparatus, and computer program product for replacing a dynamic link library (dll) of a first computing environment with a dll of a second computing environment that can be invoked from the first computing environment in a transparent manner |
KR100518584B1 (ko) | 2003-07-12 | 2005-10-04 | 삼성전자주식회사 | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 |
US8997074B1 (en) | 2006-09-29 | 2015-03-31 | Trend Micro Incorporated | Dynamic linking library (DLL) replacement in an embedded operating system environment |
KR101256149B1 (ko) | 2010-07-12 | 2013-04-19 | 홍익대학교 산학협력단 | 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치 |
WO2012047746A2 (en) * | 2010-10-04 | 2012-04-12 | Avocent | System and method for monitoring and managing data center resources in real time |
EP2477110A1 (en) | 2011-01-14 | 2012-07-18 | Wibu-Systems AG | Method for protecting an application program against reverse engineering and related computer program product |
US20160274878A1 (en) | 2015-03-19 | 2016-09-22 | Google Inc. | Methods and systems for removing plt stubs from dynamically linked binaries |
CN105279429B (zh) | 2015-11-24 | 2018-01-19 | 无锡江南计算技术研究所 | 一种got表写保护的保护方法 |
US10095493B2 (en) | 2016-12-14 | 2018-10-09 | International Business Machines Corporation | Call sequence generation based on type of routine |
US10175966B2 (en) | 2017-01-09 | 2019-01-08 | International Business Machines Corporation | Linker rewriting to eliminate TOC pointer references |
US10445112B2 (en) | 2017-01-27 | 2019-10-15 | Software Ag | Inline dispatching function interface (IDFI), and associated system and/or method |
US10698792B2 (en) | 2018-05-02 | 2020-06-30 | Microsoft Technology Licensing, Llc | Execution control with cross-level trace mapping |
-
2020
- 2020-11-05 US US17/089,847 patent/US11347523B2/en active Active
-
2021
- 2021-11-02 CN CN202180068131.1A patent/CN116685946A/zh active Pending
- 2021-11-02 GB GB2306062.7A patent/GB2614864A/en active Pending
- 2021-11-02 WO PCT/IB2021/060126 patent/WO2022097020A1/en active Application Filing
- 2021-11-02 DE DE112021004940.2T patent/DE112021004940T5/de active Pending
- 2021-11-02 JP JP2023524136A patent/JP2023547070A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2022097020A1 (en) | 2022-05-12 |
US20220137987A1 (en) | 2022-05-05 |
CN116685946A (zh) | 2023-09-01 |
GB2614864A (en) | 2023-07-19 |
US11347523B2 (en) | 2022-05-31 |
GB202306062D0 (en) | 2023-06-07 |
DE112021004940T5 (de) | 2023-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11178207B2 (en) | Software version control without affecting a deployed container | |
US10048955B2 (en) | Accelerating software builds | |
US11074154B2 (en) | Identifying a source file for use in debugging compiled code | |
US10235144B2 (en) | Reconfiguration of address space based on loading short pointer mode application | |
US11036513B2 (en) | Executing short pointer mode applications loaded in a memory address space having one portion addressable by short pointers and a shadow copy of the one portion | |
US10585790B2 (en) | Short pointer mode applications in long pointer mode environments | |
JP2023547070A (ja) | アプリケーションの実行を停止しない更新された共有ライブラリの再読み込み | |
US11656864B2 (en) | Automatic application of software updates to container images based on dependencies | |
US11288170B1 (en) | Log analysis debugging without running on real production environment | |
US11119810B2 (en) | Off-the-shelf software component reuse in a cloud computing environment | |
US10564950B1 (en) | Disassembly code generation during debugging | |
US11656888B2 (en) | Performing an application snapshot using process virtual machine resources | |
US20230136606A1 (en) | Sharing global variables between addressing mode programs | |
JP7410269B2 (ja) | テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 | |
US10761914B2 (en) | Replacing generated procedure calls with generated inter-process communication | |
Okafor et al. | Eliminating the operating system via the bare machine computing paradigm | |
US11556356B1 (en) | Dynamic link objects across different addressing modes | |
RU2521265C2 (ru) | Система и способ автоматической обработки системных ошибок программного обеспечения |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230721 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240411 |