プログラムのロードとリンク
ユーザプログラムをシステムで実行するには、プログラムをメモリにロードし、実行可能プログラムに変換する必要があり、ユーザプログラムの処理ステップは、コンパイル、リンク、ロードの 3 つのステップに分けることができます。
プログラムのコンパイル
プログラムリンク
ソース プログラムをコンパイルすると、ターゲット モジュールのセットを取得できます。リンカの機能は、このオブジェクト モジュールのセットと必要なライブラリ関数を完全なロード モジュールにアセンブルすることです。ターゲットモジュールをリンクする場合、リンク時間に応じてリンク方法は3種類に分けられます。
静的リンク
静的リンク: プログラムの実行前に、ターゲット モジュールとその必要なライブラリ関数が完全な実行可能ファイル (ロードされたモジュール) にリンクされ、逆アセンブルされません。
ロード時の動的リンク
ロード時のダイナミックリンク: 各ターゲットモジュールがメモリにロードされると、ロード中にリンクメソッドがリンクされます。
ランタイム動的リンク
実行時動的リンク:プログラムの実行中にターゲット モジュールが必要になると、リンクされます。修正・更新が容易で、対象モジュールの共有化が実現しやすいことが利点です。
プログラムのロード
絶対負荷モード
絶対ロード: コンパイル時に、プログラムがメモリ内のどこに配置されるかがわかっている場合、コンパイラは絶対アドレスにオブジェクト コードを生成します。ローダは、ロードされたモジュール内のアドレスに従って、プログラムとデータをメモリにロードします。つまり、コンパイルおよびリンク後に得られたモジュールをロードするコマンドは、絶対アドレスを直接使用します。絶対ロードは、単一のプログラム環境にのみ適用されます。
プログラムで使用される絶対アドレスは、コンパイルまたはアセンブル時に指定することも、プログラマによって直接指定することもできることに注意してください。通常はコンパイル時やアセンブル時に絶対アドレスに変換されます。
再配置可能ロードモード
静的再配置: 再配置可能ロードとも呼ばれます。コンパイルおよびリンク後にロードされるモジュールのアドレスは 0 から始まり、命令で使用されるアドレスとデータが格納されるアドレスは開始アドレスからの相対的な論理アドレスになります。メモリの現在の状況に応じて、ロード モジュールをメモリの適切な場所にロードできます。ロード時にアドレスが「再配置」され、論理アドレスが物理アドレスに変換されます(アドレス変換はロード時に一度で完了します)。
上の図に示すように、ロードの開始物理アドレスは 10000 で、アドレス関連のパラメーターはすべて 10000 ずつ加算されるため、変数は論理アドレス 2500 から物理アドレス 12500 に変更されます。
静的再配置の特徴は、ジョブをメモリにロードする際に、そのジョブが必要とするメモリ空間をすべて割り当てる必要があり、メモリが不足するとジョブをロードできないことです。ジョブがメモリに入ると、命令で使用されるアドレスはロード時に決定されるため、動作中に移動したり、メモリ空間に適用したりすることはできません。
動的ランタイム読み込み方式
動的再配置: 動的ランタイム読み込みとも呼ばれます。コンパイルおよびリンク後にロードされるモジュールのアドレスは 0 から始まります。ローダはロードモジュールをメモリにロードした後、すぐに論理アドレスを物理アドレスに変換せず、プログラムが実際に実行されるまでアドレス変換を延期します。したがって、メモリにロードされた後のすべてのアドレスは依然として論理アドレスです。このメソッドでは、再配置レジスタのサポートが必要です。再配置レジスタは、ロードされたモジュールの開始位置を格納するために使用されます。命令が実行されると、命令内のターゲット論理アドレスが再配置レジスタの開始位置に追加されます。対応する物理アドレスを取得するため。
動的再配置を使用すると、プログラムはメモリ内で移動できます。つまり、移動が発生したときに、再配置レジスタ内の対応する開始位置の値を変更するだけで済みます。
動的再配置の特徴: プログラムは不連続な記憶領域に割り当てることができます。プログラムの実行前にコードの一部をロードするだけで実行を開始し、プログラムの実行中に、次の条件に従って動的にメモリ割り当てを適用します。セグメントの共有により、ストレージ領域よりもはるかに大きなアドレス領域をユーザーに提供できます。