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