最終更新日:2026年8月2日
fe fe-technology operating-system loader
まず結論
再配置とは、プログラムを主記憶へ読み込んだ位置に合わせて、プログラム内部のアドレス情報を補正する処理です。
基本情報技術者試験では、次の表現が決め手になります。
主記憶へロードする
ロード位置に合わせる
内部アドレスを補正する
→ 再配置
覚える一文はこれです。
プログラムを置いた場所に合わせて、内部アドレスを直すのが再配置。
直感的な説明
再配置は、引っ越し後に住所を書き換えるイメージです。
プログラムが、主記憶の0番地から配置される前提で作られていたとします。
ところが、実際には500番地から読み込まれた場合、内部で参照するアドレスも500番地分ずらす必要があります。
想定していた先頭位置
→ 0番地
実際の先頭位置
→ 500番地
内部アドレス
→ 配置位置に合わせて補正
この補正処理が再配置です。
定義・仕組み
なぜ再配置が必要なのか
主記憶には、OSやほかのプログラムがすでに配置されています。
そのため、新しく実行するプログラムが、毎回同じ位置へ読み込まれるとは限りません。
主記憶の空き位置が変わる
↓
プログラムの配置位置も変わる
↓
内部アドレスの補正が必要
ローダの役割
ローダは、実行可能プログラムを主記憶へ読み込み、実行できる状態にするプログラムです。
主な役割は次のとおりです。
- 実行可能プログラムを主記憶へ読み込む
- 必要な主記憶領域を確保する
- ロード位置に合わせてアドレスを補正する
- 実行開始位置へ制御を渡す
読み込む
→ ロード
配置位置に合わせて直す
→ 再配置
絶対アドレスと相対アドレス
絶対アドレスは、主記憶上の具体的な番地です。
相対アドレスは、プログラムの先頭位置からの距離で表します。
絶対アドレス
→ 主記憶上の具体的な番地
相対アドレス
→ プログラム先頭からの差
相対アドレスを利用すると、プログラムがどこへ配置されても、先頭位置を基準に参照先を求めやすくなります。
一方、絶対アドレスを含む部分では、配置位置に応じた補正が必要です。
再配置可能プログラム
ロード位置が変わっても、アドレスを補正することで実行できるプログラムを、再配置可能プログラムといいます。
決まった位置でしか動かない
→ 再配置が難しい
配置位置に合わせて補正できる
→ 再配置可能
このテーマは、基本情報技術者試験のOSやプログラム実行に関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、用語の説明から正しいものを選ぶ問題として出題されます。
再配置を選ぶ手掛かり
プログラムを主記憶へ読み込む
実際のロード位置
アドレス情報を補正する
配置先に合わせる
これらがあれば、再配置を考えます。
似た用語との切り分け
| 用語 | 主な意味 |
|---|---|
| 再コンパイル | ソースコードから目的プログラムを作り直す |
| 最適化 | 実行速度やメモリ使用量を改善する |
| 再配置 | ロード位置に合わせてアドレスを補正する |
| リロード | プログラムやデータを再び読み込む |
| リンク | 複数の目的モジュールやライブラリを結合する |
問題文の動詞を見ると判断しやすくなります。
作り直す
→ 再コンパイル
効率を上げる
→ 最適化
配置位置へ合わせる
→ 再配置
もう一度読み込む
→ リロード
部品を結合する
→ リンク
どんな場面で使う?
複数のプログラムを実行する
主記憶では、複数のプログラムが同時に存在することがあります。
そのため、後から読み込まれるプログラムは、空いている位置へ配置されます。
プログラムA
→ ある領域を使用中
プログラムB
→ 別の空き領域へ配置
プログラムBの内部アドレス
→ 配置位置に合わせて補正
OSが主記憶を管理する
OSは、空いている領域を管理し、実行するプログラムを配置します。
配置位置が変わっても実行できるようにするため、再配置の考え方が必要です。
共有ライブラリを利用する
実行時にライブラリを読み込む場合も、実際に配置された位置を基準にアドレスを解決します。
試験では細かな実装よりも、
ロード後の位置に合わせてアドレスを直す
という役割を押さえれば十分です。
リンクとの違い
リンクは、複数の目的モジュールやライブラリを結合して、一つの実行可能プログラムを作る処理です。
再配置は、できあがったプログラムを主記憶へ置く際に、配置位置へ合わせてアドレスを補正する処理です。
複数の部品を一つにまとめる
→ リンク
主記憶上の位置に合わせて直す
→ 再配置
処理の流れで見ると、次のようになります。
ソースコード
↓ コンパイル
目的プログラム
↓ リンク
実行可能プログラム
↓ ロード・再配置
主記憶上で実行
静的再配置と動的再配置
再配置には、大きく分けて次の考え方があります。
静的再配置
プログラムを主記憶へ読み込むときに、アドレスを補正します。
ロード時に補正
→ 静的再配置
ロード後は、基本的に同じ位置で実行します。
動的再配置
実行中に、論理アドレスを物理アドレスへ変換します。
実行時に変換
→ 動的再配置
ベースレジスタなどを使い、プログラムが使う論理アドレスへ一定値を加えて、実際の物理アドレスを求めます。
科目Aでは、まず次の違いを押さえます。
ロード時に直す
→ 静的再配置
実行時に変換する
→ 動的再配置
よくある誤解・混同
再配置は再コンパイルのこと
違います。
ソースコードから作り直す
→ 再コンパイル
ロード位置に合わせて直す
→ 再配置
再配置では、ソースコードをコンパイルし直すとは限りません。
再配置は最適化のこと
違います。
最適化は、処理速度やメモリ使用量などを改善することです。
再配置は、アドレスを配置位置に合わせることです。
再配置はリロードのこと
違います。
リロードは、プログラムやデータを再び読み込むことです。
再配置は、読み込んだ位置に合わせてアドレスを補正することです。
再配置とリンクは同じ
違います。
外部参照を解決して部品を結合
→ リンク
主記憶上の配置位置へ合わせる
→ 再配置
すべてのアドレスを手作業で書き換える
実際には、ローダやアドレス変換機構が必要な補正を行います。
利用者が手作業で番地を書き換えるものではありません。
まとめ(試験直前用)
- 再配置は、ロード位置に合わせて内部アドレスを補正する処理
- プログラムは毎回同じ主記憶位置へ置かれるとは限らない
- ローダは、読み込み・領域確保・再配置・実行開始を担当する
- 絶対アドレスは具体的な番地
- 相対アドレスはプログラム先頭からの距離
- リンクは部品の結合、再配置は配置位置へのアドレス補正
- 再コンパイルはソースから作り直す
- 最適化は効率を改善する
- リロードは再び読み込む
- ロード時なら静的再配置、実行時なら動的再配置
リンクはプログラムをまとめる処理、再配置は置いた場所に合わせて直す処理。