Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

ローダー(ローダー)とは | 意味や読み方など丁寧でわかりやすい用語解説

ローダー(ローダー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ローダー (ローダー)

英語表記

loader (ローダー)

用語解説

ローダーとは、コンピュータのディスク上に保存されているプログラムを実行可能にするために、主記憶装置(メモリ)へ読み込み、実行可能な状態に準備するソフトウェアの一種である。現代のコンピュータシステムにおいて、プログラムが動作する上で不可欠な要素であり、オペレーティングシステム(OS)の中核的な機能の一部を構成する。プログラムの実行を「動かす」ための最初のステップを担うもの、と理解すると良い。

プログラムは、人間が理解できるプログラミング言語で書かれたソースコードから、コンパイラやアセンブラによって機械語に変換され、最終的にコンピュータが直接実行できる「実行可能ファイル」(ロードモジュールとも呼ばれる)としてディスクに保存される。この実行可能ファイルをメモリ上に展開し、CPUがそこから命令を読み取って処理を開始できるようにする役割がローダーに与えられている。

ローダーの主な機能は多岐にわたるが、大きく分けて以下のステップでプログラムの読み込みと準備を行う。

第一に、メモリ割り当てである。ローダーは、これからロードしようとするプログラムが必要とするメモリ領域のサイズを特定し、OSに対してその領域の確保を要求する。OSは、空いているメモリ領域の中から適切な場所を見つけ出し、プログラムのために割り当てる。この際、OSは仮想記憶機構と連携し、プログラムが物理メモリのどこに配置されるかを意識することなく、仮想アドレス空間上で動作できるように準備する。

第二に、プログラムの読み込み(ロード)である。メモリ領域が確保された後、ローダーはディスクに保存されている実行可能ファイルの内容を、確保されたメモリ領域へとコピーしていく。実行可能ファイルには、プログラムの機械語命令、静的に定義されたデータ、プログラムの開始アドレスなどの情報が含まれている。これらがメモリ上の所定の位置に正確に配置される。

第三に、再配置(リロケーション)である。プログラムは通常、コンパイル時に特定の仮想的な開始アドレスを想定して生成される。しかし、実際にメモリにロードされる際に、必ずしもその想定されたアドレスから始まるわけではない。例えば、複数のプログラムが同時に実行されるマルチタスク環境では、利用可能なメモリ領域に応じてプログラムの配置位置が変動する。このため、プログラム内部に含まれるアドレス情報(例えば、ある関数へジャンプする命令や、特定のデータを参照する命令など)は、実際にプログラムがメモリにロードされた場所に合わせて修正される必要がある。ローダーは、プログラム内の再配置が必要な箇所を特定し、メモリ上の実際の開始アドレスからの相対的なオフセットに基づいて、絶対アドレスを正しく修正する。これにより、プログラムはメモリ上のどこにロードされても正しく動作できるようになる。

第四に、リンクの解決である。現代のほとんどのプログラムは、自身が作成したコードだけでなく、OSが提供する機能(システムコール)や、他の開発者が作成した共有ライブラリ(WindowsではDLL、Linuxでは.soファイルなどと呼ばれる)を利用する。これらの外部の機能やデータは、実行可能ファイルには直接含まれていない。プログラムがこれらの外部機能を呼び出す際、ローダーはそれらの機能がどこにあるか(つまり、メモリ上のどのアドレスにあるか)を特定し、プログラム内の参照を修正する。これを「動的リンク」と呼び、この処理を行うローダーは特に「ダイナミックローダー」または「ダイナミックリンカー」と呼ばれる。ダイナミックローダーは、プログラムの実行開始時、あるいは実行中に必要に応じて、共有ライブラリをメモリにロードし、それらのライブラリ内の関数や変数のアドレスを解決する。これにより、ディスク容量の節約(複数のプログラムが同じライブラリを共有できるため)や、プログラムの柔軟な更新(ライブラリのみを更新すればよい)といった利点がもたらされる。

ローダーにはいくつかの種類がある。最も基本的なものとして「絶対ローダー」があるが、これはプログラムが常にメモリの特定の固定されたアドレスにロードされることを前提とするため、再配置の必要がないか、ごく限定的である。現代のOSでは、ほとんどが「再配置可能ローダー」であり、上述の再配置機能を持つことで、プログラムをメモリ上の任意の位置にロードできる柔軟性を提供している。また、前述の「ダイナミックローダー」は、実行時に共有ライブラリをロードし、リンクを解決する機能に特化している。

さらに、特殊なローダーとして「ブートローダー」がある。これは、コンピュータの電源を入れた際に最初に動作し、OSのカーネル(OSの中核部分)をディスクからメモリに読み込み、OSの起動処理を開始させる役割を担うプログラムである。PCのBIOSやUEFIによって初期化処理が行われた後、ブートローダーが制御を受け取り、最終的にOSが完全に起動するまでの一連のプロセスを仲介する。

このように、ローダーは単にディスクからメモリへデータをコピーするだけでなく、メモリの確保、アドレスの調整、外部ライブラリとの連携といった複雑な処理を行うことで、プログラムがコンピュータ上で正しく、かつ効率的に動作するための土台を築いている。システムエンジニアにとって、ローダーがプログラム実行の根幹を支える重要なコンポーネントであることを理解することは、システム全体の動作原理やトラブルシューティングを行う上で非常に有益である。

関連コンテンツ