ローダ
ローダ (loader) は、プログラムやデータなどを、外部(他のコンピュータや外部記憶装置)からインタフェースなどを通して受け取り、プログラム間の参照関係を解決し位置依存に対するリロケーションを行った上で、主記憶装置やワークエリアに置き(ロードし)、実行開始させるプログラムである[1]。但し、産業分野や制御分野に利用される組込系マイクロコンピュータを取り扱う書籍においては、プログラム間の参照関係を解決する部分はリンカ、位置依存に対するリロケーション部分はロケータ、というように別々の機能とされ、ローダの中にプログラムの実行開始機能は含まれず、ローダは純粋にプログラムやデータなどを主記憶装置などの所定のエリアに配置する機能として説明されることがある[2]。
機能
[編集]ブートローダ
[編集]特にシステムの起動時に実行され、オペレーティングシステム (OS) を読込・実行するローダはブートローダと呼ばれ、通常コンピュータが再起動、シャットダウン、電源を切るなどするまでカーネル(OSの中核コンポーネント)に残る。OSの中にはカーネルをページング(主記憶装置・補助記憶装置間のデータ転送)できるものもあり、その場合はブートローダのメモリ領域が移ることがある。
ダイナミックリンカ
[編集]共有ライブラリ(dllなど)を読み込み、起動しているプログラムに関連付けるローダがダイナミックリンカである。
ローダによる再配置
[編集]ローダによる再配置が必要なコンピュータもある。それらは、読み込みの開始点を指定するためにロードされるプログラムのアドレス(ポインタ)を調整する。この方式のコンピュータのポインタはプログラムのベースアドレスからのオフセット(距離)ではなく、絶対アドレスである。IBMのSystem/360やその後継機がそのような方式を採った。
ローダのその他の使用
[編集]ローダはプロトタイピング、テスト、使い捨てアプリケーションで有用である。そのようなプログラムの1つがジーン・アムダールのオリジナルOS/360の中核部であった。その機能はMVT、MVS、z/OSといった後継機に引き継がれた。
ローダのないコンピュータ
[編集]動的なプログラムの読み込みをサポートする全てのOSはローダを備えているが、スタック以外にRAMを使わないシステムや自動車やオーディオシステムなどに組み込まれるコンピュータシステムでは、あらかじめ決められたプログラムを実行することで事足りてしまうため、ローダを持たない。
Unixでロードを実行するのは、システムコールのハンドラ execve() である。
脚注
[編集]- ^ J.DONOVAN, JOHN (1972). systems programming. pp. 149. ISBN 0-07-085175-1
- ^ 田辺皓正編著『マイクロコンピュータシリーズ15 8086マイクロコンピュータ』丸善株式会社、1983年4月30日、127-128頁。