elf 形式の実行可能ファイルには、コード、データ、bss、スタックなどのさまざまなセグメントが含まれています。セグメント xyz が静的に再配置されるとしたら、それはどういう意味ですか?
elf 形式のバイナリには、各セグメントの相対アドレスが含まれています。静的に再配置されたということは、相対アドレスが実際には物理アドレスであることを意味するのでしょうか?
elf 形式の実行可能ファイルには、コード、データ、bss、スタックなどのさまざまなセグメントが含まれています。セグメント xyz が静的に再配置されるとしたら、それはどういう意味ですか?
elf 形式のバイナリには、各セグメントの相対アドレスが含まれています。静的に再配置されたということは、相対アドレスが実際には物理アドレスであることを意味するのでしょうか?
静的再配置とは、プログラムを実行する前にデータまたはコーディングを移動し、それらに絶対位置を割り当てることを意味します。例:-リンカーは、プログラムのいくつかのモジュールを移動し、それらをプログラムに結合する静的再配置の例です。
静的再配置とは、プログラムの実行が開始される前に行われるアドレス変換を指します。典型的なハードウェア命令サイクルは次のようになります。
loop
w := M[instr_ctr]; (* fetch instruction *)
oc := Opcode(w);
adr := Address(w);
instr_ctr := instr_ctr + 1;
case oc of
1: reg := reg+M[adr]; (* add *)
2: M[adr] := reg; (* store *)
3: instr_ctr := adr; (* branch *)
...
end
end (* loop *)
メモリ抽象化のない状況 (プログラムが物理メモリに直接アクセスする) では、次のようになります。プログラム A はアドレス x を使用し、プログラム B もある時点でアドレス x を使用します。
両方のプログラムを同時に実行するために、一部のオペレーティング システム/IBM 360 などの初期のコンピューターは、プログラム A が使用するメモリ アドレスを使用しないように、プログラム B のアドレスをロード時にオンザフライで変更します。
プログラムがアドレス 16,384 にロードされると、ロード プロセス中にすべてのプログラム アドレスに定数 16,384 が追加されました。