リンカーとローダーの違い
コンテンツ
リンカーとローダーは、プログラムの実行で主要な役割を果たすユーティリティプログラムです。プログラムのソースコードは、実行前にコンパイラ、アセンブラ、リンカ、ローダをそれぞれの順序で通過します。一方では、 リンカ アセンブラによって生成されたオブジェクトコードを取り込み、それらを組み合わせて実行可能モジュールを生成します。一方、 ローダ この実行可能モジュールを実行のためにメインメモリにロードします。比較チャートを使用して、リンカーとローダーの違いについて説明します。
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | リンカ | ローダ |
---|---|---|
ベーシック | ソースプログラムの実行可能モジュールを生成します。 | 実行可能モジュールをメインメモリにロードします。 |
入力 | アセンブラーによって生成されたオブジェクトコードを入力として受け取ります。 | リンカによって生成された実行可能モジュールを受け取ります。 |
関数 | ソースコードのすべてのオブジェクトモジュールを組み合わせて、実行可能モジュールを生成します。 | メインメモリ内の実行可能モジュールにアドレスを割り当てて実行します。 |
タイプ/アプローチ | リンケージエディタ、ダイナミックリンカ。 | 絶対読み込み、再配置可能読み込み、動的実行時読み込み。 |
リンカーの定義
アセンブラーは、ソースプログラムのオブジェクトコードを生成し、リンカーに渡します。リンカはこのオブジェクトコードを受け取り、 実行可能コード プログラムのために、ローダーに引き渡します。
高水準言語、プログラムには 組み込みライブラリ そして ヘッダーファイル。ソースプログラムには、定義が組み込みライブラリに保存されているライブラリ関数が含まれている場合があります。リンカーは、これらの関数を組み込みライブラリにリンクします。組み込みライブラリが見つからない場合は、コンパイラに通知し、コンパイラはエラーを生成します。
大規模なプログラムは、サブプログラムに分割されて呼び出されることがあります モジュール。これらのモジュールがコンパイルおよびアセンブルされると、ソースプログラムのオブジェクトモジュールが生成されます。リンカには、すべてのオブジェクトモジュールを結合/リンクして、ソースプログラムの単一の実行可能ファイルを生成する責任があります。 2種類のリンカーがあります。
リンケージエディター:リロケータブルで実行可能なモジュールを生成するリンカーです。
動的リンカー:ロードモジュール/実行可能モジュールが生成されるまで、一部の外部モジュールのリンクを延期/延期します。ここでは、リンクはロード時または実行時に行われます。
ローダーの定義
現在実行する必要があるプログラムは、コンピューターのメインメモリに存在する必要があるためです。それはの責任です ローダ、 リンカによって生成されたプログラムの実行可能ファイル/モジュールをメインメモリにロードして実行するための、オペレーティングシステムのプログラム。メインメモリ内の実行可能モジュールにメモリスペースを割り当てます。
3種類の読み込み方法があります。
- 絶対負荷
- 再配置可能ローディング
- 動的な実行時ロード
絶対負荷:このアプローチは、プログラムの実行可能ファイルを 同じメインメモリの場所 毎回。しかし、それはいくつかあります 欠点 プログラマのように、モジュールをメインメモリにロードするための割り当て戦略を認識している必要があります。場合によっては、プログラムの一部の挿入と削除を含むプログラムを変更し、プログラムのすべてのアドレスを変更する必要があります。
再配置可能なロード: このアプローチでは、コンパイラーまたはアセンブラーは 実際のメインメモリアドレスを生成しません。相対アドレスを生成します。
動的実行時ロード:このアプローチでは、実行可能モジュールの命令が実際に実行されるときに、プログラムの絶対アドレスが生成されます。それは非常に柔軟性があり、ロード可能なモジュール/実行可能なモジュールを メインメモリの任意の領域。実行中のプログラムはその間に割り込むことができ、今回は別のメインメモリアドレスでディスクにスワップアウトしてメインメモリに戻すことができます。
- リンカーとローダーの主な違いは、リンカーが 実行可能 一方、ローダーはリンカから取得した実行可能ファイルをプログラムのファイルにロードします 実行用のメインメモリ.
- リンカーは オブジェクトモジュール アセンブラーによって生成されたプログラムの。ただし、ローダーは 実行可能モジュール リンカによって生成されます。
- リンカは、プログラムのすべてのオブジェクトモジュールを組み合わせて生成します 実行可能モジュール また、リンクします ライブラリ関数 オブジェクトモジュールで 組み込みライブラリ 高レベルのプログラミング言語の。一方、ローダー 実行可能ファイルにスペースを割り当てます メインメモリ内のモジュール。
- リンカーは次のように分類できます。 リンケージエディター、 そして 動的リンカー 一方、ローダーは次のように分類できます。 絶対ローダー、再配置可能ローダー そして 動的ランタイムローダー.
結論:
リンカは、プログラムのオブジェクトモジュールをアセンブラから取得し、それらをリンクして、プログラムの実行可能モジュールを生成します。実行可能モジュールは、ローダーによって実行のためにメインメモリにロードされます。