実行ファイルを補助記憶から主記憶へ読み込み、実行できる状態にするプログラム。
ローダとは、実行ファイルを主記憶へロード(読み込み)し、実行可能にするOSの機能です。補助記憶(=ハードディスクやSSDなど、電源を切っても消えない大容量の記憶装置)にある実行ファイルを、主記憶(=メモリ、CPUが直接読み書きできる高速な作業領域)へ移すのが中心的な役割です。
身近な例で考えると、図書館で本を読むときに似ています。読みたい本(実行ファイル)は書庫(補助記憶)にしまわれていますが、そのままでは読めません。本を読書席(主記憶)まで運んできて、ようやく読み始められます。この「運ぶ」役目がローダです。
上のツールで▶ボタンを押すと、ディスク上の実行ファイルが主記憶へ読み込まれ、アドレスが調整され、最後にCPUが実行を始めるまでの流れを確認できます。
ローダは、プログラムを動かせる状態にするために、おもに次の4つの仕事を行います。
・主記憶への読み込み:実行ファイルを補助記憶から主記憶へコピーする
・アドレスの再配置:実際に置かれた場所に合わせて、プログラム内のアドレスを正しい値に書き直す
・動的ライブラリのリンク解決:実行時に必要な共有ライブラリを読み込み、呼び出し先をつなぐ
・実行開始の準備:プログラムの先頭アドレスをCPUへ伝え、実行のきっかけを渡す
とくにアドレスの再配置が分かりにくいので補足します。実行ファイルは「主記憶のどこに置かれるか」が事前に決まっていません。空いている場所に置かれるため、その場所に合わせて番地を直す必要があります。引っ越し先の住所に合わせて配達伝票を書き直す作業に似ています。
これらの仕事が終わると、プログラムは主記憶の上で「いつでも動ける」状態になります。あとはCPUが先頭から命令を読み取って、処理を進めていきます。
リンカとローダは名前も役割も似ていますが、働くタイミングと目的がはっきり違います。リンカは実行ファイルを「作る」段階(ビルド時)で部品を結合し、ローダはその実行ファイルを「動かす」段階(実行時)で主記憶へ載せます。
| 項目 | リンカ | ローダ |
|---|---|---|
| 働く時点 | ビルド時 | 実行時 |
| 役割 | 部品を結合し実行ファイルを作る | 実行ファイルを主記憶へ載せる |
| たとえると | 料理を作る | 料理を食卓へ運ぶ |
処理の順番は「コンパイラ → リンカ → ローダ」と覚えると整理できます。コンパイラがソースを機械語に翻訳し、リンカがそれらをつないで実行ファイルを作り、ローダがその実行ファイルを主記憶に載せて動かす、という流れです。
なぜローダが必要なのか、を理解するには「記憶装置」の種類を知る必要があります。コンピュータには2種類の記憶場所があります。
・補助記憶(=ハードディスク・SSDなど):大量のデータを長期間保存できる。でも速度が遅い。電源を切っても消えない
・主記憶(=メモリ・RAM):速度は非常に速いが容量が小さい。CPUが直接命令を読める唯一の場所。電源を切ると消える
CPUは補助記憶を直接読めません。必ず主記憶に置かれたプログラムだけを実行できます。つまり、ディスクに保存されたままの実行ファイルは「ただのデータ」であり、まだ動いていません。これがローダが必要な根本的な理由です。
身近な例では、冷凍庫(補助記憶)に入った食材はそのままでは食べられないのと同じです。電子レンジ(ローダ)で解凍し、テーブル(主記憶)に持ってきてはじめて食べる(CPUが実行する)準備ができます。
ローダが実行ファイルを主記憶へ配置し終わると、プログラムの先頭アドレス(=最初の命令が置かれている番地)をCPUへ伝えます。CPUはそこから命令を1つずつ読み取り、実行し始めます。
この「主記憶で動いているプログラム」のことをプロセス(=実行中のプログラムの単位)と呼びます。ディスクにある実行ファイルはただの「設計図」ですが、ローダが主記憶に載せてCPUが動かし始めると「プロセス」になります。
・実行ファイル(ディスク上):まだ動いていない設計図
・プロセス(主記憶上):ローダが載せてCPUが実行している状態
たとえばブラウザのアイコンをダブルクリックすると、OSが内部でローダを動かし、ブラウザの実行ファイルを主記憶に展開してCPUへ実行を渡します。「アプリが起動する」というのは「ローダがプロセスを作る」ということです。