ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 リンカーとライブラリガイド Oracle Solaris 11.1 Information Library (日本語) |
7. システムのパフォーマンスを最適化するオブジェクトの構築
パート IV ELF アプリケーションバイナリインタフェース
アプリケーションは、動的実行可能ファイルと 1 つ以上の共有オブジェクトの依存関係から構築されます。実行時には、動的実行可能ファイルと共有オブジェクトの読み込み可能な内容の全体がそのプロセスの仮想アドレス空間にマップされます。各プロセスは、最初にメモリー内の動的実行可能ファイルと共有オブジェクトの単一コピーを参照します。
動的オブジェクト内の再配置が処理され、シンボリック参照が該当する定義に結合されます。これにより、オブジェクトがリンカーによって生成されたときには得られなかった真の仮想アドレスが計算されます。通常、これらの再配置によって、プロセスのデータセグメント内のエントリが更新されます。
オブジェクトの動的リンクのベースとなるメモリー管理スキームでは、プロセス間のメモリー共有がページの粒度で行われます。メモリーページは、実行時に変更されていなければプロセス間で共有できます。プロセスがデータ項目の書き込み時または共有オブジェクトへの参照の再配置時にオブジェクトのページに書き込むと、そのページの専用コピーが生成されます。この専用コピーは、オブジェクトのほかのユーザーに対して何も影響しません。ただし、このページはほかのプロセス間での共有に伴う利点をすべて失います。この方法で変更されたテキストページは、「純粋でない」(impure) と呼ばれます。
メモリーにマップされた動的オブジェクトのセグメントは、読み取り専用のテキストセグメントと読み書き可能なデータセグメントに分類されます。「elfdump を使用したファイルの解析」 ファイルからこの情報を取得する方法については、Analyzing Files With elfdumpを参照してください。動的オブジェクトを開発するときの主要目的は、テキストセグメントを最大化して、データセグメントを最小化することにあります。この分割により、動的オブジェクトの初期設定と使用に必要な処理の量を削減しながら、コード共有の量を最適化できます。次のセクションでは、この目的を達成するために役立つメカニズムを示します。