Oracle® Solaris 11.2 リンカーとライブラリガイド

印刷ビューの終了

更新: 2014 年 7 月
 
 
第 6 章

直接結合

実行時リンカーは、動的実行可能ファイルと多くの依存関係からプロセスを構築する一貫として、シンボル定義にシンボル参照を結合する必要があります。デフォルトでは、シンボル定義は簡単な検索モデルを使用して検出されます。一般にオブジェクトは 1 つずつ検索され、動的実行可能ファイルから始まって、オブジェクトが読み込まれる順に各依存関係が処理されます。このモデルは、最初に動的リンクが導入されて以来、有効でした。一般的に、このような簡単なモデルでは、すべてのシンボル参照が 1 つの定義に結合されることになります。結合される定義は、読み込まれた一連の依存関係の中で検出された最初の定義です。

動的実行可能ファイルは、動的リンクが初期段階であったときに作成された実行可能ファイルより、さらに複雑な処理に発展してきました。依存関係の数は何十から何百の単位に増加しました。動的オブジェクト間で参照されるシンボルインタフェースの数も大幅に増加しました。シンボル名のサイズは、C++ などの言語のサポートに使用される名前の符号化などの技術によってかなり増加しました。これらの要因によって、シンボル参照がシンボル定義に結合されるために、多くのアプリケーションで起動時間が増加しました。

プロセス内のシンボル数の増加は、名前空間の汚染の増加にもつながっています。同じ名前のシンボルのインスタンスが複数存在することは、より一般的になっています。同じシンボルの複数のインスタンスが存在することによって予期しない結合や誤った結合が発生したときに、処理の障害を診断することは多くの場合で困難です。

また現在では、プロセスの個々のオブジェクトが、同じ名前で多重定義されたシンボルの別々のインスタンスに対して結合する必要のあるプロセスが存在します。

シンボルの結合の柔軟性を向上させながら、デフォルトの検索モデルのオーバーヘッドに対応するため、別のシンボル検索モデルが作成されました。このモデルは直接結合と呼ばれます。

直接結合では、プロセスのオブジェクト間で確立される厳密な結合関係を可能にします。直接結合関係によって、意図しない結合から関連オブジェクトを分離することで、名前空間の不測の競合を回避できます。この保護によってプロセス内のオブジェクトの堅牢性が増すため、予期しない、診断が困難な結合の状況を回避できます。

直接結合は割り込みに影響を及ぼすことがあります。直接結合を採用することで、意図しない割り込みを回避できます。しかし、直接結合によって意図する割り込みも回避される場合があります。

この章では、直接結合モデルと、このモデルを使用するようにオブジェクトを変換するときに考慮する必要がある割り込みの問題について説明します。